【问题标题】:How can I use ftrace to get the in-kernel call graph called by a system call?如何使用 ftrace 获取系统调用调用的内核调用图?
【发布时间】:2011-08-02 04:17:45
【问题描述】:

我已经尝试过这些,但它们都产生“空”输出文件:

trace-cmd record -p function_graph -g munmap -F ls
trace-cmd record -p function_graph -g sys_enter_munmap -F ls
trace-cmd record -p function_graph -g sys_enter -F ls

【问题讨论】:

  • 您确定启用了 ftrace 吗?
  • 是的,如果我告诉它转储所有事件,它就可以工作。
  • 好吧,我尝试了这些,它们在这里工作(Ubuntu 2.6.35-28,trace-cmd 版本 1.0.3)所以我猜问题出在你的特定内核或 ftrace-cmd 版本和/或配置。
  • 您使用什么命令查看输出?你得到了什么样的输出?
  • 嗯...似乎确实有些可疑。我现在尝试了命令:“ trace-cmd record -p function_graph -g xxx -F ls ”它似乎产生了相同的输出。我认为过滤不起作用... :-)

标签: linux-kernel ftrace


【解决方案1】:

首先,您需要正确获取函数名称 - 例如用于跟踪 open 系统调用的函数名称是 sys_open

要以“正确”的方式执行此操作,内核中必须有function_graph 支持。在 x86 架构上 this depends on CC_OPTIMIZE_FOR_SIZE being disabled,但在 x86_64 上却没有。

就我而言,我没有费心编译自定义内核来禁用 CC_OPTIMIZE_FOR_SIZE,我只是这样做了

trace-cmd record -p function --func-stack

并包含各种看起来可以通过添加几个-l 选项来调用的函数。这足以弄清楚我想知道什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多