A GCC mostantól tartalmaz egy háttérprogramot az eBPF-re való fordításhoz

A GCC fordítócsomag része fogadott kód a Linux kernelbe épített bájtkód értelmező programjainak fordításához eGMP. A JIT fordítás használatának köszönhetően a kernel bájtkódja menet közben gépi utasításokká alakul, és a natív kód teljesítményével hajtódik végre. Patchek eBPF támogatással elfogadott ahhoz az ághoz, amelyből a GCC 10 kiadást fejlesztették.

A bájtkód generálására szolgáló háttérprogramon kívül a GCC tartalmaz egy libgcc portot az eBPF-hez, valamint olyan eszközöket az ELF-fájlok generálására, amelyek lehetővé teszik a kód futtatását az eBPF virtuális gépen a kernel által biztosított betöltőkkel. A javításokat az eBPF támogatására a GCC-ben az Oracle mérnökei készítettek, akik már korábban is biztosítani eBPF támogatás a GNU binutilsben. Fejlesztés alatt van egy szimulátor és a GDB javításai is, amelyek lehetővé teszik az eBPF programok hibakeresését anélkül, hogy be kellene őket tölteni a kernelbe.

Az eBPF programjai a C nyelv egy részhalmazában definiálhatók, lefordíthatók és betölthetők a kernelbe. A végrehajtás előtt az eBPF értelmező ellenőrzi a bájtkódot az engedélyezett utasítások használatára vonatkozóan, és bizonyos szabályokat ír elő a kódra (például, hogy nincsenek ciklusok).
Kezdetben LLVM-alapú eszközöket használtak az eBPF fordításához Linuxon. Az eBPF-támogatás a GCC-ben azért érdekes, mert lehetővé teszi, hogy egyetlen eszközkészletet használjon a Linux-kernel és az eBPF-programok felépítéséhez további függőségek telepítése nélkül.

eBPF programok formájában hálózati műveletkezelőket hozhat létre, forgalmat szűrhet, sávszélességet kezelhet, rendszereket figyelhet, rendszerhívásokat lehallgathat, hozzáférést vezérelhet, számolhatja a műveletek gyakoriságát és idejét, valamint nyomkövetést végezhet kprobes/uprobes/tracepoints segítségével.

Forrás: opennet.ru

Hozzászólás