擦洗控制¶
版權所有 (c) 2024-2025 華為技術有限公司。
- 作者:
Shiju Jose <shiju.jose@huawei.com>
- 許可:
GNU 自由文件許可證,版本 1.2,不含不變章節、封面文字和封底文字。(GPL v2 雙重許可)
為版本 6.15 編寫
簡介¶
DRAM 尺寸和成本的增加使得記憶體子系統可靠性成為一個重要的關注點。這些模組用於可能損壞的資料會導致昂貴或致命問題的場景。記憶體錯誤是導致伺服器和工作負載崩潰的主要硬體故障之一。
記憶體擦洗是一種功能,其中 ECC(錯誤糾正碼)引擎從每個記憶體介質位置讀取資料,必要時進行糾正,並將糾正後的資料寫回同一記憶體介質位置。
DIMM 可以以可配置的速率進行擦洗,以檢測未糾正的記憶體錯誤並嘗試從檢測到的錯誤中恢復,從而提供以下好處:
主動擦洗 DIMM 可減少可糾正錯誤變為不可糾正錯誤的可能性。
當檢測到未分配記憶體頁面中的未糾正錯誤時,將其隔離並防止分配給應用程式或作業系統。
這降低了軟體或硬體產品遇到記憶體錯誤的機率。
關於記憶體故障的附加資料可用於建立統計資訊,這些統計資訊隨後用於決定是否使用記憶體修復技術,例如封裝後修復或備用。
記憶體擦洗分為 2 種類型:
後臺(巡邏)擦洗,發生在 DRAM 空閒時。
按需擦洗,針對特定的地址範圍或記憶體區域。
已識別出多種硬體記憶體擦洗器介面,例如 CXL 記憶體裝置巡邏擦洗、CXL DDR5 ECS、ACPI RAS2 記憶體擦洗和 ACPI NVDIMM ARS(地址範圍擦洗)。
不同記憶體擦洗器的控制機制各不相同。為了實現標準化的使用者空間工具,需要透過標準化的 ABI 來呈現這些控制。
通用的記憶體 EDAC 擦洗控制允許使用者透過標準化的 sysfs 控制介面管理系統中的底層擦洗器。它將各種擦洗功能的管理抽象為一組統一的功能。
通用擦洗控制功能的用例¶
已識別出多種硬體記憶體擦洗器介面,包括 CXL 記憶體裝置巡邏擦洗、CXL DDR5 ECS、ACPI RAS2 記憶體擦洗功能、ACPI NVDIMM ARS(地址範圍擦洗)和基於軟體的記憶體擦洗器。
在已識別的硬體記憶體擦洗器介面中,有些支援控制巡邏(後臺)擦洗(例如,ACPI RAS2、CXL)和/或按需擦洗(例如,ACPI RAS2、ACPI ARS)。然而,不同記憶體擦洗器之間的擦洗控制介面各不相同,這突出表明需要一個標準化、通用的 sysfs 擦洗控制介面,該介面可供使用者空間進行管理和指令碼/工具使用。
使用者空間擦洗控制允許使用者在必要時停用擦洗,例如,停用後臺巡邏擦洗或調整擦洗速率以進行效能敏感操作,其中後臺活動需要最小化或停用。
使用者空間工具支援針對特定地址範圍的按需擦洗,前提是擦洗器支援此功能。
使用者空間工具還可以透過 sysfs 擦洗控制以可配置的擦洗速率控制記憶體 DIMM 擦洗。這種方法提供了幾個好處:
- 4.1. 在使用者訪問受影響記憶體之前及早檢測到不可糾正的記憶體錯誤,有助於促進恢復。
記憶體,幫助促進恢復。
- 4.2. 降低可糾正錯誤發展為不可糾正錯誤的機率。
錯誤。
熱插拔記憶體的策略控制是必要的,因為可能沒有系統範圍的 BIOS 或類似控制來管理啟動後新增的 CXL 裝置的擦洗設定。確定這些設定是一個策略決定,需要在可靠性和效能之間取得平衡,因此應由使用者空間控制。因此,建議採用統一的介面來處理此功能,使其與其他類似介面保持一致,而不是建立單獨的介面。
擦洗功能¶
CXL 記憶體擦洗功能¶
CXL 規範 r3.1 [1] 第 8.2.9.9.11.1 節描述了記憶體裝置巡邏擦洗控制功能。裝置巡邏擦洗主動定位並糾正在常規週期中出現的錯誤。巡邏擦洗控制允許使用者空間請求更改 CXL 巡邏擦洗器的配置。
巡邏擦洗控制允許請求者指定巡邏擦洗週期必須完成的小時數,前提是請求的擦洗速率必須在裝置支援的擦洗速率範圍內。在 CXL 驅動程式中,使用者透過 sysfs 請求的每個擦洗週期的秒數將重新縮放為每個擦洗週期的小時數。
此外,它們允許主機在干擾需要關閉後臺操作的效能敏感操作時停用該功能。
錯誤檢查擦洗 (ECS)¶
CXL 規範 r3.1 [1] 第 8.2.9.9.11.2 節描述了錯誤檢查擦洗 (ECS)——JEDEC DDR5 SDRAM 規範 (JESD79-5) 中定義的一項功能,允許 DRAM 內部讀取、糾正單位元錯誤,並將糾正後的資料位元寫回 DRAM 陣列,同時對錯誤計數保持透明。
DDR5 裝置每個裝置包含多個記憶體介質現場可更換單元 (FRU)。DDR5 ECS 功能以及 ECS 控制驅動程式支援按 FRU 配置 ECS 引數。
ACPI RAS2 基於硬體的記憶體擦洗¶
ACPI 規範 6.5 [2] 第 5.2.21 節 ACPI RAS2 描述了一個 ACPI RAS2 表,該表提供平臺 RAS 功能的介面,並支援系統中同一組件的多個例項的給定 RAS 功能的獨立 RAS 控制和能力。
記憶體 RAS 功能適用於特定於記憶體的 RAS 能力、控制和操作。記憶體專用 RAS 功能的 RAS2 PCC 子空間的功能型別為 0x00(記憶體)。
平臺可以使用基於硬體的記憶體擦洗功能來公開與基於硬體的記憶體擦洗引擎相關的控制和能力。根據規範,RAS2 記憶體擦洗功能支援:
每個 NUMA 域的獨立記憶體擦洗控制,透過其鄰近域識別。
為整個記憶體系統提供後臺(巡邏)擦洗,以及為特定記憶體區域提供按需擦洗。
ACPI 地址範圍擦洗 (ARS)¶
ACPI 規範 6.5 [2] 第 9.19.7.2 節描述了地址範圍擦洗 (ARS)。ARS 允許平臺將記憶體錯誤通知系統軟體。此功能允許系統軟體防止訪問記憶體中具有不可糾正錯誤的地址。ARS 功能管理系統中存在的所有 NVDIMM。在任何給定時間,系統範圍內只能進行一次擦洗。
根據規範,支援以下功能:
查詢給定地址範圍的 ARS 功能,指示平臺支援 ACPI NVDIMM 根裝置未消耗錯誤通知。
啟動 ARS 會觸發給定記憶體範圍的地址範圍擦洗。地址擦洗可以針對易失性記憶體或永續性記憶體,或兩者兼而有之。
查詢 ARS 狀態命令允許軟體獲取 ARS 的狀態,包括 ARS 的進度和 ARS 錯誤記錄。
清除不可糾正錯誤。
轉換 SPA
ARS 錯誤注入等。
核心支援現有的 ARS 控制,ARS 目前在 EDAC 中不受支援。
各種擦洗功能的比較¶
名稱
ACPI RAS2
CXL 巡邏擦洗
CXL ECS
ARS
按需擦洗
支援
否
否
支援
後臺擦洗
支援
支援
支援
否
擦洗模式
每個 NUMA 域的擦洗控制。
按裝置
按記憶體介質
未知
查詢擦洗能力
支援
支援
支援
支援
設定地址範圍
支援
否
否
支援
設定擦洗速率
支援
支援
否
否
擦洗速率單位
未定義
以小時為單位
否
否
擦洗狀態/完成
僅支援按需擦洗
否
否
支援
UC 錯誤報告
例外
CXL 通用介質/DRAM 事件/介質掃描?
CXL 通用介質/DRAM 事件/介質掃描?
ACPI UCE 通知和查詢 ARS 狀態
支援 EDAC 控制
支援
支援
支援
否
檔案系統¶
已註冊擦洗器例項的控制屬性可以在
/sys/bus/edac/devices/<dev-name>/scrubX/
sysfs¶
Sysfs 檔案記錄在 ABI file testing/sysfs-edac-scrub 中
示例¶
用法採用這些示例中所示的形式
CXL 記憶體巡邏擦洗
以下是識別出的我們可能需要提高擦洗速率的用例。
由於裝置顯示意外高錯誤,因此需要以裝置粒度進行擦洗。
擦洗可能適用於尚未完全線上的記憶體。這很可能是啟動時的系統範圍預設設定。
以更高速率進行擦洗,因為監控軟體已確定特定資料集需要更高的可靠性。這稱為差異化可靠性。
1.1. 基於裝置的擦洗
CXL 記憶體透過 CXL 裝置暴露給記憶體管理子系統並最終暴露給使用者空間。基於裝置的擦洗用於“第 1 節 CXL 記憶體巡邏擦洗”中描述的第一個用例。
當結合透過裝置介面和區域介面進行控制時,請“參見 1.2 節 基於區域的擦洗”。
Sysfs 擦洗檔案記錄在 ABI file testing/sysfs-edac-scrub 中
1.2. 基於區域的擦洗
CXL 記憶體透過 CXL 區域暴露給記憶體管理子系統並最終暴露給使用者空間。CXL 區域表示系統物理地址空間中對映的記憶體容量。它們可以包含多個 CXL 記憶體裝置的一個或多個部分,流量在它們之間交錯。使用者可能希望透過這個更抽象的區域來控制擦洗速率,而不是必須找出組成裝置並單獨對其進行程式設計。每個裝置的擦洗速率覆蓋整個裝置。因此,如果多個區域使用該裝置的部分,則對其他區域的擦洗請求可能導致比此特定區域請求的擦洗速率更高的擦洗速率。
基於區域的擦洗用於“第 1 節 CXL 記憶體巡邏擦洗”中描述的第三個用例。
使用者空間必須遵循以下規則集,以設定任何混合要求的擦洗速率。
從最低所需擦洗速率到最高所需擦洗速率依次獲取每個區域並設定其擦洗速率。後續區域可能會覆蓋單個裝置(因此可能覆蓋整個區域)上的擦洗速率。
獲取需要增強擦洗(更高速率)的每個裝置,並設定這些擦洗速率。這將覆蓋單個裝置的擦洗速率,將其設定為其支援的任何區域所需的最高速率,除非已定義特定速率。
Sysfs 擦洗檔案記錄在 ABI file testing/sysfs-edac-scrub 中
CXL 記憶體錯誤檢查擦洗 (ECS)
錯誤檢查擦洗 (ECS) 功能使記憶體裝置能夠執行錯誤檢查和糾正 (ECC) 並計數單位元錯誤。相關的記憶體控制器透過向記憶體裝置傳送觸發器來設定 ECS 模式。CXL ECS 控制允許主機(即使用者空間)更改錯誤計數模式、每個段的錯誤閾值(指示有多少段至少有該數量的錯誤)以報告錯誤,並重置 ECS 計數器。因此,在檢測到意外高錯誤率時,啟動記憶體裝置上的錯誤檢查擦洗的責任可能在於記憶體控制器或平臺。
Sysfs 擦洗檔案記錄在 ABI file testing/sysfs-edac-ecs 中