Aya-Bibliothek zum Erstellen von eBPF-Handlern in Rust eingeführt

Es wird die erste Version der Aya-Bibliothek vorgestellt, mit der Sie eBPF-Handler in der Rust-Sprache erstellen können, die im Linux-Kernel in einer speziellen virtuellen Maschine mit JIT ausgeführt werden. Im Gegensatz zu anderen eBPF-Entwicklungstools verwendet Aya nicht libbpf und den bcc-Compiler, sondern bietet stattdessen eine eigene in Rust geschriebene Implementierung an, die das libc-crate-Paket verwendet, um direkt auf Kernel-Systemaufrufe zuzugreifen. Für die Erstellung von Aya sind keine C-Sprachtools oder Kernel-Header-Dateien erforderlich. Der Bibliothekscode wird unter den MIT- und Apache 2.0-Lizenzen vertrieben.

Key Features:

  • Unterstützung für BTF (BPF Type Format), das Typinformationen im BPF-Pseudocode zur Typprüfung und Zuordnung zu vom aktuellen Kernel bereitgestellten Typen bereitstellt. Durch die Verwendung von BTF ist es möglich, universelle eBPF-Handler zu erstellen, die ohne Neukompilierung mit verschiedenen Versionen des Linux-Kernels verwendet werden können.
  • Unterstützung für „bpf-to-bpf“-Aufrufe, globale Variablen und Initialisierer, die es Ihnen ermöglicht, Programme für eBPF auf ähnliche Weise zu entwerfen wie normale Programme, die aya als Laufzeit verwenden, die Funktionen unter Berücksichtigung der Arbeit in eBPF neu definiert.
  • Unterstützung für verschiedene Kernel-Typen, einschließlich regulärer Arrays, Hashes-Maps, Stacks, Warteschlangen, Stack-Traces sowie Socket- und Performance-Tracking-Strukturen.
  • Möglichkeit, verschiedene Arten von eBTF-Programmen zu erstellen, einschließlich Programmen zum Filtern und Verwalten des Datenverkehrs, Cgroup-Handlern und verschiedenen Socket-Operationen sowie XDP-Programmen.
  • Unterstützung für Plattformen für die asynchrone Anforderungsverarbeitung im nicht blockierenden Modus tokio und async-std.
  • Schnelle Assemblierung, ohne Verbindung zur Kernel-Assembly und den Kernel-Header-Dateien.

Das Projekt gilt noch als experimentell – die API ist noch nicht stabilisiert und entwickelt sich weiter. Zudem wurden noch nicht alle geplanten Chancen realisiert. Bis Ende des Jahres gehen die Entwickler davon aus, die Funktionalität von Aya mit libbpf gleichzusetzen und im Januar 2022 die erste stabile Version zu erstellen. Es gibt auch Pläne, die Teile von Aya, die zum Schreiben von Rust-Code für den Linux-Kernel benötigt werden, mit den User-Space-Komponenten zu kombinieren, die zum Laden, Anhängen und Interagieren mit eBPF-Programmen verwendet werden.

Erinnern wir uns daran, dass eBPF ein in den Linux-Kernel integrierter Bytecode-Interpreter ist, mit dem Sie Netzwerkbetriebshandler erstellen, den Systembetrieb überwachen, Systemaufrufe abfangen, den Zugriff steuern, Ereignisse unter Beibehaltung des Timings verarbeiten, die Häufigkeit und Zeit von Vorgängen berechnen und ausführen können Nachverfolgung mit kprobes/uprobes /tracepoints. Dank der Verwendung der JIT-Kompilierung wird Bytecode im Handumdrehen in Maschinenanweisungen übersetzt und mit der Leistung von nativem Code ausgeführt. XDP bietet Tools zum Ausführen von BPF-Programmen auf Netzwerktreiberebene mit der Möglichkeit, direkt auf den DMA-Paketpuffer zuzugreifen, wodurch Sie Hochleistungsprozessoren für den Betrieb unter hoher Netzwerklast erstellen können.

Source: opennet.ru

Kommentar hinzufügen