自从我更换了处理器后,我更新了这篇文章,但我的问题的核心(不幸的是结果也是如此)是一样的。
我制作了我的第一个 FreeNAS 盒,并希望使用 ECC RAM,因为我想存储关键数据。由于预算有限,我想选择最实惠且仍支持 ECC RAM 的解决方案。
经过一番研究,我发现我需要一块支持 ECC 的主板、内存和 CPU。我选择的主板是“Gigabyte X150M-Pro ECC”,它有 C232 芯片组、DDR4 和 LGA1151 插槽。
我还购买了一套由金士顿制造的两块 DIMM,型号为“KVR21E15S8K2/8”(规格表技嘉发布了经过测试的内存模块列表,我的模块似乎支持有效的 ECC(支持的模块列表)。
由于预算有限,我需要一款支持 ECC 的经济实惠的 Skylake CPU。根据英特尔Celeron G3900 确实支持 ECC,所以我选择了它。
组装电脑后,我想验证我的系统是否确实在运行 ECC 内存,并进入主板的 BIOS。从各种互联网网站,我发现有些主板有特别部分它应该能显示 ECC 是否正常工作,但我的主板似乎没有这个功能。我检查了所有菜单,但找不到类似的部分。
在做了一些研究后,我发现邮政在 Unix&Linux stackexchange 上,它没有解决我的问题。我尝试了最新版本,memtest86+
据我所知,它甚至没有显示“ECC”值。我尝试了较旧的 4.20 版本Puget 系统所使用的显示“ECC:关闭”。然而,在阅读了前面提到的帖子后,我怀疑它说的是实话(也许这就是删除该功能的原因?)。这两个版本都没有读出 DIMM 的正确速度和延迟,这增加了我对 的怀疑memtest86+
。
另一种常用的检查 ECC 是否正常工作的方法是发出命令dmidecode -t memory
并读出Total Width
和Data Width
。我的结果分别是128 Bits
和64 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 功能,结果基本相同:
从 Puget Systems 的评论来看,该程序似乎ecc_check.c
也不适用于 Xeon 和 Core i7 处理器。:-/
这次我又检查了memtest86+
一下,我相当确定它根本不支持 DDR4 或 C232 芯片组,因为它不仅报告了错误的速度和时序,还报告了 DDR3 而不是已安装的 DDR4。但是,它很好地检测到了处理器,但我仍然得到了两个版本的相同最终结果memtest86+
:
4.20 版本甚至无法正确检测到我的处理器。
非常感谢您对我如何测试 ECC 的任何想法。
答案1
今天我发现商业版本PassMark 也提供了一个免费版本memtest86
(没有),值得庆幸的是,该版本包含了 ECC-Checks。+
此外它还支持DDR4和的所有其他功能memtest86+
。
我的结果似乎对 ECC 支持是积极的,因此我会称之为完成,即使我希望使用“传统”工具(例如)获得相同的结果dmidecode
。
如果有人稍后偶然发现这篇文章并且需要进一步验证和测试,他们还提供支持 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。