Die Internet Engineering Task Force (IETF), die für die Entwicklung von Internetprotokollen und -architekturen verantwortlich ist, hat den RFC für die BPF-Befehlssatzarchitektur fertiggestellt und die zugehörige Spezifikation unter der Kennung RFC 9669 veröffentlicht. Der RFC hat den Status erhalten ein „Vorgeschlagener Standard“, wonach mit der Arbeit begonnen wird, dem RFC den Status eines Standardentwurfs zu verleihen, was eigentlich eine vollständige Stabilisierung und Berücksichtigung aller abgegebenen Kommentare bedeutet.
Die veröffentlichte Spezifikation beschreibt einen Satz von BPF-Bytecode-Befehlen und eine Low-Level-VM, die im Linux-Kernel-Subsystem eBPF verwendet wird, um externe Handler auszuführen, die das Systemverhalten dynamisch ändern können, ohne dass eine Kernel-Code-Modifikation erforderlich ist. Im Wesentlichen implementiert eBPF einen einfachen virtuellen Prozessor mit eigenem Registersatz, RISC-ähnlichen Befehlen, Stack und Programmzähler. BPF-Programme werden typischerweise in einer Teilmenge der Programmiersprache C geschrieben und anschließend in ausführbaren Bytecode kompiliert. virtuelle MaschineDie virtuelle Maschine kann BPF-Programme entweder mittels Interpretation oder mittels Just-in-Time-Kompilierung (JIT) ausführen, um den Bytecode zur Laufzeit in Maschinenbefehle zu übersetzen.
Es wird erwartet, dass die Standardisierung der BPF-Befehlssatzarchitektur die Entwicklung von Drittanbieter-Implementierungen fördern wird, die mit der eBPF-VM kompatibel sind und für den Linux-Kernel geschriebene BPF-Programme ausführen können. Die Entwicklung solcher Implementierungen ist bereits im Gange. virtuelle Maschinen Einige Hersteller von Netzwerkadaptern entwickeln Hardwarebeschleunigungswerkzeuge für BPF-Netzwerkpaketverarbeiter. Ziel ist es, die Fähigkeiten des XDP-Subsystems (eXpress Data Path) zu erweitern, um BPF-Programme nicht nur auf der Ebene des Netzwerktreibers, sondern auch auf dem Netzwerkadapter auszuführen.
Netronome hat beispielsweise den Netronome Agilio CX SmartNIC-Adapter um BPF-Unterstützung erweitert und eine Sammlung von Beispielen universeller BPF-Programme bereitgestellt, die nicht nur über die CPU im Kernel mit jedem XDP-kompatiblen Treiber, sondern auch auf der Netzwerkkarte ausgeführt werden können Seite, die es Ihnen ermöglicht, Entscheidungen über das Verwerfen, Ändern oder Umleiten von Paketen zu treffen, ohne CPU-Ressourcen zu verschwenden. Separat wird die XRP-Technologie (eXpress Resubmission Path) entwickelt, die es ermöglicht, mithilfe von BPF einige Vorgänge mit NVMe-Laufwerken, wie z. B. die Arbeit mit Indizes und Datenaggregation, auf die NVMe-Treiberebene oder auf ein externes Gerät zu verlagern.
Es wird darauf hingewiesen, dass eine breitere Einführung solcher Funktionen bisher durch Risiken im Zusammenhang mit Kompatibilitätsproblemen und der Notwendigkeit, den Status von eBPF im Kernel zu überwachen, behindert wird. Aufgrund dieser Risiken haben einige Hersteller die Integration der BPF-Hardwarebeschleunigung in ihre Geräte verschoben, bis ein Standard vorhanden ist.
Source: opennet.ru
