Den första versionen av Aya-biblioteket har presenterats, vilket möjliggör skapande av eBPF-handlers pÄ Rust-sprÄket som körs inuti Linux-kÀrnan i en speciell virtuell maskin med JIT. Till skillnad frÄn andra verktyg för utveckling av eBPF-program anvÀnder Aya inte libbpf eller bcc-kompilatorn, utan erbjuder en egen implementation, skriven i Rust, som anvÀnder crate-paketet libc för att direkt anropa kÀrnans systemanrop. För att bygga Aya krÀvs ingen C-kompilator eller kÀrnans header-filer.
Key features:
- Stöd för BTF-formatet (BPF Type Format), som tillhandahÄller typinformation i BPF-pseudokod för typkontroll och matchning med de typer som tillhandahÄlls av den aktuella kÀrnan. AnvÀndningen av BTF möjliggör skapandet av universella eBPF-handlers som kan anvÀndas utan omkompilering med olika versioner av Linux-kÀrnan.
- Stöd för 'bpf-to-bpf'-anrop, globala variabler och initialiserare, vilket gör det möjligt att utforma eBPF-program pÄ samma sÀtt som vanliga program, dÀr aya fungerar som en runtime som omdefinierar funktioner med hÀnsyn till att de körs i eBPF.
- Stöd för olika kÀrntyper, inklusive vanliga arrayer, hashkartor, stackar, köer, stackspÄrning, samt strukturer för sockets och prestandaövervakning.
- Möjlighet att skapa olika typer av eBTF-program, inklusive program för filtrering och trafikhantering, cgroup-handlers och olika operationer med sockets, samt XDP-program.
- Stöd för plattformar för asynkron bearbetning av förfrÄgningar i icke-blockerande sÀtt med tokio och async-std.
- Snabb byggnation, oberoende av kÀrnbyggnad och kÀrnans header-filer.
Projektet betraktas fortfarande som experimentellt â API:et Ă€r Ă€nnu inte stabiliserat och fortsĂ€tter att utvecklas. Inte alla planerade funktioner har heller genomförts. Innan Ă„rets slut förvĂ€ntar sig utvecklarna att Ayas funktionalitet uppnĂ„r paritet med libbpf, och i januari 2022 planeras den första stabila versionen att formuleras. Det planeras ocksĂ„ att kombinera delar av Aya som krĂ€vs för att skriva Rust-kod för Linux-kĂ€rnan med komponenter som arbetar i anvĂ€ndarutrymmet och anvĂ€nds för att ladda, bifoga och interagera med eBPF-program.
Vi pÄminner om att eBPF Àr en inbyggd tolk för bytekod i Linux-kÀrnan som gör det möjligt att skapa hanterare för nÀtverksoperationer, övervaka systemets arbete, fÄnga systemanrop, kontrollera Ätkomst, bearbeta hÀndelser med tidsstÀmpling, rÀkna frekvens och exekveringstid, samt utföra spÄrning med hjÀlp av kprobes/uprobes/tracepoints. Tack vare anvÀndningen av JIT-kompilering översÀtts bytekoden i realtid till maskininstruktioner och utförs med prestanda som Àr jÀmförbar med den för nativ kod. XDP erbjuder verktyg för att köra BPF-program pÄ nivÄ med nÀtverksdrivrutinen, med möjlighet till direkt Ätkomst till DMA-paketbuffertar, vilket möjliggör skapande av högpresterande hanterare som fungerar under hög nÀtverksbelastning.
KĂ€lla: opennet.ru
