GCC teraz obsahuje backend na kompiláciu do eBPF

Zahrnuté v kompilátorovom balíku GCC prijatý kód na kompiláciu programov pre interpret bajtového kódu zabudovaný do jadra Linuxu eGMP. Vďaka použitiu JIT kompilácie je bajtkód jadra preložený za behu do strojových inštrukcií a vykonávaný s výkonom natívneho kódu. Záplaty s podporou eBPF prijatý do vetvy, z ktorej sa vyvíja vydanie GCC 10.

Okrem backendu na generovanie bajtkódu obsahuje GCC port libgcc pre eBPF a nástroje na generovanie súborov ELF, ktoré umožňujú spúšťať kód vo virtuálnom stroji eBPF pomocou zavádzačov poskytovaných jadrom. Záplaty na podporu eBPF v GCC pripravili inžinieri zo spoločnosti Oracle, ktorí to už urobili poskytnuté Podpora eBPF v GNU binutils. Vo vývoji je aj simulátor a záplaty pre GDB, ktoré vám umožnia ladiť programy eBPF bez ich načítania do jadra.

Programy pre eBPF môžu byť definované v podmnožine jazyka C, skompilované a načítané do jadra. Pred vykonaním eBPF interpret skontroluje bajtový kód na použitie povolených inštrukcií a uloží určité pravidlá pre kód (napríklad žiadne slučky).
Spočiatku sa na kompiláciu eBPF v systéme Linux používali nástroje založené na LLVM. Podpora eBPF v GCC je zaujímavá, pretože vám umožňuje použiť jednu sadu nástrojov na zostavenie linuxového jadra a programov eBPF bez inštalácie ďalších závislostí.

Vo forme programov eBPF môžete vytvárať manipulátory sieťových operácií, filtrovať prevádzku, spravovať šírku pásma, monitorovať systémy, zachytávať systémové volania, riadiť prístup, počítať frekvenciu a čas operácií a vykonávať sledovanie pomocou kprobes/uprobes/tracepoints.

Zdroj: opennet.ru

Pridať komentár