Таҳлили таъсири самаранокии манбаи вақт, ки дар система интихоб шудааст

Брендан Грегг, яке аз таҳиягарони DTrace, ки айни замон асбобҳои таҳлили самаранокии BPF-ро дар ядрои Linux таҳия мекунад, таҷрибаеро, ки аз таҳлили мушкилоти иҷроиш, ки Netflix ҳангоми интиқоли DBMS Cassandra аз CentOS ба Ubuntu дучор омада буд, ҷамъбаст кард. абри Amazon EC2 дар асоси Xen. Пас аз муҳоҷират, сарбории CPU 30% зиёд шуд ва таъхирҳо ҳангоми амалиёти навиштан тақрибан ҳамин миқдор зиёд шуданд. Тавре маълум мешавад, иҷрои барномаҳое, ки ба таври пуршиддат маълумоти вақтро талаб мекунанд, аз манбаи дақиқи вақт дар система интихобшуда вобаста аст.

Дар аввал, сабаби коҳиши кор маълум набуд ва ташхис аз мониторинги таъсири эҳтимолии равандҳои системавии пайваста коркунанда ё давра ба давра оғозёфтаи захираҳо бо истифода аз утилитаҳои боло ва execsnoop оғоз ёфт. Аммо ҳама чиз нишон дод, ки истеъмоли захираҳо махсусан дар DBMS Cassandra, ки дар Java навишта шудааст, афзоиш ёфтааст. Муқоисаи ченакҳои профили ду раванди Кассандра, ки дар баробари CentOS ва Ubuntu кор мекунанд, коркарди ҳамон дархостҳо нишон дод, ки тақрибан 32% вақти умумӣ барои занг задан ба os::javaTimeMillis(), ки барои гирифтани маълумот дар бораи вақти ҷорӣ истифода мешавад, сарф шудааст. .

Пас аз ин, таҷриба гузаронида шуд, ки дар он як барномаи оддии Java навишта шуд, ки дар як давр сад миллион маротиба усули System.currentTimeMillis() ном дошт. Иҷрои барнома нишон дод, ки барои анҷом додани он дар CentOS 13 сония ва дар Ubuntu тақрибан 68 сония лозим буд, яъне. 5 маротиба сусттар. Барномаи шабеҳе дар забони Си навишта шуда буд, ки функсияи gettimeofday()-ро сад миллион маротиба меноманд, аммо ҳангоми иҷроиш, натиҷаҳои шабеҳ ба даст оварда шуданд.

Азбаски маълум шуд, ки манбаи мушкилот функсияи баргардонидани вақти ҷорӣ буд, диққат ба тағирёбии нишондиҳандаҳо ҳангоми интихоби манбаъҳои гуногуни вақти дақиқ дар система нигаронида шудааст. Аз рӯи мундариҷаи "/sys/devices/system/clocksource/clocksource0/current_clocksource", таймери "xen" ба таври нобаёнӣ ҳангоми кор кардани Linux дар системаи меҳмонон истифода мешуд. Пас аз иваз кардани манбаи вақт ба "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. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench воқеӣ корбар 29.875m0s 0m3.370s sys 0m3.353s

Барои ба даст овардани вақт ҳангоми интихоби манбаи TSC дастури протсессори RDTSC истифода мешавад, ки иҷрои он занги системаро талаб намекунад (дастур имтиёзҳои баландро талаб намекунад ва аз ҳисобкунаки вақт, ки дар CPU сохта шудааст, арзиш тавлид мекунад). Бо нобаёнӣ, TSC фаъол карда нашудааст, зеро дар айёми қадим ин манба тағирёбии тадриҷии вақтро истисно намекард, ки дар дигар протсессорҳо тавассути нармафзор барои ба даст овардани хониши дақиқтар танзим карда мешаванд. Ба гуфтаи муҳандиси, ки дар таҳияи протсессорҳо тахассус дорад, тарс дар бораи тағирёбии вақт ҳангоми истифодаи TSC кайҳост, ки нодуруст буд ва дар протсессорҳои муосир ин манбаъ метавонад дар тӯли солҳо хониши устувор ба даст орад.

Гузаронидани серверҳои истеҳсолӣ дар Netflix ба манбаи TSC боиси 43% кам шудани таъхири навиштан гардид ва бо истифода аз Ubuntu натиҷаҳо ба даст оварда шуданд, ки нисбат ба конфигуратсияҳое, ки CentOS бо манбаи вақти "xen" кор мекунанд, 4 маротиба тезтар буданд. Натиҷаҳои тадқиқот ба Amazon интиқол дода шуданд, ки он расман истифодаи манбаи вақти TSC-и пешфарзро дар муҳитҳои AWS EC2 дар асоси гипервизори Xen тавсия медиҳад (соати квм дар муҳитҳое, ки ба гипервизори Nitro асос ёфтааст, тавсия дода мешавад).

Манбаъ: opennet.ru

Илова Эзоҳ