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

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

我为 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>而不是hex(5af693f224)

因此,基本上有一种方法可以在跟踪特定事件(例如上面的 sys_enter_openat)到 ftrace 时更改输出格式。

我想这可以使用 systemtap 或 krpobe 实现,但我的设置目前不允许使用它。

答案1

不幸的是,目前还没有办法做到这一点。但也许将来我可能会添加它,如果我能找到一个合理的接口和实现来做这样的事情。也许我会添加一个触发器,使输出显示不同。

虽然我可能是 StackExchange 的新手,但我是 ftrace 的作者(真名 Steven Rostedt - 查找 git 历史记录)。当我编写代码时,“真正的答案”就会出现!

答案2

看来你只能使用 BPF 来覆盖 ftrace 跟踪事件打印。 ftrace 无法实现这一点。 ftrace 跟踪事件打印应该可以从用户空间进行配置。那会很棒的。

相关内容