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


11

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


我建立了我的第一个FreeNAS盒子,并想使用ECC RAM,因为我想存储关键数据。因为我的预算有限,所以我想选择仍可支持ECC RAM的最经济实惠的解决方案。

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

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

RAM标签

由于预算有限,因此我需要一款价格适中的支持ECC的Skylake CPU。根据英特尔的说法,赛扬G3900确实支持ECC,所以我选择了它。

构建完计算机后,我想验证我的系统是否确实在使用ECC内存运行,并进入了主板的BIOS。从各个互联网站点上,我发现某些主板有一个特殊的部分,可以告诉您ECC是否正常工作,但我的主板似乎没有。我检查了所有菜单,但找不到相似的部分。

在进行了更多研究之后,在Unix&Linux stackexchange上找到了一篇文章,但没有解决我的问题。我尝试了最新的方法memtest86+,据我所知,它甚至不显示值“ ECC”。我尝试了Puget系统使用的较旧的4.20版本该版本显示“ ECC:off”。但是,在阅读了前面提到的帖子之后,我怀疑它是否说实话(也许就是为什么删除了该功能?)。两种版本都没有读出DIMM的正确速度和延迟,这增加了我对DIMM的怀疑memtest86+

memtest86 +屏幕截图

找出是否ECC是否有效的另一种流行方法是发出dmidecode -t memory命令并读出Total Widthand Data Width。我的结果分别是128 Bits64 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功能,结果基本相同:

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的任何想法。


好吧,如果您的计算机不支持ECC,它将无法启动:)
孤儿们,

1
@Orphans在找到主板之前,我看到了一些便宜的主板,它们声称在其他芯片组(例如Z170等)上具有“ ECC支持”功能。事实证明,这仅意味着该主板可以使用ECC内存运行(不会崩溃),但实际上不会使用它。所以我想知道我的情况是否就是这样?
comfreak

如果是ECC,通常会在POST部分中看到它。您可以在引导过程中按ESC来查看引导屏幕吗?
yagmoth555

也可以尝试从memtest86.com
citrin进行

@comfreak嗯,你是对的。
Orphans

Answers:


4

今天,我发现有一个商业版本memtest86(没有+从PassMark),提供了一个免费的版本太多值得庆幸的,其包括ECC-检查。

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

我的结果似乎对ECC支持很满意,因此即使我希望通过的“传统”工具获得相同的结果,也可以称之为ECC dmidecode

memtest86结果


如果某人在稍后的时间偶然发现了此帖子,并且需要进一步的验证和测试,他们还将提供支持ECC错误注入的付费版本,以实际测试ECC功能。


3

编辑:主板手册中的错误新内容...:

在此处输入图片说明


我看到您运行的是BSD / linux,在操作系统内部运行;(适用于FreeNAS

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内存DataWidth TotalWidth 64 72

//非ECC内存DataWidth TotalWidth 64 64

FreeBSD和Windows的答案来自于此


基本上,这就是我已经尝试过的dmidecode -t memory结果,我的结果是128位Total和64位Data
comfreak

@comfreak dmidecode -t 17返回什么?
yagmoth555

我基本上得到相同的输出,如dmidecode -t memoryslexy.org/view/s2JimvAzl6
comfreak

@comfreak好吧,128对我来说毫无意义。通常是ECC的64位非ecc或64b + 8b(72)(镜像?? 64 + 64?)。但是搜索“ dmidecode总宽度128”会列出许多freenas帖子...很多似乎都试图使用./ecc_check.py python脚本来检测ECC
yagmoth555

我的假设是它可能与双通道有关,但是当我将两个模块放入两个单独的通道时,我什至得到了相同的结果,这意味着双通道不应该工作。
comfreak

3

使用Ryzen 7处理器,上述工具均不适合我。但是,有了足够新的Linux内核,edac-utils,edac-ctl和edac-util中的工具可以读取ECC状态以及更正的错误数之类的东西。内核日志还将在dmesg中包含带有“ EDAC”的行,该行也应提供一些信息。可以通过对RAM超频并检查是否报告了错误(如果误差过大)来进一步测试此功能,这足以证明它确实有效。但是,即使这些工具报告错误或不起作用,也仅意味着不支持读取ECC状态信息,似乎没有100%可靠的方法来证明ECC不起作用...


1
您尝试过Passmarks memtest86吗?(我在回答中提到的那个)
comfreak

尽管输出可能有所不同,但可以在dmesg中检查EDAC信息,但可以运行dmesg | grep EDAC(您可能需要使用root特权运行它)。例如,在基于Ryzen的系统上安装并在BIOS中启用了ECC内存(如果适用),您可能会看到类似amd64: Node 0: DRAM ECC enabled.
Joe

0

对于非服务器主板和芯片组,仅特定的AMD主板(例如华擎)和任何AMD芯片组都提供ECC。

对于Intel,它们仅使ECC在服务器Xeon芯片组上可用。英特尔在其台式机芯片组上禁用ECC。


可能是正确的,但它无法回答此处提出的实际问题。
comfreak

这适用于操作问题,因为他正在运行非至强英特尔芯片。答案是他无法检查。
d hee

仅答案的最后一句话是不正确的,因为例如C232芯片组是“台式机芯片组”,并且确实支持ECC。除此之外,问题更笼统,例如如何检查,例如您是否不知道是否支持它。
comfreak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.