ЯндСкс ΠΎΡ‚ΠΊΡ€Ρ‹Π» Perforator, инструмСнтарий для профилирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Компания ЯндСкс объявила ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° инструмСнтария Perforator, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ сбора Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ рассчитанного Π½Π° использованиС Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… кластСрах ΠΈ Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ…. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ позволяСт Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ распрСдСлСниС рСсурсов Π½Π° Linux-сСрвСрах ΠΈ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ рСсурсоёмкиС прилоТСния. Код написан Π½Π° языкС Π‘++ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT (eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄ GPLv2).

Π’ ЯндСкс Perforator Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ Π² кластСрС, Π½Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ 10 тысяч ΡƒΠ·Π»ΠΎΠ², ΠΈ примСняСтся для выявлСния ΠΈ исправлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСрвисах, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ЯндСкс Поиск ΠΈ ЯндСкс Π Π΅ΠΊΠ»Π°ΠΌΡƒ. ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Perforator способствовал ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΡƒΠ·ΠΊΠΈΡ… мСст ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ рСсурсоёмких вычислСний, благодаря Ρ‡Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ЯндСкс ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π° 20% ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ расходы Π½Π° сСрвСры.

ЗаявлСнныС возмоТности:

  • ИспользованиС подсистСмы ядра eBPF ΠΈ API perf_events для сборка свСдСний ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ядра Linux ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. НакладныС расходы ΠΏΡ€ΠΈ сборС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ приводят ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 0.1%. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° систСмах с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ x86-64.
  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Для хранСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π‘Π£Π‘Π” ClickHouse, для хранСния Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… β€” PostgreSQL, Π° для хранСния raw-ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… β€” Π»ΡŽΠ±Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, совмСстимыС с Amazon S3.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ раскрутки стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (unwinding) Π±Π΅Π· нСобходимости Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ сборкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… символов ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Β«-fno-omit-frame-pointerΒ» (сохраняСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠ°Π΄Ρ€ стСка, содСрТащий адрСса Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ).
  • НаличиС языка запросов ΠΈ web-интСрфСйса для инспСктирования Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° CPU ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
     ЯндСкс ΠΎΡ‚ΠΊΡ€Ρ‹Π» Perforator, инструмСнтарий для профилирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
  • Для наглядной ΠΎΡ†Π΅Π½ΠΊΠΈ ΡƒΠ·ΠΊΠΈΡ… мСст примСняСтся визуализация Π² стилС FlameGraph.
     ЯндСкс ΠΎΡ‚ΠΊΡ€Ρ‹Π» Perforator, инструмСнтарий для профилирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ профилирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ языки ΠΈ runtime, Π±Π΅Π· внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² сборочныС процСссы ΠΈ Π±Π΅Π· пСрСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ЗаявлСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° языков программирования C++, Go, Rust, Java, Python ΠΈ JavaScript/Node.js.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ sPGO для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сборки ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с оптимизациями Π½Π° основС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования ΠΊΠΎΠ΄Π° (PGO β€” Profile-guided optimization), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° особСнностСй выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° использования Π² качСствС Π·Π°ΠΌΠ΅Π½Ρ‹ инструмСнтария perf Π² Linux.
  • Автоматизация развёртывания Π² кластСрах Π½Π° Π±Π°Π·Π΅ Kubernetes. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ запускаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π³Π΅Π½Ρ‚, ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‰ΠΈΠΉ, Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, ΡΠΆΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, совмСстимом с pprof, Ρ‡Π΅Ρ€Π΅Π· gRPC Π² микросСрвисы, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° сбор, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, Π°Π½Π°Π»ΠΈΠ·, ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ адрСсов Π² ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅) ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΡ€ΠΈ раскруткС стСка).
     ЯндСкс ΠΎΡ‚ΠΊΡ€Ρ‹Π» Perforator, инструмСнтарий для профилирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
     ЯндСкс ΠΎΡ‚ΠΊΡ€Ρ‹Π» Perforator, инструмСнтарий для профилирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ