阿里巴巴 T-Head SoC Uncore 效能監控單元 (PMU)¶
倚天 710 是由阿里巴巴集團的晶片開發業務 T-Head 定製開發的,它實現了 uncore PMU,用於效能和功能除錯,以方便系統維護。
DDR 子系統 Driveway (DRW) PMU 驅動程式¶
倚天 710 採用八個 DDR5/4 通道,每個晶片上有四個。每個 DDR5 通道與其他通道獨立,以服務系統記憶體請求。一個 DDR5 通道被分成兩個獨立的子通道。DDR 子系統 Driveway 為每個子通道實現了單獨的 PMU,以監控各種效能指標。
Driveway PMU 裝置命名為 ali_drw_<sys_base_addr> with perf。例如,ali_drw_21000 和 ali_drw_21080 是 die 0 中同一通道的兩個子通道的兩個 PMU 裝置。die 1 的 PMU 裝置以 ali_drw_400XXXXX 為字首,例如 ali_drw_40021000。
每個子通道總共有 36 個 PMU 計數器,分為四組
第 0 組:PMU 週期計數器。該組有一對計數器 pmu_cycle_cnt_low 和 pmu_cycle_cnt_high,用作基於 DDRC 核心時鐘的週期計數。
第 1 組:PMU 頻寬計數器。該組有 8 個計數器,用於計算所選 rank 中八個 bank groups 的總訪問次數,或者在第一個 4 個計數器中單獨計算四個 ranks。基本傳輸單元為 64B。
第 2 組:PMU 重試計數器。該組有 10 個計數器,旨在計算每種型別的不可糾正錯誤的重試總數。
第 3 組:PMU 通用計數器。該組有 16 個計數器,用於計算通用事件。
目前,Driveway PMU 驅動程式僅使用第 0 組和第 3 組中的計數器。
DDR 控制器 (DDRCTL) 和 DDR PHY 結合在一起,為將 SoC 應用匯流排連線到 DDR 記憶體裝置建立了一個完整的解決方案。DDRCTL 接收主機介面 (HIF) 的事務,這是 Synopsys 自定義的。這些事務在內部排隊並安排訪問,同時滿足 SDRAM 協議時序要求、事務優先順序以及事務之間的依賴關係。DDRCTL 反過來在 DDR PHY 介面 (DFI) 上向 PHY 模組發出命令,該模組啟動並將資料捕獲到 SDRAM 以及從 SDRAM 捕獲資料。driveway PMU 具有硬體邏輯來收集有關 HIF、DFI 等的統計資訊和效能日誌訊號。
透過計算透過 HIF 介面傳送到 DDRC 的 READ、WRITE 和 RMW 命令,我們可以計算頻寬。計數記憶體資料頻寬的示例用法
perf stat \
-e ali_drw_21000/hif_wr/ \
-e ali_drw_21000/hif_rd/ \
-e ali_drw_21000/hif_rmw/ \
-e ali_drw_21000/cycle/ \
-e ali_drw_21080/hif_wr/ \
-e ali_drw_21080/hif_rd/ \
-e ali_drw_21080/hif_rmw/ \
-e ali_drw_21080/cycle/ \
-e ali_drw_23000/hif_wr/ \
-e ali_drw_23000/hif_rd/ \
-e ali_drw_23000/hif_rmw/ \
-e ali_drw_23000/cycle/ \
-e ali_drw_23080/hif_wr/ \
-e ali_drw_23080/hif_rd/ \
-e ali_drw_23080/hif_rmw/ \
-e ali_drw_23080/cycle/ \
-e ali_drw_25000/hif_wr/ \
-e ali_drw_25000/hif_rd/ \
-e ali_drw_25000/hif_rmw/ \
-e ali_drw_25000/cycle/ \
-e ali_drw_25080/hif_wr/ \
-e ali_drw_25080/hif_rd/ \
-e ali_drw_25080/hif_rmw/ \
-e ali_drw_25080/cycle/ \
-e ali_drw_27000/hif_wr/ \
-e ali_drw_27000/hif_rd/ \
-e ali_drw_27000/hif_rmw/ \
-e ali_drw_27000/cycle/ \
-e ali_drw_27080/hif_wr/ \
-e ali_drw_27080/hif_rd/ \
-e ali_drw_27080/hif_rmw/ \
-e ali_drw_27080/cycle/ -- sleep 10
按指標計算所有記憶體讀/寫頻寬的示例用法
perf stat -M ddr_read_bandwidth.all -- sleep 10
perf stat -M ddr_write_bandwidth.all -- sleep 10
平均 DRAM 頻寬的計算方式如下
讀取頻寬 = perf_hif_rd * DDRC_WIDTH * DDRC_Freq / DDRC_Cycle
寫入頻寬 = (perf_hif_wr + perf_hif_rmw) * DDRC_WIDTH * DDRC_Freq / DDRC_Cycle
這裡,DDRC_WIDTH = 64 位元組。
當前的驅動程式不支援取樣。因此不支援 “perf record”。由於事件都是 uncore,因此也不支援附加到任務。