Analiza impactului asupra performanței sursei de timp selectate în sistem

Brendan Gregg, unul dintre dezvoltatorii DTrace, care dezvoltă acum instrumente pentru analiza performanței bazate pe BPF în nucleul Linux, a sintetizat experiența acumulată în analiza problemelor de performanță cu care s-a confruntat compania Netflix în timpul migrării bazei de date Cassandra de pe CentOS pe Ubuntu în medii rulate pe Amazon EC2 bazate pe Xen. După migrare, încărcarea CPU a crescut cu 30% și întârzierile în execuția operațiunilor de scriere au crescut cam în aceeași măsură. Așa cum s-a dovedit, performanța aplicațiilor care solicită intens informații despre timp depinde foarte mult de sursa de timp de încredere aleasă în sistem.

La început, cauza scăderii performanței nu era evidentă, iar diagnosticarea a început prin urmărirea posibilelor influențe ale proceselor sistemice consumatoare de resurse, care rulează continuu sau sunt pornite periodic, folosind utilitarele top și execsnoop. Dar totul indica faptul că consumul de resurse a crescut în baza de date Cassandra, scrisă în Java. Compararea măsurătorilor profilării a două procese Cassandra, rulate simultan în CentOS și Ubuntu, care procesau aceleași solicitări, a arătat că aproximativ 32% din tot timpul era cheltuit pentru apelarea os::javaTimeMillis(), utilizată pentru obținerea informațiilor despre timpul curent.

După aceea, a fost realizat un experiment în care a fost scrisă o aplicație simplă în Java, care apelase de o sută de milioane de ori metoda System.currentTimeMillis(). Rularea aplicației a arătat că în CentOS pentru execuția sa au fost necesare 13 secunde, în timp ce în Ubuntu — aproximativ 68 de secunde, adică de 5 ori mai lent. O programare similară a fost realizată în C, care apela de o sută de milioane de ori funcția gettimeofday(), dar rezultatele obținute au fost similare.

Întrucât s-a demonstrat că sursa problemei este funcția de returnare a timpului curent, atenția s-a îndreptat către modificarea parametrilor atunci când se alege în sistem diferite surse de timp precis. Conform conținutului „/sys/devices/system/clocksource/clocksource0/current_clocksource”, în mod implicit, la pornirea Linux-ului în sistemul gazdă, a fost folosit temporizatorul „xen”. După schimbarea sursei de timp pe „tsc”, timpul de execuție al aplicației de testare în Ubuntu a fost redus de la 68 la 3.3 secunde, adică a devenit de 20 de ori mai rapid. De asemenea, a fost efectuat un test de performanță al sursei de timp kvm-clock, care a arătat o creștere a întârzierilor cu 20% în comparație cu 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

Pentru a obține timpul prin alegerea sursei TSC, se folosește instrucțiunea procesorului RDTSC, al cărei execuție nu necesită efectuarea unui apel de sistem (instrucțiunea nu necesită privilegii înalte și furnizează o valoare din contorul de timp încorporat în CPU). În mod implicit, TSC nu este activat deoarece, în trecut, această sursă nu excludea driftele treptate de timp, care în alte handler-uri erau corectate prin software pentru a obține măsurători mai precise. Potrivit unui inginer specializat în dezvoltarea de procesoare, îngrijorările legate de devierile de timp atunci când se folosește TSC nu mai sunt relevante și în procesoarele moderne această sursă poate oferi valori stabile timp de ani.

Conversia sarcinilor servere în Netflix la sursa TSC a dus la o reducere a întârzierilor la scriere cu 43% și a obținut, în utilizarea Ubuntu, rezultate de 4 ori superioare configurației cu CentOS folosind sursa de timp „xen. Rezultatele studiului efectuat au fost transmise companiei Amazon, care a recomandat oficial ca în mediile AWS EC2 bazate pe hipervizorul Xen să se utilizeze în mod implicit sursa de timp TSC (în mediile bazate pe hipervizorul Nitro, kvm-clock rămâne recomandat).

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster