Introduction de la bibliothèque Aya pour créer des gestionnaires eBPF dans Rust

La première version de la bibliothèque Aya est présentée, qui vous permet de créer des gestionnaires eBPF dans le langage Rust qui s'exécutent dans le noyau Linux dans une machine virtuelle spéciale avec JIT. Contrairement à d'autres outils de développement eBPF, Aya n'utilise pas libbpf et le compilateur bcc, mais propose à la place sa propre implémentation écrite en Rust, qui utilise le package libc crate pour accéder directement aux appels système du noyau. La construction d'Aya ne nécessite pas d'outils en langage C ni de fichiers d'en-tête du noyau. Le code de la bibliothèque est distribué sous les licences MIT et Apache 2.0.

Principales caractéristiques:

  • Prise en charge du BTF (BPF Type Format), qui fournit des informations de type dans le pseudocode BPF pour la vérification du type et le mappage aux types fournis par le noyau actuel. L'utilisation de BTF permet de créer des gestionnaires eBPF universels utilisables sans recompilation avec différentes versions du noyau Linux.
  • Prise en charge des appels « bpf-to-bpf », des variables globales et des initialiseurs, qui vous permettent de concevoir des programmes pour eBPF de la même manière que les programmes classiques qui utilisent aya comme moteur d'exécution qui redéfinit les fonctions en tenant compte du travail dans eBPF.
  • Prise en charge de divers types de noyau, notamment les tableaux réguliers, les cartes de hachage, les piles, les files d'attente, les traces de pile, ainsi que les structures de suivi des sockets et des performances.
  • Possibilité de créer différents types de programmes eBTF, y compris des programmes de filtrage et de gestion du trafic, des gestionnaires de groupes de contrôle et diverses opérations de socket, des programmes XDP.
  • Prise en charge des plateformes de traitement des requêtes asynchrones en mode non bloquant tokio et async-std.
  • Assemblage rapide, sans aucune connexion à l'assemblage du noyau et aux fichiers d'en-tête du noyau.

Le projet est encore considéré comme expérimental - l'API n'est pas encore stabilisée et continue de se développer. De plus, toutes les opportunités prévues ne se sont pas encore concrétisées. D'ici la fin de l'année, les développeurs prévoient d'amener les fonctionnalités d'Aya à parité avec libbpf et, en janvier 2022, de créer la première version stable. Il est également prévu de combiner les parties d'Aya nécessaires pour écrire du code Rust pour le noyau Linux avec les composants de l'espace utilisateur utilisés pour charger, attacher et interagir avec les programmes eBPF.

Rappelons qu'eBPF est un interpréteur de bytecode intégré au noyau Linux, qui permet de créer des gestionnaires d'opérations réseau, de surveiller le fonctionnement du système, d'intercepter les appels système, de contrôler l'accès, de traiter les événements tout en maintenant le timing, de calculer la fréquence et l'heure des opérations, d'effectuer traçage à l'aide de kprobes/uprobes/tracepoints. Grâce à l'utilisation de la compilation JIT, le bytecode est traduit à la volée en instructions machine et exécuté avec les performances du code natif. XDP fournit des outils pour exécuter des programmes BPF au niveau du pilote réseau, avec la possibilité d'accéder directement au tampon de paquets DMA, ce qui vous permet de créer des processeurs hautes performances pour travailler sous une charge réseau importante.

Source: opennet.ru

Ajouter un commentaire