欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

微处理器 性能监控计数寄存器——performance monitor counter registers

更新时间: 2014-01-05 02:58:04 责任编辑: Author_N1

 

处理器 性能监控计数寄存器——Performance Monitor Counter registers

简介:

      为了了解在执行应用程序时在处理器中发生的情况,处理器架构师设计了一组特殊的寄存器,它们对在处理器执行指令时发生的事件进行计数。这些寄存器称为 Performance Monitor Counter,它们提供关于处理器的重要信息,比如发生了多少次 I-cache 失效、完成了多少个指令等等(为性能监控事件)。如果发生 D-cache 失效(处理器无法在 D-cache 中找到数据),那么发出一个中断,让相应的寄存器可以通过增加它的值记录这一事件。Performance Monitor Counter (PMC) 寄存器有助于揭示芯片中发生的情况。

       通常一般处理会有6-8组PMC寄存器,可以同时记录多个可检测事件,检测之前需要在阈值对应控制寄存器(IA32_PERFEVTSELx MSRs)中的掩码字节{Unit mask (UMASK) field} 中指定记录的事件,事件举例如下表:


监控事件列表:

       截自Intel 官方手册,(以X86为例)。



PMC访问指令:

       以X86为例,使用WRMSR, RDMSR 和 RDPMC这三条指令可以访问PMC寄存器。



如何使用 PMC 评估性能:

      使用 PMC 评估性能有三种方法,从低级到高级依次是:原始 PMC 事件、指标和 CPI 细分模型。

      原始 PMC 事件提供关于在处理器中执行的代码的特定信息。例如, PM_TLB_MISS 表示发生了多少次 TLB (Translation Look-aside Buffer) 失效。TLB 缓存包含从虚拟地址到内存中物理页面的映射信息。如果发生了很多 TLB 失效,就说明代码读取大地址范围中的数据。可能需要改进空间位置。

       判断性能是好还是坏以及特定事件的准确含义并不容易。您需要某种高级信息。第二种方法是指标,指标是根据事件或预定义变量定义的公式计算出的值。例如,如果希望知道 MIPS (Million Instructions per Second) 值是多少,可以定义一个名为 PMD_MIPS 的指标。根据定义,MIPS = 10-6 * 指令数 / 执行时间。当流水线(pipeline)中完成一个指令时,PM_INST_CMPL 递增 1,所以它可以作为指令计数器。有一个预定义的变量 total_time,它代表整个数据收集过程的时钟时间。所以,PMD_MIPS 定义为:PMD_MIPS = 1e-06 * PM_INST_CMPL / total_time。

       最后一种方法是 CPI (Cycle per Instruction) 细分模型。CPI 表示一个指令平均占用多少个周期。这个度量值对于评估总体系统性能非常重要。CPI 值低就意味着指令花费的执行时间少。当然,这就意味着性能更好。周期数可以细分为几个部分,分别表示在不同的流水线阶段花费的时间。细分意味着按照流水线阶段把周期数划分为几个部分。  

         许多分析工具都可以收集 PMC 数据。 hpmcount 和 hpmstat 以及 Cell SDK 工具 cpc(即 cellperfctr)。




上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:58:04
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/16706/
本文WWW.DOC100.NET DOC100.NET版权所有。