bpftrace ist eine High-Level-Tracing-Sprache für Linux. bpftrace verwendet LLVM als Backend zum Kompilieren von Skripten in eBPF-Bytecode und nutzt libbpf und bcc für die Interaktion mit dem Linux-BPF-Subsystem sowie vorhandene Linux-Tracing-Funktionen: dynamisches Kernel-Tracing (kprobes), dynamisches Tracing auf Benutzerebene (uprobes). ), Tracepoints usw. Die bpftrace-Sprache ist von awk, C und Vorgänger-Tracern wie DTrace und SystemTap inspiriert. bpftrace wurde von Alastair Robertson erstellt.
So installieren und erstellen Sie
Handbuch/Referenzhandbuch
Anleitung
Beispiel-Einzeiler
Videos
Werkzeuge
Beitragen
Entwicklung
Unterstützung
Migrationsleitfaden
Sondentypen
Plugins
Lizenz
Die folgenden Einzeiler demonstrieren unterschiedliche Fähigkeiten:
# 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)); }'
Leistungsstärkere Skripte können problemlos erstellt werden. Beispiele finden Sie unter Tools.
Hinweis: Einige Inhalte dieser Videos sind möglicherweise veraltet. Das aktuelle Referenzhandbuch ist die Quelle der Wahrheit.
Bpftrace leistungsfähiger machen – 2023
Bpftrace-Rezepte: 5 echte Probleme gelöst – 2023
Linux-Tracing einfacher gemacht mit bpftrace – 2022
Im Voraus zusammengestellte bpftrace-Programme – 2021
Erste Schritte mit der BPF-Beobachtbarkeit – 2021
bpftrace-Interna – 2020
Verwendung von bpftrace mit Performance Co-Pilot und Grafana – 2020
Eine Einführung in die Ablaufverfolgungssprache bpftrace – 2020
Beiträge sind willkommen! Weitere Informationen finden Sie im Abschnitt „Entwicklung“ weiter unten. Neue bpftrace-Tools fügen Sie bitte zum neuen User-Tools-Repository hinzu. Die in diesem Repository vorhandenen Tools sind eine kleine Sammlung, die von den bpftrace-Betreuern kuratiert wurde.
Fehlerberichte und Funktionsanfragen: Issue Tracker
Entwicklung IRC: #bpftrace auf irc.oftc.net
Gute Erstausgaben
Codierungsrichtlinien
Entwicklungshandbuch
Entwicklungs-Roadmap
Fuzzing
Nix
Freigabeprozess
Tests
Für weitere Hilfe/Diskussion nutzen Sie bitte unsere Diskussionsseite.
Darüber hinaus bieten wir regelmäßige Sprechstunden für die Öffentlichkeit an.
Weitere Einzelheiten finden Sie im Handbuch.
bpftrace verfügt über mehrere Plugins/Definitionen, die die Syntax in Ihren Editor integrieren.
Emacs
Vim
VS-Code
Copyright 2019 Alastair Robertson
Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, wird die im Rahmen der Lizenz vertriebene Software „WIE BESEHEN“ und OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, vertrieben. Die spezifische Sprache, die die Berechtigungen und Einschränkungen im Rahmen der Lizenz regelt, finden Sie in der Lizenz.