Ontleding van die prestasie-impak van die tydbron wat in die stelsel gekies is

Brendan Gregg, een van die ontwikkelaars van DTrace, wat tans besig is om BPF-gebaseerde werkverrigting-analise-instrumente in die Linux-kern te ontwikkel, het die ervaring opgesom wat opgedoen is met die ontleding van die werkverrigtingprobleme wat Netflix ondervind het toe die Cassandra DBMS van CentOS na Ubuntu migreer. die Amazon EC2-wolk gebaseer op Xen. Na migrasie het die SVE-lading met 30% toegeneem en die vertragings tydens skryfbewerkings het met ongeveer dieselfde hoeveelheid toegeneem. Soos dit blyk, hang die werkverrigting van toepassings wat intensief tydinligting aanvra baie af van die presiese tydbron wat in die stelsel gekies is.

Aanvanklik was die rede vir die afname in prestasie nie voor die hand liggend nie en die diagnose het begin met die monitering van die moontlike impak van voortdurend lopende of periodiek geloods hulpbron-intensiewe stelselprosesse met behulp van die top- en execsnoop-nutsprogramme. Maar alles het aangedui dat hulpbronverbruik spesifiek in die Cassandra DBMS, geskryf in Java, toegeneem het. Die vergelyking van die profielmaatstawwe van twee Cassandra-prosesse wat parallel op CentOS en Ubuntu loop en dieselfde navrae verwerk het, het getoon dat ongeveer 32% van die totale tyd bestee is aan die oproep van os::javaTimeMillis(), wat gebruik word om inligting oor die huidige tyd te verkry. .

Hierna is 'n eksperiment uitgevoer waarin 'n eenvoudige Java-toepassing geskryf is wat die System.currentTimeMillis()-metode honderd miljoen keer in 'n lus genoem het. Die uitvoering van die toepassing het getoon dat dit 13 sekondes geneem het om op CentOS te voltooi, en ongeveer 68 sekondes op Ubuntu, d.w.s. 5 keer stadiger. ’n Soortgelyke program is in C geskryf wat die gettimeofday()-funksie honderd miljoen keer genoem het, maar wanneer dit uitgevoer is, is soortgelyke resultate verkry.

Aangesien dit duidelik geword het dat die bron van die probleem die funksie was om die huidige tyd terug te gee, het die aandag gevestig op veranderinge in aanwysers by die keuse van verskillende bronne van presiese tyd in die stelsel. Te oordeel aan die inhoud van "/sys/devices/system/clocksource/clocksource0/current_clocksource," is die "xen"-timer by verstek gebruik wanneer Linux in die gasstelsel uitgevoer word. Nadat die tydbron na "tsc" verander is, het die uitvoeringstyd van die toetstoepassing in Ubuntu van 68 tot 3.3 sekondes afgeneem, m.a.w. dit het 20 keer vinniger geword. Daarbenewens is 'n prestasietoets van die kvm-kloktydbron uitgevoer, wat 'n toename in vertragings met 20% getoon het in vergelyking met TSC. $ kat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ kat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ tyd java TimeBench werklike 1m8.300s gebruiker 0m38.337s $0ms29.875 echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ tyd java TimeBench real 0m3.370s gebruiker 0m3.353s sys 0m0.026s

Om die tyd te verkry wanneer 'n TSC-bron gekies word, word die RDTSC-verwerkerinstruksie gebruik, waarvan die uitvoering nie 'n stelseloproep vereis nie (die instruksie vereis nie verhoogde voorregte nie en produseer 'n waarde vanaf die tydteller wat in die SVE ingebou is). By verstek word TSC nie geaktiveer nie, want in die ou dae het hierdie bron nie geleidelike tydsverdryf uitgesluit nie, wat in ander verwerkers deur sagteware aangepas word om meer akkurate lesings te verkry. Volgens 'n ingenieur wat in verwerkerontwikkeling spesialiseer, is vrese oor tydverskuiwings wanneer TSC gebruik word lankal onwaar en in moderne verwerkers kan hierdie bron jare lank stabiele lesings lewer.

Die oorskakeling van produksiebedieners by Netflix na 'n TSC-bron het gelei tot 'n vermindering van 43% in skryfvertraging en resultate behaal met Ubuntu wat 4 keer vinniger was as konfigurasies wat CentOS met 'n "xen"-tydbron gebruik. Die resultate van die studie is oorgedra na Amazon, wat amptelik aanbeveel het om die verstek TSC-tydbron in AWS EC2-omgewings gebaseer op die Xen-hypervisor te gebruik (kvm-klok bly aanbeveel in omgewings gebaseer op die Nitro-hypervisor).

Bron: opennet.ru

Voeg 'n opmerking