如何判断RAM ECC是否工作?

如何判断RAM ECC是否工作?

我计划购买一些 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-utiledac-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 错误报告和处理。

相关内容