GCC sada uključuje backend za kompilaciju u eBPF

Uključeno u GCC kompajlerski paket prihvaćen kod za kompajliranje programa za bajtkod interpreter ugrađen u Linux kernel eGMP. Zahvaljujući upotrebi JIT kompilacije, bajtkod kernela se u hodu prevodi u mašinske instrukcije i izvršava uz performanse izvornog koda. Zakrpe s podrškom za eBPF prihvaćeno u granu iz koje je razvijeno GCC 10 izdanje.

Pored pozadine za generisanje bajtkoda, GCC uključuje libgcc port za eBPF i alate za generisanje ELF fajlova koji omogućavaju izvršavanje koda u eBPF virtuelnoj mašini koristeći učitavače koje obezbeđuje kernel. Zakrpe za podršku eBPF-u u GCC-u pripremili su inženjeri iz Oraclea, koji su to već učinili obezbeđeno eBPF podrška u GNU binutils. Simulator i zakrpe za GDB su također u razvoju, što će vam omogućiti da debugujete eBPF programe bez njihovog učitavanja u kernel.

Programi za eBPF mogu se definisati u podskupu jezika C, kompajlirati i učitati u kernel. Prije izvršenja, eBPF interpreter provjerava bajt kod za korištenje dozvoljenih instrukcija i nameće određena pravila kodu (na primjer, bez petlji).
U početku su se alati zasnovani na LLVM-u koristili za kompajliranje eBPF-a na Linuxu. Podrška za eBPF u GCC-u je zanimljiva jer vam omogućava da koristite jedan komplet alata za izgradnju Linux kernela i eBPF programa, bez instaliranja dodatnih ovisnosti.

U obliku eBPF programa, možete kreirati rukovaoce mrežnim operacijama, filtrirati promet, upravljati propusnim opsegom, nadgledati sisteme, presresti sistemske pozive, kontrolirati pristup, brojati učestalost i vrijeme operacija i izvoditi praćenje pomoću kprobes/uprobes/tracepoints.

izvor: opennet.ru

Dodajte komentar