A fost lansată prima versiune a bibliotecii Aya, care permite crearea de gestionari eBPF în limbajul Rust, rulați în interiorul nucleului Linux într-o mașină virtuală specială cu JIT. Spre deosebire de alte instrumente pentru dezvoltarea programelor eBPF, Aya nu folosește libbpf și compilatorul bcc, ci oferă propria implementare scrisă în Rust, care utilizează pachetul crate libc pentru acces direct la apelurile de sistem ale nucleului. Construirea Aya nu necesită instrumente pentru limbajul C și fișierele de antet ale nucleului. Codul bibliotecii este distribuit sub licențele MIT și Apache 2.0.
Funcționalități principale:
- Suport pentru formatul BTF (BPF Type Format), care oferă informații despre tipuri în pseudocod BPF pentru verificarea tipurilor și potrivirea cu tipurile furnizate de nucleul curent. Utilizarea BTF permite crearea de gestionari eBPF universali, care pot fi utilizați fără recompilare cu diferite versiuni ale nucleului Linux.
- Suport pentru apelurile 'bpf-to-bpf', variabile globale și inițializatori, ceea ce permite formatarea programelor pentru eBPF similar cu programele obișnuite, utilizând aya ca runtime, care redefineste funcțiile având în vedere funcționarea în eBPF.
- Suport pentru diverse tipuri de nucleu, inclusiv tablouri obișnuite, hărți hash (hash map), stive, cozi, trasări de stivă, precum și structuri pentru socket-uri și urmărirea performanței.
- Posibilitatea de a crea diferite tipuri de programe eBTF, inclusiv programe pentru filtrarea și gestionarea traficului, gestionari cgroup și diverse operațiuni cu socket-uri, programe XDP.
- Suport pentru platforme de procesare asincronă a cererilor în mod neblocat tokio și async-std.
- Construire rapidă, fără legături la construcția nucleului și fișierele de antet ale nucleului.
Proiectul este în prezent considerat experimental — API-ul nu este încă stabilizat și continuă să se dezvolte. De asemenea, nu toate funcționalitățile planificate au fost implementate încă. Până la sfârșitul anului, dezvoltatorii își propun să aducă funcționalitatea Aya la paritate cu libbpf, iar în ianuarie 2022 să formeze prima versiune stabilă. De asemenea, se planifică unificarea părților Aya necesare pentru scrierea codului în Rust pentru nucleul Linux cu componentele care funcționează în spațiul utilizatorului și folosite pentru încărcarea, atașarea și interacțiunea cu programele eBPF.
Reamintim că eBPF este un interpret integrat în nucleul Linux pentru bytecode, care permite crearea de manipulatoare pentru operațiuni de rețea, urmărirea funcționării sistemelor, interceptarea apelurilor de sistem, controlul accesului, procesarea evenimentelor cu păstrarea cronometrajului, numărarea frecvenței și a timpului de executare a operațiunilor, precum și realizarea de trasări utilizând kprobes/uprobes/tracepoints. Datorită utilizării compilării JIT, bytecode-ul este tradus pe loc în instrucțiuni de mașină și executat cu performanța codului nativ. XDP oferă instrumente pentru rularea programelor BPF la nivelul driverului de rețea, cu acces direct la bufferul DMA al pachetelor, ceea ce permite crearea de manipulatoare de înaltă performanță pentru a lucra în condiții de încărcare mare a rețelei.
Sursa: opennet.ro
