【问题标题】:Make linux kernel function show in ftrace available_filter_function使 linux 内核函数在 ftrace 中显示 available_filter_function
【发布时间】:2016-10-26 15:58:01
【问题描述】:

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

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

【问题讨论】:

  • 您的操作系统分布是什么? linux内核的确切名称(版本)是什么(uname -a的输出)

标签: linux linux-kernel ftrace


【解决方案1】:

在 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 的呼叫。

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 2014-08-01
    • 2013-02-22
    • 2014-12-22
    • 1970-01-01
    • 2012-07-21
    • 2014-01-07
    • 2018-01-18
    • 1970-01-01
    相关资源
    最近更新 更多