Súčasťou súpravy kompilátorov GCC kód na kompiláciu programov pre integrovaný do jadra Linux interpret bytecode . Vďaka použitiu JIT kompilácie sa bytecode v jadre prekladá na strojové príkazy za behu a vykonáva sa s výkonom natívneho kódu. Patche s podporou eBPF v branch, na základe ktorého sa vyvíja verzia GCC 10.
Okrem backendu na generovanie bytecode je v GCC zahrnutý port libgcc pre eBPF a nástroje na vytváranie ELF súborov, ktoré umožňujú vykonanie kódu vo virtuálnej mašine eBPF s využitím poskytovaných jadrom bootloaderov. Patche pre podporu eBPF v GCC pripravili inžinieri zo spoločnosti Oracle, ktorí predtým už podporu eBPF v GNU binutils. V súčasnosti sa vyvíja aj simulátor a patche pre GDB, ktoré umožnia ladenie eBPF programov bez načítania do jadra.
Programy pre eBPF môžu byť definované v podmnožine jazyka C, kompilované a načítané do jadra. Pred vykonaním interpret eBPF kontroluje bytecode na použitie povolených inštrukcií a ukladá určité pravidlá pre kód (napríklad absenciu cyklov).
Pôvodne sa na kompiláciu eBPF v Linuxe používal nástrojový balík založený na LLVM. Podpora eBPF v GCC je zaujímavá tým, že umožňuje použitie jedného nástrojového balíka na zostavenie jadra Linux a eBPF programov bez inštalácie ďalších závislostí.
Vo forme programov eBPF je možné vytvárať spracovatele sieťových operácií, filtrovať prevádzku, riadiť šírku pásma, sledovať činnosť systémov, zachytávať systémové volania, kontrolovať prístup, počítať frekvenciu a čas vykonania operácií, vykonávať trasovanie pomocou kprobes/uprobes/tracepoints.
Zdroj: opennet.ru
