Predstavené KernelScript — experimentálny programovací jazyk na vývoj eBPF programov, používateľských bootloaderov a rozšírení jadra Linuxu z jedinej kódovej základne. Projekt rozvíja Multikernel Technologies, spoločnosť propagujúca architektúru split-kernel / multikernel pre Linux. O KernelScript informoval zakladateľ spoločnosti Cong Wang na Open Source Summit Linux Foundation; kód projektu je zverejnený na GitHub pod licenciou Apache 2.0.
eBPF (Extended Berkeley Packet Filter) — je technológia, ktorá umožňuje spúšťať malé programy priamo v jadre Linuxu, bez zásahu do jeho kódu a bez rizika stability systému. eBPF pomáha riešiť množstvo úloh, od monitorovania výkonnosti po zabezpečenie a optimalizáciu siete. Napríklad, pomocou eBPF je možné sledovať systémové volania, sieťový traffic a ďalšie udalosti v reálnom čase. To umožňuje identifikovať úzke miesta vo výkonnosti a optimalizovať systém (Habr).
Myšlienka KernelScript — spraviť vývoj eBPF menej bolestným, než pri použití kombinácie C + libbpf, a pritom sa neobmedzovať len na trasovanie, ako bpftrace. Vývojári opisujú jazyk ako typovo bezpečný DSL, ktorý spája eBPF, vývoj používateľskej zóny a kernelspace: z jedného zdrojového súboru by mal kompilátor generovať kód pre eBPF programy, userspace časť a integráciu s kernel modulmi cez kfunc.
Vyhlásené možnosti KernelScript:
Kompilácia pre rôzne ciele z jedného súboru — funkcie s atribútmi ako @xdp, @tc, @helper a @kfunc sa automaticky priraďujú k potrebnej časti: XDP/TC programu, helper funkcii, kernel funkciám alebo bežnému userspace kódu.
Automatizácia tail calls — namiesto ručného nastavenia program array a volaní bpf_tail_call() ponúkajú vývojárom písať bežné volania inej funkcie, pričom generovanie nízkoúrovňového eBPF kódu ponechávajú kompilátorovi.
Zjednodušená práca s dynptr a eBPF maps — jazyk skrýva časť ručnej práce s bpf_ringbuf_reserve_dynptr, bpf_dynptr_write a podobnými API. eBPF mapy je možné používať ako globálne premenne, dostupné rôznym programom.
Kontrola životného cyklu programov — eBPF programy sú prezentované ako typované hodnoty, čo podľa autorov umožňuje na úrovni kompilácie zabraňovať chybám ako pokus o vykonanie attach() pred úspešným load().
Podpora kfunc — KernelScript umožňuje vyhlasovať funkcie s atribútom @kfunc, ktoré sa vykonávajú v priestore jadra a môžu byť volané z eBPF programov; pre ne je sľúbená automatická generácia modulov jadra a registrácií BTF.
Podpora základných typov eBPF programov — v README sú uvedené príklady pre XDP, TC, probe programy a perf_event, vrátane práce s hardvérovými počítadlami výkonu.
Autori osobitne zdôrazňujú, že KernelScript nie je náhradou za jadro Linuxu ani novým eBPF runtime. Je to skôr kompilátor a vysokolegúrový jazyk, ktorý by mal generovať bežné nízkolevelové komponenty: eBPF kód, userspace načítače, Makefile a, ak je to potrebné, modul jadra.
Projekt je zatiaľ potrebné vnímať ako skorý experiment. V repozitári je priamo uvedené, že KernelScript je v štádiu beta, syntax a API sa môžu meniť bez zachovania spätné kompatibility, a jeho používanie v produkcii zatiaľ nie je odporúčané.
Zdroj: linux.org.ru
