将系统调用事件跟踪输出的格式更改为 ftrace

Posted

技术标签:

【中文标题】将系统调用事件跟踪输出的格式更改为 ftrace【英文标题】:Change format of syscall event trace output to ftrace 【发布时间】:2019-08-21 21:59:08 【问题描述】:

我为 sys_enter_openat 系统调用启用了 ftrace 事件跟踪。 events/syscalls/sys_enter_openat/format 给出的相应输出格式为

print fmt: "dfd: 0x%08lx, filename: 0x%08lx, flags: 0x%08lx, mode: 0x%08lx", ((unsigned long)(REC->dfd)), ((unsigned long)(REC->filename)), ((unsigned long)(REC->flags)), ((unsigned long)(REC->mode))

正如预期的那样,ftrace 的示例输出行类似于

msm_irqbalance-1338  [000] ...1 211710.033931: sys_openat(dfd: ffffff9c, filename: 5af693f224, flags: 2, mode: 0)

有没有办法改变输出格式,使filename: 5af693f224 可以显示为filename: <string> 而不是地址? 我想这可以使用systemtapkrpobe,但我的设置目前不允许使用它。

【问题讨论】:

【参考方案1】:

您可以使用自己的格式定义 kprobe 事件:

cd /sys/kernel/debug/tracing
echo 'p:open do_sys_open file=+0(%si):string' > kprobe_events
echo 1 > events/kprobes/open/enable
cat trace_pipe

哪个输出:

cat-123 [001] .... 123.123: open: (do_sys_open+0x0/0x80) file="/etc/fstab"
cat-123 [001] .... 123.124: open: (do_sys_open+0x0/0x80) file="/dev/zero"

详情见:https://events19.linuxfoundation.org/wp-content/uploads/2017/12/oss-eu-2018-fun-with-dynamic-trace-events_steven-rostedt.pdf

【讨论】:

以上是关于将系统调用事件跟踪输出的格式更改为 ftrace的主要内容,如果未能解决你的问题,请参考以下文章

如何在ftrace中使用跟踪标记?

android性能測试systrace

ftrace:跟踪你的内核函数! | Linux 中国

javascript 跟踪更改为新事件

我可以使用 Libre Office 的哪种输出格式来跟踪我的文件历史记录?

使用ftrace学习linux内核函数调用