Představení KernelScript — experimentální programovací jazyk pro vývoj eBPF programů, uživatelských zaváděčů a rozšíření jádra Linuxu z jediné kódové základny. Projekt vyvíjí Multikernel Technologies, společnost, která propaguje architekturu split-kernel / multikernel pro Linux. O KernelScript hovořil zakladatel společnosti Cong Wang na Linux Foundation Open Source Summit; kód projektu byl zveřejněn na GitHubu pod licencí Apache 2.0.
eBPF (Extended Berkeley Packet Filter) — technologie, která umožňuje spouštět malé programy přímo v jádře Linuxu, aniž by se dotýkala jeho kódu a ohrožovala stabilitu systému. eBPF pomáhá řešit řadu úloh, od monitorování výkonu po zabezpečení a optimalizaci sítě. Například pomocí eBPF lze sledovat systémové volání, síťový provoz a další události v reálném čase. To umožňuje identifikovat úzká místa ve výkonu a optimalizovat systém (Habr).
Myšlenka KernelScript — učinit vývoj eBPF méně bolestivým než při použití kombinace C + libbpf, a přitom se neomezovat pouze na trasování, jako je bpftrace. Vývojáři popisují jazyk jako typově bezpečný DSL, který spojuje eBPF, vývoj uživatelského prostoru a kernelspace: z jednoho zdrojového souboru by kompilátor měl generovat kód pro eBPF programy, část userspace a integraci s kernelovými moduly přes kfunc.
Uvedené možnosti KernelScript:
Kompilace pro různé cíle z jednoho souboru — funkce s atributy jako @xdp, @tc, @helper a @kfunc jsou automaticky přiřazovány k potřebné části: XDP/TC program, helper funkce, kernel funkce nebo běžný userspace kód.
Automatizace tail calls — místo ruční konfigurace program array a volání bpf_tail_call() se vývojářům nabízí psát běžné volání jiné funkce, přičemž generaci nízkoúrovňového eBPF kódu ponechávají kompilátoru.
Zjednodušená práce s dynptr a eBPF maps — jazyk skrývá část manuální práce s bpf_ringbuf_reserve_dynptr, bpf_dynptr_write a podobnými API. eBPF mapy lze používat jako globální proměnné, které jsou dostupné různým programům.
Kontrola životního cyklu programů — eBPF programy jsou zastoupeny jako typované hodnoty, což podle autorů umožňuje na úrovni kompilace předejít chybám, jako je pokus o vykonání attach() před úspěšným načtením.
Podpora kfunc — KernelScript umožňuje deklarovat funkce s atributem @kfunc, které se vykonávají v jádrovém prostoru a mohou být volány z eBPF programů; pro ně je slíbena automatická generace kernel modulu a BTF registrací.
Podpora hlavních typů eBPF programů — v README jsou uvedeny příklady pro XDP, TC, probe programy a perf_event, včetně práce s hardwarovými měřiči výkonu.
Autoři zdůrazňují, že KernelScript není náhradou za jádro Linuxu nebo nový eBPF runtime. Je to spíše překladač a jazyk vyšší úrovně, který má generovat obvyklé nízkoúrovňové komponenty: eBPF kód, userspace načítače, Makefile a, pokud je to nutné, kernel modul.
Projekt by měl být zatím považován za raný experiment. V repozitáři je přímo uvedeno, že KernelScript je v fázi beta, syntaxe a API se mohou měnit bez zachování zpětné kompatibility, a jeho použití v produkci se prozatím nedoporučuje.
Zdroj: linux.org.ru
