0

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

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

4

1 回答 1

2

Steven Rostedt 于 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

于 2016-06-27T02:51:07.840 回答