U setu GCC kompajlera kod za kompajliranje programa za interpreter bajtkoda ugrađen u Linux kernel . Zahvaljujući upotrebi JIT kompajliranja, bajtkod se u jezgru u trenutku prevodi u mašinske instrukcije i izvršava s performansama nativnog koda. Patchevi sa podrškom za eBPF u grani koja se koristi za razvoj izdanja GCC 10.
Osim backend-a za generisanje bajtkoda, GCC uključuje port libgcc za eBPF i alate za formiranje ELF datoteka, koji omogućavaju izvršavanje koda u eBPF virtuelnoj mašini koristeći učitavače koje pruža kernel. Patchevi za podršku eBPF u GCC pripremljeni su od strane inženjera iz Oracle-a, koji su prethodno već podršku eBPF u GNU binutils. U razvoju se takođe nalazi simulator i patchevi za GDB, koji će omogućiti debagovanje eBPF programa bez učitavanja u kernel.
Programi za eBPF mogu biti definišu na podskupu jezika C, kompajlirati i učitati u kernel. Pre izvršavanja, eBPF interpreter proverava bajtkod na korišćenje dozvoljenih instrukcija i postavlja određena pravila za kod (na primer, bez petlji).
Prvobitno je za kompajliranje eBPF u Linuxu korišćen alat na bazi LLVM. Podrška eBPF u GCC predstavlja interes jer omogućava korišćenje jednog alata za izgradnju Linux kernela i eBPF programa, bez potrebe za instaliranjem dodatnih zavisnosti.
U obliku eBPF programa mogu se kreirati rukovaoci mrežnim operacijama, filtrirati saobraćaj, upravljati propusnošću, pratiti rad sistema, presretati sistemske pozive, kontrolisati pristup, brojati učestalost i vreme izvršavanja operacija, sprovoditi praćenje koristeći kprobes/uprobes/tracepoints.
Izvor: opennet.ru
