Анализ на влиянието върху производителността на избрания източник на време в системата

Брендан Грег (Brendan Gregg), един от разработчиците на DTrace, в момента развиваващ средства за анализ на производителността на базата на BPF в ядрото на Linux, обобщи опита, получен при разбор на проблеми с производителността, с които компанията Netflix се е сблъскала при миграцията на СУБД Cassandra от CentOS на Ubuntu в облачни среди, работещи на Amazon EC2 с Xen. След миграцията натоварването на CPU се увеличи с 30% и приблизително с толкова се увеличиха забавянията при изпълнението на операции за запис. Както се оказа, производителността на приложенията, интензивно запитващи информация за времето, силно зависи от избрания в системата източник на точно време.

В началото причината за намаляването на производителността не беше очевидна и диагностиката започна с проследяване на възможното влияние на постоянно работещи или периодично стартирани ресурсоемки системни процеси с помощта на утилитите top и execsnoop. Но всичко указваше на това, че потреблението на ресурси се е увеличило именно в СУБД Cassandra, написана на езика Java. Сравнението на показателите за профилиране на два процеса на Cassandra, паралелно стартирани в 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 намаля до 3.3 секунди от 68, тоест стана по-бързо 20 пъти. Допълнително бе проведен тест за производителността на източника на време kvm-clock, който показа увеличаване на закъсненията с 20% в сравнение с 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 реално 1m8.300s потребител 0m38.337s система 0m29.875s $ echo tsc > \/sys\/devices\/system\/clocksource\/clocksource0\/current_clocksource $ time java TimeBench реално 0m3.370s потребител 0m3.353s система 0m0.026s

За получаване на време при избор на източник TSC се използва процесорната инструкция RDTSC, изпълнението на която не изисква системен повик (инструкцията не изисква повишени привилегии и предоставя стойност от вградения в CPU таймер). По подразбиране TSC не е активиран, тъй като в миналото този източник не изключваше постепенното отклонение на времето, което в други обработвачи се коригира софтуерно за постигане на по-точни показания. Според инженера, специализиращ се в разработката на процесори, опасенията относно времеви отклонения при използване на TSC отдавна не отговарят на действителността и в съвременни процесори този източник може години наред да предоставя стабилни показания.

Превод на работни сървъри в Netflix източникът TSC доведе до намаляване на закъсненията при запис с 43% и до постигане на резултати под Ubuntu, които 4 пъти надвишават конфигурацията с CentOS и източника на време "xen". Резултатите от проведеното изследване бяха предоставени на компанията Amazon, която официално препоръча в средите AWS EC2, базирани на хипервизора Xen, да се използва по подразбиране източникът на време TSC (в средите на базата на хипервизора Nitro остава препоръчителен kvm-clock).

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster