Анализ Π½Π° Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π²ΡŠΡ€Ρ…Ρƒ производитСлността Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° Π²Ρ€Π΅ΠΌΠ΅, ΠΈΠ·Π±Ρ€Π°Π½ Π² систСмата

Π‘Ρ€Π΅Π½Π΄ΡŠΠ½ Π“Ρ€Π΅Π³, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° DTrace, ΠΊΠΎΠΉΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° BPF-Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ инструмСнти Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° производитСлността Π² ядрото Π½Π° Linux, ΠΎΠ±ΠΎΠ±Ρ‰ΠΈ ΠΎΠΏΠΈΡ‚Π°, Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с производитСлността, ΠΊΠΎΠΈΡ‚ΠΎ Netflix срСщна ΠΏΡ€ΠΈ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Cassandra DBMS ΠΎΡ‚ CentOS към Ubuntu. ΠΎΠ±Π»Π°ΠΊΡŠΡ‚ Amazon EC2, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Xen. Π‘Π»Π΅Π΄ миграцията Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° процСсора сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ с 30% ΠΈ Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΡΡ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° запис сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ…Π° с ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰Π°Ρ‚Π° сума. ΠšΠ°ΠΊΡ‚ΠΎ сС ΠΎΠΊΠ°Π·Π²Π°, производитСлността Π½Π° прилоТСнията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ изискват информация Π·Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, зависи ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ точния ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π²Ρ€Π΅ΠΌΠ΅, ΠΈΠ·Π±Ρ€Π°Π½ Π² систСмата.

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° намаляванСто Π½Π° производитСлността Π½Π΅ бСшС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° ΠΈ диагностиката Π·Π°ΠΏΠΎΡ‡Π½Π° с наблюдСниС Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡ‚ΠΎ Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ Π½Π° постоянно Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ стартирани систСмни процСси, изискващи Π³ΠΎΠ»Π΅ΠΌΠΈ рСсурси, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ top ΠΈ execsnoop. Но всичко показвашС, Ρ‡Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° рСсурси сС Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ спСциално Π² Π‘Π£Π‘Π” Cassandra, написана Π½Π° Java. БравняванСто Π½Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π²Π° процСса Cassandra, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Π½Π° CentOS ΠΈ Ubuntu, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ΠΈ Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ заявки, ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ ΠΎΠΊΠΎΠ»ΠΎ 32% ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΅ ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π°Π½ΠΎ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° os::javaTimeMillis(), ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° информация Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ .

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° бСшС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ СкспСримСнт, Π² ΠΊΠΎΠΉΡ‚ΠΎ бСшС написано просто Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° System.currentTimeMillis() сто ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΡŠΡ‚ΠΈ Π² Ρ†ΠΈΠΊΡŠΠ». ΠŸΡƒΡΠΊΠ°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΎΡ‚Π½Π΅ΠΌΠ° 13 сСкунди Π½Π° CentOS ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 68 сСкунди Π½Π° Ubuntu, Ρ‚.Π΅. 5 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ. Подобна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° бСшС написана Π½Π° C, която ΠΈΠ·Π²ΠΈΠΊΠ° функцията gettimeofday() сто ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΡŠΡ‚ΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изпълни, сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

Въй ΠΊΠ°Ρ‚ΠΎ стана ясно, Ρ‡Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΅ функцията Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ сС насочи към ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² систСмата. БъдСйки ΠΏΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° β€œ/sys/devices/system/clocksource/clocksource0/current_clocksource”, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΡŠΡ‚ β€œxen” сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΈ стартиранС Π½Π° Linux Π² систСмата Π·Π° гости. Π‘Π»Π΅Π΄ промяна Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° "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 $ Π²Ρ€Π΅ΠΌΠ΅ java TimeBench Ρ€Π΅Π°Π»Π΅Π½ 1m8.300s ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ Π²Ρ€Π΅ΠΌΠ΅ java TimeBench Ρ€Π΅Π°Π»Π΅Π½ 0m3.370s ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» 0m3.353s sys 0m0.026s

Π—Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° TSC сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° инструкцията Π½Π° процСсора RDTSC, Ρ‡ΠΈΠ΅Ρ‚ΠΎ изпълнСниС Π½Π΅ изисква систСмно ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ (инструкцията Π½Π΅ изисква повишСни ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° стойност ΠΎΡ‚ брояча Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π²Π³Ρ€Π°Π΄Π΅Π½ Π² процСсора). По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ TSC Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² старитС Π΄Π½ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°ΡˆΠ΅ постСпСнното ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈ процСсори сС настройва ΠΎΡ‚ софтуСра, Π·Π° Π΄Π° сС постигнат ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½ΠΈ показания. Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€, спСциализиран Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° процСсори, страховСтС Π·Π° измСстванС Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° TSC ΠΎΡ‚Π΄Π°Π²Π½Π° Π½Π΅ са Π²Π΅Ρ€Π½ΠΈ ΠΈ Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ процСсори Ρ‚ΠΎΠ·ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π²Π° стабилни показания Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π³ΠΎΠ΄ΠΈΠ½ΠΈ.

ΠŸΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° производствСни ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π² Netflix към ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° TSC Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ 43% Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈΠ΅ Π½Π° латСнтността ΠΏΡ€ΠΈ запис ΠΈ постигна Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ubuntu, ΠΊΠΎΠΈΡ‚ΠΎ бяха 4 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ с CentOS с ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π²Ρ€Π΅ΠΌΠ΅ β€žxenβ€œ. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ бяха ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΈ Π½Π° Amazon, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° Π²Ρ€Π΅ΠΌΠ΅ TSC ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² AWS EC2 срСди, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Xen Ρ…ΠΈΠΏΠ΅Ρ€Π²Π°ΠΉΠ·ΠΎΡ€ (kvm-clock остава ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π½ Π² срСди, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Nitro Ρ…ΠΈΠΏΠ΅Ρ€Π²Π°ΠΉΠ·ΠΎΡ€).

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€