Bevezettük az Aya-könyvtárat az eBPF-kezelők létrehozásához Rustban

Bemutatják az Aya könyvtár első kiadását, amely lehetővé teszi a Rust nyelvű eBPF kezelők létrehozását, amelyek a Linux kernelen belül futnak egy speciális virtuális gépben JIT-vel. Más eBPF fejlesztőeszközökkel ellentétben az Aya nem használja a libbpf-et és a bcc fordítót, hanem saját Rust nyelven írt implementációt kínál, amely a libc crate csomagot használja a kernel rendszerhívásainak közvetlen eléréséhez. Az Aya felépítéséhez nincs szükség C nyelvi eszközökre vagy kernelfejlécfájlokra. A könyvtár kódja az MIT és az Apache 2.0 licenc alatt kerül terjesztésre.

Főbb jellemzők:

  • A BTF (BPF Type Format) támogatása, amely típusinformációkat biztosít BPF pszeudokódban a típusellenőrzéshez és az aktuális kernel által biztosított típusokhoz való hozzárendeléshez. A BTF használata lehetővé teszi univerzális eBPF kezelők létrehozását, amelyek újrafordítás nélkül használhatók a Linux kernel különböző verzióival.
  • A „bpf-to-bpf” hívások, globális változók és inicializálók támogatása, amely lehetővé teszi, hogy az eBPF-hez hasonló programokat tervezzen, mint az aya-t használó futási környezet, amely újradefiniálja a funkciókat, figyelembe véve az eBPF-ben végzett munkát.
  • Különféle kerneltípusok támogatása, beleértve a szokásos tömböket, kivonatleképezéseket, veremeket, sorokat, veremkövetéseket, valamint socket- és teljesítménykövető 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.
  • Az aszinkron kérésfeldolgozás platformjainak támogatása nem blokkoló módban tokio és async-std.
  • Gyors összeszerelés, a kernel-összeállításhoz és a kernelfejlécfájlokhoz való csatlakozás nélkül.

A projekt még mindig kísérleti jellegű – az API még nem stabilizálódott, és tovább fejlődik. Emellett még nem valósult meg minden tervezett lehetőség. A fejlesztők az év végére azt várják, hogy az Aya funkcionalitását a libbpf-fel egyenrangúvá teszik, 2022 januárjában pedig elkészítik az első stabil kiadást. Azt is tervezik, hogy az Aya részeit, amelyek a Linux kernel Rust kódjának írásához szükségesek, egyesítik az eBPF programok betöltéséhez, csatolásához és interakciójához használt felhasználói terület összetevőivel.

Emlékezzünk vissza, hogy az eBPF a Linux kernelbe épített bájtkód értelmező, amely lehetővé teszi a hálózati műveletkezelők létrehozását, a rendszer működésének figyelését, a rendszerhívások lehallgatását, a hozzáférés szabályozását, az események feldolgozását az időzítés betartása mellett, a műveletek gyakoriságának és idejének kiszámítását, végrehajtását. nyomkövetés kprobes/uprobes/tracepoints segítségével. A JIT fordítás használatának köszönhetően a bájtkódot menet közben lefordítják gépi utasításokká, és a natív kód teljesítményével hajtják végre. Az XDP eszközöket biztosít a BPF-programok hálózati illesztőprogram-szinten történő futtatásához, és közvetlenül hozzáférhet a DMA-csomagpufferhez, amely lehetővé teszi nagy teljesítményű processzorok létrehozását a nagy hálózati terhelés melletti munkavégzéshez.

Forrás: opennet.ru

Hozzászólás