
我計劃購買一些 ECC RAM 來替換我目前安裝在 Asus M5A97 Pro 主機板(AMD 970 晶片組、FX-6100 CPU)上的非 ECC RAM。
安裝 RAM 後,如何判斷RAM的ECC功能是否正常運作?
我考慮了dmidecode --type memory
當前每個 RAM 棒的列印內容:
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
(首先,我希望每位元組使用 1 位元 ECC,資料寬度仍為 64 位,但總寬度為讀取 72 位元。)
可以用來判斷ECC是否有效嗎?或者 dmidecode 等級太低了?我還能使用什麼(除了等待並查看日誌中是否顯示 ECC 錯誤,這表明它正在工作,但並不是說它不工作)?
更新:後來我想到了edac-utils。安裝它們,我明白了Not enabling Memory Error Detection and Correction since EDAC_DRIVER is not set
。這給了我edac-util
和edac-ctl
可執行檔。其中之一可以用於此目的嗎?
答案1
看起來沒有萬無一失的方法可以告訴你,但是多種方法可以為您提供某種答案。顯然,您幾乎必須嘗試不同的方法,直到找到告訴您 ECC 正在工作的方法。
就我而言記憶體測試86+ 4.20無法被哄騙意識到它正在處理 ECC RAM;即使我將其配置為 ECC On,它仍然ECC: Disabled
在 IMC 線路上報告。我還沒有嘗試過新版本。然而(可能是在安裝 edac-utils 之後,不幸的是我基本上同時完成了這兩個操作),Linux 在啟動日誌中報告(散佈著一些其他條目):
[ 4.867198] EDAC MC: Ver: 2.1.0
...
[ 4.874374] MCE: In-kernel MCE decoding enabled.
[ 4.875414] AMD64 EDAC driver v3.4.0
[ 4.875438] EDAC amd64: DRAM ECC enabled.
...
[ 4.875542] EDAC amd64: CS0: Unbuffered DDR3 RAM
[ 4.875545] EDAC amd64: CS1: Unbuffered DDR3 RAM
[ 4.875546] EDAC amd64: CS2: Unbuffered DDR3 RAM
[ 4.875548] EDAC amd64: CS3: Unbuffered DDR3 RAM
這是一個很好的跡象。手動執行/etc/init.d/edac restart
不會建立類似的日誌條目,並且查看幾次重新啟動前的舊日誌,我看到:
[ 13.886688] EDAC MC: Ver: 2.1.0
[ 13.890389] MCE: In-kernel MCE decoding enabled.
[ 13.891082] AMD64 EDAC driver v3.4.0
[ 13.891107] EDAC amd64: DRAM ECC disabled.
[ 13.891116] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load.
[ 13.891117] Either enable ECC checking or force module loading by setting 'ecc_enable_override'.
[ 13.891118] (Note that use of the override may cause unknown side effects.)
dmidecode --type memory
也給出了兩個非常強烈的指示:物理記憶體陣列的「糾錯類型」屬性(但由於某種原因在非 ECC RAM 上顯示相同,所以這可能與主機板的支援有關而不是與記憶體的功能有關),
Handle 0x0026, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Multi-bit ECC
分別是每個儲存設備的總寬度和資料寬度(附加位元是用於 ECC 的位元):
Handle 0x0028, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
答案2
有一個非常簡單有效的方法可以做到這一點,前提是您可以透過控制台存取您的伺服器/PC 並可以重新啟動它:記憶體測試86+
這個漂亮的工具將快速顯示記憶體是否啟用了 ECC。我也相信在進行實際測試時它會執行 ECC 驗證。
這是一個(稍微過時的)螢幕截圖:
答案3
我將嘗試總結我在實際硬體上的經驗。我沒有 M5A 主機板,但有兩塊採用 AMD 晶片組的 M4A 主機板。
AM3
幾點:
- M4A8xx主機板正式支援ECC。
- AMD Phenom II 和 Athlon II 支援 ECC。 (其他人可能會工作)
- AMD Phenom 晶片支援透過模組「edac_mce_amd」進行錯誤報告。此模組無需 ECC 即可運作,並報告快取或與 CPU 相關的其他錯誤。
- RAM ECC 透過「amd64_edac」支援。
至此,我已經使用 ECC RAM 運行 M4A 板 2 年多了,沒有看到任何錯誤報告。有些主機板似乎沒有報告可糾正錯誤(CE)。我建議您設定不含 ECC 的不穩定時序,然後啟用它以檢查其是否正常運作。您可以使用 Memtest86,但軟體不會報告 ECC 事件,它只會顯示 RAM 現在在啟用 ECC 的情況下穩定。無論將什麼核心參數傳遞給「mce」啟動參數,核心本身只顯示沒有詳細資訊的訊息:
[Hardware error] Machine Check Exception
這些也不會被記錄在 /sys 中的「edac」條目中。從測試來看,這些錯誤將被修正,但我不知道它將如何處理不可糾正的錯誤。
這些華碩主機板似乎也沒有報告任何與 CPU 錯誤相關的錯誤。當損壞的華擎主機板開始鎖定但由於 UE 向作業系統報告時,我第一次意識到此功能。在相容板上,這些資訊以以下格式顯示在核心訊息上:
[Hardware error] Machine Check Excpetion logged
[Hardware error] ERROR DETAILS, ETC, ETC
這些不會記錄在 MCE 日誌中,而是由核心專門處理。 (edac_mce_amd 模組)這很有用,因為如果在緩衝區中或使用其他選項(例如殺死會損壞記憶體的進程),則可以丟棄未更正的錯誤。
在這些華碩主機板上,CPU 錯誤報告不管用。這是非常糟糕的,因為如果 PSU 或主機板 VRM 損壞並開始產生錯誤,您可能會損壞一些資料。如果不定期測試 CPU 穩定性,我不會使用它。
AM4
在華碩 AM4 主機板上,先前的版本可以像 AM3 一樣運作,但記憶體錯誤報告正常運作 - 您可以讀取 /sys 並取得錯誤計數,或查看核心日誌。在目前的 BIOS 上,您必須安裝 RAS Daemon 並使用“ras-mc-ctl”命令來讀取錯誤計數。
我尚未在這些平台上測試 CPU 錯誤報告和處理。