我想使用ftrace跟踪perf_event_open,但它没有显示在available_filter_function中。事实上,似乎只显示模块中加载的函数。
是否有非模块功能的默认黑名单?如何添加我需要的功能?
答案 0 :(得分:1)
2010年1月20日Steven Rostedt撰写的“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 /?
中的文件吗?Syscalls可用于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
。