http://software.intel.com/zh-cn/articles/intel-performance-counter-monitor
下载代码示例
IntelPerformanceCounterMonitorV1.6.zip
过去几十年内,计算系统的复杂性显著增加。层次化高速缓存子系统、非一致性内存、同步多线程和乱序执行等技术均为现代处理器的性能和计算能力带来了巨大的影响。
图 1:“CPU 利用率”仅测量了线程在内核上预定的时间
通常,能够理解并自动适应现代处理器资源利用率的软件具备出色的性能和功耗优势。英特尔® Performance Counter Monitor 可提供范例 C++ 例程和实用程序,用于估算最新英特尔® 至强® 和英特尔® 酷睿™ 处理器的内部资源利用率,进而实现大幅度的性能提升。
当 CPU 利用率数据无法体现 CPU 利用率时
从操作系统(OS)获得的 CPU 利用率数字是一项重要的衡量指标,一直以来被用作多种目的,例如产品尺寸选择、计算能力规划和任务调度等。该指标的当前实施(UNIX*“top”实用程序和 Windows* 任务管理器报告的数字)显示了操作系统中的 CPU 调度程序可分配给运行程序或操作系统执行的时隙比例;剩余的时间则处于空闲状态。对于受计算量限制的工作负载,采用上述方法计算的 CPU 利用率指标预测了剩余的 CPU 计算能力,非常适合性能相较现代系统而言更统一、可预测性更强的八十年代架构。但是,计算架构领域的改进使得该算法不再可靠,因为当前的计算架构引入了多内核和多 CPU 系统、多层高速缓存、非一致性内存、同步多线程(SMT)、流水线、乱序执行等先进技术。
图 2:现代化多处理器、多内核系统的复杂性
一个极具代表性的示例是采用英特尔® 超线程技术(英特尔® HT 技术)的处理器上的非线性 CPU 利用率。英特尔® HT 技术是一项卓越的性能特性,能够将性能提升多至 30%。然而,不了解超线程技术的最终用户很容易会被报告的 CPU 利用率搞得晕头转向:假设某款应用在每枚物理内核上运行一条线程。虽然应用会占用 70%-100% 的执行单元,而报告的 CPU 利用率只有 50%。关于详细信息请参见注释 [1]。
另一个不同示例是多核系统上“内存吞吐量”密集型工作负载的 CPU 利用率。带宽测试“流”已经使内存控制器的容量达到饱和,线程数量要少于内核数量。
性能监视单元(PMU)的抽象层
值得高兴的是,英特尔处理器已经集成相关技术,能够监视处理器内部的性能事件。为了获得更精确的 CPU 资源利用率信息,我们将希望寄托于在英特尔处理器内部实施的性能监视单元(PMU)所提供的动态数据。我们特别关注随当前英特尔® 至强® 5500、5600、7500、E7 和酷睿™ i7 系列处理器提供的高级特性集[2-4]。
我们实施了一系列采用高级接口的基本例程,这些例程可通过用户的 C++ 应用进行调用,能够实时提供各种 CPU 性能指标。与其它现有框架如 PAPI* 和 Linux*“perf”不同,我们不仅支持内核 PMU,还支持英特尔处理器(包括最近推出的英特尔® 至强® E7 系列处理器)的非内核。非内核是处理器的一部分,包括集成内存控制器以及到其它处理器和 I/O 中枢的英特尔® 快速通道互联(QPI)链路。总得来说,支持的衡量指标如下:
- 内核