perf stat gives different number of instruction for every run
我对以下空程序进行了性能分析,
1 2 3 | #include <stdio.h> int main() { } |
编译并运行 perf stat ./a.out 后,我??得到以下输出(连同其他数据,如周期数、任务时钟等):
1 | 418,869 instructions # 0.87 insns per cycle |
在同一个sprite的每次"性能"分析期间,指令的数量都会发生变化。
我的实际需要是找到我写的特定函数中的指令数。所以我将从新程序中的指令数中减去上述数字。(我可以计算在 gcc 中使用 -S 标签创建的 program.s 中的行数,但在查看性能行为后我很困惑) 为什么指令的数量不一致,确切地说是不一样? 更新 中使用 perf_event_open() 为了测量你的函数执行的指令数量,我建议在函数的进入和退出时使用 perf_event_open() 开始和停止事件计数,而不是在有和没有函数的情况下运行两次你的程序。
我按照手册页中给出的示例在 C
关于空程序执行的指令数量的不确定性,您可能正在计算用户和内核领域的事件。我认为两次运行之间的用户土地计数应该保持不变,但是对于内核部分,执行该程序的幕后发生了很多事情,所以我猜不确定性来自内核代码中发生的事情。要仅计算用户空间指令,您可以使用:
1 | perf stat -e instructions:u a.out |
您能否详细说明不同之处?