【问题标题】:can "perf record" or "perf-record" sample child processes?“性能记录”或“性能记录”可以对子进程进行采样吗?
【发布时间】:2017-07-02 01:24:16
【问题描述】:

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

我有 3 个选择:

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

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

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

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

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

谢谢

【问题讨论】:

标签: linux-kernel perf


【解决方案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 选项也适用于 perf recordhttp://man7.org/linux/man-pages/man1/perf-record.1.html

  -i, --no-inherit
      Child tasks do not inherit counters.

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2021-08-15
  • 2011-01-02
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
相关资源
最近更新 更多