可以“执行记录”或“执行记录”样本子进程吗?

时间:2017-07-02 01:24:17

标签: linux-kernel perf

假设我有一个能够根据命令行选项产生不同基准的线束二进制文件。我真的很想对这些基准测试进行抽样。

我有3个选项:

  1. 更改线束二进制以生成运行基准并进行采样的“perf record”子进程

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

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

  4. 如果perf-record真正对子进程进行采样,则方法#2是干净的。有人可以帮助确认是否是这种情况?指向文档或执行代码的指针将受到高度赞赏。

    如果方法#2是可行的并且基准测试比CPU更密集,我认为基准测试的质量应该相当不错,对吧?

    由于

1 个答案:

答案 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 stathttps://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的事件。