PMU性能分析系列1 - 相关事件的理解 - Basic Performance Tuning Events
2012-03-22 21:59
465 查看
以Intel(R) Microarchitecture Code Name Nehalem系列的CPU为例,以VTune工具作为测试手段来理解(因为我的CPU是这个系列的。)
基本的性能调优事件
使用这些事件能了解代码中最耗时和执行最多指令的部分。
其中三个事件是fixed counter(固定计数器,参考18.4.1 Fixed-function Performance Counters了解其概念),简单理解它们用于计数对应的预定义的一些事件。
1. CPU_CLK_UNHALTED
Programable counter version of the unhalted cycle counter
表示非停机状态的机器周期数。
很显然,对于一个程序,这个事件的数目越少越好,表明其运行状态(非停机状态)消耗的机器周期少,即耗时少。其有三个扩展:
THREAD_P:非停机状态下线程的机器周期。线程在运行HLT指令的时候进入halt state(停机状态)。由于CPU核的频率会不断变化,这个事件数目和时间的比例是变化的。
TOTAL_CYCLES:CPU机器周期数目的总和,halted+unhalted(除了处于深度睡眠状态)。
REF_P:线程在非停机状态下,计数base clock(133Mhz)的参考机器周期数目。很显然,这个事件不会被频率影响,就好象是线程运行一直运行在一个最大的频率一样。
2. CPU_CLK_UNHALTED.REF
Reference cycles when thread is not halted (fixed counter)
和上面的CPU_CLK_UNHALTED的REF_P的含义相同。
3. CPU_CLK_UNHALTED.THREAD
Cycles when thread is not halted (fixed counter)
和上面的CPU_CLK_UNHALTED的THREAD_P的含义相同。
4. INST_RETIRED.ANY
Instructions retired ( fixed counter )
表示消耗的指令数,计数执行过程中消耗的指令数。
说明:关于retire,一般表示退休什么的意思,这里其实其含义就是“消耗”,retirement表示指令隐退,或者可以理解为其技术指令从执行到退出的那个退出的次数,自然,其实就表示消耗的指令数了。:)
对于包含多个微操作(micro-op)的指令,其只对最后一个微操作的指令引退进行计数,即只计数一次。
5. THREAD_ACTIVE
Cycles thread is active
线程处于active状态下的机器周期数。
性能指标之CPI:
Clockticks per Instructions Retired (CPI)
即Cycles per Instructions,表示每一条指令消耗的时钟周期。这是一个基础的性能指标之一,在进行性能分析时,其一般是首先会分析的一个指标。
很显然,CPI的值越小越好,CPI的计算为:Clockticks / Instructions Retired。如:
CPI=CPU_CLK_UNHALTED.THREAD/INST_RETIRED.ANY
说明:如果要计算一个函数的CPI,就使用相应的事件计算,这里的例子是计算整个thread的CPI。
根据经验值,如果CPI小于0.75,那么认为其性能是不错的。如果大于0.75,就需要考虑进行优化了。
基本的性能调优事件
使用这些事件能了解代码中最耗时和执行最多指令的部分。
其中三个事件是fixed counter(固定计数器,参考18.4.1 Fixed-function Performance Counters了解其概念),简单理解它们用于计数对应的预定义的一些事件。
1. CPU_CLK_UNHALTED
Programable counter version of the unhalted cycle counter
表示非停机状态的机器周期数。
很显然,对于一个程序,这个事件的数目越少越好,表明其运行状态(非停机状态)消耗的机器周期少,即耗时少。其有三个扩展:
THREAD_P:非停机状态下线程的机器周期。线程在运行HLT指令的时候进入halt state(停机状态)。由于CPU核的频率会不断变化,这个事件数目和时间的比例是变化的。
TOTAL_CYCLES:CPU机器周期数目的总和,halted+unhalted(除了处于深度睡眠状态)。
REF_P:线程在非停机状态下,计数base clock(133Mhz)的参考机器周期数目。很显然,这个事件不会被频率影响,就好象是线程运行一直运行在一个最大的频率一样。
2. CPU_CLK_UNHALTED.REF
Reference cycles when thread is not halted (fixed counter)
和上面的CPU_CLK_UNHALTED的REF_P的含义相同。
3. CPU_CLK_UNHALTED.THREAD
Cycles when thread is not halted (fixed counter)
和上面的CPU_CLK_UNHALTED的THREAD_P的含义相同。
4. INST_RETIRED.ANY
Instructions retired ( fixed counter )
表示消耗的指令数,计数执行过程中消耗的指令数。
说明:关于retire,一般表示退休什么的意思,这里其实其含义就是“消耗”,retirement表示指令隐退,或者可以理解为其技术指令从执行到退出的那个退出的次数,自然,其实就表示消耗的指令数了。:)
对于包含多个微操作(micro-op)的指令,其只对最后一个微操作的指令引退进行计数,即只计数一次。
5. THREAD_ACTIVE
Cycles thread is active
线程处于active状态下的机器周期数。
性能指标之CPI:
Clockticks per Instructions Retired (CPI)
即Cycles per Instructions,表示每一条指令消耗的时钟周期。这是一个基础的性能指标之一,在进行性能分析时,其一般是首先会分析的一个指标。
很显然,CPI的值越小越好,CPI的计算为:Clockticks / Instructions Retired。如:
CPI=CPU_CLK_UNHALTED.THREAD/INST_RETIRED.ANY
说明:如果要计算一个函数的CPI,就使用相应的事件计算,这里的例子是计算整个thread的CPI。
根据经验值,如果CPI小于0.75,那么认为其性能是不错的。如果大于0.75,就需要考虑进行优化了。
相关文章推荐
- PMU性能分析系列1 - 相关概念
- 深入理解iOS API系列(三)UiView事件传递相关函数:pointInside:withEvent:和hittest:withevent:
- Android java层音频相关的分析与理解(四)音频外设相关
- PHP性能分析相关的函数
- U盘检测hotplug事件:dbus hal udev 相关分析【待消化分析总结】
- 【虫师--系列15】性能测试知多少---系统架构分析
- Hive的jion性能分析的相关文章
- 大型企业网络配置系列课程详解(四) --HSRP和VRRP配置与相关概念的理解(一)
- Windows系统性能分析(Performance Monitor+PAL 2.0)
- 【常用算法思路分析系列】链表相关高频题集
- 电商用户行为分析大数据平台相关系列1-环境介绍
- 深入理解DOM事件类型系列第六篇——加载事件
- Javascript事件模型系列(四)我所理解的javascript自定义事件
- jQuery-1.9.1源码分析系列(十) 事件系统——事件委托
- 【常用算法思路分析系列】与二分搜索相关高频题
- Linux Performance Analysis and Tools(Linux性能分析和工具)
- Java性能优化指南系列(三):理解JIT编译器
- [性能测试]sysstat iptraf 相关分析工具
- TCP/IP相关知识复习与总结(https/网络程序性能分析)
- 游标脚本性能问题解决与分析 (2) - Cursor Performance Analysis