Анализ влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π² систСмС источника Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Π‘Ρ€Π΅Π½Π΄Π°Π½ Π“Ρ€Π΅Π³ (Brendan Gregg), ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² DTrace, Π½Ρ‹Π½Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ срСдства для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° Π±Π°Π·Π΅ BPF Π² ядрС Linux, ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΠ» ΠΎΠΏΡ‹Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ компания Netflix ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π‘Π£Π‘Π” Cassandra c 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 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. На языкС Π‘ΠΈ Π±Ρ‹Π»Π° написана похоТая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, сто ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ€Π°Π· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gettimeofday(), Π½ΠΎ ΠΏΡ€ΠΈ Π΅Ρ‘ выполнСния Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π’Π°ΠΊ ΠΊΠ°ΠΊ стало ясно, Ρ‡Ρ‚ΠΎ источником ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π² систСмС Ρ€Π°Π·Π½Ρ‹Ρ… источников Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Будя ΠΏΠΎ содСрТимому «/sys/devices/system/clocksource/clocksource0/current_clocksource» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ запускС Linux Π² гостСвой систСмС использовался Ρ‚Π°ΠΉΠΌΠ΅Ρ€ «xen». ПослС измСнСния источника Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° «tsc» врСмя выполнСния тСстового прилоТСния Π² Ubuntu ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ с 68 Π΄ΠΎ 3.3 сСкунд, Ρ‚.Π΅. стало быстрСС Π² 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 real 1m8.300s user 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 0m3.370s user 0m3.353s sys 0m0.026s

Для получСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ источника TSC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ процСссорная инструкция RDTSC, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ систСмного Π²Ρ‹Π·ΠΎΠ²Π° (инструкция Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΈ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· встроСнного Π² CPU счётчика Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ TSC Π½Π΅ активируСтся Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π±Ρ‹Π»Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ источник Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π» постСпСнный Π΄Ρ€Π΅ΠΉΡ„ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… коррСктируСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ для достиТСния Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ. По мнСнию ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ процСссоров, опасСния ΠΎ сдвигах Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ использовании TSC ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π² соврСмСнных процСссорах Π΄Π°Π½Π½Ρ‹ΠΉ источник ΠΌΠΎΠΆΠ΅Ρ‚ Π³ΠΎΠ΄Ρ‹ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ показания.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… сСрвСров Π² Netflix Π½Π° источник TSC ΠΏΡ€ΠΈΠ²Ρ‘Π» ΠΊ сниТСнию Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ записи Π½Π° 43% ΠΈ Π΄ΠΎΡΡ‚ΠΈΠΆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΈ использовании Ubuntu Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Π² 4 Ρ€Π°Π·Π° прСвосходящих ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ с CentOS с источником Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ «xen». Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ исслСдования Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Amazon, которая ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»Π° Π² окруТСниях AWS EC2 Π½Π° Π±Π°Π·Π΅ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π° Xen ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ источник Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ TSC (Π² окруТСниях Π½Π° Π±Π°Π·Π΅ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π° Nitro остаётся Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ kvm-clock).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru