內存刷洗(英語:Memory scrubbing)也可稱內存擦洗內存清洗,是指從每個電腦記憶體位置讀取數據、以一種錯誤糾錯碼(ECC)糾正可能存在的位元錯誤,再將校正後的數據寫回原位置。[1]

由於現代計算機內存芯片的高度集成,單個內存單元的結構已足夠小到易於受到宇宙射線和/或阿爾法粒子的影響。由這些現象引發的錯誤被稱為軟性錯誤,這對基於DRAMSRAM的內存來說可能是個問題。在任何單個內存位元發生軟錯誤的概率非常小。但是,配以現代計算機的龐大內存空間,加之長時間持續運行的如服務器,在已安裝內存中發生軟錯誤的概率可能比較顯著。

糾錯內存中的信息被冗餘存儲,以便能校正每個內存字(word)的單比特錯誤。也因如此,ECC內存可以支持對內存的刷洗。換句話說,如果內存控制器系統性掃描內存,則可以檢測到單比特錯誤,並可以使用ECC校驗和來確定出錯的比特並將校正的數據寫回內存。

概述

編輯

在同一個字(word)未發生多比特錯誤前周期性檢查每個內存位置很重要,這是因為截至2008年,ECC內存模塊還不能校正出現多比特的錯誤。

為了不干擾來自CPU的常規內存請求以及防止電腦性能下降,刷洗通常僅在空閒時進行。由於刷洗是由正常的讀取和寫入操作組成,它可能增加內存相較非刷洗操作時的功耗英語Power consumption。因此,刷洗應該周期性但不是持續性進行。許多服務器可以在BIOS設置程序中配置刷洗周期。

普通的內存讀取是由CPU或DMA設備發出和檢查ECC錯誤,但由於數據局部性原因,它們可能被限制在小範圍的地址空間內,並且保持位置、很長時間不被觸碰。這些位置因而可能容易受到多個軟錯誤的影響,而刷洗可確保在指定時間內檢查整個內存。

在某些系統上,不止主內存(基於DRAM的內存)支持刷洗,有些CPU高速緩存(基於SRAM)也可以。在大多數系統上,兩者都可以獨立配置刷洗速率。因為緩存比主內存小得多,所以緩存的擦洗不需要頻繁進行。

內存刷洗提高了可靠性,因此它可被歸類為可靠性、可用性和可維護性(RAS)特性。

變種

編輯

它通常有兩種變體,被稱為巡邏刷洗(patrol scrubbing)與按需刷洗(demand scrubbing)。雖然它們本質上都執行內存刷洗及相關的錯誤糾正(如果可行),兩者的主要區別是如何啟動和執行。巡邏刷洗會在系統空閒時自動運行,而按需刷洗是在數據被主存儲器實際請求時執行錯誤糾正。[2]

參見

編輯

參考資料

編輯
  1. ^ Ronald K. Burek.
  2. ^ Supermicro X9SRA motherboard manual (PDF). Supermicro: 4-10. March 5, 2014 [February 22, 2015]. (原始內容存檔 (PDF)於2019-11-09).