Anàlisi de l'impacte en el rendiment de la font de temps seleccionada al sistema

Brendan Gregg, un dels desenvolupadors de DTrace, que actualment està desenvolupant eines d'anàlisi de rendiment basades en BPF al nucli de Linux, va resumir l'experiència adquirida a partir de l'anàlisi dels problemes de rendiment que Netflix va trobar en migrar el DBMS Cassandra de CentOS a Ubuntu. el núvol Amazon EC2 basat en Xen. Després de la migració, la càrrega de la CPU va augmentar un 30% i els retards durant les operacions d'escriptura van augmentar aproximadament la mateixa quantitat. Com a resultat, el rendiment de les aplicacions que sol·liciten intensament informació de temps depèn molt de la font d'hora exacta seleccionada al sistema.

Al principi, el motiu de la disminució del rendiment no era evident i el diagnòstic va començar amb el seguiment del possible impacte dels processos del sistema en execució constant o llançats periòdicament amb recursos intensius mitjançant les utilitats superior i execsnoop. Però tot indicava que el consum de recursos havia augmentat específicament al SGBD Cassandra, escrit en Java. La comparació de les mètriques de perfil de dos processos de Cassandra que s'executen en paral·lel a CentOS i Ubuntu, processant les mateixes consultes, va demostrar que aproximadament el 32% del temps total es va passar trucant a os::javaTimeMillis(), que s'utilitza per obtenir informació sobre l'hora actual. .

Després d'això, es va dur a terme un experiment en el qual es va escriure una aplicació Java senzilla que anomenava el mètode System.currentTimeMillis() cent milions de vegades en un bucle. L'execució de l'aplicació va mostrar que es va trigar 13 segons a completar-se a CentOS i uns 68 segons a Ubuntu, és a dir. 5 vegades més lent. Es va escriure un programa similar en C que va anomenar la funció gettimeofday() cent milions de vegades, però quan es va executar, es van obtenir resultats similars.

Com que va quedar clar que l'origen del problema era la funció de retornar l'hora actual, l'atenció es va centrar en els canvis en els indicadors a l'hora de triar diferents fonts d'hora exacta al sistema. A jutjar pel contingut de "/sys/devices/system/clocksource/clocksource0/current_clocksource", el temporitzador "xen" es va utilitzar per defecte quan s'executava Linux al sistema convidat. Després de canviar la font del temps a "tsc", el temps d'execució de l'aplicació de prova a Ubuntu va disminuir de 68 a 3.3 segons, és a dir. es va fer 20 vegades més ràpid. A més, es va realitzar una prova de rendiment de la font de temps de rellotge kvm, que va mostrar un augment dels retards en un 20% en comparació amb TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ temps java TimeBench real 1m8.300s usuari 0m38.337s $ sys.0m29.875 echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 0m3.370s usuari 0m3.353s sys 0m0.026s

Per obtenir l'hora en seleccionar una font TSC, s'utilitza la instrucció del processador RDTSC, l'execució de la qual no requereix una trucada al sistema (la instrucció no requereix privilegis elevats i produeix un valor a partir del comptador de temps integrat a la CPU). Per defecte, TSC no està activat perquè antigament aquesta font no excloïa la deriva temporal gradual, que en altres processadors s'ajusta mitjançant programari per aconseguir lectures més precises. Segons un enginyer especialitzat en desenvolupament de processadors, les pors sobre els canvis de temps quan s'utilitza TSC fa temps que són falses i en els processadors moderns aquesta font pot produir lectures estables durant anys.

Canviar els servidors de producció de Netflix a una font TSC va donar lloc a una reducció del 43% de la latència d'escriptura i va aconseguir resultats amb Ubuntu que eren 4 vegades més ràpids que les configuracions amb CentOS amb una font de temps "xen". Els resultats de l'estudi es van transferir a Amazon, que va recomanar oficialment l'ús de la font de temps TSC predeterminada en entorns AWS EC2 basats en l'hipervisor Xen (el rellotge kvm continua recomanat en entorns basats en l'hipervisor Nitro).

Font: opennet.ru

Afegeix comentari