bpftrace est un langage de traçage de haut niveau pour Linux. bpftrace utilise LLVM comme backend pour compiler des scripts en bytecode eBPF et utilise libbpf et bcc pour interagir avec le sous-système Linux BPF, ainsi que les capacités de traçage Linux existantes : traçage dynamique du noyau (kprobes), traçage dynamique au niveau utilisateur (uprobes). ), les points de trace, etc. Le langage bpftrace s'inspire des traceurs awk, C et de ses prédécesseurs tels que DTrace et SystemTap. bpftrace a été créé par Alastair Robertson.
Comment installer et construire
Manuel / Guide de référence
Tutoriel
Exemple de lignes simples
Vidéos
Outils
Contribuer
Développement
Soutien
Guide de migration
Types de sondes
Plugins
Licence
Les one-liners suivants démontrent différentes capacités :
# Files opened by thread name bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %sn", comm, str(args->filename)); }' # Syscall count by thread name bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }' # Read bytes by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }' # Read size distribution by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read { @[comm] = hist(args->ret); }' # Show per-second syscall rates: bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @ = count(); } interval:s:1 { print(@); clear(@); }' # Trace disk size by PID and thread name bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %dn", pid, comm, args->bytes); }' # Count page faults by thread name bpftrace -e 'software:faults:1 { @[comm] = count(); }' # Count LLC cache misses by thread name and PID (uses PMCs): bpftrace -e 'hardware:cache-misses:1000000 { @[comm, pid] = count(); }' # Profile user-level stacks at 99 Hertz for PID 189: bpftrace -e 'profile:hz:99 /pid == 189/ { @[ustack] = count(); }' # Files opened in the root cgroup-v2 bpftrace -e 'tracepoint:syscalls:sys_enter_openat /cgroup == cgroupid("/sys/fs/cgroup/unified/mycg")/ { printf("%sn", str(args->filename)); }'
Des scripts plus puissants peuvent facilement être construits. Voir Outils pour des exemples.
Remarque : une partie du contenu de ces vidéos peut être obsolète, le guide de référence actuel est la source de vérité.
Rendre bpftrace plus puissant - 2023
Recettes Bpftrace : 5 vrais problèmes résolus - 2023
Le traçage Linux simplifié avec bpftrace - 2022
Programmes bpftrace compilés à l'avance - 2021
Premiers pas avec l'observabilité BPF - 2021
Éléments internes de bpftrace - 2020
Utiliser bpftrace avec Performance Co-Pilot et Grafana - 2020
Une introduction au langage de traçage bpftrace - 2020
Les contributions sont les bienvenues ! Veuillez consulter la section développement ci-dessous pour plus d'informations. Pour les nouveaux outils bpftrace, veuillez les ajouter au nouveau référentiel d'outils utilisateur. Les outils qui existent dans ce référentiel sont une petite collection organisée par les responsables de bpftrace.
Rapports de bugs et demandes de fonctionnalités : Issue Tracker
IRC de développement : #bpftrace sur irc.oftc.net
Bons premiers numéros
Directives de codage
Guide de développement
Feuille de route de développement
Fuzzing
Rien
Processus de libération
Essais
Pour une aide/discussion supplémentaire, veuillez utiliser notre page de discussions.
Nous tenons également des heures de bureau régulières ouvertes au public.
Voir le manuel pour plus de détails.
bpftrace dispose de plusieurs plugins/définitions, intégrant la syntaxe dans votre éditeur.
Emacs
Vim
Code VS
Copyright 2019 Alastair Robertson
Sous licence Apache, version 2.0 (la « Licence » ); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf disposition contraire de la loi applicable ou accord écrit, le logiciel distribué sous la licence est distribué « TEL QUEL », SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite. Consultez la licence pour connaître la langue spécifique régissant les autorisations et les limitations en vertu de la licence.