Системада тандалган убакыт булагынын эффективдүүлүгүнө талдоо

Брендан Грег, DTrace программасын иштеп чыгуучулардын бири, учурда Linux өзөгүндө BPF негизинде иштөөнү талдоо куралдарын иштеп чыгууда, Netflix Кассандра DBMSти CentOS'тан Ubuntu'го көчүрүү учурунда пайда болгон натыйжалуулук көйгөйлөрүн талдоодон алынган тажрыйбаны жыйынтыктады. Xen негизделген Amazon EC2 булуту. Миграциядан кийин CPU жүктөмү 30% га көбөйдү жана жазуу операцияларындагы кечигүү болжол менен ошол эле суммага көбөйдү. Көрүнүп тургандай, убакыт маалыматын интенсивдүү талап кылган колдонмолордун иштеши системада тандалган так убакыт булагынан көз каранды.

Адегенде өндүрүмдүүлүктүн төмөндөшүнүн себеби ачык-айкын болгон эмес жана диагноз жогорку жана execsnoop утилиталарын колдонуу менен үзгүлтүксүз иштеп жаткан же мезгил-мезгили менен ишке киргизилген ресурсту көп талап кылган системалык процесстердин мүмкүн болуучу таасирин көзөмөлдөө менен башталган. Бирок бардыгы ресурсту керектөө Java тилинде жазылган Кассандра СББЖда өзгөчө көбөйгөнүн көрсөттү. CentOS жана Ubuntuдо параллелдүү иштеген эки Кассандра процессинин профилдөө көрсөткүчтөрүн салыштыруу, ошол эле сурамдарды иштеп чыгуу, жалпы убакыттын болжол менен 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 $ time java TimeBench реалдуу 29.875m0s колдонуучу 0m3.370s sys 0m3.353s

TSC булагын тандоодо убакытты алуу үчүн RDTSC процессорунун инструкциясы колдонулат, анын аткарылышы системалык чакырууну талап кылбайт (инструкция жогорулатылган артыкчылыктарды талап кылбайт жана CPUга орнотулган убакыт эсептегичтен маанини чыгарат). Демейки боюнча, TSC иштетилбейт, анткени эски күндөрдө бул булак убакыттын акырындык менен жылышын жокко чыгарган эмес, ал башка процессорлордо так окууга жетишүү үчүн программалык камсыздоо менен жөнгө салынат. Процессорлорду иштеп чыгууга адистешкен инженердин айтымында, TSCди колдонууда убакыттын жылышынан коркуу көптөн бери туура эмес жана заманбап процессорлордо бул булак жылдар бою туруктуу көрсөткүчтөрдү бере алат.

Netflixтеги өндүрүш серверлерин TSC булагына которуу жазуунун кечигүү убактысын 43% га кыскартууга алып келди жана Ubuntu аркылуу "xen" убакыт булагы менен CentOS иштеткен конфигурацияларга караганда 4 эсе тезирээк натыйжаларга жетишти. Изилдөөнүн натыйжалары Амазонка өткөрүлүп берилди, ал расмий түрдө Xen гипервизоруна негизделген AWS EC2 чөйрөлөрүндө демейки TSC убакыт булагын колдонууну сунуштады (kvm-саат Nitro гипервизоруна негизделген чөйрөлөрдө сунушталат).

Source: opennet.ru

Комментарий кошуу