假设我有一个harness二进制文件,它可以根据命令行选项生成不同的基准。我对这些基准测试非常感兴趣。
我有3个选择:
-
更改线束二进制文件以生成perf record
运行基准测试并进行采样的子进程
-
just do perf record $harness-binary
希望它也能对子进程进行采样。
-
perf record -a $harness-binary
这将执行“系统范围内所有 CPU 的收集”。这需要 root 访问权限,因此在我的情况下不可行。
如果 perf-record 确实对子进程进行了采样,则方法 #2 是干净的。有人可以帮忙确认一下情况是否如此吗?指向文档或性能代码的指针将受到高度赞赏。
如果方法 #2 可行,并且基准测试比线束更加占用 CPU 资源,我认为基准测试采样的质量应该相当不错,对吧?
Thanks
perf record
没有-a
选项记录开始记录后从目标进程分叉(和克隆的线程)的所有进程。和perf record ./program
它也会分析所有子进程,并且perf record -p $PID
通过附加到已经运行的 $PID ,它将分析目标进程以及附加后启动的所有子进程。默认情况下启用分析继承(根据需要编写代码:attr->inherit = !opts->no_inherit; http://elixir.free-electrons.com/linux/v4.8/source/tools/perf/util/evsel.c#L809 & 不继承 http://elixir.free-electrons.com/linux/v4.8/source/tools/perf/builtin-record.c#L1639)并且可以禁用-i
选项,也被禁用-t
and --per-thread
.
这种继承就像perf stat
: https://perf.wiki.kernel.org/index.php/Tutorial https://perf.wiki.kernel.org/index.php/Tutorial
计数与继承
默认情况下,perf stat 统计进程的所有线程以及后续子进程和线程。这可以使用 -i 选项进行更改。不可能获得每个线程或每个进程的计数细分。
And -i
选项是有的perf record
too: http://man7.org/linux/man-pages/man1/perf-record.1.html http://man7.org/linux/man-pages/man1/perf-record.1.html
-i, --no-inherit
Child tasks do not inherit counters.
perf report
可以从收集的组合 perf.data 文件中过滤来自某些 PID 的事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)