我尝试查看perf script
、perf trace
和的文档trace-cmd
,包括“另请参见”中的命令列表。
我可以sched:sched_process_exec
使用 来追踪例如“实时” perf trace -a --no-syscalls -e sched:sched_process_exec
。不过它只是展示了过程姓名(例如ls
)。它不显示 PID,除非跟踪点具有特定的参数。 perf script
始终显示PID,但不显示实时输出;它显示文件的内容perf.data
。
我不需要将其作为单个命令,例如btrace
for blktrace
。我很高兴使用类似于blktrace -d /dev/sda -o - | blkparse -i -
.
(以上两个命令都显示 PID :-)。令人沮丧的是,看到blktrace
也使用跟踪事件的命令系列可以以与打印记录的跟踪相同的格式打印实时输出。我在通用追踪工具中找不到如此强大的功能!)
答案1
perf record -a --no-syscalls -e sched:sched_process_exec sh -c read | perf script
(sh -c read
提供了一种停止此跟踪的方法,只需按 Enter 键即可。如果我省略此命令并尝试使用 ctrl+C 中断管道,我的输出将丢失,可能是因为它也会中断perf script
)。
然而,由于缓冲,该输出不是“实时”的。例如,运行上面的命令没有显示任何内容,但是按 Enter 键会导致它停止并显示 exec() of 的一行sh
。 blktrace
有特殊情况代码处理管道的输出,包括禁用默认的 C stdio 缓冲。尝试在命令perf record
下运行unbuffer
给出错误“文件格式不兼容”;我认为错误来自perf script
.
man perf-report
...
选项
-i, --input=
输入文件名。 (默认值:perf.data除非 stdin 是 fifo)