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