加载中…
个人资料
sh_neo
sh_neo
  • 博客等级:
  • 博客积分:0
  • 博客访问:21,320
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

性能分析系列---pmu

(2009-04-01 14:58:06)
标签:

杂谈

 
pfmon,libpfm,perfmon2及pmu 架构图:
                     pfmon
userspace -----libpfm
------------------------------
kernel ----------- perfmon2
------------------------------
hardware---------PMU
 
可以multiplexing --allows us to monitor a larger set of event .
可以wide monitoring mode ---allow for monitoring all running applications including the operating system
可以sampling 一段时间 比如sampled each hour~
 
PMU event 介绍 ---基于Intel(R) Core 2    很多性能分析工具都能会用到如 Inter vtune , pfmon
常用的pmu事件 一共好几百个
1) UNHALTED_CORE_CYCLES---表示非停机状态花费的机器周期
2) INSTRUCTIONS_RETIRED---指令的有效执行的计数
3) BRANCH_INSTRUCTIONS_RETIRED---分支指令的有效执行计数
4) MISPREDICTED_BRANCH_RETIRED---分支预测失败的指令执行计数
5) INST_RETIRED:LOADS---load指令计数
6) LAST_LEVEL_CACHE_MISSES---l2cache未命中的时钟周期  包括去尝试读 写L1 获得7) l1cache锁的时间
8) LAST_LEVEL_CACHE_REFERENCES--访问L2cache的时钟周期  包括读 写 获得锁 l1cache
9) INST_RETIRED.STORES---store指令计数
10) X87_OPS_RETIRED:ANY---浮点运算指令计数
11) RESOURCE_STALLS:ANY---流水线阻塞的时钟周期
(下面是Resource_Stalls的组成.
1.RESOURCE_STALLS.BR_MISS_CLEAR:因为分支的误测引起的流水线阻塞(需等待其他微操作完成),这样新的微指令就不能进入Out-Of-Order.
2.Resource_Stalls.ROB_FULL:很多指令在流水线中等待处理.由于某些指令的存取操作不能从L2缓存上进行造成的延误,而其他指令不能进入流水线的Re-Order-Buffer (最多容纳96条指令)
3.Resource_Stalls.LD_ST:所有的存取缓冲全在使用,以至于发生等待.
4.Resource_Stalls.RS_FULL: Reservation Station (RS) 最多容纳32.由于某些指令的存取操作不能从L2缓存上进行造成的延误,或依赖于其他指令的完成,以至其他指令不能进入RS
注意,所有的Restore Stall 都可用RESOURCE_STALLS.ANY测量.)
12) BUS_TRANS_ANY:ALL_AGENTS--计算所有总线交易(MEM,IO,interrupt,延迟)
13) BUS_DRDY_CLOCKS:ALL_AGENTS---总线上有DATE READY信号的时钟周期 ( The DRDY signal is asserted when data is sent on the bus,This includes all data reads and writes
on the bus)
14) BUS_BNR_DRV:ALL_AGENTS---总线上有bus not ready信号的时钟周期(A bus agent asserts the BNR signal when the number of data and snoop transactions is close to the
maximum that the bus can handle)(While this signal is asserted, new transactions cannot be submitted on the bus. As a result, transaction latency may have higher impact on
program performance)
15) SIMD_INSTR_RETIRED ---sse指令计数
16) CPU_CLK_UNHALTED:BUS---非停机状态的总线周期
17) NOPS_RETIRED--无效指令数

常用计算公式
1)CPI = UNHALTED_CORE_CYCLES / INSTRUCTIONS_RETIRED
平均每条指令执行的时钟周期,  越小性能越好,基于core2的cpu cpi值应小于0.25
2)LDST = (INST_RETIRED:STORES+INST_RETIRED:LOAD) / INSTRUCTIONS_RETIRED *100
内存操作指令占总指令的百分比     (load指令 store指令)
3)RESST = RESOURCE_STALLS:ANY / UNHALTED_CORE_CYCLES *100
cpu因等待其他资源而阻塞的时钟周期占总周期的百分比
4)BRANCH = BRANCH_INSTRUCIONS_RETIRED / INSTRUCTIONS_RETIRED *100
分支指令的百分比
5)BRMISS = MISPREDICTED_BRANCH_RETIRED / BRANCH_INSTRUCTIONS_RETIRED *100
分支误测占分支指令的百分比
6)L2 = LAST_LEVEL_CACHE_MISSES / LAST_LEVEL_CACHE_REFERENCES * 100
访问L2未命中的百分比(performance impact large)
7)BUS = BUS_TRANS_ANY:ALL_AGENTS *2 / CPU_CLK_UNHALTED:BUS *100
bus利用率 bus传输任何类型数据
8)DATA = BUS_DRDY_CLOCKS:ALL_AGENTS / CPU_CLK_UNHALTED:BUS *100
bus传输cpu mem类型数据的利用率
9)BNR = BUS_BNR_DRV:ALL_AGENTS*2 / CPU_CLK_UNHALTED:BUS *100
因总线忙而引起的总线不能传输的百分比 (often high load on bus)
10)SIMD = SIMD_COMP_INST_RETIRED:ANY / INSTRUCTIONS_RETIRED * 100
SSE指令的百分比  常用64位
11)X87 = X87_OPS_RETIRED:ANY / INSTRUCTIONS_RETIRED * 100
float指令的百分比
12)cpu = UNHALTED_CORE_CYCLES / (CPU_frequency * Number_of_cores * 3600)(seconds)) *100
cpu利用率
13)有效指令数 = INST_RETIRED-NOPS_RETIRED
14)pipeline阻塞 = BACK_END_BUBBLE.ALL = BE_FLUSH_BUBBLE.ALL + BE_L1D_FPU_BUBBLE.ALL + BE_EXE_BUBBLE.ALL + BE_RSE_BUBBLE.ALL + BACK_END_BUBBLE.FE

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有