Analiza vpliva časovnega vira, izbranega v sistemu, na zmogljivost

Brendan Gregg, eden od razvijalcev DTrace, ki trenutno razvija orodja za analizo zmogljivosti, ki temeljijo na BPF, v jedru Linuxa, je povzel izkušnje, pridobljene z analizo težav z zmogljivostjo, na katere je naletel Netflix pri selitvi DBMS Cassandra iz CentOS v Ubuntu. oblak Amazon EC2, ki temelji na Xenu. Po selitvi se je obremenitev procesorja povečala za 30 % in zakasnitve med zapisovanjem so se povečale za približno enako. Izkazalo se je, da je delovanje aplikacij, ki intenzivno zahtevajo informacije o času, zelo odvisno od točnega vira časa, izbranega v sistemu.

Sprva razlog za zmanjšanje zmogljivosti ni bil očiten in diagnoza se je začela s spremljanjem možnega vpliva nenehno izvajanih ali občasno zagnanih sistemskih procesov, ki zahtevajo veliko virov, z uporabo pripomočkov top in execsnoop. Toda vse je kazalo, da se je poraba virov povečala posebej v DBMS Cassandra, napisanem v Javi. Primerjava metrik profiliranja dveh procesov Cassandra, ki se vzporedno izvajata v CentOS in Ubuntu in obdelujeta iste poizvedbe, je pokazala, da je bilo približno 32 % celotnega časa porabljenega za klicanje os::javaTimeMillis(), ki se uporablja za pridobivanje informacij o trenutnem času .

Po tem je bil izveden poskus, v katerem je bila napisana preprosta aplikacija Java, ki je stomilijonkrat v zanki poklicala metodo System.currentTimeMillis(). Izvajanje aplikacije je pokazalo, da je na CentOS trajalo 13 sekund, na Ubuntu pa približno 68 sekund, tj. 5x počasneje. V C-ju je bil napisan podoben program, ki je funkcijo gettimeofday() poklical stomilijonkrat, a pri izvedbi so bili pridobljeni podobni rezultati.

Ker je postalo jasno, da je vir težave funkcija vračanja trenutnega časa, se je pozornost usmerila na spremembe indikatorjev pri izbiri različnih virov točnega časa v sistemu. Sodeč po vsebini »/sys/devices/system/clocksource/clocksource0/current_clocksource,« je bil časovnik »xen« privzeto uporabljen pri izvajanju Linuxa v sistemu za goste. Po spremembi časovnega vira na "tsc" se je čas izvajanja testne aplikacije v Ubuntuju zmanjšal z 68 na 3.3 sekunde, tj. postal je 20-krat hitrejši. Poleg tega je bil opravljen preizkus delovanja časovnega vira kvm-clock, ki je pokazal povečanje zakasnitev za 20 % v primerjavi s TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ čas java TimeBench real 1m8.300s uporabnik 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ čas java TimeBench real 0m3.370s uporabnik 0m3.353s sys 0m0.026s

Za pridobitev časa pri izbiri vira TSC se uporablja ukaz procesorja RDTSC, katerega izvedba ne zahteva sistemskega klica (instrukcija ne zahteva povišanih privilegijev in proizvede vrednost iz števca časa, vgrajenega v CPE). TSC privzeto ni aktiviran, ker v starih časih ta vir ni izključeval postopnega premikanja časa, ki ga v drugih procesorjih prilagaja programska oprema za doseganje natančnejših odčitkov. Po besedah ​​inženirja, specializiranega za razvoj procesorjev, so strahovi glede časovnih premikov pri uporabi TSC že dolgo neresnični in v sodobnih procesorjih lahko ta vir daje stabilne odčitke več let.

Preklop produkcijskih strežnikov pri Netflixu na vir TSC je povzročil 43-odstotno zmanjšanje zakasnitve pisanja in dosegel rezultate z uporabo Ubuntuja, ki so bili 4-krat hitrejši od konfiguracij, ki izvajajo CentOS s časovnim virom "xen". Rezultate študije je posredoval Amazon, ki je uradno priporočil uporabo privzetega časovnega vira TSC v okoljih AWS EC2, ki temeljijo na hipervizorju Xen (kvm-clock ostaja priporočljiv v okoljih, ki temeljijo na hipervizorju Nitro).

Vir: opennet.ru

Dodaj komentar