Sada kompilátorů GCC zahrnuje kód pro kompilaci programů pro integrovaný interpret bytkového kódu v jádře Linuxu . Díky použití JIT kompilace se bytkový kód v jádře za běhu přetváří na strojové instrukce a vykonává se s výkonností nativního kódu. Patche s podporou eBPF v větvi, na jejímž základě se vyvíjí vydání GCC 10.
Kromě backendu pro generaci bytkového kódu obsahuje GCC port libgcc pro eBPF a nástroje pro vytváření ELF souborů, které umožňují vykonávat kód ve virtuálním stroji eBPF za použití poskytovaných jádrem bootloaderů. Patche pro podporu eBPF v GCC připravili inženýři z Oracle, kteří již předtím podporu eBPF v GNU binutils. V současnosti se také vyvíjí simulátor a patche pro GDB, které umožní ladění eBPF programů bez jejich načítání do jádra.
Programy pro eBPF mohou být definovány na podmnožině jazyka C, kompilovány a načítány do jádra. Před vykonáním interpreter eBPF kontroluje bytkový kód na použití povolených instrukcí a ukládá určité pravidla na kód (například zákaz cyklů).
Původně se pro kompilaci eBPF v Linuxu používal nástrojový balík založený na LLVM. Podpora eBPF v GCC je zajímavá tím, že umožňuje používat jeden nástroj pro sestavení jádra Linuxu a programů eBPF, bez nutnosti instalace dodatečných závislostí.
Ve formě programů eBPF lze vytvářet zpracovatele síťových operací, filtrovat provoz, řídit šířku pásma, sledovat činnost systémů, zachytávat systémové volání, kontrolovat přístup, počítat frekvenci a čas vykonávání operací, provádět trasování pomocí kprobes/uprobes/tracepoints.
Zdroj: opennet.ru
