perf stat为每次运行提供不同数量的指令

时间:2014-10-11 07:16:47

标签: linux computer-architecture perf

我对以下空程序运行了perf分析,

#include <stdio.h>
int main() {
}

编译并运行perf stat ./a.out后,我得到了以下输出说明(以及其他数据,如周期数,任务时钟等):

418,869 instructions # 0.87 insns per cycle

指令数量在每个&#39; perf&#39;对同一个精灵的分析。

我的实际需要是找到我写的特定函数中的指令数。所以我将从新程序中的指令数减去上面的数字。(我可以计算在gcc中使用-S标签创建的program.s中的行数,但在查看perf行为后我感到困惑)

为什么说明的数量不一致,确切地说不一样?

更新 我按照man page中给出的示例在C

中使用perf_event_open()

1 个答案:

答案 0 :(得分:4)

为了衡量你的功能执行的指令数量,我建议在功能的进入和退出时使用perf_event_open()开始和停止事件计数,而不是使用和不使用该功能运行两次你的程序。 / p>

关于空程序执行的指令数的非确定性,您可能正在计算用户和内核域中的事件。我认为用户的土地数应该在两次运行之间保持不变,但是对于内核部分,很多事情都发生在执行这个程序的场景后面,所以我猜非确定性来自内核代码中发生的事情。要仅计算用户空间指令,您可以使用:

perf stat -e instructions:u a.out

您能否提供有关差异的更多细节?