假设我有一个能够根据命令行选项产生不同基准的线束二进制文件。我真的很想对这些基准测试进行抽样。
我有3个选项:
更改线束二进制以生成运行基准并进行采样的“perf record”子进程
只需执行“perf record $ harness-binary”,希望它也会对子进程进行采样。
“perf record -a $ harness-binary”,它将执行“来自所有CPU的系统级集合”。这需要root访问权限,因此在我的情况下不可行。
如果perf-record真正对子进程进行采样,则方法#2是干净的。有人可以帮助确认是否是这种情况?指向文档或执行代码的指针将受到高度赞赏。
如果方法#2是可行的并且基准测试比CPU更密集,我认为基准测试的质量应该相当不错,对吧?
由于
答案 0 :(得分:1)
perf record
选项的 -a
记录所有进程,在记录开始后从目标进程分叉(和克隆的线程)。使用perf record ./program
,它将分析所有子进程,并且perf record -p $PID
附加到已经运行的$ PID,它将分析目标进程并在附加后启动所有子进程。默认情况下启用性能分析继承(代码根据需要:attr->inherit = !opts->no_inherit;
& no_inherit),可以使用-i
选项禁用,也可以-t
和--per-thread
禁用
此继承与perf stat
:https://perf.wiki.kernel.org/index.php/Tutorial
计数和继承
默认情况下,对进程的所有线程以及后续子进程和线程执行perf stat计数。这可以使用-i选项进行更改。无法获得每线程或每个进程的计数细分。
-i
的{{1}}选项也适用于perf record
-i, --no-inherit Child tasks do not inherit counters.
perf report
可以从收集的组合perf.data文件中过滤来自某些PID的事件。