bpftrace 简介#

bpftrace 简单使用#

查询可以跟踪的内核函数,以 sleep 为关键字#

$ bpftrace -l '*open*'

tracepoint:syscalls:sys_exit_open_tree
tracepoint:syscalls:sys_enter_open
...
kprobe:vfs_open
kprobe:tcp_try_fastopen
...

跟踪所有 sys_enter_open() 系统调用#

$ bpftrace -e 'tracepoint:syscalls:sys_enter_open{ printf("%s %s\n", comm,str(args->filename)); }' | grep vi

然后在另外一个终端中

$ vi /etc/hosts

可以看到在 bpftrace 终端中输出:

vi /usr/lib/locale/locale-archive
vi /usr/share/locale/locale.alias
vi /usr/lib/locale/zh_CN.UTF-8/LC_IDENTIFICATION
...
^C

跟踪所有 sys_enter_open*(),输出总计数#

$ bpftrace -e 'tracepoint:syscalls:sys_enter_open*{ @[probe] = count(); }'
Attaching 4 probes...
^C

@[tracepoint:syscalls:sys_enter_openat]: 123
@[tracepoint:syscalls:sys_enter_open]: 628

参考#

[BPF Performance Tools]