Presentato KernelScript — un linguaggio di programmazione sperimentale per lo sviluppo di programmi eBPF, caricamenti utente e estensioni del kernel Linux da un'unica base di codice. Il progetto è in fase di sviluppo Multikernel Technologies, un'azienda che promuove l'architettura split-kernel / multikernel per Linux. Cong Wang, fondatore dell'azienda, ha parlato di KernelScript al Linux Foundation Open Source Summit; il codice del progetto è stato pubblicato su GitHub sotto licenza Apache 2.0.
eBPF (Extended Berkeley Packet Filter) è una tecnologia che consente di eseguire piccoli programmi direttamente nel kernel Linux, senza modificare il suo codice e senza mettere a rischio la stabilità del sistema. eBPF aiuta a risolvere una serie di problemi, dal monitoraggio delle prestazioni alla sicurezza e all'ottimizzazione della rete. Ad esempio, è possibile utilizzare eBPF per tracciare le chiamate di sistema, il traffico di rete e altri eventi in tempo reale. Questo permette di identificare i colli di bottiglia nelle prestazioni e ottimizzare il sistema (Habr).
L'idea di KernelScript è rendere lo sviluppo di eBPF meno problematico rispetto all'uso della combinazione C + libbpf, senza limitarsi solo al tracciamento, come fa bpftrace. Gli sviluppatori descrivono il linguaggio come un DSL tipizzato e sicuro, che combina eBPF, sviluppo nello spazio utente e kernelspace: da un singolo file sorgente, il compilatore deve generare codice per programmi eBPF, parte userspace e integrazione con i moduli del kernel tramite kfunc.
Funzionalità dichiarate di KernelScript:
Compilazione per diversi obiettivi da un singolo file — le funzioni con attributi come @xdp, @tc, @helper e @kfunc vengono automaticamente associate alla parte necessaria: programma XDP/TC, funzione helper, funzione del kernel o codice userspace ordinario.
Automazione delle chiamate a coda — invece di configurare manualmente l'array di programmi e le chiamate bpf_tail_call(), si invita lo sviluppatore a scrivere una chiamata regolare a un'altra funzione, lasciando la generazione del codice eBPF a basso livello al compilatore.
Lavoro semplificato con dynptr e mappe eBPF — il linguaggio nasconde parte del lavoro manuale con bpf_ringbuf_reserve_dynptr, bpf_dynptr_write e API simili. Le mappe eBPF possono essere utilizzate come variabili globali accessibili a diversi programmi.
Controllo del ciclo di vita dei programmi — i programmi eBPF sono presentati come valori tipizzati, il che, secondo gli autori, consente di prevenire errori durante la compilazione, come tentativi di eseguire attach() prima di un caricamento riuscito.
Supporto di kfunc KernelScript consente di dichiarare funzioni con l'attributo @kfunc, che vengono eseguite nello spazio del kernel e possono essere richiamate da programmi eBPF; per esse è promessa la generazione automatica di moduli kernel e registrazioni BTF.
Supporto per i tipi principali di programmi eBPF Nel README sono mostrati esempi per XDP, TC, probe e perf_event, inclusa la gestione dei contatori hardware delle prestazioni.
Gli autori sottolineano che KernelScript non è un sostituto del kernel Linux o un nuovo runtime eBPF. È piuttosto un compilatore e un linguaggio di alto livello, progettato per generare componenti a basso livello familiari: codice eBPF, caricamenti userspace, Makefile e, se necessario, moduli kernel.
Finora il progetto deve essere considerato come un esperimento iniziale. Nel repository è chiaramente indicato che KernelScript è in fase beta, la sintassi e l'API potrebbero cambiare senza mantenere la compatibilità all'indietro, e il suo utilizzo in produzione non è ancora consigliato.
Fonte: linux.org.ru
