I sammansÀttningen av GCC-kompilatorpaketet kod för att kompilera program för den inbyggda bytekodstolken i Linux-kÀrnan . Tack vare anvÀndningen av JIT-kompilering översÀtts bytekoden i kÀrnan i realtid till maskininstruktioner och körs med prestanda av nativ kod. Patchar med stöd för eBPF i grenen som ligger till grund för utvecklingen av GCC 10.
Förutom backend för bytekodsgenerering i GCC inkluderar den en port av libgcc för eBPF och verktyg för att skapa ELF-filer, vilket möjliggör körning av kod i eBPF:s virtuella maskin med hjÀlp av laddare som tillhandahÄlls av kÀrnan. Patchar för att stödja eBPF i GCC har förberetts av ingenjörer frÄn Oracle, som tidigare redan har stöd för eBPF i GNU binutils. En simulator och patchar för GDB Àr ocksÄ under utveckling, vilket kommer att möjliggöra felsökning av eBPF-program utan att ladda dem i kÀrnan.
Program för eBPF kan definieras i en delmÀngd av C-sprÄket, kompileras och laddas in i kÀrnan. Innan programmet körs kontrollerar eBPF-tolken bytekoden för tillÄtna instruktioner och tillÀmpar vissa regler pÄ koden (till exempel avsaknad av loopar).
Ursprungligen anvÀndes verktyg för att kompilera eBPF i Linux baserat pÄ LLVM. Stödet för eBPF i GCC Àr intressant dÄ det möjliggör anvÀndning av ett enda verktyg för att bygga Linux-kÀrnan och eBPF-program, utan att installera ytterligare beroenden.
I form av eBPF-program kan man skapa hanterare för nÀtverksoperationer, filtrera trafik, hantera bandbredd, övervaka systemets prestanda, fÄnga systemanrop, kontrollera Ätkomst, rÀkna frekvenser och tidsÄtgÄng för operationer, och utföra spÄrning med kprobes/uprobes/tracepoints.
KĂ€lla: opennet.ru
