流程执行子集的性能监控

时间:2014-08-20 13:03:12

标签: intel performance-testing performancecounter perf

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

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

perf工具看起来是这种监控的最佳选择。但是,在perf中指定子集的方法是运行一个给出子集信息的命令。

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

perf stat -p PID sleep n

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

我会帮助我监控程序执行的建议

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

1 个答案:

答案 0 :(得分:1)

我们使用简单的黑客作为此问题的解决方法。

让我们调用受监控的程序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的统计数据。

相关问题