Vig*_*esh 6 linux computer-architecture perf
我对以下空程序运行了perf分析,
#include <stdio.h>
int main() {
}
Run Code Online (Sandbox Code Playgroud)
编译并运行perf stat ./a.out后,我得到了以下输出说明(以及其他数据,如周期数,任务时钟等):
418,869 instructions # 0.87 insns per cycle
Run Code Online (Sandbox Code Playgroud)
在同一个精灵的每次'perf'分析期间,指令的数量都会发生变化.
我的实际需要是找到我写的特定函数中的指令数.所以我将从新程序中的指令数减去上面的数字.(我可以计算在gcc中使用-S标签创建的program.s中的行数,但在查看perf行为后我感到困惑)
为什么说明的数量不一致,确切地说不一样?
更新 我按照手册页中给出的示例在C中使用perf_event_open()
为了测量函数执行的指令数,我建议在函数进入和退出时使用perf_event_open()启动和停止事件计数 ,而不是在使用和不使用该函数的情况下运行两次程序。
关于空程序执行的指令数量的不确定性,您可能正在计算用户和内核区域中的事件。我认为用户土地计数在两次运行之间应该保持相同,但对于内核部分,执行该程序的许多事情在幕后发生,所以我猜非确定性来自内核代码中发生的事情。要仅计算用户空间指令,您可以使用:
perf stat -e instructions:u a.out
Run Code Online (Sandbox Code Playgroud)
您能提供有关差异的更多详细信息吗?