深入解析opcm/pcm项目中的pcm-raw工具使用指南
2025-07-10 03:55:53作者:庞眉杨Will
什么是pcm-raw工具
pcm-raw是opcm/pcm项目中的一个高级性能监控工具,它允许用户通过直接指定原始PMU(性能监控单元)事件编码来收集处理器核心和非核心的性能事件数据。与常规性能监控工具不同,pcm-raw提供了更底层的访问能力,适合在以下特殊场景中使用:
- 系统无法加载或不兼容emon内核驱动
- 系统管理员策略禁止加载内核驱动
- 旧版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库使用。
编译要求:
- 克隆项目时使用
--recursive
参数 - 或手动初始化子模块
- 或手动下载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输出包含以下列:
- 日期和时间戳
- 事件名称
- 采样间隔(毫秒)
- TSC周期计数
- 各监控单元的事件计数值
数据可按核心、内存通道、CHA等不同粒度组织,具体取决于事件类型。
总结
pcm-raw为性能分析专家提供了强大的底层监控能力,特别适用于常规工具无法使用的环境。通过灵活的事件编码指定和多种寄存器访问方式,用户可以深入分析处理器各个组件的性能特征。对于需要深度性能调优或硬件行为研究的场景,pcm-raw是一个不可多得的利器。