Auparavant, pour savoir quel processus ouvrait tel fichier, où un paquet était perdu ou quelle fonction du noyau fonctionnait lentement, il fallait modifier le noyau puis redémarrer le système. eBPF rend tout cela obsolète.
L'idée centrale
eBPF permet de charger des programmes très légers dans le noyau et de les associer à des points de hook : appels système, événements réseau, fonctions internes du noyau. Le programme s'exécute dans une machine virtuelle contrôlée, et un vérificateur effectue des contrôles avant le chargement : pas de boucles infinies, pas d'accès arbitraire à la mémoire, et un nombre d'instructions limité.
Grâce à ce contrôle, un programme eBPF défectueux sera rejeté sans provoquer de plantage du système — contrairement aux modules du noyau traditionnels.
Les trois domaines les plus utilisés
- Surveillance : mesure du temps de latence de chaque appel système, création de graphiques en flamme, suivi des processus enfants — sans avoir à modifier l'application
- Réseau : filtrage et routage des paquets directement au niveau du pilote, ce qui est bien plus rapide que de passer par toute la pile réseau
- Sécurité : blocage des appels système selon des règles prédéfinies, journalisation des comportements suspects au niveau du noyau
Essayez-le tout de suite sur votre ordinateur
sudo apt install bpfcc-tools
sudo execsnoop-bpfcc # mọi tiến trình mới sinh ra
sudo opensnoop-bpfcc # mọi tệp được mở
sudo biolatency-bpfcc # phân bố độ trễ ổ đĩaLimites à connaître
Le vérificateur est assez exigeant : les programmes complexes sont souvent rejetés avec des messages difficiles à comprendre. Les points d'accrochage aux fonctions internes du noyau ne sont pas non plus stables d'une version à l'autre — si le noyau renomme une fonction, votre programme cesse de fonctionner. Pour le code destiné à s'exécuter sur le long terme, il est préférable de s'appuyer sur des points d'accrochage stables plutôt que sur des fonctions internes.
Thảo luận