GCC-kompilatorernes sammensætning kode til kompilering af programmer til den indbyggede bytecode-interpreter i Linux-kernen . Takket være anvendelsen af JIT-kompilering bliver bytecode løbende oversat til maskininstruktioner og udført med ydelse som native kode. Patcher med støtte til eBPF i den gren, som udviklingen af GCC 10 er baseret på.
Ud over backend til generation af bytecode, inkluderer GCC en port af libgcc til eBPF og værktøjer til at danne ELF-filer, der muliggør udførelse af kode i eBPF's virtuelle maskine ved hjælp af de drivere, som kernen stiller til rådighed. Patcher til eBPF-support i GCC er udarbejdet af ingeniører fra Oracle, som tidligere allerede støtte til eBPF i GNU binutils. Der er også en simulator og patches til GDB under udvikling, som vil muliggøre debugging af eBPF-programmer uden indlæsning i kernen.
Programmer til eBPF kan defineres i et delmængde af C-sproget, kompileres og indlæses i kernen. Før udførelse kontrollerer eBPF-interpreteren bytecode for anvendelse af tilladte instruktioner og pålægger visse regler på koden (f.eks. fravær af loops).
Oprindeligt blev værktøjet til kompilering af eBPF i Linux baseret på LLVM. Støtten til eBPF i GCC er interessant, da den muliggør brugen af ét værktøj til at bygge både Linux-kernen og eBPF-programmer uden installation af yderligere afhængigheder.
I form af eBPF-programmer kan der oprettes håndteringsfunktioner for netværksoperationer, filtrering af trafik, håndtering af båndbredde, systemovervågning, opfangning af systemopkald, kontrol af adgang, tælling af hyppighed og udførelsestid for operationer og udførelse af tracing ved hjælp af kprobes/uprobes/tracepoints.
Kilde: opennet.ru
