【问题标题】:performance monitoring for subset of process execution流程执行子集的性能监控
【发布时间】:2014-10-13 20:30:59
【问题描述】:

我打算收集 linux 应用程序执行的一小部分的统计信息。这个子集可以定义为前 n 个指令,或前 n 个周期。

对于定义的子集,我们对分支预测准确性、缓存命中率和内核的 IPC 等统计数据感兴趣。

perf 工具看起来是此类监控的最佳选择。但是,在 perf 中指定子集的方法是运行提供子集信息的命令。

示例:如果我想收集前 n 秒的数据,我必须运行以下命令。

perf stat -p PID 睡眠 n

在这里,我必须运行程序,然后使用它的 PID 将 perf 附加到该程序。 perf 使用 pid PID 收集进程的数据,直到 sleep 命令运行。 但是,从我的程序开始执行到 perf 附加到进程的时间,可能已经执行了 x 条指令。由于 x 是随机的,因此绝对无法知道 perf 分析了哪些指令。

如果有建议可以帮助我监控程序的执行

  1. 前 n 秒,或
  2. 从程序执行中的一个确定点(某个函数名或指令指针)

【问题讨论】:

  • 你能破解程序的源代码吗?
  • 你能做到吗?
  • @emotionull 我已经回答了这个问题。看看有没有帮助

标签: intel performance-testing performancecounter perf


【解决方案1】:

我们使用了一个简单的 hack 作为解决此问题的方法。

让我们调用被监控的程序M,x秒是需要收集性能统计的时间。

我们编写了一个程序 P,它派生出 M,然后休眠 x 秒。从睡眠中醒来后,程序 P 杀死自己及其所有后代。

if(fork()!=0)
then
     sleep x seconds
     kill me
else
     execute monitored program
endif

在程序P上运行perf(性能收集实用程序)。统计数据反映了程序P和M的特性。由于程序P没有做任何繁重的操作,它不会对性能统计产生太大影响。

需要注意的是,节目的监控时长必须足够大,才能掩盖节目P的统计数据。

【讨论】:

  • 谢谢。你知道我们怎样才能为前 n 条指令而不是几秒钟做到这一点吗?
  • 不。但是您可以编写一个脚本,在时间范围内使用二进制排序来获得所需数量的指令。这是一种近似方法。看看有没有帮助
猜你喜欢
  • 1970-01-01
  • 2018-04-08
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多