GCC bevat nu een backend voor compilatie naar eBPF

Inbegrepen in de GCC-compilersuite geadopteerd code voor het compileren van programma's voor de bytecode-interpreter die in de Linux-kernel is ingebouwd eBPPF. Dankzij het gebruik van JIT-compilatie wordt de kernelbytecode direct vertaald in machine-instructies en uitgevoerd met de prestaties van native code. Patches met eBPF-ondersteuning geaccepteerd naar de tak van waaruit de GCC 10-release is ontwikkeld.

Naast een backend voor het genereren van bytecode bevat GCC een libgcc-poort voor eBPF en tools voor het genereren van ELF-bestanden die het mogelijk maken om code uit te voeren in de virtuele eBPF-machine met behulp van door de kernel geleverde laders. Patches ter ondersteuning van eBPF in GCC zijn voorbereid door technici van Oracle, die dat al hadden gedaan mits eBPF-ondersteuning in GNU binutils. Er zijn ook een simulator en patches voor GDB in ontwikkeling, waarmee u eBPF-programma's kunt debuggen zonder ze in de kernel te laden.

Programma's voor eBPF kunnen worden gedefinieerd in een subset van de C-taal, gecompileerd en in de kernel geladen. VΓ³Γ³r uitvoering controleert de eBPF-interpreter de bytecode op het gebruik van toegestane instructies en legt bepaalde regels op aan de code (bijvoorbeeld geen lussen).
Aanvankelijk werden op LLVM gebaseerde tools gebruikt om eBPF op Linux te compileren. eBPF-ondersteuning in GCC is interessant omdat je hiermee één toolkit kunt gebruiken om de Linux-kernel en eBPF-programma's te bouwen, zonder extra afhankelijkheden te installeren.

In de vorm van eBPF-programma's kunt u netwerkbewerkingshandlers maken, verkeer filteren, bandbreedte beheren, systemen monitoren, systeemoproepen onderscheppen, toegang controleren, de frequentie en tijd van bewerkingen tellen en tracering uitvoeren met behulp van kprobes/uprobes/tracepoints.

Bron: opennet.ru

Voeg een reactie