Analiza e ndikimit të performancës së burimit të kohës së zgjedhur në sistem

Brendan Gregg, një nga zhvilluesit e DTrace, i cili aktualisht po zhvillon mjete të analizës së performancës të bazuara në BPF në kernelin Linux, përmblodhi përvojën e fituar nga analizimi i problemeve të performancës që hasi Netflix gjatë migrimit të Cassandra DBMS nga CentOS në Ubuntu. mjediset që funksionojnë në cloud Amazon EC2 i bazuar në Xen. Pas migrimit, ngarkesa e CPU-së u rrit me 30% dhe vonesat gjatë operacioneve të shkrimit u rritën afërsisht me të njëjtën sasi. Siç rezulton, performanca e aplikacioneve që kërkojnë intensivisht informacione për kohën varet shumë nga burimi i saktë i kohës së zgjedhur në sistem.

Në fillim, arsyeja e uljes së performancës nuk ishte e qartë dhe diagnoza filloi me monitorimin e ndikimit të mundshëm të proceseve të sistemit që funksionojnë vazhdimisht ose lansohen periodikisht me burime intensive duke përdorur shërbimet kryesore dhe execsnoop. Por gjithçka tregonte se konsumi i burimeve ishte rritur veçanërisht në DBMS Cassandra, të shkruar në Java. Krahasimi i matjeve të profilizimit të dy proceseve Cassandra që funksionojnë paralelisht në CentOS dhe Ubuntu, duke përpunuar të njëjtat pyetje, tregoi se rreth 32% e kohës totale u shpenzua duke thirrur os::javaTimeMillis(), i cili përdoret për të marrë informacion rreth kohës aktuale .

Pas kësaj, u krye një eksperiment në të cilin u shkrua një aplikacion i thjeshtë Java që thirri metodën System.currentTimeMillis() njëqind milionë herë në një lak. Ekzekutimi i aplikacionit tregoi se u deshën 13 sekonda për të përfunduar në CentOS dhe rreth 68 sekonda në Ubuntu, d.m.th. 5 herë më ngadalë. Një program i ngjashëm u shkrua në C që thirri funksionin gettimeofday() njëqind milionë herë, por kur u ekzekutua, u morën rezultate të ngjashme.

Meqenëse u bë e qartë se burimi i problemit ishte funksioni i kthimit të kohës aktuale, vëmendja iu drejtua ndryshimeve në tregues kur zgjidhni burime të ndryshme të kohës së saktë në sistem. Duke gjykuar nga përmbajtja e "/sys/devices/system/clocksource/clocksource0/current_clocksource", kohëmatësi "xen" është përdorur si parazgjedhje kur përdorni Linux në sistemin e ftuar. Pas ndryshimit të burimit të kohës në "tsc", koha e ekzekutimit të aplikacionit të testimit në Ubuntu u ul nga 68 në 3.3 sekonda, d.m.th. u bë 20 herë më i shpejtë. Për më tepër, u krye një test i performancës së burimit të orës kvm, i cili tregoi një rritje të vonesave me 20% krahasuar me 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 $0s echo tsc > /sys/devices/system/clocksource/clocksource38.337/current_clocksource $ time java TimeBench real 0m29.875s user 0m0s sys 3.370m0s

Për të marrë kohën kur zgjidhni një burim TSC, përdoret instruksioni i procesorit RDTSC, ekzekutimi i të cilit nuk kërkon një thirrje sistemi (instruksioni nuk kërkon privilegje të ngritura dhe prodhon një vlerë nga numëruesi i kohës i integruar në CPU). Si parazgjedhje, TSC nuk aktivizohet sepse në kohët e vjetra ky burim nuk përjashtonte lëvizjen graduale të kohës, e cila në procesorë të tjerë rregullohet nga softueri për të arritur lexime më të sakta. Sipas një inxhinieri të specializuar në zhvillimin e procesorëve, frika për ndryshimin e kohës kur përdoret TSC ka qenë prej kohësh e pavërtetë dhe në përpunuesit modernë ky burim mund të prodhojë lexime të qëndrueshme për vite me rradhë.

Kalimi i serverëve të prodhimit në Netflix në një burim TSC rezultoi në një reduktim prej 43% të vonesës së shkrimit dhe arriti rezultate duke përdorur Ubuntu që ishin 4 herë më të shpejta se konfigurimet që ekzekutonin CentOS me një burim kohe "xen". Rezultatet e studimit u transferuan në Amazon, i cili zyrtarisht rekomandoi përdorimin e burimit të paracaktuar të kohës TSC në mjediset AWS EC2 bazuar në hipervizorin Xen (kvm-clock mbetet i rekomanduar në mjediset e bazuara në hipervizorin Nitro).

Burimi: opennet.ru

Shto një koment