Commandes BCC Tools
BCC (BPF Compiler Collection) est une boîte à outils pour créer des programmes efficaces de traçage et de manipulation du noyau utilisant eBPF. Elle comprend plus de 100 outils prêts à l’emploi pour l’analyse de performance, le réseau et la sécurité.
Installation
Linux/Ubuntu
# Ubuntu 22.04+
sudo apt install bpfcc-tools linux-headers-$(uname -r)
# Fedora
sudo dnf install bcc-tools
# On Ubuntu, tools are installed with -bpfcc suffix
# e.g., execsnoop-bpfcc, opensnoop-bpfcc
# On Fedora/RHEL, tools are in /usr/share/bcc/tools/
# Verify installation
sudo execsnoop-bpfcc --help 2>&1 | head -5
Traçage de processus
execsnoop — Tracer les nouveaux processus
# Tracer toutes les exécutions de nouveaux processus
sudo execsnoop-bpfcc
# Inclure les horodatages
sudo execsnoop-bpfcc -T
# Inclure les appels exec échoués
sudo execsnoop-bpfcc -x
# Filtrer par nom de processus
sudo execsnoop-bpfcc -n nginx
# Tracer pour un UID spécifique
sudo execsnoop-bpfcc -u 1000
# Afficher les variables d'environnement
sudo execsnoop-bpfcc --max-args 20
opensnoop — Tracer les ouvertures de fichiers
# Tracer tous les appels open() sur le système
sudo opensnoop-bpfcc
# Tracer les ouvertures pour un PID spécifique
sudo opensnoop-bpfcc -p 1234
# Afficher uniquement les ouvertures échouées
sudo opensnoop-bpfcc -x
# Filtrer par nom de fichier
sudo opensnoop-bpfcc -f /etc/passwd
# Inclure les horodatages
sudo opensnoop-bpfcc -T
# Tracer pendant une durée spécifique (secondes)
sudo opensnoop-bpfcc -d 30
pidstat (BCC) — Utilisation des ressources par processus
# Tracer les statistiques de ressources des processus
sudo pidstat-bpfcc
# Surveiller un PID spécifique
sudo pidstat-bpfcc -p 1234
Analyse de disque et E/S
biolatency — Latence d’E/S par blocs
# Afficher la latence d'E/S par blocs sous forme d'histogramme
sudo biolatency-bpfcc
# Afficher les histogrammes par disque
sudo biolatency-bpfcc -D
# Inclure les horodatages
sudo biolatency-bpfcc -T
# Afficher la latence en millisecondes
sudo biolatency-bpfcc -m
# Sortie toutes les 5 secondes
sudo biolatency-bpfcc 5
# Afficher 10 intervalles puis quitter
sudo biolatency-bpfcc 5 10
# Temps en file d'attente uniquement (pas le temps de service)
sudo biolatency-bpfcc -Q
ext4slower — Tracer les opérations ext4 lentes
# Afficher les opérations ext4 plus lentes que 10ms (par défaut)
sudo ext4slower-bpfcc
# Seuil personnalisé en millisecondes
sudo ext4slower-bpfcc 1
# Afficher toutes les opérations (seuil 0)
sudo ext4slower-bpfcc 0
# Inclure les horodatages
sudo ext4slower-bpfcc -T
biosnoop — Traçage d’E/S par blocs
# Tracer chaque E/S par bloc avec latence
sudo biosnoop-bpfcc
# Inclure le temps en file d'attente
sudo biosnoop-bpfcc -Q
# Filtrer par disque
sudo biosnoop-bpfcc -d sda
CPU et ordonnancement
profile — Profileur CPU
# Profiler les piles du noyau à 49 Hz pendant 10 secondes
sudo profile-bpfcc -f 49 10
# Profiler uniquement les piles espace utilisateur
sudo profile-bpfcc -U
# Profiler uniquement les piles du noyau
sudo profile-bpfcc -K
# Profiler un PID spécifique
sudo profile-bpfcc -p 1234
# Sortie en format plié (pour les flame graphs)
sudo profile-bpfcc -f 99 30 > out.folded
runqlat — Latence de la file d’exécution de l’ordonnanceur
# Afficher la latence de la file d'exécution sous forme d'histogramme
sudo runqlat-bpfcc
# Histogrammes par PID
sudo runqlat-bpfcc -P
# Afficher en millisecondes
sudo runqlat-bpfcc -m
# Sortie toutes les 5 secondes
sudo runqlat-bpfcc 5
# Inclure les horodatages
sudo runqlat-bpfcc -T
softirqs — Temps des interruptions logicielles
# Afficher le temps des événements soft IRQ sous forme d'histogrammes
sudo softirqs-bpfcc
# Afficher la distribution dans le temps
sudo softirqs-bpfcc -T
# Sortie toutes les 5 secondes
sudo softirqs-bpfcc 5
# Afficher uniquement les comptages (pas le temps)
sudo softirqs-bpfcc -N
hardirqs — Temps des interruptions matérielles
# Afficher le temps des événements hard IRQ sous forme d'histogrammes
sudo hardirqs-bpfcc
# Sortie toutes les 5 secondes
sudo hardirqs-bpfcc 5
# Afficher uniquement les comptages
sudo hardirqs-bpfcc -N
# Inclure les horodatages
sudo hardirqs-bpfcc -T
Analyse réseau
tcplife — Suivi des sessions TCP
# Tracer les sessions TCP avec durée et débit
sudo tcplife-bpfcc
# Afficher les horodatages
sudo tcplife-bpfcc -T
# Filtrer par port local
sudo tcplife-bpfcc -L 80
# Filtrer par port distant
sudo tcplife-bpfcc -D 443
# Filtrer par PID
sudo tcplife-bpfcc -p 1234
# Sortie large (adresses complètes)
sudo tcplife-bpfcc -w
tcpconnect — Tracer les connexions sortantes
# Tracer tous les appels TCP connect()
sudo tcpconnect-bpfcc
# Inclure les horodatages
sudo tcpconnect-bpfcc -T
# Inclure l'UID
sudo tcpconnect-bpfcc -U
# Filtrer par port de destination
sudo tcpconnect-bpfcc -P 443
# Compter les connexions par destination
sudo tcpconnect-bpfcc -c
tcpaccept — Tracer les connexions entrantes
# Tracer tous les appels TCP accept()
sudo tcpaccept-bpfcc
# Inclure les horodatages
sudo tcpaccept-bpfcc -T
# Filtrer par port
sudo tcpaccept-bpfcc -P 80
Traçage de fonctions
funccount — Compter les appels de fonctions
# Compter les appels de fonctions du noyau correspondant à un motif
sudo funccount-bpfcc 'tcp_send*'
# Compter les appels par intervalles de 5 secondes
sudo funccount-bpfcc -i 5 'vfs_*'
# Compter les appels de fonctions espace utilisateur
sudo funccount-bpfcc 'c:malloc'
# Compter pour un PID spécifique
sudo funccount-bpfcc -p 1234 'c:malloc'
# Compter avec horodatages
sudo funccount-bpfcc -T 'tcp_*'
trace — Traçage flexible d’événements
# Tracer une fonction du noyau avec valeur de retour
sudo trace-bpfcc 'do_sys_openat2 "%s", arg2'
# Tracer avec un filtre
sudo trace-bpfcc 'sys_read (arg3 > 1024) "read %d bytes", arg3'
# Tracer une fonction espace utilisateur
sudo trace-bpfcc 'r:c:malloc "size=%d, ret=%p", arg1, retval'
# Tracer plusieurs événements
sudo trace-bpfcc 'sys_open "%s", arg2' 'sys_read "fd=%d size=%d", arg1, arg3'
argdist — Distribution des arguments
# Histogramme des valeurs de retour de read()
sudo argdist-bpfcc -H 'r::__x64_sys_read():int:$retval'
# Compter les tailles de malloc sous forme d'histogramme
sudo argdist-bpfcc -H 'p:c:malloc(size_t size):size_t:size'
# Comptage de fréquence des valeurs retournées
sudo argdist-bpfcc -C 'r::__x64_sys_read():int:$retval'
# Filtrer par PID
sudo argdist-bpfcc -p 1234 -H 'r::__x64_sys_read():int:$retval'
Mémoire et cache
cachestat — Succès/échecs du cache de pages
# Afficher le ratio de succès du cache de pages chaque seconde
sudo cachestat-bpfcc
# Intervalle personnalisé (5 secondes)
sudo cachestat-bpfcc 5
# Inclure les horodatages
sudo cachestat-bpfcc -T
memleak — Détecteur de fuites mémoire
# Détecter les fuites mémoire dans un processus
sudo memleak-bpfcc -p 1234
# Échantillonner toutes les 5 secondes, afficher le top 10
sudo memleak-bpfcc -p 1234 5 10
# Tracer les fuites mémoire du noyau
sudo memleak-bpfcc
# Inclure les traces de pile (profondeur 8)
sudo memleak-bpfcc -p 1234 -d 8
Combinaison avec les Flame Graphs
# Générer un flame graph CPU avec BCC profile
sudo profile-bpfcc -f 99 30 > out.folded
./flamegraph.pl out.folded > cpu_flamegraph.svg
# Générer un flame graph off-CPU
sudo offcputime-bpfcc -f 30 > offcpu.folded
./flamegraph.pl --color=io --countname=us offcpu.folded > offcpu_flamegraph.svg
Référence rapide
| Outil | Fonction |
|---|---|
execsnoop | Tracer les nouveaux processus |
opensnoop | Tracer les ouvertures de fichiers |
biolatency | Histogrammes de latence d’E/S par blocs |
biosnoop | Traçage d’E/S par bloc par événement |
ext4slower | Opérations lentes du système de fichiers ext4 |
tcplife | Résumés de sessions TCP |
tcpconnect | Tracer les connexions TCP sortantes |
tcpaccept | Tracer les connexions TCP entrantes |
profile | Profileur d’échantillonnage de piles CPU |
runqlat | Latence de file d’exécution de l’ordonnanceur |
funccount | Compter les appels de fonctions noyau/utilisateur |
softirqs | Distribution du temps des soft IRQ |
hardirqs | Distribution du temps des hard IRQ |
cachestat | Statistiques succès/échecs du cache de pages |
memleak | Détecteur de fuites mémoire |