Uvedena Aya biblioteka za kreiranje Rust eBPF rukovaoca

Predstavljeno je prvo izdanje biblioteke Aya, koja vam omogućava da kreirate eBPF rukovaoce na Rust jeziku koji se pokreću unutar Linux kernela u posebnoj virtuelnoj mašini sa JIT-om. Za razliku od drugih razvojnih alata eBPF-a, Aya ne koristi libbpf i bcc kompajler, već umjesto toga nudi vlastitu implementaciju napisanu u Rustu, koja koristi paket libc crate za direktan pristup sistemskim pozivima kernela. Izgradnja Aya ne zahtijeva alate C jezika ili datoteke zaglavlja kernela. Kôd biblioteke se distribuira pod licencama MIT i Apache 2.0.

Osnovne mogućnosti:

  • Podrška za BTF (BPF Type Format), koji pruža informacije o tipu u BPF pseudokodu za provjeru tipa i mapiranje na tipove koje pruža trenutno jezgro. Upotreba BTF-a omogućava stvaranje univerzalnih eBPF rukovatelja koji se mogu koristiti bez ponovnog kompiliranja s različitim verzijama Linux kernela.
  • Podrška za “bpf-to-bpf” pozive, globalne varijable i inicijalizatore, što vam omogućava da dizajnirate programe za eBPF na sličan način kao obični programi koji koriste aya kao runtime koje redefinira funkcije uzimajući u obzir rad u eBPF-u.
  • Podrška za različite tipove kernela, uključujući regularne nizove, hash mape, stekove, redove, tragove stekova, kao i strukture za praćenje utičnica i performansi.
  • Sposobnost kreiranja različitih tipova eBTF programa, uključujući programe za filtriranje i upravljanje prometom, cgroup handlers i razne socket operacije, XDP programe.
  • Podrška za platforme za asinkronu obradu zahtjeva u neblokirajućem modu tokio i async-std.
  • Brza montaža, bez ikakve veze sa sklopom kernela i datotekama zaglavlja kernela.

Projekt se još uvijek smatra eksperimentalnim - API još nije stabiliziran i nastavlja se razvijati. Također, sve planirane mogućnosti još uvijek nisu realizovane. Do kraja godine programeri očekuju da će funkcionalnost Aya-e dovesti u paritet sa libbpf-om, a u januaru 2022. kreirati prvo stabilno izdanje. Postoje i planovi za kombinovanje delova Aya-e potrebnih za pisanje Rust koda za Linux kernel sa komponentama korisničkog prostora koje se koriste za učitavanje, pričvršćivanje i interakciju sa eBPF programima.

Podsjetimo, eBPF je bajtkod interpreter ugrađen u jezgro Linuxa, koji vam omogućava da kreirate rukovaoce mrežnim operacijama, nadgledate rad sistema, presretate sistemske pozive, kontrolišete pristup, obrađujete događaje uz održavanje vremena, izračunavate učestalost i vrijeme operacija, izvodite praćenje pomoću kprobes/uprobes /tracepoints. Zahvaljujući upotrebi JIT kompilacije, bajt kod se u hodu prevodi u mašinske instrukcije i izvršava uz performanse izvornog koda. XDP pruža alate za pokretanje BPF programa na nivou mrežnog drajvera, sa mogućnošću direktnog pristupa baferu DMA paketa, što vam omogućava da kreirate procesore visokih performansi za rad pod velikim opterećenjem mreže.

izvor: opennet.ru

Dodajte komentar