Introducerade Aya-bibliotek för att skapa eBPF-hanterare i Rust

Den första utgåvan av Aya-biblioteket presenteras, som låter dig skapa eBPF-hanterare på Rust-språket som körs inuti Linux-kärnan i en speciell virtuell maskin med JIT. Till skillnad från andra eBPF-utvecklingsverktyg använder Aya inte libbpf och bcc-kompilatorn, utan erbjuder istället en egen implementering skriven i Rust, som använder libc crate-paketet för att direkt komma åt kärnsystemanrop. Att bygga Aya kräver inte C-språkverktyg eller kärnhuvudfiler. Bibliotekskoden distribueras under licenserna MIT och Apache 2.0.

Viktiga funktioner:

  • Stöd för BTF (BPF Type Format), som tillhandahåller typinformation i BPF-pseudokod för typkontroll och mappning till typer som tillhandahålls av den aktuella kärnan. Användningen av BTF gör det möjligt att skapa universella eBPF-hanterare 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 att du kan designa program för eBPF på liknande sätt som vanliga program som använder aya som en runtime som omdefinierar funktioner med hänsyn till arbete i eBPF.
  • Stöd för olika kärntyper, inklusive vanliga arrayer, hash-kartor, stackar, köer, stackspår, såväl som socket- och prestandaspårningsstrukturer.
  • Möjlighet att skapa olika typer av eBTF-program, inklusive program för att filtrera och hantera trafik, cgroup-hanterare och olika socket-operationer, XDP-program.
  • Stöd för plattformar för asynkron förfrågningsbehandling i icke-blockerande läge tokio och async-std.
  • Snabb montering, utan någon anslutning till kernel assembly och kernel header-filer.

Projektet anses fortfarande vara experimentellt - API har ännu inte stabiliserats och fortsätter att utvecklas. Dessutom har alla planerade möjligheter ännu inte realiserats. I slutet av året räknar utvecklarna med att få Ayas funktionalitet i paritet med libbpf och i januari 2022 skapa den första stabila utgåvan. Det finns också planer på att kombinera de delar av Aya som behövs för att skriva Rust-kod för Linux-kärnan med användarutrymmeskomponenterna som används för att ladda, bifoga och interagera med eBPF-program.

Låt oss komma ihåg att eBPF är en bytekodtolkare inbyggd i Linux-kärnan, som låter dig skapa nätverkshanterare, övervaka systemdrift, avlyssna systemanrop, kontrollera åtkomst, bearbeta händelser med bibehållen timing, beräkna frekvens och tid för operationer, utföra spårning med hjälp av kprobes/uprobes/tracepoints. Tack vare användningen av JIT-kompilering översätts bytekod i farten till maskininstruktioner och exekveras med prestanda av inbyggd kod. XDP tillhandahåller verktyg för att köra BPF-program på nätverksdrivrutinsnivå, med möjligheten att direkt komma åt DMA-paketbufferten, vilket gör att du kan skapa högpresterande processorer för arbete under hög nätverksbelastning.

Källa: opennet.ru

Lägg en kommentar