Bemutatkozott az Aya könyvtár első kiadása, amely lehetővé teszi eBPF kezelők Rust nyelven történő létrehozását, amelyeket a Linux kernelben egy speciális virtuális gépen JIT fordítással futtatnak. A többi eBPF-program fejlesztő eszközhöz képest az Aya nem használja a libbpf-t és a bcc fordítót, hanem saját Rust nyelven írt megoldását kínálja, amely a libc crate csomagot használ a kernel rendszerhívásainak közvetlen eléréséhez. Az Aya összeállításához nem szükséges C nyelvű eszközkészlet és a kernel fejléc fájljai. A könyvtár kódja MIT és Apache 2.0 licenc alatt terjed.
Főbb funkciók:
- A BTF (BPF Type Format) formátum támogatása, amely típusinformációkat biztosít a BPF psevdkódban a típusellenőrzéshez és a jelenlegi kernellel biztosított típusokkal való egyeztetéshez. A BTF alkalmazása lehetővé teszi univerzális eBPF-kezelők létrehozását, amelyeket kernel verziók közötti újrafordítás nélkül lehet használni.
- A 'bpf-to-bpf' hívások, globális változók és inicializálók támogatása, ami lehetővé teszi az eBPF programok egyszerű programokhoz hasonló megformálását, az ayát runtime-ként használva, amely figyelembe veszi az eBPF működését.
- Különböző kernel típusok támogatása, beleértve a szokásos tömböket, hash-térképeket, veremeket, sorokat, veremnyomozást, valamint a socketekhez és teljesítménykövetéshez való struktúrákat.
- Lehetőség különféle típusú eBTF programok létrehozására, beleértve a forgalom szűrésére és kezelésére szolgáló programokat, cgroup kezelőket és különféle socket műveleteket, XDP programokat.
- Támogatás az aszinkron kéréskezelés a tokio és async-std nem blokkoló platformok számára.
- Gyors összeszerelés, nem kötődve a kernel és a kernel fejléc fájlok összeállításához.
A projekt jelenleg kísérleti státuszban van - az API még nem stabilizálódott és továbbra is fejlődik. Még nem valósultak meg az összes tervezett funkció. Az év végéig a fejlesztők arra számítanak, hogy az Aya funkcionalitását a libbpf-el egyeztetik, és 2022 januárjában elkészítik az első stabil kiadást. Tervezzük, hogy az Aya olyan részeit is összekapcsoljuk, amelyek szükségesek a Linux kernelhez Rust kód írásához, a felhasználói térben működő összetevőkkel, amelyeket az eBPF programok betöltésére, csatlakoztatására és interakciójára használnak.
Emlékeztetünk, hogy az eBPF a Linux kernelbe beépített bytecode értelmező, amely lehetővé teszi hálózati műveletek kezelőinek létrehozását, a rendszerek működésének nyomon követését, a rendszerhívások elfogását, a hozzáférés ellenőrzését, események feldolgozását időzítéssel, a műveletek gyakoriságának és végrehajtási idejének számlálását, valamint a kprobes/uprobes/tracepoints használatával való nyomkövetést. A JIT fordítás alkalmazásának köszönhetően a bytecode azonnal lefordul gépi utasításokra, és natív kód teljesítményével hajtódik végre. Az XDP eszközöket biztosít BPF programok futtatásához a hálózati illesztőprogram szintjén, lehetővé téve a DMA csomagbufferhez való közvetlen hozzáférést, ami lehetővé teszi a magas teljesítményű kezelők létrehozását nagy hálózati terhelés mellett.
Forrás: opennet.ru
