Linux-Kernel

如何判斷 RAM ECC 是否正常工作?

  • February 4, 2016

我計劃購買一些 ECC RAM 來替換我目前安裝在華碩 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-utiledac-ctl執行檔。其中一個可以用於此目的嗎?

似乎沒有萬無一失的方法可以告訴您,但是各種方法可以為您提供某種答案。顯然,您幾乎必須嘗試不同的方法,直到找到一個告訴您 ECC 正在工作的方法。

在我的情況下, memtest86+ 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

引用自:https://unix.stackexchange.com/questions/139319