在ftrace available_filter_function中显示linux内核函数

时间:2016-06-24 05:57:39

标签: linux linux-kernel ftrace

我想使用ftrace跟踪perf_event_open,但它没有显示在available_filter_function中。事实上,似乎只显示模块中加载的函数。

是否有非模块功能的默认黑名单?如何添加我需要的功能?

1 个答案:

答案 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