自从更换处理器以来,我更新了这篇文章,但问题的核心(不幸的是,结果也是如此)是相同的。
我建立了我的第一个FreeNAS盒子,并想使用ECC RAM,因为我想存储关键数据。因为我的预算有限,所以我想选择仍可支持ECC RAM的最经济实惠的解决方案。
经过研究,我发现我需要一个主板,内存和一个支持ECC的CPU。我选择的主板是“技嘉X150M-Pro ECC”,它具有C232芯片组,DDR4和LGA1151插槽。
我还购买了一套由金士顿(Kingston)制造的两个DIMM套件,型号为“ KVR21E15S8K2 / 8”(规格表)。技嘉发布了一份经过测试的内存模块列表,工作的ECC似乎支持我的模块(受支持模块的列表)。
由于预算有限,因此我需要一款价格适中的支持ECC的Skylake CPU。根据英特尔的说法,赛扬G3900确实支持ECC,所以我选择了它。
构建完计算机后,我想验证我的系统是否确实在使用ECC内存运行,并进入了主板的BIOS。从各个互联网站点上,我发现某些主板有一个特殊的部分,可以告诉您ECC是否正常工作,但我的主板似乎没有。我检查了所有菜单,但找不到相似的部分。
在进行了更多研究之后,在Unix&Linux stackexchange上找到了一篇文章,但没有解决我的问题。我尝试了最新的方法memtest86+
,据我所知,它甚至不显示值“ ECC”。我尝试了Puget系统使用的较旧的4.20版本,该版本显示“ ECC:off”。但是,在阅读了前面提到的帖子之后,我怀疑它是否说实话(也许就是为什么删除了该功能?)。两种版本都没有读出DIMM的正确速度和延迟,这增加了我对DIMM的怀疑memtest86+
。
找出是否ECC是否有效的另一种流行方法是发出dmidecode -t memory
命令并读出Total Width
and Data Width
。我的结果分别是128 Bits
和64 Bits
。输出的一部分显示了有关存储阵列的详细信息,该存储阵列的键值对为Error Correction Type: Single-bit ECC
。
我期望72 bits
使用Total Width
,所以我认为它可能与双通道有关,并将内存模块移到了两个相邻的插槽中,这应该防止双通道,但是结果是相同的。下面是完整的输出的dmidecode -t memory
。
我什至尝试了Puget系统发布的有趣的C程序,但结果是0
,表明没有ECC支持。
现在,我开始怀疑英特尔自己网站上的数据是否正确,并且我的CPU实际上不支持ECC。内存和主板都专门带有“ ECC”商标,因此我可以排除它们。
BIOS版本是否可能需要更新(当前没有更新)以启用ECC,或者ECC实际上已经在起作用,而我只是无法验证它?或者,如果我想运行ECC内存并且Intel的网站错误/具有误导性,我选择的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的任何想法。