Die erste Ausgabe der Aya-Bibliothek wurde vorgestellt, die es ermöglicht, eBPF-Handler in Rust zu erstellen, die innerhalb des Linux-Kernels in einer speziellen virtuellen Maschine mit JIT ausgeführt werden. Im Gegensatz zu anderen Werkzeugen zur Entwicklung von eBPF-Programmen verwendet Aya nicht libbpf und den Compiler bcc, sondern bietet eine eigene in Rust geschriebene Implementierung an, die das crate-Paket libc für den direkten Zugriff auf die Systemaufrufe des Kernels verwendet. Für die Erstellung von Aya sind keine C-Entwicklungswerkzeuge und Kernel-Header-Dateien erforderlich. Der Code der Bibliothek wird unter den Lizenzen MIT und Apache 2.0 verbreitet.
Hauptfunktionen:
- Unterstützung des BTF-Formats (BPF Type Format), das Informationen über Typen im Pseudocode BPF bereitstellt, um Typüberprüfungen und -zuordnungen mit den Typen, die der aktuelle Kernel bereitstellt, durchzuführen. Die Anwendung von BTF ermöglicht die Erstellung universeller eBPF-Handler, die ohne Neukompilierung mit verschiedenen Versionen des Linux-Kernels verwendet werden können.
- Unterstützung von "bpf-to-bpf"-Aufrufen, globalen Variablen und Initialisierern, was es ermöglicht, Programme für eBPF analog zu normalen Programmen zu gestalten, die aya als Runtime verwenden und Funktionen unter Berücksichtigung der eBPF-Arbeit überschreiben.
- Unterstützung verschiedener Kerneltypen, einschließlich gewöhnlicher Arrays, Hashes (Hash-Map), Stacks, Queues, Stack-Trace sowie Strukturen für Sockets und zur Leistungsüberwachung.
- Möglichkeit zur Erstellung verschiedener Typen von eBTF-Programmen, einschließlich Programme zur Filterung und Kontrolle von Verkehr, Handler für cgroup und verschiedene Operationen mit Sockets, XDP-Programme.
- Unterstützung von Plattformen für asynchrone Anfrageverarbeitung im Non-Blocking-Modus tokio und async-std.
- Schnelle Erstellung, ohne Bindung an den Kernel-Bau und die Kernel-Header-Dateien.
Das Projekt wird derzeit als experimentell betrachtet – die API ist noch nicht stabilisiert und entwickelt sich weiter. Außerdem sind noch nicht alle geplanten Funktionen implementiert. Bis zum Ende des Jahres streben die Entwickler an, die Funktionalität von Aya mit libbpf gleichzuziehen und im Januar 2022 die erste stabile Version zu erstellen. Es ist auch geplant, die Teile von Aya zu kombinieren, die für das Schreiben von Code in Rust für den Linux-Kernel notwendig sind, mit den Komponenten, die im Benutzerspeicher arbeiten und zum Laden, Anhängen und Interagieren mit eBPF-Programmen verwendet werden.
Erinnern wir uns daran, dass eBPF einen in den Linux-Kernel integrierten Bytecode-Interpreter darstellt, der es ermöglicht, Netzwerkoperationen zu verarbeiten, die Systemleistung zu überwachen, Systemaufrufe abzufangen, den Zugriff zu kontrollieren, Ereignisse mit Zeitstempel zu verarbeiten, die Frequenz und die Ausführungszeit von Operationen zu zählen und Tracing mit Hilfe von kprobes/uprobes/tracepoints durchzuführen. Dank der Anwendung der JIT-Kompilierung wird der Bytecode zur Laufzeit in Maschinenanweisungen übersetzt und mit der Leistung von nativem Code ausgeführt. XDP bietet Mittel zur Ausführung von BPF-Programmen auf der Ebene des Netzwerktreibers mit direktem Zugriff auf den DMA-Paketpuffer, was die Erstellung von hochleistungsfähigen Prozessoren unter großer Netzwerklast ermöglicht.
Quelle: opennet.ru
