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

评估 Linux on POWER 的性能(2)

评估 Linux on POWER 的性能(2)

Linux 上的工具您可以如何使用 POWER7 处理器中的 PCM?虽然您可以在 POWER 上使用各种分析方法,像硬件中断、代码仪表(如 gprof)和运营系统钩子 (systemtap);PCM 提供了直接使用处理器功能的一组广泛的计数器。PCM 分析仪利用操作系统中断持续定期地对处理器寄存器值进行采样。虽然采样分析的结果的数值准确度可能会比指令跟踪结果低一些,但它对系统的整体性能影响较小,并允许目标基准近全速地运行。由此产生的数据是不准确的,是一个有误差的近似值。
Linux 上最常用的两个 PCM 分析工具是 OProfile 和 perf。虽然两者都使用同样的原理,即沿工作负载的回溯(通过 syscall)不断对特殊的硬件寄存器进行采样,但它们分别采用不同的方式进行配置和使用。
OProfile 工具是面向 Linux 系统的全系统分析器,它能够以较低的开销分析所有运行的代码。它包括用于采集样本数据的一个内核驱动程序和守护程序、几个用来将数据转化成信息的后分析工具。调试符号(gcc 的 -g 选项)仅在需要注释源代码时才是必要的。利用最新的 Linux 2.6 内核,OProfile 可以提供 gprof 风格的 call-graph 分析信息。OProfile 的典型开销为 1-8%,具体取决于采样频率和工作负载。
在 POWER 上,OProfile 通过监视性能硬件计数器组和性能计数器完成其工作,但不同的组不能一起使用。这意味着,如果从相同的工作负载获得不同的性能计数器,则需要使用不同的 OProfile 事件配置多次运行 OProfile。这还意味着,您不能在同一时间监视整个 POWER7 CBM。可以在上述 “POWER7 PMY Detailed Event Description” 文档中定义可用的组,或运行  中的命令定义它:
清单 1. OProfile 组清单
1
# opcontrol -l




中的命令演示了一个简单的 OProfile 配置和调用:
清单 2. OProfile POWER7 CPU 周期配置
1
2
3
4
5
# opcontrol -l
# opcontrol -–no-vmlinux
# opcontrol -e PM_CYC_GRP1:500000 -e PM_INST_CMPL_GRP1:500000 -e PM_RUN_CYC_GRP1:500000
-e PM_RUN_INST_CMPL_GRP1:500000
# opcontrol --start




中的工作负载。
清单 3. OProfile 运行命令顺序
1
2
3
# opcontrol --dump
# opcontrol –-stop
# opcontrol --shutdown




要获得性能计数器报告,可以发出中的命令:
清单 4. OProfile 报告生成
1
# opreport -l > workload_report




注:在 developerWorks 文章 "Identify performance bottlenecks with OProfile for Linux on POWER"中可以找到 OProfile 的全面指南(尚未针对 POWER7 进行更新)。
Linux 内核 2.6.29 中引入了 perf 工具,该工具可以分析硬件和软件层面的性能事件。perf 工具拥有面向程序的优势,而不是像 OProfile 那样是面向系统的。它有一些预设的性能计数器列表,如 'cpu-cycles OR cycles'、'branch-misses' 或 'L1-icache-prefetch-misses',它能够复用 PMU 组,允许同一时间从不同的组收集多个性能计数器,但要以采样精度为代价。
有一个缺点是,虽然它支持直接收集硬件性能计数器,但 perf 不承认 POWER7 CBM 表示的计数器名称,需要使用原始的十六进制数字来代替它。表 1 是 OProfile 事件与十六进制数字之间的映射,可以与 perf(使用原始事件的记录选项)配合使用,以便利用 POWER7 的 CBM。
表 1. POWER7 perf 事件原始代码计数器原始代码PM_RUN_CYC200f4PM_CMPLU_STALL 4000aPM_CMPLU_STALL_FXU20014PM_CMPLU_STALL_DIV40014PM_CMPLU_STALL_SCALAR40012PM_CMPLU_STALL_SCALAR_LONG20018PM_CMPLU_STALL_VECTOR2001cPM_CMPLU_STALL_VECTOR_LONG4004aPM_CMPLU_STALL_LSU20012PM_CMPLU_STALL_REJECT40016PM_CMPLU_STALL_ERAT_MISS40018PM_CMPLU_STALL_DCACHE_MISS20016PM_CMPLU_STALL_STORE2004aPM_CMPLU_STALL_THRD1001cPM_CMPLU_STALL_IFU4004cPM_CMPLU_STALL_BRU4004ePM_GCT_NOSLOT_CYC100f8PM_GCT_NOSLOT_IC_MISS2001aPM_GCT_NOSLOT_BR_MPRED4001aPM_GCT_NOSLOT_BR_MPRED_IC_MISS4001cPM_GRP_CMPL30004PM_1PLUS_PPC_CMPL100f2
:在 IBM Wiki "Using perf on POWER7 systems"中,可以找到 perf 的全面指南(尚未针对 POWER7 进行更新)。
您可以获得与 perf 配合使用的原始代码,这些原始代码与 libpfm4 项目的 OProfile 中定义的 POWER7 事件相对应:它们是在 POWER7 特定的头部 (lib/events/power7_events.h) 中定义的。示例程序 examples/showevtinfo 还显示了事件名称和相应的原始十六进制代码。
为了获得计数器信息,分析是一种常见的做法。分析使开发人员能够识别代码执行和数据访问的热点,找到性能敏感的领域,了解内存访问模式等。在开始分析之前,必须制定一个性能评估策略。该程序可能会由各种模块和/或动态共享对象 (DSO) 组成,它可能频繁地使用内核,也可能更多地依赖于数据模式访问(对 L2 或 L3 缓存访问有很大压力),或者侧重于矢量运算单位。
返回列表