“perf record”或“perf-record”可以采样子进程吗?

abe*_*maw 6 linux-kernel perf

假设我有一个线束二进制文件,它可以根据命令行选项产生不同的基准。我对采样这些基准非常感兴趣。

我有3个选择:

  1. 更改线束二进制文件以生成运行基准测试并进行采样的“性能记录”子进程

  2. 只需执行“perf record $harness-binary”,希望它也能对子进程进行采样。

  3. “perf record -a $harness-binary”,它将执行“来自所有 CPU 的系统范围的收集。”。这需要 root 访问权限,因此在我的情况下不可行。

如果 perf-record 真的对子进程进行采样,则方法 #2 是干净的。有人可以帮助确认是否是这种情况吗?指向文档或性能代码的指针将不胜感激。

如果方法#2 可行并且基准测试比线束更占用 CPU,我认为基准采样的质量应该相当不错,对吧?

谢谢

osg*_*sgx 9

perf record没有-a选项记录所有进程,在记录开始后从目标进程分叉(和克隆的线程)。有了perf record ./program它描绘所有的子进程也是如此,并与perf record -p $PID与安装到已经运行$ PID会简介目标进程和安装后启动的所有子进程。默认情况下启用分析继承(所需代码:attr->inherit = !opts->no_inherit;& no_inherit),可以使用-ioption 禁用,也可以通过-t和禁用--per-thread

这种继承就像在perf stathttps : //perf.wiki.kernel.org/index.php/Tutorial

计数和继承

默认情况下, perf stat 对进程的所有线程以及后续子进程和线程进行计数。这可以使用 -i 选项进行更改。不可能获得每个线程或每个进程的计数细分。

-i选项是有perf record太多:http://man7.org/linux/man-pages/man1/perf-record.1.html

  -i, --no-inherit
      Child tasks do not inherit counters.
Run Code Online (Sandbox Code Playgroud)

perf report 可以从收集的组合 perf.data 文件中过滤来自某些 PID 的事件。