ftrace:仅打印trace_printk()的输出

3

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


1
据我所记,将“none”写入“current_tracer”文件会确切地做到这一点:只有“trace_printk()”输出被存储。现在无法检查。 - Tsyvarev
2
@Tsyvarev,谢谢。但是none是无效的值。(nop在那里,但它用于从跟踪中删除所有跟踪器。) - Ravi
我认为他的意思是 nop,它可以工作。 - imbr
2个回答

5
一般来说,您可以在选项目录 /sys/kernel/debug/tracing/options 内关闭选项。使用 ls 显示所有可切换的选项。
# ls
annotate     context-info     funcgraph-abstime   funcgraph-overhead  func_stack_trace  hex             overwrite        record-cmd  sym-offset       trace_printk
bin          disable_on_free  funcgraph-cpu       funcgraph-overrun   function-fork     irq-info        printk-msg-only  sleep-time  sym-userobj      userstacktrace
blk_classic  display-graph    funcgraph-duration  funcgraph-proc      function-trace    latency-format  print-parent     stacktrace  test_nop_accept  verbose
block        event-fork       funcgraph-irqs

通过echo切换选项,例如:

echo -n "1" > /sys/kernel/debug/tracing/options/trace_printk

如果您想要过滤掉任何不是由trace_printk()产生的输出,您可能需要确保trace_printk()是唯一设置的选项。

当您有疑问时,查看内核文档总是一个好主意。还有一篇很棒的lwn文章,帮助我初学ftrace时受益匪浅,名为Ftrace函数跟踪器的秘密,其中包括一些关于过滤的一般性内容。


我尝试了你所说的,即执行命令 echo -n "1" > /sys/kernel/debug/tracing/options/trace_printk,并确保 trace_printk 是唯一设置的选项。但是当我安装相关模块时,/sys/kernel/debug/tracing/trace 仍然会打印出可用的过滤函数名称。 - codexplorer
@codexplorer 我相信那些是输出 trace_printk() 的函数。 - buratino
我正在追踪 null_blk 块模块。我确定 trace_printk() 是唯一设置的选项。然后我检查了 /sys/kernel/debug/tracing/trace 的输出,它列出了 null_del_dev、null_init、null_alloc_dev、null_add_dev 等等。但显然,这些函数并没有调用 trace_printk()。我是否有什么误解?请给我指点。 - codexplorer

1

对于一些无法从这个帖子中获取更多信息的人... 实际上,如果您将nop用作当前跟踪器,您将忽略除trace_printk之外的所有跟踪。

echo nop > current_tracer

运行您的内核模块或包含trace_printk的其他任何内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接