Startseite topics EBPF Was ist eBPF?
IBM Instana Observability kennenlernen
Abstraktes Design, das die Betriebssystemaktivität darstellt
Was ist eBPF?

Der erweiterte Berkeley-Paketfilter (eBPF) ist eine Programmiertechnologie, mit der Entwickler effiziente, sichere und nicht-intrusive Programme schreiben können, die direkt im Linux-Betriebssystem (OS)-Kernelraum ausgeführt werden.

Da sie Sandbox-Programme in privilegierten Kontexten wie einem Betriebssystemkern ausführen können, können eBPFs die Funktionen vorhandener Software zur Laufzeit erweitern, ohne den Kernel-Quellcode zu verändern, Kernel-Module zu laden oder die gesamte Programmausführung zu unterbrechen. eBPF-Technologien stellen eine Weiterentwicklung des ursprünglichen Berkeley Paketfilters (BPF) dar, der eine einfache Möglichkeit zur Auswahl und Analyse von Netzwerkpaketen in einem User-Space-Programm bot. Über die Paketfilterung hinaus fehlte den BPF-Programmen jedoch die Flexibilität, um komplexere Aufgaben innerhalb des Kernels zu bewältigen.

Die Linux-Gemeinschaft erkannte den Bedarf an einer vielseitigeren Technologie und entwickelte eBPF, der auf den Backend-Funktionen von BPF aufbaute, aber die Programmierbarkeit im Kernel erweiterte. Die erweiterte Funktionalität der eBPF-Programme ermöglicht es Entwicklern, erweiterte Paketfilterungsprozesse zu implementieren, High-End-Leistungsanalysen durchzuführen und Firewalls und Debugging-Protokolle sowohl in Rechenzentren vor Ort als auch in cloudnativen Umgebungen zu installieren.

Fortschritte in der eBPF-Technologie haben Softwareentwickler dazu veranlasst, ihre Anwendungen auf alle Betriebssysteme auszuweiten, so dass auch Plattformen, die nicht auf Linux basieren, die Vorteile von hochentwickelten Verfolgungs-, Netzwerk- und Überwachungsfunktionen von eBPF nutzen können.1 Tatsächlich hat die eBPF Foundation – eine Erweiterung der Linux Foundation, zu deren Mitgliedern unter anderem Google, Meta, Netflix, Microsoft, Intel und Isovalent gehören – stark in die Erweiterung der Betriebssystemkompatibilität für eBPF-Programme investiert, in der Hoffnung, den Nutzen der eBPF-Programmierung zu steigern.2

Instana-Demo anfordern

Holen Sie sich eine Demo von IBM Instana Observability und erfahren Sie, wie Sie in wenigen Minuten eine umfassende Observability und Überwachung erreichen können.

Ähnliche Inhalte

IBM Newsletter abonnieren

Komponenten von eBPF-Programmen

Die Hauptkomponenten eines eBPF-Programms sind:

eBPF-Bytecode

eBPF-Programme werden zunächst in einer eingeschränkten C-Teilmenge geschrieben und dann mit Tools wie LLVM in eBPF-Bytecode kompiliert, der als Back-End-Architektur des eBPF für Front-End-Programmiersprachen wie Clang dient. Der Bytecode ist im Wesentlichen ein eingeschränkter Satz von Anweisungen, die der eBPF-Befehlssatzarchitektur entsprechen und Laufzeitfehler verhindern.

eBPF-Interpreter/JIT-Compiler

Die Kernel-Technologie von Linux ist in der Lage, eBPF-Bytecode in ausführbare Aktionen zu übersetzen, aber Just-in-Time-Compiler (JIT) bieten eine noch bessere Leistung. JIT-Compiler können Bytecode im laufenden Betrieb in nativen Maschinencode für bestimmte Hardwareplattformen übersetzen. 

Userspace-Loader

Userspace-Loader sind Programme im Userspace, die den eBPF-Bytecode in den Kernel laden, ihn an die entsprechenden Hooks anhängen und alle zugehörigen eBPF-Karten verwalten. Beispiele für User-Space-Loader sind Tools wie BPF Compiler Collection (BCC) und bpftrace.   

eBPF-Karten

eBPF-Karten sind Datenstrukturen mit Schlüssel-Wert-Paaren und Lese-/Schreibzugriff, die gemeinsamen Speicherplatz bereitstellen und die Interaktion zwischen eBPF-Kernelprogrammen und User-Space-Anwendungen erleichtern. eBPF-Karten werden mithilfe von Systemaufrufen erstellt und verwaltet und können auch verwendet werden, um den Status zwischen verschiedenen Iterationen der eBPF-Programme aufrechtzuerhalten.

eBPF-Prüfer

Der Prüfer – eine entscheidende Komponente von eBPF-Systemen – prüft den Bytecode, bevor er in den Kernel geladen wird, um sicherzustellen, dass das Programm keine schädlichen Vorgänge wie Endlosschleifen, illegale Anweisungen oder unzulässige Speicherzugriffe enthält. Außerdem wird sichergestellt, dass alle Datenpfade des Programms erfolgreich beendet werden.

eBPF-Hooks

Hooks sind Punkte im Kernel-Code, an die eBPF-Programme angehängt werden können. Wenn der Kernel einen Hook erreicht, wird das angehängte eBPF-Programm ausgeführt.

Verschiedene Arten von Hooks wie Tracepoints, Kprobes und Netzwerkpaket-Empfangswarteschlangen geben eBPF-Programmen breiten Datenzugriff und ermöglichen ihnen die Durchführung verschiedener Vorgänge. Tracepoints ermöglichen es Programmen beispielsweise, Daten über den Kernel oder andere Prozesse zu untersuchen und zu sammeln, während Traffic-Control-Hooks verwendet werden können, um Netzwerkpakete zu untersuchen und zu verändern.

Hilfsfunktionen

Da eBPFs keine beliebigen Funktionen erzeugen können und die Kompatibilität mit jeder möglichen Kernelversion aufrechterhalten müssen, sind die grundlegenden eBPF-Befehlssätze manchmal nicht differenziert genug, um fortgeschrittene Vorgänge durchzuführen. Hilfsfunktionen schließen diese Lücke.

Hilfsfunktionen – Sätze vordefinierter, API-basierterKernelfunktionen, die eBPFs vom System aus aufrufen können – bieten eBPF-Programmen die Möglichkeit, komplexere Vorgänge (wie das Abrufen der aktuellen Uhrzeit und des aktuellen Datums oder das Generieren von Zufallszahlen) auszuführen, die nicht direkt vom Befehlssatz unterstützt werden.  

Wie funktioniert eBPF?

Im Allgemeinen arbeiten eBPFs als Virtual Machines (VMs) innerhalb des Linux-Kernels, die mit einer Low-Level-Befehlssatzarchitektur arbeiten und eBPF-Bytecode ausführen. Der komplexe Prozess der Ausführung eines eBPF-Programms folgt jedoch in der Regel bestimmten Hauptschritten.

Entwickler schreiben zuerst das eBPF-Programm und kompilieren den Bytecode. Der Zweck des Programms bestimmt den geeigneten Codetyp. Wenn ein Team beispielsweise die CPU-Nutzung überwachen möchte, schreibt es Code, der Funktionen zum Erfassen von Nutzungsmetriken enthält.

Sobald der eBPF-Compiler den High-Level-C-Code in Low-Level-Bytecode konvertiert, generiert ein User-Space-Loader einen BPF-Systemaufruf, um das Programm in den Kernel zu laden. Der Loader ist auch dafür verantwortlich, Fehler zu beheben und alle eBPF-Karten einzurichten, die das Programm benötigt.

Wenn der Bytecode und die Karten des Programms vorhanden sind, führt der eBPF einen Prüfungsprozess durch, um sicherzustellen, dass das Programm sicher im Kernel ausgeführt werden kann. Wenn es als unsicher eingestuft wird, schlägt der Systemaufruf zum Laden des Programms fehl und das Loader-Programm erhält eine Fehlermeldung. Wenn das Programm die Prüfung besteht, darf es ausgeführt werden.

Mithilfe eines Interpreters oder eines JIT-Compilers übersetzt das eBPF den Bytecode in umsetzbaren Maschinencode. Bei eBPF handelt es sich jedoch um eine ereignisgesteuerte Technologie, die nur auf bestimmte Hook-Points oder Ereignisse innerhalb des Kernels reagiert (z. B. Systemanrufe, Netzwerkereignisse, Prozessinitiierung, CPU-Leerlauf usw.). Wenn ein Ereignis auftritt, führt eBPF das entsprechende Bytecode-Programm aus, sodass Entwickler verschiedene Komponenten des Systems überprüfen und manipulieren können.

Sobald das eBPF-Programm ausgeführt wird, können Entwickler vom Benutzerbereich aus mithilfe von eBPF-Karten damit interagieren. Beispielsweise könnte die Anwendung regelmäßig eine Karte überprüfen, um Daten vom eBPF-Programm zu sammeln, oder sie könnte eine Karte aktualisieren, um das Verhalten des Programms zu ändern.

Das Entladen des Programms ist der letzte Schritt der meisten eBPF-Ausführungsprozesse. Wenn der eBPF seine Arbeit erledigt hat, kann der Loader den BPF-Systemaufruf erneut verwenden, um ihn aus dem Kernel zu entladen. An diesem Punkt stoppt der eBPF und gibt die zugehörigen Ressourcen frei. Der Entladevorgang kann auch das Durchlaufen aller eBPF-Karten umfassen, die das Team nicht mehr benötigt, um nützliche einzelne Elemente freizugeben, und das anschließende Löschen der Karte selbst (mithilfe des Systemaufrufs „delete“).

eBPF-Anwendungsfälle und Vorteile

eBPF-Technologien sind bereits zu einem Eckpfeiler moderner Linux-Systeme geworden. Sie ermöglichen eine differenzierte Kontrolle über den Linux-Kernel und ermöglichen es Unternehmen, innovativere Lösungen innerhalb des Linux-Ökosystems zu entwickeln.

eBPF hat Fortschritte ermöglicht in: 

Netzbetrieb

eBPF ermöglicht es Entwicklern, schnellere, maßgeschneiderte Paketverarbeitungsfunktionen, Lastausgleichsprozesse, Skripte für die Anwendungsprofilerstellung und Netzwerküberwachungsverfahren zu installieren. Open-Source-Plattformen wie Cilium nutzen eBPF, um sichere, skalierbare Netzwerke für Kubernetes Cluster und Workloads sowie andere containerisierte Microservices bereitzustellen. Durch die Nutzung der Paketweiterleitungslogik auf Kernel-Ebene können eBPFs außerdem Routing-Prozesse rationalisieren und eine schnellere Reaktion des gesamten Netzwerks ermöglichen.

Beobachtbarkeit

Mit eBPFs können Entwickler den Kernel und User-Space-Anwendungen instrumentieren, um detaillierte Leistungsdaten und Metriken zu sammeln, ohne die Leistung des Systems wesentlich zu beeinträchtigen. Diese Funktionen helfen Unternehmen, an der Spitze zu bleiben, indem sie eine Überwachung und Beobachtbarkeit in Echtzeit ermöglichen.

Sicherheit

eBPFs können Systemanrufe, Netzwerkdatenverkehr und Systemverhalten überwachen, um potenzielle Sicherheitsbedrohungen in Echtzeit zu erkennen und darauf zu reagieren. IT-Lösungen wie Falco nutzen beispielsweise eBPF, um Laufzeit-Sicherheitsüberprüfungen und Vorfallreaktionen zu implementieren und so die Gesamtsicherheit des Systems zu verbessern.

Leistungsoptimierung

Durch die Verfolgung von Systemaufrufen, die Überwachung der CPU-Auslastung und die Nachverfolgung der Ressourcennutzung (z. B. Festplatten-E/A) hilft eBPF den Entwicklern, Engpässe in der Systemleistung leichter zu erkennen und Optimierungsmöglichkeiten zu identifizieren.

Weiterführende Lösungen
IBM Instana Observability

IBM Instana demokratisiert die Observability, indem es eine Lösung bereitstellt, mit der jeder in den Bereichen DevOps, SRE, Plattform, ITOps und Entwicklung die gewünschten Daten mit dem benötigten Kontext abrufen kann. Die Plattform wurde speziell für die Cloud entwickelt und ist technologieunabhängig. Sie liefert automatisch und kontinuierlich Daten mit hoher Genauigkeit (mit einer Granularität von 1 Sekunde und End-to-End-Traces) sowie den Kontext logischer und physischer Abhängigkeiten in den Bereichen Mobile, Web, Anwendungen und Infrastruktur.

Instana erkunden Instana-Demo anfordern

IBM Turbonomic

Mit der IBM Turbonomic-Hybrid-Cloud-Kostenoptimierungsplattform können Sie kritische Aktionen kontinuierlich in Echtzeit automatisieren, um Ihren Anwendungen auf jeder Ebene des Stacks proaktiv die effizienteste Nutzung von Rechen-, Speicher- und Netzwerkressourcen zu ermöglichen. 

Mehr über Turbonomic Testen Sie Turbonomic kostenlos
Machen Sie den nächsten Schritt

IBM Instana bietet Echtzeit-Observability, die wirklich jeder nutzen kann. Es sorgt für eine kurze Time-to-Value und stellt gleichzeitig sicher, dass Ihre Observability-Strategie mit der dynamischen Komplexität aktueller und zukünftiger Umgebungen mithalten kann. Von Mobilgeräten bis hin zu Mainframes unterstützt Instana über 250 Technologien und es kommen laufend weitere hinzu. 

IBM Instana kennenlernen Buchen Sie eine Live-Demo
Fußnoten

Foundation Proposes Advancing eBPF Adoption Across Multiple OSes(Link befindet sich außerhalb von ibm.com)“ DevOps.com, 21. August 2021

Latest eBPF Advances Are Harbingers of Major Changes to IT (Link befindet sich außerhalb von ibm.com), DevOps.com, 13. September 2023