Valitud süsteemis ajaallika mõju analüüs

Brendan Gregg, üks DTrace arendajatest, kes nüüd arendab BPF-põhiseid jõudluse analüüsi vahendeid Linuxi tuumas, kogus kokku kogemused, mis saadi Netflixi probleemide analüüsimisel, kui nad ületasid Cassandra andmebaasi CentOS-ist Ubuntu-sse Amazon EC2 pilvekeskkondades, mis on Xen-iga. Pärast migratsiooni suurenes CPU koormus 30% ja umbes sama palju suurenes kirjutamisoperatsioonide viivitus. Selgus, et rakenduste jõudlus, mis nõuavad ajainfot, sõltub väga tugevalt süsteemis valitud täpse aja allikast.

Alguses ei olnud jõudluse languse põhjus ilmselge ning diagnoosimine algas võimalike süsteemsete protsesside pideva või perioodilise käivitamise mõju jälgimisega, kasutades utiliite top ja execsnoop. Kuid kõik viitas sellele, et ressursitarbimine suurenes just Cassandra andmebaasis, mis on kirjutatud Java keeles. Kahe Cassandra protsessi, mis töötasid paralleelselt CentOS-is ja Ubuntu-s ning töötlesid samu päringuid, profiili võrdlemine näitas, et umbes 32% kogu ajast kulus os::javaTimeMillis() kutsumisele, mida kasutatakse praeguse aja teabe saamiseks.

Pärast seda viidi läbi eksperiment, mille käigus kirjutati lihtne Java rakendus, mis kutsus tsüklis välja süsteemimeetodi System.currentTimeMillis() sada miljonit korda. Rakenduse käitamine näitas, et CentOS-is kulus selle täitmiseks 13 sekundit, kuid Ubuntu-s umbes 68 sekundit, st viis korda aeglasem. Sarnaselt kirjutati C keeles programm, mis kutsus sada miljonit korda välja funktsiooni gettimeofday(), kuid selle täitmisel saadi sarnased tulemused.

Kuna selgus, et probleemi allikaks on praeguse aja väljastamise funktsioon, suunati tähelepanu erinevate ajaallikate valimisel süsteemis näitajate muutmisele. Tõendades, et " /sys/devices/system/clocksource/clocksource0/current_clocksource " järgi kasutas Linuxi käivitamisel külg-süsteemis vaikimisi taimerit "xen". Ajaallika muutmine "tsc"-ks vähendas testrakenduse käitusaega Ubuntu süsteemis 68-lt 3.3 sekundile, st see kiirenes 20 korda. Lisana viidi läbi kvm-clock ajaallika jõudluse test, mis näitas viivituste suurenemist 20% võrreldes TSC-ga. $ 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 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 0m3.370s user 0m3.353s sys 0m0.026s

Aja saamiseks TSC allika valimisel kasutatakse protsessori käsku RDTSC, mille täitmine ei nõua süsteemi kutset (käsk ei vaja kõrgendatud õigusi ja annab väärtuse CPU-sse sisse ehitatud ajakalkulaatorist). Vaikimisi ei aktiveerita TSC-d, kuna vanematel aegadel ei välistanud see aja järjepidevat drifti, mida muudes töötlejates korrektiivselt programmeeritakse täpsemate näitajate saavutamiseks. Inseneri arvates, kes on spetsialiseerunud protsessorite arendamisele, ei vasta mured aja nihkete üle TSC kasutamisel enam tõele ja kaasaegsetel protsessoritel see allikas võib aastaid anda stabiilseid näitajaid.

Tööde tõlkimine serverid Netflixis TSC allikale üleminek viis viivituste vähenemiseni salvestamisel 43% ja Ubuntu kasutamisel saavutati tulemused, mis ületasid 4 korda CentOS konfiguratsiooniga, mille ajaallikas oli "xen". Tehtud uurimistöö tulemused edastati ettevõttele Amazon, mis soovitas ametlikult AWS EC2 Xen hüperviisori alusel keskkondades vaikimisi kasutada aegaallikat TSC (Nitro hüperviisori alusel keskkondades jääb soovitatuks kvm-clock).

Allikas: opennet.ru

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster