You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xeon 6438(Sapphire Rapids)Linux 6.5.0中perf无法加载uncore_cxl事件的问询

问题

在Xeon 6438(Sapphire Rapids)处理器、Linux 6.5.0系统环境下,发现tools/perf/pmu-events/arch/x86/sapphirerapids/路径下存在uncore_cxl.json文件,其中定义了大量CXL相关事件,但通过perf list无法找到这些事件。同一路径下其他uncore_*.json(除cxl外)定义的事件均可正常在perf中显示。

执行perf list | grep cxl的输出如下:

unc_cha_tor_inserts.ia_hit_cxl_acc
  unc_cha_tor_inserts.ia_hit_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_crdmorph_cxl_acc
  unc_cha_tor_inserts.ia_miss_cxl_acc
  unc_cha_tor_inserts.ia_miss_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_drd_cxl_acc
  unc_cha_tor_inserts.ia_miss_drd_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_drd_opt_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_drd_opt_pref_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_drd_pref_cxl_acc
  unc_cha_tor_inserts.ia_miss_drd_pref_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_drdmorph_cxl_acc
  unc_cha_tor_inserts.ia_miss_llcprefcode_cxl_acc
  unc_cha_tor_inserts.ia_miss_llcprefdata_cxl_acc
  unc_cha_tor_inserts.ia_miss_llcprefdata_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_llcprefrfo_cxl_acc
  unc_cha_tor_inserts.ia_miss_llcprefrfo_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_rfo_cxl_acc
  unc_cha_tor_inserts.ia_miss_rfo_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_rfo_pref_cxl_acc
  unc_cha_tor_inserts.ia_miss_rfo_pref_cxl_acc_local
  unc_cha_tor_inserts.ia_miss_rfomorph_cxl_acc
***********

tools/perf/pmu-events/arch/x86/sapphirerapids/uncore_cxl.json的部分内容如下:

[
    {
        "BriefDescription": "Counts the number of lfclk ticks",
        "Counter": "0,1,2,3,4,5,6,7",
        "EventCode": "0x01",
        "EventName": "UNC_CXLCM_CLOCKTICKS",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "CXLCM"
    },
    {
        "BriefDescription": "Number of Allocation to Mem Rxx AGF 0",
        "Counter": "4,5,6,7",
        "EventCode": "0x43",
        "EventName": "UNC_CXLCM_RxC_AGF_INSERTS.CACHE_DATA",
        "Experimental": "1",
        "PerPkg": "1",
        "UMask": "0x8",
        "Unit": "CXLCM"
    },
    {
        "BriefDescription": "Number of Allocation to Cache Req AGF0",
        "Counter": "4,5,6,7",
        "EventCode": "0x43",
        "EventName": "UNC_CXLCM_RxC_AGF_INSERTS.CACHE_REQ0",
        "Experimental": "1",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "CXLCM"
    },
    {
        "BriefDescription": "Number of Allocation to Cache Rsp AGF",
        "Counter": "4,5,6,7",
        "EventCode": "0x43",
        "EventName": "UNC_CXLCM_RxC_AGF_INSERTS.CACHE_REQ1",
        "Experimental": "1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "CXLCM"
    }
]

请问如何访问这些未被perf识别的CXL相关事件?


解决方法

1. 手动加载CXL PMU驱动

Linux内核中CXL相关的uncore PMU可能默认未加载,执行以下命令手动加载模块:

modprobe intel_cxl_pmu

加载完成后再次执行perf list | grep CXL或perf list | grep unc_cxl,查看事件是否被识别。

2. 直接使用原始事件编码

如果驱动加载后仍无法通过事件名访问,可以直接构造原始事件编码格式使用,格式为:

perf stat -e uncore_cxlcm_<counter>:<event_code>:<umask> <command>

以UNC_CXLCM_CLOCKTICKS为例,对应Counter为0、EventCode0x01、UMask0x2,执行命令:

perf stat -e uncore_cxlcm_0:0x01:0x2 sleep 10

注:uncore_cxlcm_后的数字对应uncore_cxl.json中Counter字段的值,多个Counter可用逗号分隔,或分别指定不同计数器实例。

3. 检查内核配置与perf版本兼容性

  • 确认内核配置中开启了CONFIG_INTEL_CXL_PMU选项,若未开启需重新编译内核并启用该选项。
  • 建议使用内核源码tools/perf/路径下编译的perf工具,避免版本不兼容导致事件无法识别。

4. 启用实验性事件支持

部分事件带有"Experimental": "1"标记,需在perf中开启实验性事件支持:

perf stat -e <event_name> --enable-experimental-events <command>

若事件名仍未被识别,可结合原始编码与实验性开关:

perf stat -e uncore_cxlcm_4:0x43:0x8 --enable-experimental-events sleep 10

内容的提问来源于stack exchange,提问作者John.James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:04:57