Der IETF (Internet Engineering Task Force), der sich mit der Entwicklung von Protokollen und der Architektur des Internets beschĂ€ftigt, hat das RFC zur Architektur des BPF-Befehlsatzes abgeschlossen und die zugehörige Spezifikation unter der Kennung RFC 9669 veröffentlicht. Das RFC erhielt den Status eines âVorgeschlagenen Standardsâ, wonach die Arbeit am Status des Entwurfsstandards (Draft Standard) beginnen wird, was im Wesentlichen 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 Niedrig-Level-virtuellen Maschine, die im eBPF-Kernel-Subsystem von Linux verwendet wird, um externe Handler auszufĂŒhren, die das Verhalten des Systems in Echtzeit Ă€ndern können, ohne den Kernel-Code anpassen zu mĂŒssen. Im Wesentlichen implementiert eBPF eine einfache virtuelle CPU mit ihrem eigenen Satz von Registern, RISC-Ă€hnlichen Anweisungen, einem Stack und einem BefehlzĂ€hlwerk. BPF-Programme werden in der Regel in einem TeilmenĂŒ der Programmiersprache C erstellt und dann in Bytecode kompiliert, der ausfĂŒhrbar ist in virtuellen Maschine. Eine virtuelle Maschine kann BPF-Programme sowohl durch Interpretation als auch durch die Anwendung von JIT-Compilation zur Ăbersetzung von Bytecode in Maschinencode zur Laufzeit ausfĂŒhren.
Die Standardisierung der BPF-Befehlssatzarchitektur wird als Anreiz fĂŒr die Erstellung von Drittanbieterimplementierungen angesehen, die mit der eBPF-Virtual-Machine kompatibel sind und BPF-Programme ausfĂŒhren können, die fĂŒr den Linux-Kernel geschrieben wurden. An der Entwicklung solcher virtuellen Maschinen arbeiten einige Hersteller von Netzwerkkarten, die Werkzeuge zur Hardwarebeschleunigung der AusfĂŒhrung von BPF-Netzwerkpaketbearbeitern entwickeln. Ziel ist es, die Möglichkeiten des XDP (eXpress Data Path)-Subsystems zu erweitern, um BPF-Programme nicht nur auf der Ebene des Netzwerktreibers, sondern auch auf der Seite der Netzwerkkarte auszufĂŒhren.
Zum Beispiel hat das Unternehmen Netronome die UnterstĂŒtzung fĂŒr BPF in den Netronome Agilio CX SmartNIC-Adapter integriert und eine Sammlung von Beispielen fĂŒr universelle BPF-Programme bereitgestellt, die nicht nur mit CPU im Kernel unter Verwendung eines beliebigen XDP-kompatiblen Treibers ausgefĂŒhrt werden können, sondern auch auf der Netzwerk-Karte selbst. Dadurch werden Entscheidungen ĂŒber das Verwerfen, Ăndern oder Weiterleiten von Paketen getroffen, ohne CPU-Ressourcen zu beanspruchen. Zudem wird die Technologie XRP (eXpress Resubmission Path) entwickelt, die es ermöglicht, BPF fĂŒr einige NVMe-Speicheroperationen, wie etwa das Arbeiten mit Indizes und das Aggregieren von Daten, auf die Ebene des NVMe-Treibers oder auf ein externes GerĂ€t auszulagern.
Es wird angemerkt, dass die breitere EinfĂŒhrung solcher Funktionen bisher durch Risiken, die mit der Aufrechterhaltung der KompatibilitĂ€t und der Notwendigkeit zur Ăberwachung des Zustands von eBPF im Kernel verbunden sind, behindert wurde. Aufgrund dieser Risiken haben einige Hersteller die Implementierung von Hardwarebeschleunigung fĂŒr BPF in ihre GerĂ€te bis zur Etablierung eines Standards verschoben.
Quelle: opennet.ru
