如何检查 RAM 是否在 ECC 模式下运行?

如何检查 RAM 是否在 ECC 模式下运行?

自从我更换了处理器后,我更新了这篇文章,但我的问题的核心(不幸的是结果也是如此)是一样的。


我制作了我的第一个 FreeNAS 盒,并希望使用 ECC RAM,因为我想存储关键数据。由于预算有限,我想选择最实惠且仍支持 ECC RAM 的解决方案。

经过一番研究,我发现我需要一块支持 ECC 的主板、内存和 CPU。我选择的主板是“Gigabyte X150M-Pro ECC”,它有 C232 芯片组、DDR4 和 LGA1151 插槽。

我还购买了一套由金士顿制造的两块 DIMM,型号为“KVR21E15S8K2/8”(规格表技嘉发布了经过测试的内存模块列表,我的模块似乎支持有效的 ECC(支持的模块列表)。

RAM 标签

由于预算有限,我需要一款支持 ECC 的经济实惠的 Skylake CPU。根据英特尔Celeron G3900 确实支持 ECC,所以我选择了它。

组装电脑后,我想验证我的系统是否确实在运行 ECC 内存,并进入主板的 BIOS。从各种互联网网站,我发现有些主板有特别部分它应该能显示 ECC 是否正常工作,但我的主板似乎没有这个功能。我检查了所有菜单,但找不到类似的部分。

在做了一些研究后,我发现邮政在 Unix&Linux stackexchange 上,它没有解决我的问题。我尝试了最新版本,memtest86+据我所知,它甚至没有显示“ECC”值。我尝试了较旧的 4.20 版本Puget 系统所使用的显示“ECC:关闭”。然而,在阅读了前面提到的帖子后,我怀疑它说的是实话(也许这就是删除该功能的原因?)。这两个版本都没有读出 DIMM 的正确速度和延迟,这增加了我对 的怀疑memtest86+

memtest86+ 截图

另一种常用的检查 ECC 是否正常工作的方法是发出命令dmidecode -t memory并读出Total WidthData Width。我的结果分别是128 Bits64 Bits。输出的一部分显示了有关具有 键值对 的内存阵列的详细信息Error Correction Type: Single-bit ECC

我原本72 bits以为是Total Width,所以我认为它可能与双通道有关,并将内存模块移到两个相邻的插槽中,这应该可以防止双通道,但结果是一样的。这是全力输出dmidecode -t memory

我甚至尝试了有趣的C程序Puget 系统发布了,但结果为0,表明不支持 ECC。

现在我开始怀疑英特尔自己网站上的数据是否正确,我的 CPU 实际上不支持 ECC。内存和主板都明确标有“ECC”,所以我可以排除这些。

BIOS 版本是否需要更新(目前没有)才能启用 ECC,或者 ECC 实际上已经在工作,而我只是无法验证它?或者,如果我想运行 ECC 内存,而英特尔的网站是错误的/误导性的,那么我的 CPU 选择是否错误?

如果我的 CPU 被证明是错误的选择,那么下一个最佳的“预算 ECC CPU”选择是什么?

更新:我看到了一些新迹象我的系统实际上可能在启用 ECC 的情况下运行,但该dmidecode工具只报告奇怪的数据。在 FreeNAS 论坛上,用户 Dusan 正在使用服务器级硬件(SuperMicro MB、Xeon CPU、Kingston DIMM),并且有类似的输出128 Bits。但他写道,他自己也不确定它是否真的有效。

更新2:正如 yagmoth555 提到的他的回答对于这个问题,似乎我的主板只支持 Xeon 处理器的 ECC,尽管我认为那条注释是从以前的手册中复制过来的。我想这意味着我需要研究 Xeon 处理器。:-/


更新 3:我现在买了一台 Xeon E3-1220v5,它当然支持 ECC,应该符合手册的要求。我再次运行了所有测试以检查 ECC 功能,结果基本相同:

ecc_check 和 dmidecode

从 Puget Systems 的评论来看,该程序似乎ecc_check.c也不适用于 Xeon 和 Core i7 处理器。:-/

这次我又检查了memtest86+一下,我相当确定它根本不支持 DDR4 或 C232 芯片组,因为它不仅报告了错误的速度和时序,还报告了 DDR3 而不是已安装的 DDR4。但是,它很好地检测到了处理器,但我仍然得到了两个版本的相同最终结果memtest86+

memtest86+ v5.01

4.20 版本甚至无法正确检测到我的处理器。

memtest86+ v4.20

非常感谢您对我如何测试 ECC 的任何想法。

答案1

今天我发现商业版本PassMark 也提供了一个免费版本memtest86(没有),值得庆幸的是,该版本包含了 ECC-Checks。+

此外它还支持DDR4和的所有其他功能memtest86+

我的结果似乎对 ECC 支持是积极的,因此我会称之为完成,即使我希望使用“传统”工具(例如)获得相同的结果dmidecode

memtest86 结果


如果有人稍后偶然发现这篇文章并且需要进一步验证和测试,他们还提供支持 ECC 错误注入的付费版本,以实际测试 ECC 功能。

答案2

已编辑:主板手册上有坏消息……:

在此处输入图片描述


我看到你运行的是 BSD/linux,在操作系统中运行它;(适用于自由网络存储

dmidecode -t 17

你应该得到如下输出:

dmidecode 2.12 SMBIOS 2.5 present.

Handle 0x1100, DMI type 17, 28 bytes Memory Device Array Handle: 0x1000 Error Information Handle: Not Provided Total Width: 72 bits Data Width: 64 bits Size: 2048 MB Form Factor: DIMM Set: 1 Locator: DIMM1 Bank Locator: Not Specified Type: DDR2 Type Detail: Synchronous Speed: 667 MHz Manufacturer: AD00000000000000 Serial Number: 00002062 Asset Tag: 010839 Part Number: HYMP125P72CP8-Y5 Rank: 2

总宽度:72 位就是您要找的部分。

在 Windows 系统上您可以运行

wmic MEMORYCHIP get DataWidth,TotalWidth

//ECC内存数据宽度总宽度 64 72

//非ECC内存数据宽度TotalWidth 64 64

FreeBSD 和 Windows 的答案来自那里

答案3

使用 Ryzen 7 处理器,上述工具对我来说都不起作用。但是,对于较新的 Linux 内核,edac-utils、edac-ctl 和 edac-util 中的工具可以读取 ECC 状态以及已更正错误的数量等信息。内核日志还将包含 dmesg 中带有“EDAC”的行,这也应该会提供一些信息。可以通过超频 RAM 并检查是否报告错误(如果超频足够高)来进一步测试此功能,这几乎是您可以获得的最大证据,证明它确实有效。但是,即使这些工具报告错误或不起作用,也只意味着不支持读取 ECC 状态信息,似乎没有 100% 可靠的方法来证明 ECC 不起作用……

答案4

对于非服务器主板和芯片组,只有特定的 AMD 主板(如 ASRock)和任何 AMD 芯片组提供 ECC。

对于英特尔来说,他们只在服务器 Xeon 芯片组上提供 ECC。英特尔在其台式机芯片组上禁用了 ECC。

相关内容