推文详情
avatar
@dantezy@dabr.ca
我要夫子自道地卖一下广告:

dust

一个抄 pwru 的 ebpf 小工具,主要作用就是跟踪一个 io request 的生命周期。别的不说,能省一点穿越层层调用链看调用次序。

github.com/dantesli...
查看详情

GitHub

GitHub - danteslimbo/dust

Contribute to danteslimbo/dust development by creating an account on GitHub.

0
0
1
avatar
@dantezy@dabr.ca
加上了 github action

t.me/danteslimbo/3277
查看详情

Telegram

Dante's Limbo

#ebpf #dust 给 dust 加上了 github action: https://github.com/danteslimbo/dust/actions/workflows/makefile.yml 有空继续抄 #pwru

0
0
1
avatar
@dantezy@dabr.ca
github.com/dantesli...

整了个 release 页。
查看详情

GitHub

Release v0.0.2 · danteslimbo/dust

0
0
1
avatar
@dantezy@dabr.ca
t.me/danteslimbo/3327

dust 抄了 purw 拿 probed 函数的方法:从 ip 寄存器里面拿指令地址,再用指令地址从符号表反查函数名。

但这方法放 blk_mq_alloc_request 不灵了,因为这里挂的是 kretprobe ,ip 的地址指向 kretprobe_trampoline. 昨天拿 bpftrace 琢磨了半天,把所有寄存器都打出来看了一下,最后还是不知道怎样拿到 blk_mq_alloc_request 的地址。

不过我倒是学了一点别的伎俩:

1. bpftrace 有一个 --emit-elf 参数,可以把 bpftrace script 导出成 elf 文件,然后就可以用 llvm-objdump 分析了。
2. bpftrace 的 print 其实用了一个 perf_event 往外吐数据。

回到 dust 我决定先用 addr = 0 标注这是从 blk_mq_alloc_request 返回的事件,先糊弄过去了。

github.com/dantesli...
查看详情
0
0
1
@dantezy@dabr.ca
0/483
加载中