我想使用ftrace跟踪perf_event_open,但它不显示在available_filter_函数中。实际上,似乎只显示加载在模块中的函数。
非模块功能是否有默认黑名单?如何添加我需要的功能?
最佳答案
2010年1月20日,史蒂文·罗斯泰特的文章《Ftrace函数追踪的秘密》中有一些信息:https://lwn.net/Articles/370423/
可以添加到筛选文件的函数列表显示在available_filter_functions
文件中。此函数列表是从前面提到的存储mcount
调用方列表派生的。
文件中列出的一组函数取决于内核编译选项(请在/boot/config*或/proc/config.gz中选中它们并将结果添加到问题中):
CONFIG_FUNCTION_TRACER
CONFIG_DYNAMIC_FTRACE
CONFIG_FUNCTION_GRAPH_TRACER
在本系列的前一篇文章中有更多关于mcount的信息:https://lwn.net/Articles/365835/使用Ftrace调试内核-第1部分,2009年12月,Steven Rostedt:
功能追踪是Ftrace最强大的追踪工具之一。它使用gcc的-pg选项让内核中的每个函数都调用一个特殊函数“mcount()”。。当配置了CONFIG_DYNAMIC_FTRACE时,调用在启动时转换为NOP,以使系统以100%的性能运行。在编译期间,会记录mcount()调用站点。
您还可以检查/sys/kernel/debug/tracing/events/syscalls/sys_enter_perf_event_open/中的文件吗?
ftrace不以函数的形式提供系统调用,而是以事件的形式提供(例如opensourceforu.com/2010/12/kernel-tracing-with-ftrace-part-2/):
trace-cmd record -e syscalls ls ##Initiate tracing on the syscall 'ls'
##(A file called trace.dat gets created in the current directory.)
trace-cmd report ## displays the report from trace.dat
对我来说,
trace-cmd record -e syscalls perf stat ls -d .
会接到perf_event_open
的电话。关于linux - 使Linux内核功能在ftrace中显示available_filter_function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38006485/