Linux kernel 如何使用ftrace获取系统调用调用的内核内调用图?

Linux kernel 如何使用ftrace获取系统调用调用的内核内调用图?,linux-kernel,ftrace,Linux Kernel,Ftrace,我尝试过这些方法,但它们都会生成“空”输出文件: 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 首先,您需要获得正确的函数名-例如,用于跟踪opensyscalls的函数名是sys\u open 要以“正确”的方

我尝试过这些方法,但它们都会生成“空”输出文件:

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

首先,您需要获得正确的函数名-例如,用于跟踪
open
syscalls的函数名是
sys\u open

要以“正确”的方式实现这一点,必须在内核中提供
function\u-graph
支持。在x86体系结构上,但在x86_64上则不是

在我的例子中,我没有费心编译一个自定义内核来禁用CC_OPTIMIZE_FOR_SIZE,我只是这样做了

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

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

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