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 中显示的事件是事件掩码的单个位集的最细粒度事件。通过在配置中设置多个掩码位,可以启用更通用的事件。例如,通过设置以下所有位的位,可以在单个计数器上捕获所有设备到主机读取请求:

  • 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”。它只支持系统范围的计数,因此不支持附加到任务。