bpftrace 是 Linux 的高级跟踪语言。 bpftrace 使用 LLVM 作为后端将脚本编译为 eBPF 字节码,并利用 libbpf 和 bcc 与 Linux BPF 子系统交互,以及现有的 Linux 跟踪功能:内核动态跟踪 (kprobes)、用户级动态跟踪 (uprobes) )、跟踪点等。bpftrace 语言受到 awk、C 和前身跟踪器(例如 DTrace 和 SystemTap)的启发。 bpftrace 由阿拉斯泰尔·罗伯逊创建。
如何安装和构建
手册/参考指南
教程
单行示例
视频
工具
贡献
发展
支持
迁移指南
探头类型
插件
执照
以下单行代码展示了不同的功能:
# 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)); }'
可以轻松构建更强大的脚本。请参阅工具以获取示例。
注意:这些视频中的某些内容可能已经过时,当前的参考指南是事实来源。
让 bpftrace 变得更强大 - 2023
Bpftrace 食谱:解决 5 个实际问题 - 2023
使用 bpftrace 让 Linux 跟踪变得更简单 - 2022
提前编译的 bpftrace 程序 - 2021
BPF 可观测性入门 - 2021
bpftrace 内部结构 - 2020
将 bpftrace 与 Performance Co-Pilot 和 Grafana 结合使用 - 2020
bpftrace 跟踪语言简介 - 2020
欢迎贡献!请参阅下面的开发部分以获取更多信息。对于新的 bpftrace 工具,请将它们添加到新的用户工具存储库中。此存储库中存在的工具是由 bpftrace 维护者策划的一个小集合。
错误报告和功能请求:问题跟踪器
开发 IRC:#bpftrace,位于 irc.oftc.net
好的第一个问题
编码指南
开发指南
发展路线图
模糊测试
尼克斯
发布流程
测试
如需其他帮助/讨论,请使用我们的讨论页面。
我们还定期向公众开放办公时间。
请参阅手册了解更多详细信息。
bpftrace 有几个插件/定义,将语法集成到您的编辑器中。
Emacs
维姆
VS代码
版权所有 2019 阿拉斯泰尔·罗伯逊
根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可证,否则您不得使用此文件。您可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。