Das Unternehmen Oracle Über die Arbeit an der Übertragung von DTrace-bezogenen Änderungen in den Upstream und die Pläne zur Implementierung der DTrace-Technologie für die dynamische Fehlersuche auf der vorhandenen Infrastruktur des Linux-Kernels, insbesondere unter Verwendung von Subsystemen wie eBPF. Ursprünglich war das Hauptproblem bei der Verwendung von DTrace unter Linux die Lizenzinkompatibilität, aber im Jahr 2018 hat Oracle von DTrace-Code unter GPLv2 geändert.
DTrace wird bereits als Teil des erweiterten Kernels für die Oracle Linux-Distribution angeboten, erfordert jedoch für die Verwendung in anderen Distributionen zusätzliche Kernel-Patches, was die Nutzung der genannten Technologie einschränkt. Zum Beispiel hat Oracle eine detaillierte Anleitung zur Installation und Verwendung von DTrace in Fedora Linux bereitgestellt. Für die Installation ist der Aufbau und die Anwendung eines mit neu kompilierten Linux-Kernels erforderlich. Um den Aufbau des Kernels mit Oracle- und Fedora-Patches zu automatisieren, wurde .
eBPF ist ein in den Linux-Kernel integrierter Bytecode-Interpreter, der es ermöglicht, Handler für Netzwerkoperationen zu erstellen, die Systemarbeiten zu überwachen, Systemaufrufe abzufangen, Zugriffe zu kontrollieren, Ereignisse mit Zeitstempeln zu verarbeiten (perf_event_open), die Frequenz und die Ausführungszeit von Operationen zu zählen und mit kprobes/uprobes/tracepoints zu tracen. Durch die Anwendung von JIT-Kompilierung wird der Bytecode zur Laufzeit in Maschineninstruktionen übersetzt und mit der Leistung von nativen Code ausgeführt. DTrace kann auf eBPF implementiert werden, ähnlich wie bestehende Tracing-Tools auf eBPF existieren.
Die DTrace-Technologie wurde für das Solaris-Betriebssystem entwickelt, um Aufgaben im Zusammenhang mit der dynamischen Tracing des Kernels und von Endanwendungen zu erfüllen, und gibt dem Benutzer die Möglichkeit, das Verhalten des Systems detailliert zu überwachen und Probleme in Echtzeit zu diagnostizieren. Bei der Fehlersuche hat DTrace keine Auswirkungen auf die Leistung der untersuchten Anwendungen, was eine Analyse laufender Systeme in Echtzeit ermöglicht. Zu den Stärken von DTrace zählt die hochentwickelte D-Sprache, die AWK ähnlich ist und bei der Erstellung von Tracing-Skripten deutlich einfacher ist als die angebotenen Mittel zur Erstellung von Handlern in eBPF mithilfe von Sprachen wie C, Python und Lua mit externen Bibliotheken.
Ingenieure von Oracle arbeiten auch an der Schaffung eines eBPF-Backends für GCC und haben bereits veröffentlicht zur Integration der Unterstützung von eBPF in GCC und die Aufnahme von Code zur Unterstützung von eBPF in GNU binutils. Ursprünglich basiert das Backend zur Unterstützung von eBPF auf Technologien von LLVM, aber Oracle ist daran interessiert, eine native Möglichkeit zur Generierung von Programmen für eBPF in GCC zu schaffen, die es ermöglicht, dasselbe Werkzeug sowohl für den Kernel-Build von Linux als auch für den Build von eBPF-Programmen zu verwenden.
Neben dem Backend zur Generierung von Bytecode umfassen die vorgeschlagenen Patches für GCC auch den Port von libgcc für eBPF und Werkzeuge zur Erstellung von ELF-Dateien, die die Ausführung von Code in einer eBPF-virtuellen Maschine mit den vom Kernel bereitgestellten Loadern ermöglichen. Der Code kann derzeit in C (nicht alle Sprachfunktionen sind verfügbar) in Bytecode übersetzt werden, aber in Zukunft wird mit einer Erweiterung der verfügbaren Funktionen der Sprache C, der Unterstützung anderer Sprachen, der Erstellung eines Simulators und der Unterstützung von GCC für das Debugging von eBPF-Programmen ohne Kernel-Ladevorgang gerechnet.
Quelle: opennet.ru
