Analisi di l'impattu di u rendiment di a fonte di u tempu sceltu in u sistema

Brendan Gregg, unu di i sviluppatori di DTrace, chì attualmente sviluppa strumenti di analisi di rendiment basati in BPF in u kernel Linux, hà riassuntu l'esperienza acquisita da l'analisi di i prublemi di rendiment chì Netflix hà scontru durante a migrazione di u DBMS Cassandra da CentOS à Ubuntu. u nuvulu Amazon EC2 basatu annantu à Xen. Dopu a migrazione, a carica di CPU aumentava di 30% è i ritardi durante l'operazioni di scrittura anu aumentatu da circa a stessa quantità. Comu si trova, u funziunamentu di l'applicazioni chì dumandanu intensivamente l'infurmazioni di u tempu dipende assai da a fonte di u tempu esatta sceltu in u sistema.

À u principiu, u mutivu di a diminuzione di u rendiment ùn era micca ovvi è u diagnosticu hà cuminciatu cù u monitoraghju di l'impattu pussibule di l'esecuzione constantemente o periòdicamenti lanciati prucessi di sistema intensivi di risorse chì utilizanu l'utilità superiore è execsnoop. Ma tuttu indicava chì u cunsumu di risorse era aumentatu specificamente in u Cassandra DBMS, scrittu in Java. Paragunendu e metriche di prufilu di dui prucessi Cassandra chì funzionanu in parallelu in CentOS è Ubuntu, processendu e stesse dumande, hà dimustratu chì circa 32% di u tempu tutale hè statu passatu à chjamà os::javaTimeMillis(), chì hè utilizatu per ottene infurmazioni nantu à u tempu attuale. .

Dopu questu, un esperimentu hè statu realizatu in quale hè stata scritta una applicazione Java simplice chì chjamava u metudu System.currentTimeMillis () centu milioni di volte in un ciclu. L'esecuzione di l'applicazione hà dimustratu chì hà pigliatu 13 seconde per compie in CentOS, è circa 68 seconde in Ubuntu, i.e. 5 volte più lento. Un prugramma simili hè statu scrittu in C chì chjamava a funzione gettimeofday () centu milioni di volte, ma quandu eseguitu, risultati simili sò stati ottenuti.

Siccomu hè diventatu chjaru chì a fonte di u prublema era a funzione di rinvià l'ora attuale, l'attenzione si vultò à i cambiamenti in l'indicatori quandu sceglie diverse fonti di u tempu esatta in u sistema. A ghjudicà da u cuntenutu di "/sys/devices/system/clocksource/clocksource0/current_clocksource", u timer "xen" hè stata utilizata per difettu quandu eseguisce Linux in u sistema invitatu. Dopu avè cambiatu a fonte di u tempu à "tsc", u tempu d'esekzione di l'applicazione di prova in Ubuntu diminuì da 68 à 3.3 seconde, i.e. hè diventatu 20 volte più veloce. Inoltre, hè stata realizata una prova di prestazione di a fonte di u tempu kvm-clock, chì hà dimustratu un aumentu di ritardu di 20% paragunatu à 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 reale 1m8.300s utente 0m38.337s $ sys. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench reale 29.875m0s utente 0m3.370s sys 0m3.353s

Per ottene u tempu quandu selezziunate una fonte TSC, l'istruzzioni di u processatore RDTSC hè utilizatu, l'esekzione di quale ùn hè micca bisognu di una chjama di u sistema (l'istruzzioni ùn hà micca bisognu di privilegi elevati è pruduce un valore da u contatore di u tempu integratu in u CPU). Per automaticamente, TSC ùn hè micca attivatu perchè in i vechji tempi sta fonte ùn esclude micca a deriva di u tempu graduali, chì in altri processori hè aghjustatu da u software per ottene letture più precise. Sicondu un ingegnere specializatu in u sviluppu di u processatore, i timori nantu à i cambiamenti di u tempu quandu si usanu TSC sò longu falsi è in i processori muderni sta fonte pò pruduce letture stabile per anni.

U cambiamentu di i servitori di produzzione in Netflix à una fonte TSC hà risultatu in una riduzione di 43% in a latenza di scrittura è hà ottinutu risultati cù Ubuntu chì eranu 4 volte più veloci di e cunfigurazioni chì eseguenu CentOS cù una fonte di tempu "xen". I risultati di l'studiu sò stati trasferiti à Amazon, chì ufficialmente ricumandò l'usu di a fonte di tempu TSC predeterminata in ambienti AWS EC2 basati nantu à l'ipervisore Xen (kvm-clock resta cunsigliatu in ambienti basati nantu à l'ipervisore Nitro).

Source: opennet.ru

Add a comment