Analiza uticaja na performanse izvora vremena odabranog u sistemu

Brendan Gregg, jedan od programera DTracea, koji trenutno razvija alate za analizu performansi zasnovane na BPF-u u Linux kernelu, sažeo je iskustvo stečeno analizom problema performansi na koje je Netflix naišao prilikom migracije Cassandra DBMS-a sa CentOS-a na Ubuntu. Amazon EC2 oblak baziran na Xen-u. Nakon migracije, opterećenje CPU-a se povećalo za 30%, a kašnjenja tokom operacija pisanja porasla su za otprilike isti iznos. Kako se ispostavilo, performanse aplikacija koje intenzivno traže informacije o vremenu uvelike zavise od tačnog izvora vremena odabranog u sistemu.

U početku, razlog za smanjenje performansi nije bio očigledan i dijagnoza je počela praćenjem mogućeg uticaja stalno pokrenutih ili periodično pokretanih sistemskih procesa koji zahtevaju velike resurse pomoću top i execsnoop uslužnih programa. Ali sve je ukazivalo da se potrošnja resursa povećala posebno u Cassandra DBMS-u, napisanom na Javi. Uspoređujući metriku profiliranja dva Cassandra procesa koji rade paralelno na CentOS-u i Ubuntu-u, obrađujući iste upite, pokazalo se da je oko 32% ukupnog vremena potrošeno na pozivanje os::javaTimeMillis(), koji se koristi za dobivanje informacija o trenutnom vremenu .

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

Pošto je postalo jasno da je izvor problema funkcija vraćanja trenutnog vremena, pažnja se okrenula promjenama indikatora prilikom odabira različitih izvora tačnog vremena u sistemu. Sudeći po sadržaju “/sys/devices/system/clocksource/clocksource0/current_clocksource”, “xen” tajmer je korišten po defaultu kada se Linux pokreće u gostujućem sistemu. Nakon promjene izvora vremena u "tsc", vrijeme izvršenja testne aplikacije u Ubuntuu smanjeno je sa 68 na 3.3 sekunde, tj. postao je 20 puta brži. Dodatno, izvršen je test performansi izvora vremena kvm-clock, koji je pokazao povećanje kašnjenja za 20% u odnosu na 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 korisnik 0m38.337s0 sys.29.875m echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench realno 0m3.370s korisnik 0m3.353s sys 0m0.026s

Za dobivanje vremena pri odabiru TSC izvora koristi se RDTSC procesorska instrukcija, za čije izvršavanje nije potreban sistemski poziv (instrukcija ne zahtijeva povišene privilegije i proizvodi vrijednost iz brojača vremena ugrađenog u CPU). Podrazumevano, TSC nije aktiviran jer u starim danima ovaj izvor nije isključivao postepeni vremenski pomak, koji se kod drugih procesora podešava softverom kako bi se postigla preciznija očitavanja. Prema inženjeru specijalizovanom za razvoj procesora, strahovi o vremenskim pomacima pri korišćenju TSC-a su dugo bili netačni i u modernim procesorima ovaj izvor može davati stabilna očitavanja godinama.

Prebacivanje proizvodnih servera na Netflix-u na TSC izvor rezultiralo je smanjenjem kašnjenja pisanja za 43% i postignutim rezultatima korištenjem Ubuntua koji su bili 4 puta brži od konfiguracija koje koriste CentOS sa “xen” izvorom vremena. Rezultati studije prebačeni su na Amazon, koji je službeno preporučio korištenje zadanog TSC izvora vremena u AWS EC2 okruženjima baziranim na Xen hipervizoru (kvm-clock ostaje preporučen u okruženjima baziranim na Nitro hipervizoru).

izvor: opennet.ru

Dodajte komentar