问题标签 [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.

0 投票
1 回答
1021 浏览

sockets - 使用 ftrace 测量 Linux 的 UDP 延迟

我需要测量到达以太网端口的单个 UDP 数据包(即生成的中断)与该数据包被传递到用户级别的时间(即 read() 系统调用畅通)之间的延迟。

这个时间可以通过SIOCGSTAMP ioctl(内核级)和clock_gettime(用户级)的时间戳来测量。但是,我有兴趣了解如何通过 ftrace 命令测量这种延迟。

0 投票
1 回答
1584 浏览

linux - /sys/kernel/debug/tracing/trace_marker Bad file descriptor error

Im trying to do

echo "FINN" > /sys/kernel/debug/tracing/trace_marker

inside the shell (ubuntu 14) as root and im getting the next error

bash: echo: write error: Bad file descriptor

I dont know what is wrong, I read how to do it here and here (articles about how using ftrace)

Other ftrace files that I had to write into worked fine...

0 投票
1 回答
184 浏览

linux - Kprobe:将返回探针与入口探针关联

我想跟踪对特定文件的写入,所以我想我可以这样做:

我在 上创建一个探针do_sys_open,如果filename参数与我正在寻找的模式匹配,我使用触发器来启用一个返回探针,该探针会获取返回的文件描述符 id(它是$retval)。这个返回探针将对 有一个过滤器,common_pid因为我只对刚刚打开我要监视的调用fd返回的 s感兴趣。返回探针采用并启用另一个探针,并在 和 上使用过滤器。我希望这样我就可以只跟踪我正在监视的一个文件上的操作。do_sys_openfilenamefdsys_writecommon_pidfdwrite

问题是这不适用于多线程进程。如果一个进程同时调用open两次(使用两个线程),上述机制可能会失败。现在我正在尝试找出一种方法来在入口do_sys_open和返回探测之间建立这种关联do_sys_open,我会很高兴有任何建议。

PS:我不确定这个问题是属于 stackoverflow 还是 unix & linux。

0 投票
1 回答
1531 浏览

linux - ftrace:通过 echo 从 function_graph 更改 current_tracer 时系统崩溃

我最近一直在玩 ftrace 来监控我系统的一些行为特征。我一直在处理通过一个小脚本打开/关闭跟踪。运行脚本后,我的系统会崩溃并自行重启。最初,我认为脚本本身可能存在错误,但后来我确定崩溃和重新启动是由于在设置为 function_graphecho时将一些跟踪器添加到 /sys/kernel/debug/tracing/current_tracer造成的。current_tracer

也就是说,以下命令序列将产生崩溃/重启:

在上述语句导致崩溃后重新启动echo期间,我看到很多输出内容为:

清除孤立的 inode<inode>

current_tracer我试图通过将function_graph 中的值替换为 C 程序中的其他值来重现此问题:

奇怪的是,C 程序并没有使我的系统崩溃。

我最初在使用 Ubuntu(Unity 环境)16.04 LTS 时遇到了这个问题,并确认它是 4.4.0 和 4.5.5 内核上的问题。我还在 4.2.0 和 4.5.5 内核上运行 Ubuntu(Mate 环境)15.10 的机器上测试了这个问题,但无法重现该问题。这只会让我更加困惑。

谁能告诉我正在发生的事情?具体来说,为什么我能够write()但不能echo/sys/kernel/debug/tracing/current_tracer?

更新

正如 vielmetti 指出的那样,其他人也遇到了类似的问题(如此处所示

ftrace_disable_ftrace_graph_caller()修改 jmp 指令 假设它在ftrace_graph_calljmp (e9) 附近有 5 个字节。然而,它是一个简短的 jmp,仅包含 2 个字节(eb)。并且 ftrace_stub()位于ftrace_graph_caller上面的所以修改的正下方,会破坏导致内核 oops 的指令,ftrace_stub()并且操作码无效,如下所示:

补丁(如下所示)解决了这个echo问题,但我仍然不明白为什么echo之前write()没有破解。

通过https://lkml.org/lkml/2016/5/16/493

0 投票
2 回答
5298 浏览

linux - ftrace:仅打印 trace_printk() 的输出

是否可以只转储文件trace_printk()中的输出trace?我的意思是过滤掉函数跟踪器(或任何其他跟踪器)中的所有函数。

0 投票
1 回答
818 浏览

linux - 使 linux 内核函数在 ftrace 中显示 available_filter_function

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

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

0 投票
1 回答
1909 浏览

linux - 无法通过 ftrace 跟踪系统调用

我正在使用 ftrace 来跟踪内核中的 sys_read 调用。使用函数或图形跟踪器,将 set_ftrace_filter 设置为 sys_write 失败

这是我的 ftrace kconfigs

我在 available_filter_functions 中也没有 sys_read 或 sys_write 。我在 arm 平台上使用 3.14 内核。请帮忙。

0 投票
1 回答
874 浏览

c++ - 使用 Boost::asio posix stream_descriptor 读取 ftrace 管道

我正在尝试构建一个从调试 fs 处的ftrace 管道读取的应用程序。

似乎当尝试使用 boost::asio API 从trace_pipetrace_pipe_raw异步读取时,管道中等待的事件正在被 async_read 句柄处理并打印到屏幕上,但是在程序启动后到达的新事件不会触发async_read 句柄。

运行下面的示例代码,我得到了所有在队列中等待的事件的打印,但我没有得到任何稍后到达的新事件的打印。

如果我尝试使用 mkfifo 从手动创建的管道中读取数据,但对 ftrace 管道不起作用,则相同的示例可以完美运行。

0 投票
1 回答
84 浏览

android - 在 MAKO 中初始化 ftrace 失败

我正在尝试在 MAKO (Nexus 4) 中使用 ftrace

使用 msm.git 中的 android-msm-mako-3.4-lollipop-release 分支,我刚刚在 mako_defconfig 中添加了以下配置

但是 ftrace_init 在 booting time 失败 kmsg 中有一些失败的日志

我认为它不能写超过 0xC010_0000,所以这是内核大小的问题但是,我只是用 vanila 代码添加了那些跟踪配置,我该如何解决这个问题?

添加一些日志,我阻止了 ftrace_bug 函数,它调用了 ftrace_kill,它禁用了 ftrace。相反,我记录了哪个函数出错

看起来某些特定的功能被阻止编写;;

0 投票
1 回答
1224 浏览

c - 如何测量 linux 内核中的调度延迟?

我想比较两个 linux 内核版本之间的调度延迟。这是我到目前为止所尝试的:

  1. 在两个内核上配置 Ftrace
  2. 打开跟踪中的 sched 事件。
  3. 启用唤醒跟踪器。

但是,唤醒只显示最高优先级进程的结果,而不是我的 c 程序。我尝试使用 nice 并从跟踪中捕获它。它仍然显示其他同样高进程的日志。我是否错过了其他一些步骤来捕获我的流程日志?有没有更好的方法通过修改我的程序的源代码而不是在启动它时使用 nice 来将我的进程的优先级设置为最高?

我尝试的下一步是禁用唤醒跟踪器并仅启用 sched 事件。我得到的日志看起来像这样

并显示延迟+!参考 ftrace 内核文档了解数量)。这是否意味着 sched wakeup 的延迟为 '+' 和 sched Witch '!' 分别是微秒?

还有其他比较linux调度延迟的方法吗?