ACPI 表

ACPI 是“高階配置和電源介面”,它是一個標準,定義了平臺和作業系統如何管理電源和配置計算機硬體。 就本操作理論而言,當我們提到“ACPI”時,通常指的是“ACPI 表”——平臺(BIOS/EFI)透過它向作業系統傳遞靜態配置資訊。

以下 ACPI 表包含關於 CXL 裝置的靜態配置和效能資料。

SRAT 表還可以包含通用埠/啟動器內容,這些內容旨在描述通用埠,但不包含有關到端點的路徑其餘部分的資訊。

Linux 使用這些表為靜態配置(由 BIOS/EFI)的 CXL 裝置配置核心資源,例如

  • NUMA 節點

  • 記憶體層

  • NUMA 抽象距離

  • SystemRAM 記憶體區域

  • 加權交錯節點權重

ACPI 除錯

acpidump -b 命令將 ACPI 錶轉儲為二進位制格式。

iasl -d 命令將檔案反彙編為人類可讀的格式。

示例 acpidump -b && iasl -d cedt.dat

[000h 0000   4]   Signature : "CEDT"    [CXL Early Discovery Table]

常見問題

此處描述的大多數故障會導致驅動程式無法將記憶體作為 DAX 裝置和/或 kmem 展示。

  • CEDT CFMWS 目標列表 UID 與 CEDT CHBS UID 不匹配。

  • CEDT CFMWS 目標列表 UID 與 DSDT CXL 主橋 UID 不匹配。

  • CEDT CFMWS 限制位不正確。

  • CEDT CFMWS 記憶體區域對齊不佳。

  • CEDT CFMWS 記憶體區域跨越平臺記憶體空洞。

  • CEDT CHBS UID 與 DSDT CXL 主橋 UID 不匹配。

  • CEDT CHBS 規範版本不正確。

  • SRAT 缺少 CEDT CFMWS 中描述的區域。

    • 結果:無法為該區域建立 NUMA 節點,或者該區域放置在錯誤的節點中。

  • HMAT 缺少 CEDT CFMWS 中描述的區域的資料。

    • 結果:NUMA 節點放置在錯誤的記憶體層中。

  • SLIT 具有錯誤的資料。

    • 結果:核心中的許多效能機制將非常不高興。

所有這些問題都會向用戶顯示,就好像驅動程式無法支援 CXL 一樣 - 但實際上,它們都是平臺未能正確配置 ACPI 表的故障。