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”。它只支援系統範圍的計數,因此不支援附加到任務。