CXL 性能监控单元 (CPMU)¶
CXL rev 3.0 规范在第 13.2 节:性能监控中提供了 CXL 性能监控单元的定义。
CXL 组件(例如,根端口、交换机上游端口、端点)可以具有任意数量的 CPMU 实例。CPMU 功能可以从设备完全发现。该规范为所有 CXL 协议消息类型提供了事件定义,并为 CXL 设备上常用的计数事项提供了一组额外的事件(例如,DRAM 事件)。
CPMU 驱动程序¶
CPMU 驱动程序在 CXL 总线上注册一个名为 pmu_mem<X>.<Y> 的 perf PMU,表示 memX 的第 Y 个 CPMU。
/sys/bus/cxl/device/pmu_mem<X>.<Y>
关联的 PMU 注册为
/sys/bus/event_sources/devices/cxl_pmu_mem<X>.<Y>
与其他 CXL 总线设备一样,该 ID 没有特定含义,与特定 CXL 设备的关系应通过 CXL 总线上的设备的设备父级建立。
PMU 驱动程序在 sysfs 中提供可用事件和筛选器选项的描述。
“format”目录描述了 perf_event_attr 结构的 config(事件供应商 ID、组 ID 和掩码)、config1(阈值、筛选器启用)和 config2(筛选器参数)字段的所有格式。“events”目录描述了 perf list 中显示的所有已记录的事件。
perf list 中显示的事件是事件掩码的单一位设置的最细粒度事件。通过在 config 中设置多个掩码位,可以启用更一般的事件。例如,通过设置所有以下位的位,可以在单个计数器上捕获所有设备到主机读取请求:
d2h_req_rdcurr
d2h_req_rdown
d2h_req_rdshared
d2h_req_rdany
d2h_req_rdownnodata
使用示例
$#perf list
cxl_pmu_mem0.0/clock_ticks/ [Kernel PMU event]
cxl_pmu_mem0.0/d2h_req_rdshared/ [Kernel PMU event]
cxl_pmu_mem0.0/h2d_req_snpcur/ [Kernel PMU event]
cxl_pmu_mem0.0/h2d_req_snpdata/ [Kernel PMU event]
cxl_pmu_mem0.0/h2d_req_snpinv/ [Kernel PMU event]
-----------------------------------------------------------
$# perf stat -a -e cxl_pmu_mem0.0/clock_ticks/ -e cxl_pmu_mem0.0/d2h_req_rdshared/
供应商特定的事件也可能可用,如果可用,则可以通过以下方式使用:
$# perf stat -a -e cxl_pmu_mem0.0/vid=VID,gid=GID,mask=MASK/
该驱动程序不支持采样,因此不支持“perf record”。它仅支持系统范围计数,因此不支持附加到任务。