Der IETF (Internet Engineering Task Force), der sich mit der Entwicklung von Internet-Protokollen und -Architekturen beschĂ€ftigt, hat die RFC fĂŒr die Architektur der BPF-BefehlssĂ€tze abgeschlossen und die zugehörige Spezifikation unter der ID RFC 9669 veröffentlicht. Die RFC erhielt den Status "Vorgeschlagener Standard", nach dem die Arbeit an der Erlangung des Status eines Entwurfsstandards (Draft Standard) beginnen wird, was de facto die vollstĂ€ndige Stabilisierung und BerĂŒcksichtigung aller geĂ€uĂerten Anmerkungen bedeutet.
Die veröffentlichte Spezifikation beschreibt eine Sammlung von BPF-Bytecode-Anweisungen und einer Low-Level- virtuellen Maschine, die im Linux-Kernel-eBPF-Subsystem verwendet wird, um externe Handler auszufĂŒhren, die in der Lage sind, das Systemverhalten zur Laufzeit zu Ă€ndern, ohne den Kernel-Code zu Ă€ndern. Im Wesentlichen implementiert eBPF einen einfachen virtuellen Prozessor mit einem eigenen Satz von Registern, RISC-Ă€hnlichen Anweisungen, einem Stack und einem BefehlszĂ€hler. BPF-Programme werden in der Regel in einem Subset der Programmiersprache C erstellt und dann in Bytecode kompiliert, der zur AusfĂŒhrung geeignet ist in virtuellen Maschine. Die virtuelle Maschine kann BPF-Programme sowohl durch Interpretation als auch durch die Anwendung von JIT-Kompilierung ausfĂŒhren, um Bytecode zur Laufzeit in Maschinenanweisungen zu ĂŒbersetzen.
Es wird davon ausgegangen, dass die Standardisierung der BPF-Befehlssatzarchitektur einen Anreiz fĂŒr die Schaffung von Drittanbieterimplementierungen schaffen wird, die mit der eBPF-virtuellen Maschine kompatibel sind und BPF-Programme ausfĂŒhren können, die fĂŒr den Linux-Kernel geschrieben wurden. An der Entwicklung solcher virtuelle Maschinen arbeiten einige Hersteller von Netzwerkadaptern, die Ressourcen zur Hardwarebeschleunigung der AusfĂŒhrung von BPF-Handlern fĂŒr Netzwerkpakete entwickeln. Die Idee ist, die Möglichkeiten des XDP (eXpress Data Path)-Subsystems fĂŒr die AusfĂŒhrung von BPF-Programmen nicht nur auf der Ebene des Netzwerktreibers, sondern auch auf der Netzwerkkarte zu erweitern.
Zum Beispiel hat das Unternehmen Netronome die UnterstĂŒtzung von BPF im Netronome Agilio CX SmartNIC hinzugefĂŒgt und eine Sammlung von Beispielen fĂŒr universelle BPF-Programme bereitgestellt, die nicht nur mit der CPU in einem Kernel ĂŒber jeden XDP-kompatiblen Treiber ausgefĂŒhrt werden können, sondern auch auf der Netzwerkkarte selbst. Dies ermöglicht es, Entscheidungen ĂŒber das Verwerfen, Ăndern oder Weiterleiten von Paketen zu treffen, ohne Ressourcen der CPU zu verschwenden. Zudem wird die XRP-Technologie (eXpress Resubmission Path) entwickelt, die es ermöglicht, einige NVMe-Operationen, wie das Arbeiten mit Indizes und das Aggregieren von Daten, auf die Ebene des NVMe-Treibers oder auf ein externes GerĂ€t auszulagern.
Es wird festgestellt, dass die breitere EinfĂŒhrung solcher Möglichkeiten nach wie vor durch Risiken im Zusammenhang mit InkompatibilitĂ€t und der Notwendigkeit, den Zustand von eBPF im Kernel zu ĂŒberwachen, behindert wird. Aufgrund dieser Risiken haben einige Hersteller die Integration von BPF-Hardwarebeschleunigung in ihre GerĂ€te bis zur Festlegung eines Standards verschoben.
Quelle: opennet.ru
