Byl představen první vydání knihovny Aya, která umožňuje vytvářet eBPF handlerové programy v jazyce Rust, spouštěné uvnitř jádra Linux v speciálním virtuálním stroji s JIT. Na rozdíl od jiných nástrojů pro vývoj eBPF programů, Aya nepoužívá libbpf a kompilátor bcc, ale nabízí vlastní implementaci napsanou v Rustu, která využívá crate balíček libc pro přímé volání systémových výzev jádra. Pro sestavení Aya není nutné mít k dispozici nástroje pro jazyk C a hlavičkové soubory jádra. Kód knihovny je distribuován pod licencemi MIT a Apache 2.0.
Hlavní funkce:
- Podpora formátu BTF (BPF Type Format), který poskytuje informace o typech v pseudokódu BPF pro kontrolu typů a mapování na typy poskytované aktuálním jádrem. Použití BTF umožňuje vytvářet univerzální eBPF handlerové programy, které lze používat bez překompilace s různými verzemi jádra Linux.
- Podpora volání „bpf-to-bpf“, globálních proměnných a inicializátorů, což umožňuje strukturovat eBPF programy podobně jako běžné programy, s použitím aya jako runtime, který přepisuje funkce s ohledem na práci v eBPF.
- Podpora různých typů jádra, včetně běžných polí, hash map, zásobníků, front, sledování zásobníku, a také struktur pro sokety a sledování výkonu.
- Možnost vytvářet různé typy eBTF programů, včetně programů pro filtrování a správu provozu, handlerů cgroup a různých operací se sokety, XDP programů.
- Podpora platforem pro asynchronní zpracování žádostí v neblokujícím režimu tokio a async-std.
- Rychlé sestavení, bez vazby na sestavení jádra a hlavičkové soubory jádra.
Projekt je zatím považován za experimentální – API ještě není stabilizováno a stále se vyvíjí. Také ještě nebyly implementovány všechny zamýšlené funkce. Do konce roku se vývojáři plánují posunout funkčnost Aya na paritu s libbpf a v lednu 2022 představit první stabilní release. Také se plánuje sloučení částí Aya potřebných pro psaní kódu v Rustu pro jádro Linux s komponentami pracujícími v uživatelském prostoru, které se používají pro načítání, připojování a interakci s eBPF programy.
Pripomínáme, že eBPF je vestavěný interpret bajtkódu v jádře Linuxu, který umožňuje vytvářet zpracovatele síťových operací, sledovat činnost systémů, zachytávat systémové volání, kontrolovat přístup, zpracovávat události se zachováním časového razítka, počítat frekvenci a čas provádění operací, vykonávat trasování pomocí kprobes/uprobes/tracepoints. Díky aplikaci JIT-kompilace se bajtkód na místě překládá na strojové instrukce a provádí se s výkonem nativního kódu. XDP poskytuje prostředky pro spuštění BPF-programů na úrovni síťového ovladače s možností přímého přístupu k DMA-bufru paketů, což umožňuje vytvářet vysoce výkonné zpracovatele pro práci v podmínkách vysoké síťové zátěže.
Zdroj: opennet.ru
