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

简介:

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

       通常一般处理会有多组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)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值