Accueil les sujets ebpf Qu’est-ce que l’eBPF ?
Découvrir IBM Instana Observability
Illustration abstraite représentant l’activité du système d’exploitation
Qu’est-ce que l’eBPF ?

L’eBPF (Extended Berkeley Packet Filter ou filtrage des paquets Berkeley) est une technologie de programmation qui permet aux développeurs d’écrire des programmes efficaces, sûrs et non intrusifs qui s’exécutent directement dans l’espace du noyau du système d’exploitation Linux (OS).

Capables d’exécuter des programmes en mode sandbox dans des contextes privilégiés, tels que le noyau d’un système d’exploitation, les eBPF peuvent étendre les fonctionnalités des logiciels existants au moment de l’exécution sans modifier le code source du noyau, charger les modules du noyau ni perturber l’exécution globale du programme. Les technologies eBPF représentent une évolution du BPF d’origine qui offrait un moyen simple de sélectionner et d’analyser les paquets réseau dans un programme d’espace utilisateur. Mais au-delà du filtrage des paquets, les programmes BPF n’avaient pas la flexibilité nécessaire pour gérer des tâches plus complexes au sein du noyau.

Constatant le besoin d’une technologie plus polyvalente, la communauté Linux a développé l’eBPF à partir des fonctionnalités backend du BPF mais en étendant sa programmabilité dans le noyau. Les fonctionnalités avancées des programmes eBPF permettent aux développeurs d’implémenter des processus de filtrage des paquets améliorés, d’effectuer des analyses de performances poussées et d’installer des pare-feux et des protocoles de débogage dans les centres de données sur site et dans les environnements cloud natifs.

Les progrès de la technologie eBPF ont permis aux développeurs de développer leurs applications sur tous les systèmes d’exploitation, afin que les plateformes non Linux puissent tirer parti des fonctionnalités sophistiquées de traçage, de mise en réseau et de surveillance de l’eBPF.1 En fait, la Fondation eBPF - une extension de la Fondation Linux dont les membres comprennent Google, Meta, Netflix, Microsoft, Intel et Isovalent, entre autres - a beaucoup investi dans l’expansion de la compatibilité des systèmes d’exploitation avec les programmes eBPF, dans l’espoir d’élargir à terme l’utilité de la programmation eBPF.2

Demander une démonstration d’Instana

Demandez une démonstration d’IBM Instana Observability pour découvrir comment vous pouvez obtenir une observabilité et une surveillance complètes en quelques minutes.

Contenu connexe

Abonnez-vous à la newsletter IBM

Composants des programmes eBPF

Les principaux composants d’un programme eBPF sont les suivants :

Bytecode eBPF

Les programmes eBPF sont initialement écrits dans un sous-ensemble C restreint, puis compilés dans le bytecode eBPF à l’aide d’outils comme LLVM, qui sert d’architecture backend à l’eBPF pour les langages de programmation frontend comme Clang. Le bytecode est essentiellement un ensemble restreint d’instructions qui respectent l’architecture du jeu d’instructions eBPF et empêchent les erreurs d’exécution.

Interpréteur eBPF/compilateur JIT

La technologie de noyau Linux est capable de traduire le bytecode eBPF en actions exécutables, mais les compilateurs juste-à-temps (JIT) offrent des performances supérieures. Les compilateurs JIT peuvent traduire le bytecode en code machine natif à la volée pour des plateformes matérielles spécifiques. 

Chargeur d’espace utilisateur

Les chargeurs d’espace utilisateur sont des programmes dans l’espace utilisateur qui chargent le bytecode eBPF dans le noyau, le fixent aux hooks appropriés et gèrent toutes les cartes eBPF associées. Parmi les exemples de chargeurs d’espace utilisateur, citons des outils tels que BPF Compiler Collection (BCC) et bpftrace.   

Cartes eBPF

Les cartes eBPF sont des structures de données comportant des paires clé-valeur et un accès en lecture et en écriture qui fournissent un espace de stockage partagé et facilitent l’interaction entre les programmes de noyau eBPF et les applications d’espace utilisateur. Créées et gérées à l’aide d’appels système, les cartes eBPF permettent aussi de maintenir l’état entre différentes itérations des programmes eBPF.

Vérificateur eBPF

Le vérificateur, un composant essentiel des systèmes eBPF, vérifie le bytecode avant qu’il ne soit chargé dans le noyau pour s’assurer que le programme ne contient aucune opération nuisible, comme des boucles infinies, des instructions illégales ou l’accès mémoire hors limites. Il garantit également que tous les chemins de données du programme se terminent correctement.

Hooks eBPF

Les hooks sont des points d’ancrage dans le code du noyau où les programmes eBPF peuvent être attachés. Lorsque le noyau atteint un hook, il exécute le programme eBPF attaché.

Différents types de hooks tels que les points de trace, les kprobes et les files d’attente de réception de paquets réseau procurent aux programmes eBPF un large accès aux données et leur permettent d’effectuer diverses opérations. Les points de trace, par exemple, permettent aux programmes d’inspecter et de collecter des données sur le noyau ou d’autres processus, tandis que les hooks de contrôle du trafic peuvent être utilisés pour inspecter et modifier les paquets réseau.

Fonctions d’assistance

Comme les eBPF ne peuvent pas générer de fonctions arbitraires et doivent rester compatibles avec toutes les versions possibles du noyau, il arrive que des jeux d’instructions eBPF de base ne soient pas assez nuancés pour effectuer des opérations avancées. Les fonctions d’assistance permettent d’y remédier.

Les fonctions d’assistance (ensembles de fonctions de noyau prédéfinies basées sur des API que les eBPF peuvent appeler depuis le système) permettent aux programmes eBPF d’effectuer des opérations plus complexes (comme obtenir l’heure et la date actuelles ou générer des nombres aléatoires) qui ne sont pas directement prises en charge par le jeu d’instructions.  

Comment fonctionne l’eBPF ?

En général, les eBPF fonctionnent comme des machines virtuelles (VM) à l’intérieur du noyau Linux, opérant sur une architecture de jeu d’instructions de bas niveau et exécutant le bytecode eBPF. Cependant, le processus complexe d’exécution d’un programme eBPF suit généralement certaines étapes principales.

Les développeurs écrivent d’abord le programme eBPF et compilent le bytecode. L’objectif du programme détermine le type de code approprié. Par exemple, si une équipe souhaite surveiller l’utilisation du processeur, elle écrit du code qui inclut la fonctionnalité permettant de capturer les métriques d’utilisation.

Une fois le code C de haut niveau converti en bytecode de niveau inférieur par le compilateur eBPF, un chargeur d’espace utilisateur génère un appel système BPF pour charger le programme dans le noyau. Le chargeur assure également la résolution des erreurs et la configuration des cartes eBPF dont le programme a besoin.

Après la mise en place du bytecode et des cartes du programme, l’eBPF exécute un processus de vérification pour garantir que le programme peut être exécuté en toute sécurité dans le noyau. S’il est considéré comme dangereux, l’appel système pour charger le programme échoue et le programme du chargeur reçoit un message d’erreur. Si le programme passe la vérification, l’exécution est autorisée.

À l’aide d’un interprète ou d’un compilateur JIT, l’eBPF convertit le bytecode en code machine exploitable. Cependant, la technologie eBPF étant basée sur les événements, le programme ne s’exécute qu’en réponse à des points de hook ou des événements spécifiques dans le noyau (par exemple, appels système, événements réseau, initiation du processus, inactivité du processeur, etc.). Lorsqu’un événement se produit, l’eBPF exécute le programme bytecode correspondant, permettant aux développeurs d’inspecter et de manipuler divers composants du système.

Une fois le programme eBPF en cours d’exécution, les développeurs peuvent interagir à partir de l’espace utilisateur à l’aide de cartes eBPF. Par exemple, l’application peut vérifier périodiquement une carte pour collecter des données à partir du programme eBPF, ou mettre à jour une carte pour modifier le comportement du programme.

Le déchargement du programme est la dernière étape de la plupart des processus d’exécution eBPF. Lorsque l’eBPF a terminé sa tâche, le chargeur peut utiliser à nouveau l’appel système BPF pour le décharger du noyau ; l’eBPF cesse alors de fonctionner et libère ses ressources associées. Le processus de déchargement peut également inclure une itération sur toutes les cartes eBPF dont l’équipe n’a plus besoin pour libérer des éléments individuels utiles, puis la suppression de la carte elle-même (à l’aide de l’appel système « supprimer »).

Cas d’utilisation et avantages de l’eBPF

Les technologies eBPF constituent déjà une pierre maîtresse des systèmes Linux modernes, car elles permettent un contrôle précis du noyau et aident les entreprises à concevoir des solutions plus innovantes au sein de l’écosystème Linux.

L’eBPF a facilité les avancées dans les domaines suivants : 

Réseau

L’eBPF permet aux développeurs d’installer des fonctionnalités de traitement des paquets plus rapides et sur mesure, des processus d’équilibrage de charge, des scripts de profilage des applications et des pratiques de surveillance du réseau. Les plateformes open source, telles que Cilium, exploitent l’eBPF pour fournir une mise en réseau sécurisée et évolutive aux clusters et workloads Kubernetes, ainsi qu’à d’autres microservices conteneurisés. De plus, en tirant parti de la logique de transfert des paquets au niveau du noyau, les eBPF rationalisent les processus de routage et permettent une réponse globale plus rapide.

Observabilité

Les eBPF permettent aux développeurs d’instrumenter les applications du noyau et de l’espace utilisateur pour collecter des données et des métriques de performance détaillées sans impact significatif sur les performances du système. L’ensemble de ces fonctionnalités soutient la compétitivité des entreprises en leur procurant des capacités de surveillance et d’observabilité en temps réel.

Sécurité

Les eBPF peuvent surveiller les appels système, le trafic réseau et le comportement du système pour détecter les menaces de sécurité potentielles et y répondre en temps réel. Les solutions informatiques comme Falco, par exemple, utilisent l’eBPF pour implémenter les audits de sécurité des environnements d‘exécution et la réponse aux incidents, améliorant ainsi la sécurité globale du système.

Réglage des performances

En traçant les appels système, en surveillant l’utilisation du processeur et en suivant l’utilisation des ressources (comme les E/S disque), l’eBPF aide les développeurs à détecter plus facilement les goulots d’étranglement dans les performances du système et à identifier les possibilités d’optimisation.

Solutions connexes
IBM Instana Observability

IBM Instana démocratise l’observabilité en fournissant une solution que chacun peut utiliser via DevOps, SRE, les plateformes, ITOps et le développement pour obtenir les données souhaitées dans le contexte dont il a besoin. Spécialement conçue pour le cloud natif mais indépendante de la technologie, la plateforme fournit automatiquement et en continu des données hautement fiables (précision d’une seconde et traces de bout en bout) dans le contexte de dépendances logiques et physiques entre les appareils mobiles, le Web, les applications et l’infrastructure.

Explorer Instana Demander une démonstration d’Instana

IBM Turbonomic

La plateforme d’optimisation des coûts du cloud hybride IBM Turbonomic vous permet d’automatiser en continu et en temps réel les actions critiques garantissant proactivement l’utilisation la plus efficace des ressources de calcul, de stockage et de réseau dans vos applications, à toutes les couches de la pile. 

Découvrez Turbonomic Essayer Turbonomic gratuitement
Passez à l’étape suivante

IBM Instana fournit une observabilité en temps réel que tout le monde peut utiliser. La solution accélère la création de valeur tout en vérifiant que votre stratégie d’observabilité peut s’adapter à la complexité dynamique des environnements actuels et futurs. Du mobile au mainframe, Instana prend en charge plus de 250 technologies, et poursuit son expansion. 

Découvrir IBM Instana Réserver une démo en direct
Notes de bas de page

Foundation Proposes Advancing eBPF Adoption Across Multiple OSes (lien externe à ibm.com), DevOps.com, 21 août 2021

Latest eBPF Advances Are Harbingers of Major Changes to IT (lien externe à ibm.com), DevOps.com, 13 septembre 2023