首页
/ 深入解析opcm/pcm项目中的pcm-raw工具使用指南

深入解析opcm/pcm项目中的pcm-raw工具使用指南

2025-07-10 03:55:53作者:庞眉杨Will

什么是pcm-raw工具

pcm-raw是opcm/pcm项目中的一个高级性能监控工具,它允许用户通过直接指定原始PMU(性能监控单元)事件编码来收集处理器核心和非核心的性能事件数据。与常规性能监控工具不同,pcm-raw提供了更底层的访问能力,适合在以下特殊场景中使用:

  1. 系统无法加载或不兼容emon内核驱动
  2. 系统管理员策略禁止加载内核驱动
  3. 旧版Linux内核不支持现代处理器PMU功能且无法升级

核心功能概述

pcm-raw支持多种PMU类型,包括:

  • 核心事件(core)
  • 内存控制器事件(imc)
  • 互连事件(upi/qpi)
  • 缓存相干代理事件(cha/cbo)
  • 输入输出事件(iio)
  • 以及其他非核心组件事件

使用流程详解

第一步:获取PMU事件编码

推荐使用Intel VTune Profiler中的emon工具(无需安装驱动)来获取事件编码:

emon -C BR_MISP_RETIRED.ALL_BRANCHES,UNC_CHA_CLOCKTICKS --dry-run -m

示例输出会显示每个事件的原始编码,如:

BR_MISP_RETIRED.ALL_BRANCHES (PerfEvtSel0 (0x186) = 0x00000000004300c5)

第二步:使用pcm-raw收集数据

将获取的编码用于pcm-raw命令:

pcm-raw -e core/config=0x00000000004300c5,name=BR_MISP_RETIRED.ALL_BRANCHES -csv=output.csv

第三步:分析结果

生成的CSV文件包含时间戳、事件名称和各个监控单元的事件计数,可直接用Excel等工具分析。

高级功能:寄存器访问

pcm-raw支持直接读取多种硬件寄存器:

1. 模型特定寄存器(MSR)

语法:

package_msr/config=<地址>,config1=<模式>[,name=<名称>]

模式说明:

  • 0:静态值(显示最后一次读取的值)
  • 1:自由运行模式(显示与上次读取的差值)

示例:

package_msr/config=0x34,config1=0,name=SMI_COUNT
thread_msr/config=0x10,config1=1,name=TSC_DELTA

2. PCI配置寄存器(PCICFG/CSR)

语法:

pcicfg/config=<设备ID>,config1=<偏移量>,config2=<模式>,width=<宽度>[,name=<名称>]

参数说明:

  • 设备ID:Intel PCI设备标识
  • 偏移量:寄存器偏移地址
  • 宽度:寄存器位宽(16/32/64位)

示例:

pcicfg/config=0xe20,config1=0x180,config2=0x0,width=32,name=CHANERR_INT

3. MMIO寄存器访问

语法更复杂,需要指定内存基址寄存器计算方式:

mmio/config=<设备ID>,config1=<偏移量>,config2=<模式>,config3=<membar计算参数1>[,config4=<membar计算参数2>],width=<宽度>[,name=<名称>]

事件名称自动转换功能

pcm-raw支持从Intel官方事件列表自动查找事件编码,需配合simdjson库使用。

编译要求:

  1. 克隆项目时使用--recursive参数
  2. 或手动初始化子模块
  3. 或手动下载simdjson到src目录

使用示例:

pcm-raw -tr -e INST_RETIRED.ANY -e CPU_CLK_UNHALTED.THREAD

也可以使用事件组文件:

pcm-raw -tr -el event_groups.txt

事件组文件格式:

# 组1
EVENT1
EVENT2
;
# 组2
EVENT3
EVENT4
;

Intel PMT遥测数据访问

pcm-raw支持读取Intel平台监控技术(PMT)的原始遥测数据,语法为:

pmt/config=<唯一ID>,config1=<采样ID>,config2=<采样类型>,config3=<lsb>,config4=<msb>[,name=<描述>]

参数对应PMT聚合器XML中的字段值。注意此功能目前仅限Linux平台使用。

输出格式说明

CSV输出包含以下列:

  1. 日期和时间戳
  2. 事件名称
  3. 采样间隔(毫秒)
  4. TSC周期计数
  5. 各监控单元的事件计数值

数据可按核心、内存通道、CHA等不同粒度组织,具体取决于事件类型。

总结

pcm-raw为性能分析专家提供了强大的底层监控能力,特别适用于常规工具无法使用的环境。通过灵活的事件编码指定和多种寄存器访问方式,用户可以深入分析处理器各个组件的性能特征。对于需要深度性能调优或硬件行为研究的场景,pcm-raw是一个不可多得的利器。