强劲的Linux Trace工具:bpftrace (DTrace 2.0) for Linux 2018

bpftrace是一个开源的高级tracing工具,灵感来自DTrace,专为Linux设计。它允许用户以自定义方式跟踪系统,通过eBPF虚拟机编译。bpftrace提供了类似DTrace的功能,如单行命令操作,但简化了编写小工具的过程。作者Brendan Gregg介绍了bpftrace的发展和与DTrace的对比,强调bpftrace的易用性和在Linux生态系统中的潜力。
摘要由CSDN通过智能技术生成

Original:阿里 姜弋内核月谈

译者: 姜弋

译者注:原作者是大名鼎鼎的性能分析专家:Brendan Gregg,现在工作在Netflix,之前工作在Sun,在Sun公司的时候,他就做了大量的性能分析和tracing相关的工作,在Sun的Solaris上存在一种传说中的性能分析和Debug神器: Dtrace,然而,可惜的是,在我们现在的Linux操作系统上并没有Dtrace神器(这可能是因为Dtrace是从Soloris操作系统的衍生品无法迁移到别的操作系统上),Brendan Gregg 在Netflix后,继续利用他的业余时间,利用他曾经在Soloris上的性能分析经验,和对Dtrace工具的理解,研发基于Linux操作系统上的上类似于Dtrace的工具,曾经他在早期的kernel版本上基于perf研发了perf-tools工具,后面在eBPF进入kernel后,开始基于eBPF做性能工具研发的工作,比如bcc工具集,最近又参与了bpftrace的工具。本文主要是Brendan Gregg在介绍 bpftrace在2018年的开发进展,以及对bpftrace的介绍和对Dtrace的区别介绍。

bpftrace (DTrace 2.0) for Linux 2018

告诉大家一个好消息,bpftrace开源啦,这对DTrace粉丝来说是一个绝对的好消息,其项目作者依然是Alastair Robertson, bpftrace是一个开源的高级的tracing(跟踪)工具(high-level tracing front-end),可以让你自定义的方式跟踪。它就像是DTrace version 2.0:实用,从eBPF virtual machine中编译出来。eBPF (extended Berkeley Packet Filter) 是近期kernel上比较热门的一个工程。也正在为兼容BSD而开发,BSD项目也是BPF项目的发源地。

截图:追踪PID 181的read系统调用的延迟:

其他单行命令操作(one-liners):

 1# New processes with arguments
2bpftrace -e 'tracepoint:syscalls:sys_enter_execve { join(args->argv); }'
3
4# Files opened by process
5bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'
6
7# Syscall count by program
8bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'
9
10# Syscall count by syscall
11bpftrace -e 'tracepoint:syscalls:sys_enter_* { @[probe] = count(); }'
12
13# Syscall count by process
14bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[pid, comm] = count(); }'
15
16# Read bytes by process:
17bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }'
18
19# Read size distribution by process:
20bpftrace -e 'tracepoint:syscalls:sys_exit_read { @[comm] = hist(args->ret); }'
21
22# Disk size by process
23bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %d\n", pid, comm, args->bytes); }'
24
25# Pages paged in by process
26bpftrace -e 'software:major-faults:1 { @[comm] = count(); }'
27
28# Page faults by process
29bpftrace -e 'software:faults:1 { @[comm] = count(); }'
30
31# Profile user-level stacks at 99 Hertz, for PID 189:
32bpftrace -e 'profile:hz:99 /pid == 189/ { @[ustack] = count(); }'

怎么样?看起来很眼熟吧?没错,灵感就是从Solaris上的Dtrace工具而来(传承Dtrace的一行搞定(专业术词:one-liners)的精神),bpftrace将会继续沿袭Dtrace的思想,在后面的milestone中。

bpftrace

我第一次提及 bpftrace (aka BPFtrace)工作计划,是在曾经的一次演讲上:DTrace for Linux 2016, 当时,我也介绍了Linux Kernel的eBPF的孵化过程,同时也介绍了我当时在做的bcc (BPF Complier Collection)项目,一个让我在新的架构上重写Dtrace工具集的项目。bcc虽然很强大,但是要实现一个小工具就需要写一个小脚本,还是有点小麻烦(写一个小脚本要写的代码太多,不能用一行命令表达),因此,我准备额外分享另外一个高级工具bpftrace给大家。bpftrace特点在于,当希望编写小工具的时候,可以一行命

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值