Analisi dell'impatto sulle prestazioni della sorgente di tempo selezionata nel sistema

Brendan Gregg, uno degli sviluppatori di DTrace, attualmente sviluppa strumenti per l'analisi delle prestazioni basati su BPF nel kernel Linux. Ha riassunto l'esperienza acquisita durante l'analisi dei problemi di prestazioni che Netflix ha affrontato nella migrazione del database Cassandra da CentOS a Ubuntu in ambienti eseguiti su Amazon EC2 basato su Xen. Dopo la migrazione, il carico sulla CPU è aumentato del 30% e circa altrettanto sono aumentati i tempi di latenza nelle operazioni di scrittura. Si è scoperto che le prestazioni delle applicazioni che richiedono intensamente informazioni sul tempo dipendono fortemente dalla sorgente di tempo preciso scelta nel sistema.

All'inizio la causa della perdita di prestazioni non era evidente e la diagnosi è iniziata monitorando il possibile impatto di processi di sistema ad alta richiesta di risorse, sempre attivi o avviati periodicamente, utilizzando strumenti come top ed execsnoop. Ma tutto indicava che il consumo di risorse fosse aumentato proprio nel database Cassandra, scritto in Java. Il confronto delle metriche di profiling di due processi Cassandra, eseguiti contemporaneamente in CentOS e Ubuntu e che elaborano le stesse richieste, ha rivelato che circa il 32% di tutto il tempo è speso nella chiamata a os::javaTimeMillis(), utilizzata per ottenere informazioni sull'ora attuale.

Successivamente è stato condotto un esperimento in cui è stata scritta una semplice applicazione in Java che chiama in un ciclo il metodo System.currentTimeMillis() cento milioni di volte. L'esecuzione dell'applicazione ha mostrato che su CentOS ci sono voluti 13 secondi, mentre su Ubuntu circa 68 secondi, ovvero 5 volte più lentamente. È stato scritto un programma simile in C, che chiamava la funzione gettimeofday() cento milioni di volte, ma sono stati ottenuti risultati analoghi.

Poiché è diventato chiaro che la funzione di restituzione dell'ora attuale è la fonte del problema, l'attenzione si è spostata sulla modifica dei parametri durante la selezione di diverse fonti di tempo preciso nel sistema. Secondo il contenuto di "sys/devices/system/clocksource/clocksource0/current_clocksource", il timer "xen" veniva utilizzato per impostazione predefinita all'avvio di Linux nella macchina virtuale. Dopo aver cambiato la fonte di tempo in "tsc", il tempo di esecuzione dell'applicazione di test in Ubuntu è diminuito da 68 a 3,3 secondi, quindi è diventato 20 volte più veloce. Inoltre, è stato effettuato un test delle prestazioni della fonte di tempo kvm-clock, che ha mostrato un aumento delle latenze del 20% rispetto a TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ time java TimeBench real 1m8.300s user 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 0m3.370s user 0m3.353s sys 0m0.026s

Per ottenere il tempo utilizzando la fonte TSC, viene utilizzata l'istruzione del processore RDTSC, il cui esecuzione non richiede una chiamata di sistema (l'istruzione non richiede privilegi elevati e restituisce un valore dal contatore di tempo integrato nel CPU). Per impostazione predefinita, il TSC non è attivato poiché in passato questa fonte non escludeva la deriva graduale del tempo, che in altri gestori viene corretta tramite software per ottenere misurazioni più accurate. Secondo un ingegnere specializzato nello sviluppo di processori, le preoccupazioni sui salti temporali nell'utilizzo del TSC non sono più valide da tempo e nel nei processori moderni questa fonte può fornire letture stabili per anni.

Tradurre le operazioni server in Netflix su TSC ha portato a una riduzione delle latenza in scrittura del 43% e a risultati in Ubuntu che superano di 4 volte la configurazione con CentOS con fonte di tempo "xen". I risultati dello studio sono stati trasmessi ad Amazon, che ha ufficialmente raccomandato di utilizzare per impostazione predefinita la fonte di tempo TSC negli ambienti AWS EC2 basati su hypervisor Xen (negli ambienti basati su hypervisor Nitro resta raccomandato kvm-clock).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster