Please enable Javascript to view the contents

系统级跟踪 eBPF 工具 —— bpftrace 入门

 ·  ☕ 1 分钟

bpftrace 简介

bpftrace 简单使用

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

1
2
3
4
5
6
7
8
$ bpftrace -l '*open*'

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

跟踪所有 sys_enter_open() 系统调用

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

然后在另外一个终端中

1
$ 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*(),输出总计数

1
2
3
4
5
6
$ 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]

分享

Mark Zhu
作者
Mark Zhu
An old developer