首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

评估 Linux on POWER 的性能(1)

评估 Linux on POWER 的性能(1)

简介 应用程序性能评估在现代化计算机上可能会是一个复杂的任务。常用的工具很难处理所有性能变量。每个工作负载因它所施压的计算机子系统不同而各有不同。与对 IO 密集型或内存密集型程序进行调优相比,对 CPU 密集型的程序进行测量和调优有相当大的差异。在本文中,我们将重点描述编译语言环境(C、C++ 和其他语言)中的 CPU 密集型和内存密集型程序。我们将演示如何:
  • 查找程序 hotspots(在执行指令的发生比例较高的程序中的一个区域、函数和方法)
  • 使用处理器上提供的硬件性能计数器,测量程序在 POWER7 上的性能
  • 确定用于在 Linux 上进行性能评估的工具。
POWER7 的 CPI 模型从 CPI 指标的讨论开始了解应用程序性能分析。每指令周期 (CPI) 指标是完成一个指令所需的处理器周期数。每个指令被分解为多个阶段:一个经典的 RISC 流水线指令会拥有一个提取阶段,然后是指令解码/寄存器读取、执行、一个可选的内存访问,最后是写回阶段。一个 CPU 可以利用指令级并行性提高其 CPI 指标(用较低的 CPI 值测算):每个阶段都将处理不同阶段中的指令。在优化时,可以尝试尽量降低 CPI 值,以最大限度地提高系统的利用率。 演示了流水线处理器中的优化指令流。
图 1. 流水线处理器的优化指令流有时一个阶段并不是完全独立于其他阶段存在的,或者说会发出一个有依赖性的指令,强制处理器满足这种需求,然后再继续执行。例如,对于后随算术指令的内存负载,会使得处理器先将数据提取到缓存或内存中,然后发出算术指令。在出现这种情况时,据说处理器流水线会遇到一个停滞,而该停滞会使流水线发生停滞。  显示了一个停滞的流水线。
图 2. 一个遭遇停滞的流水线处理器示例中,假设在一个完全填充的流水线上执行 11 个操作周期期间(每一个周期内完成一个指令),处理器可以执行 8 个指令。然而,当出现三个周期的停滞时,在相同数量的周期中,只能执行五个指令。性能将损失 40% 左右。根据这种算法,有些停滞是不可避免的;但是,仔细的分析就可以提供一些关于如何改写或调整部分代码的提示和建议,从而避免这些停滞。在文章 “Modern Microprocessors - a 90 minute guide” 中,可以找到有关现代 CPU 的流水线和指令级并行性的更完整的启发性解释。
CPI Breakdown Model (CBM) 将功能处理器的各阶段与性能计数器相关联,以显示哪个 CPU 功能单元发生了停滞。CBM 依赖于 CPU 架构和处理器模型;Power Architecture 和 Intel Architecture 具有完全不同的 CBM。POWER5 CBM 与 POWER7 CBM 虽然类似,但仍有所不同。显示了 POWER7 CBM 的一部分。
图 3. 部分 POWER 7 CBM在 Power Architecture 中,硬件性能计数器是一组专用寄存器,当处理器中发生某个特定事件时,就会更新寄存器的内容。POWER7 处理器有一个内置的 Performance Monitoring Unit (PMU),每个 PMU 有 6 线程级的 Performance Counter Monitors (PCM)。其中四个线程是可编程的,这意味着它可以在同一时间监测四个事件,并有超过 500 个可能的性能事件。POWER7 性能计数器是按组进行定义的,PMU 在同一时间只能监视同一组的事件。显示了一个性能计数器的子集,用于定义 POWER7 CBM。在 图 3 中,概要文件后面的计数器用来表示哪个 CPU 功能单元导致处理器停滞,并提供有关如何通过算法调优来消除停滞的可能提示。
白框是在概要文件中监视的特定 POWER7 PCM。根据他们的值计算灰框 [每个都标有星号 (*)](这些指标没有特定硬件计数器)。
注:在 "Comprehensive PMU Event Reference POWER7" 一文中可以找到全面的 PMU 参考。
返回列表