Aller au contenu

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

OutilFonction
execsnoopTracer les nouveaux processus
opensnoopTracer les ouvertures de fichiers
biolatencyHistogrammes de latence d’E/S par blocs
biosnoopTraçage d’E/S par bloc par événement
ext4slowerOpérations lentes du système de fichiers ext4
tcplifeRésumés de sessions TCP
tcpconnectTracer les connexions TCP sortantes
tcpacceptTracer les connexions TCP entrantes
profileProfileur d’échantillonnage de piles CPU
runqlatLatence de file d’exécution de l’ordonnanceur
funccountCompter les appels de fonctions noyau/utilisateur
softirqsDistribution du temps des soft IRQ
hardirqsDistribution du temps des hard IRQ
cachestatStatistiques succès/échecs du cache de pages
memleakDétecteur de fuites mémoire