Cet annuaire d'articles
1. Installez l'outil bpftool
Il semble que dans différentes distributions Linux, bpftool se trouve dans différents packages, sur Ubuntu 22, bpftool fait partie de linux-tools-generic, tandis que dans raspberry pi bpftool est un package séparé.
sur ubuntu :
sudo apt install linux-tools-generic
Sur le Raspberry Pi :
sudo apt install bpftool
Utilisez ensuite la commande whereis pour afficher l'état de l'installation
xxx@xxx-pc:~$ whereis bpftool
bpftool: /usr/sbin/bpftool /usr/share/man/man8/bpftool.8.gz
Sur certaines versions de distribution, vous devrez peut-être également télécharger le code source de Linux et l'installer vous-même (la méthode de démarrage de l'installation à partir du code source est introduite pour être mise à jour)
2. Introduction à bpftool
BPFTOOL est un outil logiciel fourni avec le noyau Linux pour vérifier et exploiter les programmes eBPF et les cartes eBPF. Notez qu'en fonction de la version du noyau et de la version de bpftool, l'utilisation et la sortie réelles peuvent être légèrement différentes de cet article.
3. Fonctions communes de bpftool
- sudo bpftool prog list :
affiche la liste des informations de tous les programmes eBPF qui ont été chargés dans le système. En plus de la fonction d'affichage, il prend également en charge des fonctions telles que le vidage. Vous pouvez vérifier les fonctions spécifiques prises en charge via man bpftool prog. - bpftool net list
affiche les programmes eBPF dans le sous-système réseau du noyau. En plus de la fonction d'affichage, il prend également en charge d'autres fonctions. Vous pouvez vérifier les fonctions spécifiques prises en charge via man bpftool net. - La liste des liens bpftool
affiche tous les liens activés. Outre la fonction d'affichage, elle prend également en charge d'autres fonctions. Vous pouvez afficher les fonctions spécifiques prises en charge via le lien man bpftool. - La liste bpftool perf
affiche toutes les pièces jointes raw_tracepoint, tracepoint, kprobe du système, en plus de la fonction d'affichage, elle prend également en charge d'autres fonctions, vous pouvez vérifier les fonctions spécifiques prises en charge via man bpftool perf. - bpftool btf list
affiche toutes les données BPF Type Format (BTF). En plus de la fonction d'affichage, il prend également en charge d'autres fonctions. Vous pouvez afficher les fonctions spécifiques prises en charge via man bpftool btf. - bpftool map list
affiche toutes les données de carte bpf chargées dans le système. En plus de la fonction d'affichage, il prend également en charge d'autres fonctions. Vous pouvez afficher les fonctions spécifiques prises en charge via man bpftool map. - bpftool feature probe dev eth0
Affichez les fonctionnalités eBPF prises en charge par eth0.
4. Un exemple d'utilisation de bpftool pour afficher l'état d'exécution des programmes eBPF
Dans l'article XDP Getting Started – eBPF Program Implements Bridge/Layer 2 Switch Forwarding Function , nous avons chargé eth0 et eth1 avec le bytecode eBPF qui transfère les paquets en fonction du MAC cible.
- Une fonction de traitement de paquets appelée xdp_bridge_prog()
- Une base de données cartographique appelée mac_port_map
Utilisez les deux commandes suivantes pour afficher les informations ci-dessus et utilisez la fonction de vidage de carte bpftool pour afficher le contenu de la carte
xxx@raspberrypi:~ $ sudo bpftool prog list | tail -n 4
xlated 64B not jited memlock 4096B
21: xdp name xdp_bridge_prog tag 610be6df09f4715b gpl
loaded_at 2023-05-31T13:57:17+0800 uid 0
xlated 704B not jited memlock 4096B map_ids 1
xxx@raspberrypi:~ $ sudo bpftool map list
1: hash name mac_port_map flags 0x0
key 8B value 4B max_entries 100 memlock 4096B
xxx@raspberrypi:~ $ sudo bpftool map dump id 1