Analiza učinka izvora vremena odabranog u sustavu

Brendan Gregg, jedan od programera DTracea, koji trenutno razvija alate za analizu performansi temeljene na BPF-u u Linux kernelu, sažeo je iskustvo stečeno analizom problema s performansama na koje je Netflix naišao prilikom migracije Cassandra DBMS-a s CentOS-a na Ubuntu. oblak Amazon EC2 temeljen na Xenu. Nakon migracije, opterećenje CPU-a poraslo je za 30%, a kašnjenja tijekom operacija pisanja porasla su za otprilike isti iznos. Kako se pokazalo, performanse aplikacija koje intenzivno traže informacije o vremenu uvelike ovise o točnom izvoru vremena odabranom u sustavu.

Isprva, razlog smanjenja performansi nije bio očit i dijagnoza je započela praćenjem mogućeg utjecaja stalno pokrenutih ili povremeno pokrenutih procesa sustava koji zahtijevaju velike resurse korištenjem uslužnih programa top i execsnoop. Ali sve je ukazivalo na to da se potrošnja resursa povećala posebno u Cassandra DBMS-u, napisanom u Javi. Usporedba metrike profiliranja dva Cassandra procesa koji se izvode paralelno na CentOS-u i Ubuntuu, obrađujući iste upite, pokazala je da je oko 32% ukupnog vremena potrošeno na pozivanje os::javaTimeMillis(), koji se koristi za dobivanje informacija o trenutnom vremenu .

Nakon toga je proveden eksperiment u kojem je napisana jednostavna Java aplikacija koja je sto milijuna puta u petlji pozvala metodu System.currentTimeMillis(). Pokretanje aplikacije pokazalo je da je potrebno 13 sekundi za dovršetak na CentOS-u, a oko 68 sekundi na Ubuntuu, tj. 5 puta sporije. Sličan program napisan je u C-u koji je pozvao funkciju gettimeofday() stotinu milijuna puta, ali kada se izvrši, dobiveni su slični rezultati.

Budući da je postalo jasno da je izvor problema funkcija vraćanja trenutnog vremena, pažnja se usmjerila na promjene indikatora pri odabiru različitih izvora točnog vremena u sustavu. Sudeći prema sadržaju “/sys/devices/system/clocksource/clocksource0/current_clocksource,” mjerač vremena “xen” korišten je prema zadanim postavkama pri pokretanju Linuxa u sustavu za goste. Nakon promjene izvora vremena u "tsc", vrijeme izvršenja testne aplikacije u Ubuntuu smanjilo se sa 68 na 3.3 sekunde, tj. postao je 20 puta brži. Dodatno, proveden je test performansi izvora vremena kvm-clock, koji je pokazao povećanje kašnjenja za 20% u usporedbi s TSC-om. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ vrijeme java TimeBench real 1m8.300s korisnik 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ vrijeme java TimeBench stvarno 0m3.370s korisnik 0m3.353s sys 0m0.026s

Za dobivanje vremena pri odabiru TSC izvora koristi se procesorska instrukcija RDTSC za čije izvođenje nije potreban sistemski poziv (instrukcija ne zahtijeva povišene privilegije i proizvodi vrijednost iz brojača vremena ugrađenog u CPU). Prema zadanim postavkama, TSC nije aktiviran jer u starim danima ovaj izvor nije isključivao postupno vremensko pomicanje, koje se u drugim procesorima prilagođava softverom kako bi se postigla točnija očitanja. Prema riječima inženjera specijaliziranog za razvoj procesora, strahovi o vremenskim pomacima pri korištenju TSC-a dugo su bili neistiniti i u modernim procesorima ovaj izvor može proizvoditi stabilna očitanja godinama.

Prebacivanje produkcijskih poslužitelja na Netflixu na TSC izvor rezultiralo je 43% smanjenjem latencije pisanja i postignutim rezultatima korištenjem Ubuntua koji su bili 4 puta brži od konfiguracija koje pokreću CentOS s "xen" izvorom vremena. Rezultati studije prebačeni su u Amazon, koji je službeno preporučio korištenje zadanog TSC izvora vremena u AWS EC2 okruženjima temeljenim na Xen hipervizoru (kvm-clock ostaje preporučen u okruženjima temeljenim na Nitro hipervizoru).

Izvor: opennet.ru

Dodajte komentar