Vorstellung KernelScript â eine experimentelle Programmiersprache zur Entwicklung von eBPF-Programmen, benutzerdefinierten Bootloadern und Linux-Kernel-Erweiterungen aus einem einzigen Codebasis. Das Projekt entwickelt Multikernel-Technologien, ein Unternehmen, das die Split-Kernel-/Multikernel-Architektur fĂŒr Linux fördert. Ăber KernelScript berichtete der GrĂŒnder des Unternehmens, Cong Wang, auf dem Open Source Summit der Linux Foundation; der Code des Projekts ist auf GitHub unter der Lizenz veröffentlicht Apache 2.0.
eBPF (Extended Berkeley Packet Filter) â ist eine Technologie, die es ermöglicht, kleine Programme direkt im Linux-Kernel auszufĂŒhren, ohne dessen Code zu berĂŒhren und die StabilitĂ€t des Systems zu gefĂ€hrden. eBPF hilft, zahlreiche Aufgaben zu bewĂ€ltigen, von der LeistungsĂŒberwachung bis hin zur Sicherheits- und Netzwerkoptimierung. Zum Beispiel kann man mit eBPF Systemaufrufe, Netzwerkverkehr und andere Ereignisse in Echtzeit verfolgen. 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 Verwendung der Kombination aus C + libbpf, und dabei nicht nur auf das Tracing wie bpftrace beschrĂ€nkt zu sein. Die Entwickler beschreiben die Sprache als typensicheren DSL, die vereint eBPF, Benutzerraums und Kernelspace-Entwicklung: Aus einer einzigen Quelldatei sollte der Compiler Code fĂŒr eBPF-Programme, den Benutzerraum und die Integration mit Kernelmodulen ĂŒber kfunc generieren.
Die angegebenen Möglichkeiten von KernelScript:
Kompilierung fĂŒr verschiedene Ziele aus einer einzigen Datei â Funktionen mit Attributen wie @xdp, @tc, @helper und @kfunc werden automatisch den entsprechenden Teilen zugeordnet: XDP/TC-Programmen, Hilfsfunktionen, Kernel-Funktionen oder normalem Benutzerraums-Code.
Automatisierung von Tail Calls â anstelle der manuellen Konfiguration von Programmen und Aufrufen von bpf_tail_call() wird dem Entwickler vorgeschlagen, einen normalen Funktionsaufruf zu schreiben, wĂ€hrend der Compiler die Generierung von niedrigstufigem eBPF-Code ĂŒbernimmt.
Vereinfachte Arbeit mit dynptr und eBPF-Karten â die Sprache verbirgt einen Teil der manuellen Arbeit mit bpf_ringbuf_reserve_dynptr, bpf_dynptr_write und Ă€hnlichen APIs. eBPF-Karten können als globale Variablen verwendet werden, die verschiedenen Programmen zur VerfĂŒgung stehen.
Kontrolle des Lebenszyklus von Programmen â eBPF-Programme werden als typisierte Werte dargestellt, was der Absicht der Autoren nach wĂ€hrend der Kompilierung Fehler verhindern soll, wie der Versuch, attach() vor successful load() auszufĂŒhren.
UnterstĂŒtzung von kfunc â KernelScript ermöglicht die Deklaration von Funktionen mit dem Attribut @kfunc, die im Kernel-Space ausgefĂŒhrt werden und aus eBPF-Programmen aufgerufen werden können; fĂŒr sie wird eine automatische Generierung von Kernelmodulen und BTF-Registrierungen versprochen.
UnterstĂŒtzung fĂŒr grundlegende Typen von eBPF-Programmen â Im README finden sich Beispiele fĂŒr XDP, TC, Probe-Programme und perf_event, einschlieĂlich der Arbeit mit Hardware-LeistungszĂ€hlern.
Die Autoren betonen ausdrĂŒcklich, dass KernelScript keinen Ersatz fĂŒr den Linux-Kernel oder eine neue eBPF-Laufzeit darstellt. Es handelt sich eher um einen Compiler und eine höhere Programmiersprache, die die gewohnten low-level Komponenten generieren soll: eBPF-Code, Userspace-Loader, Makefile und, falls erforderlich, Kernelmodule.
Das Projekt sollte derzeit als frĂŒhes Experiment betrachtet werden. Im Repository wird ausdrĂŒcklich darauf hingewiesen, dass KernelScript sich in der Phase beta, Syntax und API könnten sich ohne Wahrung der AbwĂ€rtskompatibilitĂ€t Ă€ndern, und die Nutzung in der Produktion wird derzeit nicht empfohlen.
Quelle: linux.org.ru
