Кампанія 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), падлічваць частату і час выканання. /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

Дадаць каментар