Prezentat KernelScript — un limbaj experimental de programare pentru dezvoltarea programelor eBPF, bootloaderilor personalizate și extensiilor kernel Linux dintr-o singură bază de cod. Proiectul dezvoltă Multikernel Technologies, companie care promovează arhitectura split-kernel / multikernel pentru Linux. Cong Wang, fondatorul companiei, a discutat despre KernelScript la Linux Foundation Open Source Summit; codul proiectului este publicat pe GitHub sub licență Apache 2.0.
eBPF (Extended Berkeley Packet Filter) — este o tehnologie care permite rularea unor programe mici direct în kernel Linux, fără a modifica codul acestuia și fără a afecta stabilitatea sistemului. eBPF ajută la rezolvarea multor probleme, de la monitorizarea performanței până la asigurarea securității și optimizarea rețelei. De exemplu, cu ajutorul eBPF, se pot urmări apelurile de sistem, traficul de rețea și alte evenimente în timp real. Acest lucru permite identificarea blocajelor în performanță și optimizarea sistemului (Habr).
Ideea KernelScript este de a face dezvoltarea eBPF mai puțin dureroasă decât utilizarea combinației C + libbpf, fără a se limita doar la trasare, așa cum face bpftrace. Dezvoltatorii descriu limbajul ca fiind un DSL sigur din punct de vedere al tipurilor, care combină eBPF, dezvoltarea în spațiul utilizatorului și kernelspace: dintr-un singur fișier sursă, compilatorul ar trebui să genereze cod pentru programele eBPF, partea de userspace și integrarea cu modulele kernel prin kfunc.
Funcționalitățile declarate ale KernelScript:
Compilare pentru diverse destinații dintr-un singur fișier — funcțiile cu atribute precum @xdp, @tc, @helper și @kfunc sunt automat asociate părții corecte: programului XDP/TC, funcției helper, funcției kernel sau codului normal din userspace.
Automatizarea apelurilor tail — în loc de configurarea manuală a array-ului program și apelurilor bpf_tail_call(), dezvoltatorului i se propune să scrie un apel obișnuit la o altă funcție, lăsând generarea codului eBPF de nivel inferior compilatorului.
Lucru simplificat cu dynptr și hărți eBPF — limbajul ascunde o parte din munca manuală cu bpf_ringbuf_reserve_dynptr, bpf_dynptr_write și API-uri similare. Hărțile eBPF pot fi utilizate ca variabile globale, accesibile din diferite programe.
Controlul ciclului de viață al programelor — programele eBPF sunt reprezentate ca valori tipizate, ceea ce, conform autorilor, permite prevenirea erorilor la etapa de compilare, cum ar fi încercarea de a efectua attach() înainte de a încărca cu succes.
Suport pentru kfunc — KernelScript permite declararea de funcții cu atributul @kfunc, care se execută în spațiul nucleului și pot fi apelate din programele eBPF; pentru acestea este promisa generarea automată a modulului kernel și a înscrierilor BTF.
Suport pentru principalele tipuri de programe eBPF — în README sunt prezentate exemple pentru programele XDP, TC, probe și perf_event, inclusiv lucrul cu contoarele de performanță hardware.
Autorii subliniază în mod special că KernelScript nu este un înlocuitor pentru nucleul Linux sau un nou runtime eBPF. Este mai degrabă un compilator și un limbaj de nivel înalt, care ar trebui să genereze componentele de bază familiare: cod eBPF, încărcătoare pentru userspace, Makefile și, dacă este necesar, un modul kernel.
Deocamdată, proiectul trebuie văzut ca un experiment timpuriu. În repository este indicat clar că KernelScript se află în stadiul beta, sintaxa și API-ul pot suferi modificări fără a păstra compatibilitatea inversă, iar utilizarea sa în producție nu este recomandată momentan.
Sursa: linux.org.ru
