PrĂ€sentiert KernelScript â eine experimentelle Programmiersprache zur Entwicklung von eBPF-Programmen, benutzerdefinierten Bootloadern und Kernel-Erweiterungen aus einer einzigen Codebasis. Das Projekt wird von Multikernel Technologies, einem Unternehmen, das die Architektur des Split-Kernels / Multikernels fĂŒr Linux fördert. Der GrĂŒnder des Unternehmens, Cong Wang, sprach ĂŒber KernelScript auf dem Linux Foundation Open Source Summit; der Code des Projekts ist auf GitHub unter der Lizenz Apache 2.0.
eBPF (Extended Berkeley Packet Filter) â ist eine Technologie, die es ermöglicht, kleine Programme direkt im Linux-Kernel auszufĂŒhren, ohne den Code zu verĂ€ndern oder die StabilitĂ€t des Systems zu gefĂ€hrden. eBPF hilft bei der Lösung vieler Aufgaben, von der LeistungsĂŒberwachung bis hin zu Sicherheitsfragen und Netzwerkoptimierung. Zum Beispiel kann eBPF verwendet werden, um Systemaufrufe, Netzwerkverkehr und andere Ereignisse in Echtzeit zu ĂŒberwachen. Dies ermöglicht es, EngpĂ€sse in der Leistung zu identifizieren und das System zu optimieren (Habr).
Die Idee von KernelScript ist es, die Entwicklung von eBPF weniger schmerzhaft zu gestalten als die Kombination aus C + libbpf, und dies nicht nur auf das Tracing wie bpftrace zu beschrĂ€nken. Die Entwickler beschreiben die Sprache als typensicheren DSL, der eBPF, Benutzerraum und kernelspace-Entwicklung: Aus einer einzigen Quell-Datei sollte der Compiler Code fĂŒr eBPF-Programme, den Benutzerraum und die Integration mit Kernelmodulen ĂŒber kfunc generieren.
Die angegebenen Funktionen von KernelScript:
Kompilierung fĂŒr verschiedene Ziele aus einer Datei â Funktionen mit Attributen wie @xdp, @tc, @helper und @kfunc werden automatisch dem entsprechenden Teil zugeordnet: XDP/TC-Programm, Hilfsfunktion, Kernel-Funktion oder normalem Benutzerraum-Code.
Automatisierung von Tail Calls â Anstatt manuell das Program Array und die Aufrufe von bpf_tail_call() einzurichten, wird den Entwicklern vorgeschlagen, regulĂ€re Funktionsaufrufe zu schreiben, wĂ€hrend die Generierung des low-level eBPF-Codes dem Compiler ĂŒberlassen wird.
Vereinfachte Arbeit mit dynptr und eBPF Maps â Die Sprache verbirgt einen Teil der manuellen Arbeit mit bpf_ringbuf_reserve_dynptr, bpf_dynptr_write und Ă€hnlichen APIs. eBPF-Maps können wie globale Variablen verwendet werden, die verschiedenen Programmen zur VerfĂŒgung stehen.
Lebenszyklus-Kontrolle von Programmen â eBPF-Programme werden als typisierte Werte dargestellt, was gemÀà den Entwicklern ermöglicht, bereits wĂ€hrend der Kompilierung Fehler wie den Versuch, attach() vor erfolgreich geladenem Code auszufĂŒhren, zu vermeiden.
UnterstĂŒtzung fĂŒr kfunc â KernelScript ermöglicht es, Funktionen mit dem Attribut @kfunc zu deklarieren, die im Kernel-Space ausgefĂŒhrt werden und aus eBPF-Programmen aufgerufen werden können; fĂŒr diese wird die automatische Erstellung von Kernel-Modulen und BTF-Registrierungen versprochen.
UnterstĂŒtzung der grundlegenden eBPF-Programmentypen â Im README finden sich Beispiele fĂŒr XDP, TC, Probe-Programme und perf_event, einschlieĂlich der Arbeit mit hardware-basierten LeistungsmesszĂ€hlern.
Die Autoren betonen ausdrĂŒcklich, dass KernelScript keinen Ersatz fĂŒr den Linux-Kernel oder eine neue eBPF-Laufzeit darstellt. Es ist vielmehr ein Compiler und eine Hochsprache, die traditionelle Low-Level-Komponenten generieren soll: eBPF-Code, Userspace-Loader, Makefile und, falls nötig, Kernel-Module.
Derzeit sollte das Projekt als frĂŒhes Experiment betrachtet werden. Im Repository wird deutlich darauf hingewiesen, dass sich KernelScript in einem Zustand Beta, befindet, in dem Syntax und API ohne RĂŒckwĂ€rtskompatibilitĂ€t geĂ€ndert werden können, und die Nutzung in der Produktion wird derzeit nicht empfohlen.
Quelle: linux.org.ru
