Introductie van de Aya-bibliotheek voor het maken van eBPF-handlers in Rust

De eerste release van de Aya-bibliotheek wordt gepresenteerd, waarmee je eBPF-handlers in de Rust-taal kunt maken die in de Linux-kernel draaien in een speciale virtuele machine met JIT. In tegenstelling tot andere eBPF-ontwikkeltools maakt Aya geen gebruik van libbpf en de bcc-compiler, maar biedt in plaats daarvan zijn eigen implementatie aan, geschreven in Rust, die het libc-kratpakket gebruikt om rechtstreeks toegang te krijgen tot kernelsysteemaanroepen. Voor het bouwen van Aya zijn geen C-taaltools of kernelheaderbestanden vereist. De bibliotheekcode wordt gedistribueerd onder de MIT- en Apache 2.0-licenties.

Belangrijkste kenmerken:

  • Ondersteuning voor BTF (BPF Type Format), dat type-informatie levert in BPF-pseudocode voor typecontrole en toewijzing aan typen die door de huidige kernel worden geleverd. Het gebruik van BTF maakt het mogelijk om universele eBPF-handlers te creëren die zonder hercompilatie kunnen worden gebruikt met verschillende versies van de Linux-kernel.
  • Ondersteuning voor “bpf-naar-bpf”-aanroepen, globale variabelen en initializers, waarmee u programma's voor eBPF kunt ontwerpen op een vergelijkbare manier als gewone programma's die aya gebruiken als runtime die functies opnieuw definieert, rekening houdend met het werk in eBPF.
  • Ondersteuning voor verschillende kerneltypen, waaronder reguliere arrays, hashes-kaarten, stapels, wachtrijen, stapeltraces, evenals socket- en prestatie-trackingstructuren.
  • Mogelijkheid om verschillende soorten eBTF-programma's te maken, waaronder programma's voor het filteren en beheren van verkeer, cgroup-handlers en verschillende socketbewerkingen, XDP-programma's.
  • Ondersteuning voor platforms voor asynchrone aanvraagverwerking in niet-blokkerende modus tokio en async-std.
  • Snelle montage, zonder enige verbinding met de kernelassemblage en kernelheaderbestanden.

Het project wordt nog steeds als experimenteel beschouwd - de API is nog niet gestabiliseerd en blijft zich ontwikkelen. Bovendien zijn nog niet alle geplande kansen gerealiseerd. Tegen het einde van het jaar verwachten de ontwikkelaars de functionaliteit van Aya op gelijke hoogte te brengen met libbpf, en in januari 2022 de eerste stabiele release te creëren. Er zijn ook plannen om de onderdelen van Aya die nodig zijn om Rust-code voor de Linux-kernel te schrijven te combineren met de gebruikersruimtecomponenten die worden gebruikt voor het laden, koppelen en communiceren met eBPF-programma's.

Laten we niet vergeten dat eBPF een bytecode-interpreter is die is ingebouwd in de Linux-kernel en waarmee u netwerkbewerkingshandlers kunt maken, de systeemwerking kunt monitoren, systeemoproepen kunt onderscheppen, toegang kunt controleren, gebeurtenissen kunt verwerken met behoud van de timing, de frequentie en tijd van bewerkingen kunt berekenen, traceren met behulp van kprobes/uprobes/tracepoints. Dankzij het gebruik van JIT-compilatie wordt bytecode direct vertaald naar machine-instructies en uitgevoerd met de prestaties van native code. XDP biedt tools voor het uitvoeren van BPF-programma's op netwerkstuurprogrammaniveau, met de mogelijkheid om rechtstreeks toegang te krijgen tot de DMA-pakketbuffer, waardoor u krachtige processors kunt creëren voor het werken onder zware netwerkbelasting.

Bron: opennet.ru

Voeg een reactie