Analýza vplyvu zdroja času zvoleného v systéme na výkon

Brendan Gregg, jeden z vývojárov DTrace, ktorý v súčasnosti vyvíja nástroje na analýzu výkonu založené na BPF v jadre Linuxu, zhrnul skúsenosti získané z analýzy problémov s výkonom, s ktorými sa Netflix stretol pri migrácii Cassandra DBMS z prostredia CentOS na Ubuntu. cloud Amazon EC2 založený na Xen. Po migrácii sa zaťaženie procesora zvýšilo o 30 % a oneskorenia počas operácií zápisu sa zvýšili približne o rovnakú hodnotu. Ako sa ukazuje, výkon aplikácií, ktoré intenzívne požadujú informácie o čase, veľmi závisí od presného zdroja času zvoleného v systéme.

Dôvod poklesu výkonu spočiatku nebol zrejmý a diagnostika sa začala sledovaním možného vplyvu neustále spustených alebo periodicky spúšťaných systémových procesov náročných na zdroje pomocou top a execsnoop utilít. Všetko však nasvedčovalo tomu, že spotreba zdrojov sa zvýšila konkrétne v Cassandra DBMS napísanom v Jave. Porovnanie profilovacích metrík dvoch procesov Cassandra bežiacich paralelne na CentOS a Ubuntu, ktoré spracovávajú rovnaké dopyty, ukázalo, že asi 32 % z celkového času sa strávilo volaním os::javaTimeMillis(), ktorý sa používa na získanie informácií o aktuálnom čase .

Potom sa uskutočnil experiment, v ktorom bola napísaná jednoduchá Java aplikácia, ktorá sto miliónkrát v slučke volala metódu System.currentTimeMillis(). Spustenie aplikácie ukázalo, že dokončenie trvalo 13 sekúnd na CentOS a približne 68 sekúnd na Ubuntu, t.j. 5 krát pomalšie. Podobný program bol napísaný v C, ktorý volal funkciu gettimeofday() sto miliónov krát, ale po spustení sa dosiahli podobné výsledky.

Keďže sa ukázalo, že zdrojom problému bola funkcia vrátenia aktuálneho času, pozornosť sa pri výbere rôznych zdrojov presného času v systéme obrátila na zmeny ukazovateľov. Súdiac podľa obsahu „/sys/devices/system/clocksource/clocksource0/current_clocksource“, časovač „xen“ bol štandardne použitý pri spustení Linuxu v hosťujúcom systéme. Po zmene zdroja času na „tsc“ sa čas vykonania testovacej aplikácie v Ubuntu znížil zo 68 na 3.3 sekundy, t.j. stal sa 20-krát rýchlejším. Dodatočne sa vykonal test výkonu zdroja času kvm-clock, ktorý ukázal nárast oneskorení o 20 % v porovnaní s 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 0m38.337s sys 0s 29.875m0 $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 3.370m0s user 3.353m0s sys 0.026mXNUMXs

Na získanie času pri výbere zdroja TSC sa používa inštrukcia procesora RDTSC, ktorej vykonanie nevyžaduje systémové volanie (inštrukcia nevyžaduje zvýšené privilégiá a produkuje hodnotu z počítadla času zabudovaného v CPU). Štandardne nie je TSC aktivovaný, pretože za starých čias tento zdroj nevylučoval postupný časový posun, ktorý sa u iných procesorov upravuje softvérovo, aby sa dosiahli presnejšie údaje. Podľa inžiniera špecializujúceho sa na vývoj procesorov sú obavy z časových posunov pri používaní TSC už dávno nepravdivé a v moderných procesoroch dokáže tento zdroj produkovať stabilné údaje po celé roky.

Prechod produkčných serverov v Netflixe na zdroj TSC viedol k 43 % zníženiu latencie zápisu a dosiahol výsledky pomocou Ubuntu, ktoré boli 4-krát rýchlejšie ako konfigurácie so systémom CentOS so zdrojom času „xen“. Výsledky štúdie boli prenesené do Amazonu, ktorý oficiálne odporučil používanie predvoleného zdroja času TSC v prostrediach AWS EC2 založených na hypervízore Xen (kvm-clock zostávajú odporúčané v prostrediach založených na hypervízore Nitro).

Zdroj: opennet.ru

Pridať komentár