Performance 如何使用perf stat计算MIPS
以下建议:Performance 如何使用perf stat计算MIPS,performance,profiling,mips,cpu,perf,Performance,Profiling,Mips,Cpu,Perf,以下建议: perf stat./my_程序在Linux上将使用CPU性能计数器 记录它运行了多少条指令,以及它的核心时钟周期 拿。(以及它使用了多少CPU时间,并将计算 你) 下面的示例生成不包含计算的MIPS信息的以下输出 Performance counter stats for './hello.py': 1452.607792 task-clock (msec) # 0.997 CPUs utilized 327
perf stat./my_程序在Linux上将使用CPU性能计数器
记录它运行了多少条指令,以及它的核心时钟周期
拿。(以及它使用了多少CPU时间,并将计算
你)
下面的示例生成不包含计算的MIPS
信息的以下输出
Performance counter stats for './hello.py':
1452.607792 task-clock (msec) # 0.997 CPUs utilized
327 context-switches # 0.225 K/sec
147 cpu-migrations # 0.101 K/sec
35,548 page-faults # 0.024 M/sec
2,254,593,107 cycles # 1.552 GHz [26.64%]
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
1,652,281,933 instructions # 0.73 insns per cycle [38.87%]
353,431,039 branches # 243.308 M/sec [37.95%]
18,536,723 branch-misses # 5.24% of all branches [38.06%]
612,338,241 L1-dcache-loads # 421.544 M/sec [25.93%]
41,746,028 L1-dcache-load-misses # 6.82% of all L1-dcache hits [25.71%]
25,531,328 LLC-loads # 17.576 M/sec [26.39%]
1,846,241 LLC-load-misses # 7.23% of all LL-cache hits [26.26%]
1.456531157 seconds time elapsed
“./hello.py”的性能计数器统计信息:
1452.607792任务时钟(毫秒)#使用了0.997个CPU
327个上下文开关#0.225 K/sec
147 cpu迁移#0.101 K/秒
35548页错误#0.024米/秒
2254593107个周期#1.552 GHz[26.64%]
停止循环前端
暂停周期后端
1652281933指令#0.73 INSN/周期[38.87%]
353431039个分支机构#243.308米/秒[37.95%]
18536723家分支机构未命中#占所有分支机构的5.24%[38.06%]
612338241 L1数据缓存负载#421.544米/秒[25.93%]
41746028 L1数据缓存加载未命中#所有L1数据缓存命中的6.82%[25.71%]
25531328 LLC负载#17.576米/秒[26.39%]
1846241 LLC加载未命中#所有LL缓存命中的7.23%[26.26%]
1.456531157秒经过的时间
[Q]如何从
性能统计的输出正确计算MIPS
?为了计算MIPS,我应该按照从perf stat
中获得的值执行指令/秒\u时间
?显然只是指令/秒。(除以100万以缩放为百万公制前缀。)
使用总运行时间将为您提供整个程序的MIPS、所有内核的总和,并计算睡眠/等待的时间
任务时钟将计算所有内核上使用的CPU总时间,因此它将为您提供所有使用的内核的平均MIPS,而不计算任何睡眠时间。(task clock:u
只计算用户空间时间,但task clock
也计算内核中花费的时间。)据我所知task clock
相当于所有内核的平均MIP,对吗?因此,据我所知,使用任务时钟
而不是指令/秒
来忽略睡眠/等待所花费的时间会更有效@彼得Cordes@alper:这不是一个“效率”的问题,这只是你可能想要衡量的两个不同的东西instructions/task clock
是所有内核的平均MIPS,只计算未睡眠的时间。e、 g.perf stat sleep 1
将仅显示约0.4毫秒的任务时钟,但运行时间为1秒。具有I/O等待或硬页错误的代码在这些时间间隔内不执行任何指令会浪费时间,因此,对这些时间进行计数当然是合理的。或者在多线程代码中等待互斥锁的睡眠时间。两者之间有很大的区别perf stat sleep 1
返回任务时钟的1毫秒
,即0.001秒。因此,对于运行时间instructions/1
或任务时钟instructions/0.001
来说,它大约要小1000倍@彼得Cordes@alper:没错<代码>睡眠
启动、动态链接其库和进行系统调用只需很少的CPU时间。但是它花大量时间睡觉,所以总的挂钟时间很长。在大部分运行时间内,CPU可用于其他任务,但睡眠
任务本身未完成<大型文件的code>cp
类似:等待I/O的大部分时间。u
和k
修饰符(以及任何其他修饰符)似乎对任务时钟
和cpu时钟
事件不起作用。始终包括用户时间和内核时间。