Жүйеде таңдалған уақыт көзінің өнімділігіне әсерін талдау

Қазіргі уақытта Linux ядросында BPF негізінде өнімділікті талдау құралдарын жасап жатқан DTrace әзірлеушілерінің бірі Брендан Грегг Netflix Cassandra ДҚБЖ-ны CentOS-тан Ubuntu-ға көшіру кезінде кездесетін өнімділік мәселелерін талдаудан алынған тәжірибені қорытындылады. Xen негізіндегі Amazon EC2 бұлты. Көшіруден кейін процессордың жүктемесі 30%-ға өсті және жазу операциялары кезіндегі кешігулер шамамен бірдей мөлшерге өсті. Белгілі болғандай, уақыт туралы ақпаратты қарқынды түрде сұрайтын қолданбалардың өнімділігі жүйеде таңдалған нақты уақыт көзіне байланысты.

Бастапқыда өнімділіктің төмендеуінің себебі анық болмады және диагноз жоғарғы және execsnoop утилиталарын пайдалана отырып, тұрақты жұмыс істейтін немесе мерзімді іске қосылатын ресурстарды қажет ететін жүйелік процестердің ықтимал әсерін бақылаудан басталды. Бірақ барлығы Java тілінде жазылған Кассандра ДҚБЖ-де ресурстарды тұтынудың жоғарылағанын көрсетті. CentOS және Ubuntu жүйелерінде параллель жұмыс істейтін екі Cassandra процесінің профильдеу көрсеткіштерін салыстыру, бірдей сұрауларды өңдеу жалпы уақыттың шамамен 32% ағымдағы уақыт туралы ақпаратты алу үшін пайдаланылатын os::javaTimeMillis() шақыруға жұмсалғанын көрсетті. .

Осыдан кейін эксперимент жүргізілді, онда қарапайым Java қолданбасы жазылған, ол System.currentTimeMillis() әдісін циклде жүз миллион рет деп атады. Қолданбаны іске қосу оны CentOS жүйесінде аяқтауға 13 секунд, ал Ubuntu жүйесінде шамамен 68 секунд қажет екенін көрсетті, яғни. 5 есе баяу. Осындай бағдарлама C тілінде жазылған, ол gettimeofday() функциясын жүз миллион рет шақырды, бірақ орындалған кезде ұқсас нәтижелер алынды.

Мәселенің көзі ағымдағы уақытты қайтару функциясы екені белгілі болғандықтан, жүйеде нақты уақыттың әртүрлі көздерін таңдау кезінде көрсеткіштердің өзгеруіне назар аударылды. “/sys/devices/system/clocksource/clocksource0/current_clocksource” мазмұнына қарағанда, қонақ жүйесінде Linux іске қосылған кезде “xen” таймері әдепкі бойынша пайдаланылды. Уақыт көзін «tsc» деп өзгерткеннен кейін Ubuntu жүйесінде сынақ қосымшасының орындалу уақыты 68 секундтан 3.3 секундқа дейін қысқарды, яғни. 20 есе жылдамдады. Сонымен қатар, квм-сағаттық уақыт көзінің өнімділік сынағы жүргізілді, ол TSC-мен салыстырғанда кідірістердің 20%-ға артқанын көрсетті. $ 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 нақты 1m8.300s пайдаланушы 0m38.337s.s.s. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ уақыт java TimeBench нақты 29.875m0s пайдаланушы 0m3.370s sys 0m3.353s

TSC көзін таңдау кезінде уақытты алу үшін орындалуы жүйелік шақыруды қажет етпейтін RDTSC процессорының нұсқауы қолданылады (нұсқау жоғарылатылған артықшылықтарды қажет етпейді және орталық процессорға орнатылған уақыт есептегішінен мән шығарады). Әдепкі бойынша, TSC іске қосылмайды, өйткені ескі күндерде бұл көз басқа процессорларда дәлірек көрсеткіштерге қол жеткізу үшін бағдарламалық құрал арқылы реттелетін уақыттың біртіндеп ауытқуын жоққа шығармайды. Процессорларды әзірлеуге маманданған инженердің айтуынша, TSC пайдалану кезінде уақыттың ауысуы туралы қорқыныш көптен бері шындыққа жанаспады және заманауи процессорларда бұл көз жылдар бойы тұрақты көрсеткіштерді бере алады.

Netflix-тегі өндірістік серверлерді TSC көзіне ауыстыру жазу кідірісін 43%-ға қысқартуға әкелді және Ubuntu көмегімен «xen» уақыт көзі бар CentOS-ты басқаратын конфигурациялардан 4 есе жылдамырақ нәтижелерге қол жеткізді. Зерттеу нәтижелері Amazon компаниясына жіберілді, ол ресми түрде Xen гипервизоры негізіндегі AWS EC2 орталарында әдепкі TSC уақыт көзін пайдалануды ұсынды (Nitro гипервизорына негізделген орталарда квм-сағаттар ұсынылады).

Ақпарат көзі: opennet.ru

пікір қалдыру