Společnost Oracle o práci na přenosu změn souvisejících s DTrace do upstreamu a plánech na implementaci technologie dynamického ladění DTrace nad standardní infrastrukturou jádra Linux, konkrétně s využitím subsystémů jako eBPF. Původně byla hlavním problémem při použití DTrace v Linuxu neslučitelnost na úrovni licencí, ale v roce 2018 společnost Oracle kód DTrace pod GPLv2.
DTrace už nabízí v rámci rozšířeného jádra pro distribuci Oracle Linux, ale pro jeho použití v jiných distribucích vyžaduje aplikaci dodatečných patchů pro jádro, což omezuje používání uvedené technologie. Jako příklad, společnost Oracle podrobného návodu k instalaci a použití DTrace v Fedoře Linux. Pro instalaci je vyžadována kompilace a použití jádra Linux, které bylo zkompilováno s . Pro automatizaci provádění kompilace jádra s patchemi Oracle a Fedora byl navržen .
eBPF představuje vestavěného v jádře Linux interpretátora bytecode, který umožňuje vytvářet zpracovatele síťových operací, sledovat výkon systémů, zachytávat systémové volání, kontrolovat přístup, zpracovávat události s uchováním časových údajů (perf_event_open), počítat frekvenci a dobu trvání operací, vykonávat sledování pomocí kprobes/uprobes/tracepoints. Díky použití JIT kompilace je bytecode za běhu převáděn na strojové instrukce a vykonáván s výkonem nativního kódu. DTrace může být realizován nad eBPF, obdobně jako existující nástroje pro sledování. existující nástroje pro sledování.
Technologie DTrace byla vyvinuta pro operační systém Solaris k dynamickému sledování jádra systému a koncových aplikací, což uživateli umožňuje detailně sledovat chování systému a provádět diagnostiku problémů v reálném čase. Během ladění DTrace neovlivňuje výkon sledovaných aplikací, což umožňuje analyzovat běžící systémy za chodu. Mezi silné stránky DTrace patří vysoce úrovňový jazyk D, podobný jazyku AWK, ve kterém je podstatně snazší vytvářet sledovací skripty než při použití na eBPF založených prostředků pro psaní handlerů v C, Pythonu a Lua s externími knihovnami.
Inženýři společnosti Oracle také pracují na vytvoření eBPF backendu pro GCC a již zveřejnili pro integraci podpory eBPF do GCC a začlenění kódu pro podporu eBPF do GNU binutils. Původní backend pro podporu eBPF je založen na technologiích LLVM, ale společnost Oracle má zájem o to, aby se v GCC objevila standardní funkce generování programů pro eBPF, což umožní používat jedno nástroje jak pro sestavování jádra Linux, tak pro sestavování programů pro eBPF.
Kromě backendu pro generování bytecodu navrhované patche pro GCC také zahrnují port libgcc pro eBPF a nástroje pro vytváření ELF souborů, které umožňují spustit kód ve virtuální mašině eBPF pomocí poskytovaných jádrových loaderů. Bytecode může být prozatím překládán pouze z kódu v jazyce C (ne všechny funkce jazyka jsou dostupné), ale v budoucnu se očekává rozšíření dostupných funkcí jazyka C, přidání podpory pro další jazyky, vytváření simulátoru a přidání podpory GCC pro ladění eBPF programů bez načítání do jádra.
Zdroj: opennet.ru
