Greining á frammistöðuáhrifum tímagjafans sem valinn er í kerfinu

Brendan Gregg, einn af þróunaraðilum DTrace, sem nú er að þróa BPF-undirstaða afkastagreiningarverkfæri í Linux kjarnanum, tók saman reynsluna sem fengist hefur við að greina árangursvandamálin sem Netflix lenti í við að flytja Cassandra DBMS frá CentOS til Ubuntu. umhverfi sem keyrir á Amazon EC2 skýið byggt á Xen. Eftir flutning jókst álag á örgjörva um 30% og tafir á skrifum jukust um það bil jafn mikið. Eins og það kemur í ljós fer frammistaða forrita sem óska ​​ákaflega eftir tímaupplýsingum mjög eftir nákvæmri tímauppsprettu sem valinn er í kerfinu.

Í fyrstu var ástæðan fyrir lækkun á afköstum ekki augljós og greiningin hófst með því að fylgjast með mögulegum áhrifum stöðugt keyrandi eða reglulega ræst auðlindafrekum kerfisferlum með því að nota topp- og execsnoop tólin. En allt benti til þess að auðlindanotkun hefði aukist sérstaklega í Cassandra DBMS, skrifað á Java. Samanburður á prófílmælingum tveggja Cassandra ferla sem keyra samhliða á CentOS og Ubuntu, úrvinnslu sömu fyrirspurna, sýndi að um 32% af heildartímanum fór í að hringja í os::javaTimeMillis(), sem er notað til að fá upplýsingar um núverandi tíma .

Eftir þetta var gerð tilraun þar sem einfalt Java forrit var skrifað sem kallaði System.currentTimeMillis() aðferðina hundrað milljón sinnum í lykkju. Að keyra forritið sýndi að það tók 13 sekúndur að klára það á CentOS og um 68 sekúndur á Ubuntu, þ.e. 5 sinnum hægar. Svipað forrit var skrifað í C sem kallaði gettimeofday() fallið hundrað milljón sinnum, en þegar það var keyrt fengust svipaðar niðurstöður.

Þar sem ljóst var að uppspretta vandans var hlutverk þess að skila núverandi tíma, beindist athyglin að breytingum á vísbendingum við val á mismunandi heimildum um nákvæman tíma í kerfinu. Miðað við innihald „/sys/devices/system/clocksource/clocksource0/current_clocksource“ var „xen“ tímamælirinn notaður sjálfgefið þegar Linux var keyrt í gestakerfinu. Eftir að tímagjafanum var breytt í "tsc" minnkaði keyrslutími prófunarforritsins í Ubuntu úr 68 í 3.3 sekúndur, þ.e. það varð 20 sinnum hraðari. Að auki var framkvæmt afkastapróf á kvm-klukku tímagjafanum, sem sýndi aukningu á töfum um 20% miðað við TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ tími java TimeBench real 1m8.300s notandi 0m38.337s $0ms 29.875m0s sys 0ms3.370 echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ tími java TimeBench alvöru 3.353m0s notandi 0.026mXNUMXs sys XNUMXmXNUMXs

Til að fá tíma þegar TSC uppspretta er valinn er RDTSC örgjörva leiðbeiningin notuð, en framkvæmd hennar krefst ekki kerfiskalls (fyrirmælin krefjast ekki aukinna réttinda og framleiðir gildi úr tímateljaranum sem er innbyggður í CPU). Sjálfgefið er að TSC sé ekki virkjað vegna þess að í gamla daga útilokaði þessi heimild ekki hægfara tímarek, sem í öðrum örgjörvum er stillt af hugbúnaði til að ná nákvæmari lestri. Að sögn verkfræðings sem sérhæfir sig í þróun örgjörva hefur ótti um tímabreytingar þegar TSC er notað lengi verið ósannur og í nútíma örgjörvum getur þessi uppspretta framkallað stöðugan lestur í mörg ár.

Að skipta um framleiðsluþjóna hjá Netflix yfir í TSC uppsprettu leiddi til 43% minnkunar á ritunartíma og náði árangri með Ubuntu sem var 4 sinnum hraðari en stillingar sem keyra CentOS með „xen“ tímagjafa. Niðurstöður rannsóknarinnar voru fluttar til Amazon, sem opinberlega mælti með því að nota sjálfgefna TSC tímagjafann í AWS EC2 umhverfi byggt á Xen hypervisor (kvm-klukka er áfram ráðlögð í umhverfi sem byggir á Nitro hypervisor).

Heimild: opennet.ru

Bæta við athugasemd