Компания Oracle Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ DTrace для Linux с использованиСм eBPF

Компания Oracle сообщила ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ связанных с DTrace ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² upstream ΠΈ ΠΏΠ»Π°Π½Π°Ρ… ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ динамичСской ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ DTrace ΠΏΠΎΠ²Π΅Ρ€Ρ… ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΉ инфрастуруктуры ядра Linux, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ с использованиСм Ρ‚Π°ΠΊΠΈΡ… подсистСм, ΠΊΠ°ΠΊ eBPF. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ основной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ с использованиСм DTrace Π² Linux Π±Ρ‹Π»Π° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ, Π½ΠΎ Π² 2018 Π³ΠΎΠ΄Ρƒ компания Oracle ΠΏΠ΅Ρ€Π΅Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π»Π° ΠΊΠΎΠ΄ DTrace ΠΏΠΎΠ΄ GPLv2.

DTrace ΡƒΠΆΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя прСдлагаСтся Π² составС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ ядра для дистрибутива Oracle Linux, Π½ΠΎ для своСго использования Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… дистрибитувах Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ примСнСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ для ядра, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ использованиС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, компания Oracle ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»Π° Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ установкС ΠΈ использованию DTrace Π² Fedora Linux. Для установки трСбуСтся сборка инструмСнтария ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ядра Linux, пСрСсобранного с ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ. Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ выполнСния сборки ядра с ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ Oracle ΠΈ Fedora ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ скрипт.

eBPF прСдставляСт собой встроСнный Π² ядро Linux ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сСтСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ систСм, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ события с сохранСниСм Ρ…Ρ€ΠΎΠ½ΠΎΠΌΠ΅Ρ‚Ρ€Π°ΠΆΠ° (perf_event_open), ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ частоту ΠΈ врСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ трассировку с использованиСм kprobes/uprobes/tracepoints. Благодаря ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ JIT-компиляции, Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π½Π° Π»Π΅Ρ‚Ρƒ транслируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции ΠΈ выполняСтся с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. DTrace ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ²Π΅Ρ€Ρ… eBPF, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ… eBPF Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты трассировки.

ВСхнология DTrace Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Solaris для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ динамичСской трассировкС ядра систСмы ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, давая ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ диагностику ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ процСссС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ DTrace Π½Π΅ влияСт Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ исслСдуСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ отраТаСтся Π½Π° ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… систСм Π½Π° Π»Π΅Ρ‚Ρƒ. Из ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон DTrace отмСчаСтся высокоуровнСвый язык D, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° AWK, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сцСнарии трассировки, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… для eBPF срСдств написания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° языках C, Python ΠΈ Lua с внСшними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ.

Π˜Π½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ ΠΈΠ· Oracle Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ созданиСм eBPF-бэкСнда для GCC ΠΈ ΡƒΠΆΠ΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ eBPF Π² GCC ΠΈ добились Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ eBPF Π² GNU binutils. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ бэкСнд для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ eBPF основываСтся Π½Π° тСхнологиях LLVM, Π½ΠΎ компания Oracle заинтСрСсована Π² появлСнии Π² GCC ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΉ возмоТности Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для eBPF, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ инструмСнтарий ΠΊΠ°ΠΊ для сборки ядра Linux, Ρ‚Π°ΠΊ ΠΈ для сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для eBPF.

ΠšΡ€ΠΎΠΌΠ΅ бэкСнда для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ для GCC ΠΏΠ°Ρ‚Ρ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΠΎΡ€Ρ‚ libgcc для eBPF ΠΈ срСдства для формирования ELF-Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС eBPF с использованиСм прСдоставляСмых ядром Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ². Π’ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ΄ Π½Π° языкС Π‘ΠΈ (Π½Π΅ всС возмоТности языка доступны), Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ оТидаСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ доступных для примСнСния возмоТностСй языка Π‘ΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, созданиС симулятора ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ GCC для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ядро.

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