使用trace-cmd进行后台追踪

使用trace-cmd record时,不能像直接使用ftrace时在后台不断记录。另外,由于总是将追踪的结果写出到文件,因此追踪过程的系统开销也会变大。系统管理人员经常建议希望随时将追踪放到内存中,并以发生某种情况为契机,将到此时为止记录的追踪数据的最新信息写出到文件。trace-cmd中使用trace-cmd start、trace-cmd extract、trace-cmd stop来进行这个操作。

trace-cmd start和trace-cmd extract中使用的参数与trace-cmd record相同。trace-cmd start具有除了文件输出或进程执行相关选项以外的选项。相反,trace-cmd extract具有文件输出的相关选项。

在下例中,向irq_handler_entry事件指定“irq>=10”过滤器,向irq_handler_exit事件指定“ret==0”过滤器,并将追踪结果记录到内核的内存中。


trace-cmd start-e irq_handler_entry-f"irq>=10"-e irq_handler_exit-f"ret==0"


命令程序已经结束,但追踪程序仍在后台运行。执行中的追踪内容可以从/sys/kernel/debug/tracing/trace特殊文件阅读。如果发生异常情况,可以使用trace-cmd stop停止追踪,然后使用trace-cmd extract写到文件中。


(发生情况)

trace-cmd stop

trace-cmd extract-o result.data

trace-cmd report-i result.data


在不执行trace-cmd stop命令的情况下,也可以执行trace-cmd extract,但这种情况下追踪数据将不断写入文件直到按下Ctrl+C快捷键为止。

另外需要注意的是,trace-cmd extract命令会在提取追踪数据的同时进行追踪的初始化(完成)。也就是说,一旦执行trace-cmd extract,在此之前运行的追踪的设置就会从内核中消失。

因此,由于发生异常情况想要临时获取快照文件时,建议按下列方法直接使用ftrace的trace。


(发生情况)

echo 0>/sys/kernel/debug/tracing/tracing_on

cp/sys/kernel/debug/tracing/trace snapshot1.log

echo 1>/sys/kernel/debug/tracing/tracing_on


在复制的前停止追踪,是为了防止混入关于复制行为自身的无用追踪数据。