我对ftrace的经验有限,尽管我已经将它用于函数堆栈跟踪和延迟问题. (具有更多经验的人可能会建议)使用trace-cmd和kernelshark的体验非常相似.
但是,如果要在内核空间中跟踪系统调用,函数参数,内核API和返回值等,则更好的选择是使用systemtap.它有一个广泛的Samples & Doc列表,它适用于函数调用跟踪,参数值传递等.您可能需要查看一些示例并根据您的要求进行调整.请参阅general / para-callgraph-verbose.stp和process / sleeptime.stp
“
general / para-callgraph-verbose.stp – 带有详细参数的Callgraph跟踪
关键字:TRACE CALLGRAPH
打印一个定时的每线程微秒定时调用图,包括漂亮打印的函数参数和返回值.第一个参数命名函数探针指向跟踪.可选的第二个参数为触发器函数命名探测点,这些触发器函数仅用于跟踪当前线程嵌套在触发器中时发生的那些函数.
stap para-callgraph-verbose.stp 'kernel.function("*@fs/proc*.c")' \
'kernel.function("vfs_read")' -c "cat /proc/sys/vm/* || true"
process / strace.stp – 跟踪系统调用
关键字:_BEST PROCESS SYSCALL
当应用于单个进程或层次结构(通过-c / -x)或整个系统(不带-c / -x)时,脚本会松散地模拟strace.可以使用-G设置一些输出配置参数.
stap strace.stp -c "sleep 1"
“
请注意,您需要安装正确版本的调试内核和kernel-devel rpms / deb才能使stap正常工作.为此,只需使用stap-prep并根据您所使用的风格安装显示的依赖项.