Analiżi tal-impatt tal-prestazzjoni tas-sors tal-ħin magħżul fis-sistema

Brendan Gregg, wieħed mill-iżviluppaturi ta’ DTrace, li bħalissa qed jiżviluppa għodod ta’ analiżi tal-prestazzjoni bbażati fuq BPF fil-qalba tal-Linux, ġabar fil-qosor l-esperjenza miksuba mill-analiżi tal-problemi ta’ prestazzjoni li ltaqa’ magħhom Netflix meta jemigra l-Cassandra DBMS minn CentOS għal Ubuntu. il-sħaba Amazon EC2 ibbażata fuq Xen. Wara l-migrazzjoni, it-tagħbija tas-CPU żdiedet bi 30% u d-dewmien waqt l-operazzjonijiet tal-kitba żdied b'madwar l-istess ammont. Kif jirriżulta, il-prestazzjoni tal-applikazzjonijiet li jitolbu b'mod intensiv informazzjoni dwar il-ħin tiddependi ħafna fuq is-sors tal-ħin eżatt magħżul fis-sistema.

Għall-ewwel, ir-raġuni għat-tnaqqis fil-prestazzjoni ma kinitx ovvja u d-dijanjosi bdiet bil-monitoraġġ tal-impatt possibbli ta 'proċessi ta' sistema li jaħdmu b'mod kostanti jew perjodikament imnedija b'ħafna riżorsi bl-użu tal-utilitajiet top u execsnoop. Iżda kollox indika li l-konsum tar-riżorsi kien żdied speċifikament fil-Cassandra DBMS, miktuba bil-Java. Meta tqabbel il-metriċi ta' profili ta' żewġ proċessi Cassandra li jaħdmu b'mod parallel fuq CentOS u Ubuntu, li jipproċessaw l-istess mistoqsijiet, wera li madwar 32% tal-ħin totali inqatgħet issejjaħ os::javaTimeMillis(), li tintuża biex tinkiseb informazzjoni dwar il-ħin attwali .

Wara dan, sar esperiment li fih inkitbet applikazzjoni Java sempliċi li tissejjaħ il-metodu System.currentTimeMillis() f'linja mitt miljun darba. It-tħaddim tal-applikazzjoni wera li ħadet 13-il sekonda biex titlesta fuq CentOS, u madwar 68 sekonda fuq Ubuntu, i.e. 5 darbiet aktar bil-mod. Programm simili nkiteb f'C li sejjaħ il-funzjoni gettimeofday() mitt miljun darba, iżda meta eżegwit, inkisbu riżultati simili.

Peress li deher ċar li s-sors tal-problema kien il-funzjoni li jirritorna l-ħin attwali, l-attenzjoni daret għal bidliet fl-indikaturi meta għażlet sorsi differenti ta 'ħin eżatt fis-sistema. Ġġudikat mill-kontenut ta '"/sys/devices/system/clocksource/clocksource0/current_clocksource", it-tajmer "xen" intuża awtomatikament meta tħaddem Linux fis-sistema mistieden. Wara li nbidel is-sors tal-ħin għal "tsc", il-ħin tal-eżekuzzjoni tal-applikazzjoni tat-test f'Ubuntu naqas minn 68 għal 3.3 sekondi, i.e. sar 20 darba aktar mgħaġġla. Barra minn hekk, twettaq test tal-prestazzjoni tas-sors tal-ħin tal-kvm-clock, li wera żieda fid-dewmien b'20% meta mqabbel ma '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 reali 1m8.300s utent 0m38.337s $ sys. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench reali 29.875m0s utent 0m3.370s sys 0m3.353s

Biex tikseb il-ħin meta tagħżel sors TSC, tintuża l-istruzzjoni tal-proċessur RDTSC, li l-eżekuzzjoni tagħha ma teħtieġx sejħa tas-sistema (l-istruzzjoni ma teħtieġx privileġġi elevati u tipproduċi valur mill-time counter mibni fis-CPU). B'mod awtomatiku, TSC ma jiġix attivat minħabba li fl-antik dan is-sors ma jeskludix id-drift gradwali tal-ħin, li fi proċessuri oħra huwa aġġustat minn softwer biex jinkiseb qari aktar preċiż. Skont inġinier li jispeċjalizza fl-iżvilupp tal-proċessuri, il-biżgħat dwar bidliet fil-ħin meta tuża TSC ilhom mhux minnu u fil-proċessuri moderni dan is-sors jista 'jipproduċi qari stabbli għas-snin.

Il-bdil tas-servers tal-produzzjoni fuq Netflix għal sors TSC irriżulta fi tnaqqis ta '43% fil-latenza tal-kitba u kiseb riżultati bl-użu ta' Ubuntu li kienu 4 darbiet aktar mgħaġġla minn konfigurazzjonijiet li jaħdmu CentOS b'sors ta 'ħin "xen". Ir-riżultati tal-istudju ġew trasferiti lil Amazon, li uffiċjalment irrakkomandat li tuża s-sors tal-ħin TSC default f'ambjenti AWS EC2 ibbażati fuq l-hypervisor Xen (kvm-clock jibqa 'rrakkomandat f'ambjenti bbażati fuq l-hypervisor Nitro).

Sors: opennet.ru

Żid kumment