问题标签 [ftrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何编写函数以使它们可用于 ftrace?
系统:Ubuntu 14.04 内核 4.10.12
所以我正在尝试了解如何使用 ftrace,但我注意到的一些事情让我有点偏离轨道:
available_filter_functions 可用于过滤跟踪到某些函数的内容。但是我试图跟踪的函数(在本例中是 KSM 的主要工作函数 ksm_do_scan)没有出现在列表中。
以下是可用函数列表(由 ksm-functions 过滤):
这是 ksm_do_scan 的样子:
我在另一个安装了内核版本 4.4.0-31 的系统上对此进行了测试,并且 ksm_do_scan() 出现在 available_filter_functions 列表中(即使它具有与 4.10.12 版本相同的代码)。所以我认为它必须与 4.10.12 内核的配置方式有关,但我不确定。到目前为止,我看到的所有推荐的 .config 选项都已启用:
最后,我知道 ftrace 将使用 __init 和 __devinit 注释的函数列入黑名单,因为内核 init 函数在初始化期间加载并在初始化完成时删除,但 ksm_do_scan 不包含这些注释中的任何一个。
是否有一种特定的方法来编写函数,以便 ftrace 将它们识别为 available_filter_functions (我是内核版本特定的)?
kernel - ftrace如何支持hook功能
是否可以通过 ftrace 或无论如何将内核函数挂钩/回调到我的内核模块。
例如:每次调用我的模块的函数net_tx_action()时,我都想要钩子,包括参数。
问候彼得
linux - 有没有办法使用不包含嵌套函数持续时间的 trace-cmd 输出函数持续时间?
我正在使用 trace-cmd 跟踪负载生成器。这是我的 trace-cmd 报告的输出片段:
所有函数的持续时间看起来都像是包含了嵌套函数调用所花费的时间。例如,我认为select_idle_sibling()
2.324 us 的持续时间包括在idle_cpu()
通话中花费的 0.294 us(总计)。同样,我相信select_task_rq_fair()
包括select_idle_sibling()
持续时间。
我要问的是,trace-cmd 中是否有办法将其关闭,这样select_task_rq_fair()
会显示其持续时间,不包括它调用的任何函数;即select_task_rq_fair()
显示持续时间为 0.616 us(2.940 us - 2.324 us)。我无法在手册页中找到此问题的答案。
linux - 如何根据网络接口名称(例如:eth2)获取 trace-cmd 报告?
有没有办法根据网络接口名称(例如:eth1 或 eth2)过滤掉 trace-cmd 报告?
当我尝试在 trace-cmd 报告过滤器中使用“名称”作为 EVENT_FIELD 时,我什么也得不到。
以下是我使用的命令
但我能够使用“len”作为 EVENT_FIELD
以下是 netif_receive_skb 的事件格式
在 trace-cmd-report 我发现以下详细信息
所以简而言之,我想知道根据“名称”EVENT_FIELD 过滤掉的命令
在此先感谢
prap4search
linux-kernel - kprobes 支持 ftrace 后,Linux 内核中的跟踪点是否冗余?
当 Linux 内核中提供对 ftrace 的 kprobe 事件支持时,使用跟踪点事件的用例是什么?似乎使用“跟踪点事件”可以完成的所有事情都可以使用 kprobe 事件来完成,因为可以将 kprobe 事件设置到跟踪点事件可用的同一点。
我错过了什么吗?
linux - 是否可以从事件跟踪中解码文件名?
我目前正在使用 Linux ftrace 调试性能,我注意到跟踪中出现了以下形式的一些事件。
是否可以将此文件名解码为文件系统中的分层名称?
或者,是否有一个配置参数会自动显示文件名的解码版本?
c - 有没有办法从内核访问最新的用户指令指针?
我正在尝试修改 Linux 内核的user_exit
事件跟踪点,以提供有关触发它的用户空间中的代码的信息。
不幸的是,用户程序的状态没有传递context_tracking_user_enter
到kernel/context_tracking.c
.
有没有办法提取在当前内核上运行的最后一条用户空间指令的(理想情况下是虚拟的)地址?
linux-kernel - 在 panic() 发生之前使用 trace-cmd/ftrace 获取 function_graph
我正在尝试使用trace-cmd
来收集有关我看到的内核崩溃的更多信息。不幸的是,内核崩溃并显示“内核恐慌 - 不同步”消息(即套接字和文件缓冲区未刷新,因此崩溃时缓冲区中的任何内容都不可避免地丢失)。
有没有办法:
- 强制
trace-cmd
进程将其缓冲区刷新到文件系统或套接字?或者 - 制作 trace-cmd/ftrace 以避免缓冲(即在幕后调用 printk() 并使用 netconsole)?
由于我trace-cmd
在虚拟化环境中运行该命令,因此我不在乎硬盘驱动器可能偶尔会损坏,因为我可以简单地恢复到最后一个好的快照或重新部署 VM。
trace - 是否可以使用 eBPF 或 perf 来计算在单个跟踪函数中花费的时间?
目前,我可以告诉trace-cmd
(一个 ftrace 前端)使用 ftrace 的函数图基础结构来跟踪指定的工作负载。使用一些跟踪数据处理工具,我可以查看调用函数的频率以及每个函数调用的相应总持续时间。示例输出可能如下所示,其中我跟踪工作负载生成的 ext4 函数调用:
我已经看到可以通过、、等生成的令人难以置信的火焰图,这让我相信我应该能够实现与使用or的输出相似的输出。但是,有一些障碍:eBPF
systemtap
perf
trace-cmd
perf
eBPF
- 我的工作负载最多可以运行 15 分钟,如果我使用
perf
. 作为参考,您可以查看在更短的时间内跟踪 bash 的示例输出。 - 我不够熟悉,
eBPF
无法确定我是否可以实现与我trace-cmd
的后处理示例输出类似的数据/输出。
对于那些比我更熟悉eBPF
或perf
比我更熟悉的人,我想知道:
- 是否可以使用
eBPF
或perf
实现我的目标? - 如果是这样,为什么可能?
如果您感觉特别慷慨,将不胜感激可以帮助我实现目标的示例代码/命令。
linux-kernel - 使用 ftrace 查看内核函数参数
我在使用 SystemTap 时遇到了很多问题,正在寻找测试 ftrace。具体来说,我希望实时监控函数的参数。我已经阅读了 ftrace 文档,但是在拼凑实际执行此操作的说明时遇到了麻烦。
我想看到这样的东西:
我假设我需要将 set_ftrace_filter 设置为正确的跟踪,但之后我该如何继续?请指教。