Le contenu du ensemble de compilateurs GCC code pour compiler des programmes pour l'interpréteur de bytecode intégré dans le noyau Linux . Grùce à l'utilisation de la compilation JIT, dans le noyau, le bytecode est traduit à la volée en instructions machine et exécuté avec la performance du code natif. Des patches avec support eBPF dans la branche sur laquelle se base la version GCC 10.
En plus du backend pour la génération de bytecode, GCC inclut un port libgcc pour eBPF et des outils pour créer des fichiers ELF, permettant d'exécuter du code dans une machine virtuelle eBPF en utilisant les chargeurs fournis par le noyau. Les patches pour le support eBPF dans GCC ont été préparés par des ingénieurs de la société Oracle, qui avaient déjà le support eBPF dans GNU binutils. Un simulateur et des patches pour GDB sont également en cours de développement, permettant de déboguer des programmes eBPF sans les charger dans le noyau.
Les programmes pour eBPF peuvent ĂȘtre dĂ©finis dans un sous-ensemble du langage C, compilĂ©s et chargĂ©s dans le noyau. Avant l'exĂ©cution, l'interprĂ©teur eBPF vĂ©rifie le bytecode pour s'assurer que seules des instructions autorisĂ©es sont utilisĂ©es et impose certaines rĂšgles sur le code (comme l'absence de boucles).
à l'origine, pour compiler eBPF dans Linux, on utilisait des outils basés sur LLVM. Le support eBPF dans GCC est intéressant car il permet d'utiliser un seul outil pour compiler le noyau Linux et les programmes eBPF, sans installer de dépendances supplémentaires.
Sous forme de programmes eBPF, on peut créer des gestionnaires d'opérations réseau, filtrer le trafic, gérer la bande passante, surveiller le fonctionnement des systÚmes, intercepter des appels systÚme, contrÎler l'accÚs, compter la fréquence et le temps d'exécution des opérations, effectuer un traçage utilisant kprobes/uprobes/tracepoints.
Source : opennet.ru
