Oracle hodlá přepracovat DTrace pro Linux pomocí eBPF

Společnost Oracle hlášeno o práci na přenosu změn souvisejících s DTrace do upstreamu a plánech implementovat technologii dynamického ladění DTrace nad standardní infrastrukturou linuxového jádra, konkrétně pomocí subsystémů, jako je eBPF. Zpočátku byla hlavním problémem při používání DTrace na Linuxu nekompatibilita na úrovni licencí, ale v roce 2018 Oracle přelicencován DTrace kód pod GPLv2.

DTrace již dlouho je nabízen jako součást rozšířeného jádra pro distribuci Oracle Linux, ale vyžaduje další záplaty jádra pro použití v jiných distribucích, což omezuje použití této technologie. Například Oracle připravený podrobné pokyny pro instalaci a používání DTrace na Fedora Linux. Montáž nutná pro instalaci nástroje a pomocí linuxového jádra přestavěného z náplasti. Pro automatizaci provádění sestavení jádra s opravami Oracle a Fedory se navrhuje skript.

eBPF je interpret bytecode zabudovaný do linuxového jádra, který umožňuje vytvářet obslužné rutiny síťových operací, monitorovat aktivitu systému, zachycovat systémová volání, řídit přístup, zpracovávat události se zachováním časování (perf_event_open), počítat frekvenci a čas operací, provádět trasování pomocí kprobes / uprobes / sledovacích bodů. Díky použití JIT kompilace je bajtový kód za běhu překládán do strojových instrukcí a vykonáván s výkonem nativního kódu. DTrace lze implementovat nad eBPF, podobně jako nad eBPF práce stávající nástroje pro sledování.

Technologie DTrace byla vyvinuta pro operační systém Solaris za účelem řešení problémů dynamického trasování jádra systému a koncových aplikací, což uživateli dává možnost podrobně sledovat chování systému a diagnostikovat problémy v reálném čase. Během ladění DTrace neovlivňuje provoz studovaných aplikací a žádným způsobem neovlivňuje jejich výkon, což umožňuje organizovat analýzu běžících systémů za běhu. Ze silných stránek DTrace je zaznamenán jazyk D na vysoké úrovni, podobný AWK, ve kterém je mnohem jednodušší psát trasovací skripty než při použití nástrojů pro psaní handlerů nabízených pro eBPF v C, Pythonu a Lua s externími knihovnami. .

Inženýři společnosti Oracle také pracují na vytvoření backendu eBPF pro GCC a již publikovali sada patchů integrovat podporu eBPF do GCC a dosaženo včetně kódu pro podporu eBPF v GNU binutils. Zpočátku je backend pro podporu eBPF založen na technologiích LLVM, ale Oracle má zájem na tom, aby se v GCC objevila pravidelná schopnost generovat programy pro eBPF, což umožní používat jednu sadu nástrojů jak pro tvorbu linuxového jádra, tak pro vytváření programů pro eBPF.

Kromě backendu pro generování bajtkódu zahrnují záplaty navrhované pro GCC také port libgcc pro eBPF a nástroje pro generování souborů ELF, což umožňuje spouštět kód na virtuálním stroji eBPF pomocí zavaděčů poskytovaných jádrem. Prozatím lze kód C přeložit do bajtkódu (ne všechny jazykové funkce jsou k dispozici), ale v budoucnu se očekává rozšíření dostupných funkcí jazyka C, přidání podpory pro další jazyky, vytvoření simulátoru a přidání podpory GCC pro ladění programů eBPF bez načítání do jádra.

Zdroj: opennet.ru

Přidat komentář