Introduserte Aya-bibliotek for å lage eBPF-behandlere i Rust

Den første utgivelsen av Aya-biblioteket presenteres, som lar deg lage eBPF-behandlere på Rust-språket som kjører inne i Linux-kjernen i en spesiell virtuell maskin med JIT. I motsetning til andre eBPF-utviklingsverktøy, bruker ikke Aya libbpf og bcc-kompilatoren, men tilbyr i stedet sin egen implementering skrevet i Rust, som bruker libc-kassepakken for å få direkte tilgang til kjernesystemanrop. Å bygge Aya krever ikke C-språkverktøy eller kjernehodefiler. Bibliotekkoden distribueres under MIT- og Apache 2.0-lisensene.

Nøkkelegenskaper:

  • Støtte for BTF (BPF Type Format), som gir typeinformasjon i BPF-pseudokode for typekontroll og tilordning til typer levert av gjeldende kjerne. Bruken av BTF gjør det mulig å lage universelle eBPF-behandlere som kan brukes uten rekompilering med forskjellige versjoner av Linux-kjernen.
  • Støtte for "bpf-to-bpf"-kall, globale variabler og initialiseringer, som lar deg designe programmer for eBPF på lignende måte som vanlige programmer som bruker aya som en kjøretid som omdefinerer funksjoner som tar hensyn til arbeid i eBPF.
  • Støtte for ulike kjernetyper, inkludert vanlige arrays, hashe-kart, stabler, køer, stabelspor, samt socket- og ytelsessporingsstrukturer.
  • Evne til å lage ulike typer eBTF-programmer, inkludert programmer for filtrering og håndtering av trafikk, cgroup-behandlere og ulike socket-operasjoner, XDP-programmer.
  • Støtte for plattformer for asynkron forespørselsbehandling i ikke-blokkerende modus tokio og async-std.
  • Rask montering, uten noen tilkobling til kjernesamlingen og kjerneoverskriftsfiler.

Prosjektet anses fortsatt som eksperimentelt - API-en er ennå ikke stabilisert og fortsetter å utvikle seg. Dessuten er alle planlagte muligheter ennå ikke realisert. Ved slutten av året forventer utviklerne å bringe funksjonaliteten til Aya til paritet med libbpf, og i januar 2022 å lage den første stabile utgivelsen. Det er også planer om å kombinere delene av Aya som trengs for å skrive Rust-kode for Linux-kjernen med brukerplasskomponentene som brukes til å laste, feste og samhandle med eBPF-programmer.

La oss huske at eBPF er en bytekode-tolk innebygd i Linux-kjernen, som lar deg lage nettverksoperasjonsbehandlere, overvåke systemdrift, avskjære systemanrop, kontrollere tilgang, behandle hendelser mens du opprettholder timing, beregne frekvens og tidspunkt for operasjoner, utføre sporing ved hjelp av kprobes/uprobes/tracepoints. Takket være bruken av JIT-kompilering, blir bytekode oversatt til maskininstruksjoner og utført med ytelsen til opprinnelig kode. XDP gir verktøy for å kjøre BPF-programmer på nettverksdrivernivå, med mulighet for direkte tilgang til DMA-pakkebufferen, som lar deg lage høyytelsesprosessorer for arbeid under stor nettverksbelastning.

Kilde: opennet.ru

Legg til en kommentar