CXL 訪問座標計算¶
延遲和頻寬計算¶
記憶體區域效能座標(延遲和頻寬)通常透過 ACPI 表 SRAT 和 HMAT 提供。但是,平臺韌體 (BIOS) 無法為熱插拔的 CXL 設備註釋這些資訊,因為它們在平臺韌體初始化期間不存在。CXL 驅動程式可以透過從多個元件檢索資料來計算效能座標。
SRAT 提供了一個通用埠親和性子表,該子表將鄰近域繫結到裝置控制代碼,在這種情況下,該控制代碼將是 CXL 主橋。使用此關聯,可以從 HMAT 子表中檢索通用埠的效能座標。這部分表示 CPU 和通用埠(CXL 主橋)之間的效能座標。
CDAT 提供了 CXL 裝置本身的效能座標。即訪問該裝置記憶體區域的頻寬和延遲。DSMAS 子表提供了一個 DSMADHandle,它繫結到裝置物理地址 (DPA) 範圍。DSLBIS 子表提供了與 DSMADhandle 繫結的效能座標,並將兩個表條目繫結在一起,從而為每個 DPA 區域提供效能座標。例如,如果裝置匯出一個 DRAM 區域和一個 PMEM 區域,那麼每個區域將具有不同的效能特徵。
如果拓撲中存在 CXL 交換機,則交換機的效能座標由 SSLBIS 子表提供。這提供了用於遍歷交換機的頻寬和延遲,從交換機上游埠到指向端點裝置的交換機下游埠。
簡單的拓撲示例
GP0/HB0/ACPI0016-0
RP0
|
| L0
|
SW 0 / USP0
SW 0 / DSP0
|
| L1
|
EP0
在此示例中,端點和根埠之間有一個 CXL 交換機。本示例中的延遲計算如下: L(EP0) - 來自 EP0 CDAT DSMAS+DSLBIS 的延遲 L(L1) - EP0 和 SW0DSP0 之間的鏈路延遲 L(SW0) - 來自 SW0 CDAT SSLBIS 的交換機延遲。 L(L0) - SW0 和 RP0 之間的鏈路延遲 L(RP0) - 透過 SRAT 和 HMAT(通用埠)從根埠到 CPU 的延遲。總讀取和寫入延遲是所有這些部分的總和。
本示例中的頻寬計算如下: B(EP0) - 來自 EP0 CDAT DSMAS+DSLBIS 的頻寬 B(L1) - EP0 和 SW0DSP0 之間的鏈路頻寬 B(SW0) - 來自 SW0 CDAT SSLBIS 的交換機頻寬。 B(L0) - SW0 和 RP0 之間的鏈路頻寬 B(RP0) - 透過 SRAT 和 HMAT(通用埠)從根埠到 CPU 的頻寬。總讀取和寫入頻寬是所有這些部分中的 min()。
要計算鏈路頻寬: LinkOperatingFrequency (GT/s) 是當前協商的鏈路速度。 DataRatePerLink (MB/s) = LinkOperatingFrequency / 8 頻寬 (MB/s) = PCIeCurrentLinkWidth * DataRatePerLink 其中 PCIeCurrentLinkWidth 是鏈路中的通道數。
要計算鏈路延遲: LinkLatency (皮秒) = FlitSize / LinkBandwidth (MB/s)
有關詳細資訊,請參見 CXL 記憶體裝置 SW 指南 r1.0,第 2.11.3 和 2.11.4 節。
最後,構造的記憶體區域的訪問座標是從每個 CXL 裝置的一個或多個記憶體分割槽計算得出的。
QTG ID¶
每個 CEDT 都有一個 QTG ID 欄位。此欄位提供與 CFMWS 視窗的 QoS 節流組 (QTG) 關聯的 ID。一旦計算出訪問座標,就可以向 ACPI0016 裝置發出 ACPI 裝置特定方法,以檢索 QTG ID,具體取決於提供的訪問座標。該裝置的 QTG ID 可用作匹配 CFMWS 的指導,以設定裝置的最佳 Linux 根解碼器效能。