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
