一两年前,我可以为我组装的 PC 购买 ECC(纠错码)RAM。ECC RAM 提供了 SEC-DED,我猜是电离辐射引起的位翻转(我不知道还有什么可能导致 RAM 或 I/O 总线中出现瞬态位错误)。
多年来,我还没有看到为 PC 提供 ECC RAM。这是为什么?
如果 ECC 内存在 20 年前有用,那么现在 PC 运行的内存要多 1-2 个数量级,电压更低,物理特征更小,(可能)更容易受到杂散辐射的破坏,那么它会更有帮助。这些假设是否不正确?
即,如果 ECC RAM 在十年前被认为是一个有用的功能,那么它有用的原因是否不再适用于当前的个人计算机和服务器?或者现在的想法是 ECC RAM 从来没有真正有用过?
15 多年前,英特尔认为 ECC RAM 支持在消费类机器中没有价值。
换句话说,英特尔在 15 多年前就决定消费类机器不需要它。因此市场在服务器硬件之外不支持它。因此,最终消费者正在为此付出代价。
ExtremeTech 2021 年 1 月的这篇文章对所发生的事情进行了相当可靠的总结:“ Linus Tovalds Blames Intel for Killing ECC RAM in Consumer Systems ”:
由于文章引用了 Linus Torvalds,以下是他的具体抱怨:
这里的问题是 Linux 因内核错误而受到指责,但 Linus Torvalds 认为根本原因是硬件问题,这可以追溯到当今机器中非 ECC RAM 的普遍存在。
但这是一个切线......归根结底是PC制造商偷工减料。经典的制造问题。
如今,PC 硬件被认为是一次性的,这里可能有一些理由:RAM 开始变得不稳定,只需扔掉机器并购买一台新机器。事实是市场上充斥着非技术人员和非 PC 制造商,所以嘿……它很臭,但它就是这样。
就历史而言,我同意@Giacomo1968 提供的答案。然而,目前的状态正在发生变化。AMD 最近开始在其当前的台式机 CPU 系列中为 AM4 插槽支持 ECC 内存:“ECC 未被禁用。它可以工作,但未针对我们的消费者客户端平台进行验证。” (来源:Reddit)
也就是说,主板也需要支持这一点。有些消费者委员会会,有些则不会。
多一点解决这个问题:
英特尔单方面决定消费者不需要 ECC,并决定仅将其提供给英特尔可以收取溢价的服务器和工作站客户。
微软试图让 ECC 成为 Vista 认证的必需功能,但英特尔拒绝这样做。在 Core i7 系列之前,内存控制器是主板的一部分,而 ECC 支持是主板芯片组的功能。
您可以获得带有 ECC 的笔记本电脑。例如,戴尔 Precision Workstation 系列配备 Xeon-W CPU 和 ECC RAM。
您可以购买任何 Ryzen CPU。好吧,任何没有集成显卡的 Ryzen。要使集成显卡与 ECC 一起使用,您需要一个很难找到的 Pro 版本,除非您在预建系统中购买它。
使用 Ryzen 和像 ASUS PRO 系列这样的主板,无缓冲 ECC 可以很好地工作。
对于已注册的缓冲 ECC 模块,您需要真正的 Xeon 或 EPYC CPU,因为这些 RAM 类型的控制方式不同。
在不久的将来,DDR5 RAM 可以选择在内部使用 ECC,而无需来自 CPU 的任何通知或控制。它还可以选择向支持它的 CPU 提供信号和控制。
这是您今天可以购买的 ECC 模块示例。我为 Ryzen 构建购买了其中四个:
我会提供一个亚马逊链接,但这可能被视为垃圾邮件。另请注意,您现在可以获得 3,200 MHz 速度的 ECC 模块。
位错误有 3 个一般原因,其中前两个是单事件翻转:
辐射(主要是自由中子)。这种特殊现象取决于许多因素,例如特定装置的中子截面。这似乎违反直觉,但较新的小得多的几何形状由于中子而产生干扰的可能性较低,因为它们被设计成不易受到影响。请参阅Xilinx 链接(从下方)。
铅,特别是 Pb210,它是铀衰变链的一部分,存在于 BGA 器件球中的旧套件中。Xilinx将由此产生的误差称为 alpha 速率,因为它们在衰变期间会发射 alpha 粒子。显然,对于当前大量无铅设备而言,这不是问题(但在锡铅处理仍然普遍的航空航天领域仍然是一个相当大的问题)。
一般误码率问题。内存接口是一个通信通道,所有的通信通道都有一个错误率。诚然,您可能永远不会在特定设备的使用寿命中看到一个位错误,因为这是一个统计量。由于电气噪声和器件去耦不良导致的错误也属于这一类。
它很有用,但价值有限,尽管可以通过使用它来减轻许多旁道攻击。
您在市售板上找不到它的真正原因仅仅是成本,而那些确实拥有它的板有相当大的溢价,远远高于处理它的硅片的增量成本和额外的 8 个数据位(对于64 位内存系统)。成本效益分析不支持其广泛的可用性。
我记得波音公司的一篇研究论文讨论了丹佛数据中心的软错误。自由中子的数量(达到一定水平)与高度成正比。走的越高,越多。
我们今天拥有的内存接口比您想象的要强大得多。对于 DDRx,数据选通是差分的(因此它们可以抑制共模噪声),并且较低的转换电压实际上更适合高速接口,正如我们多年前用ECL证明的那样。
在航空电子设备中,尤其是对飞行安全至关重要的航空电子设备(例如飞行控制计算机)中,对 L2 及更高版本使用 ECC 是强制性的,对 L1 使用奇偶校验也是如此。这就是这些卡不是来自英特尔或 AMD 的原因之一。
[更新]。存储单元的布局细节对它们对 SEU 的敏感性有相当大的影响。Xilinx 采用了一种特殊的方法,可以有效地堆叠存储单元,从而显着降低高能中子引起位翻转的可能性。
因为我不是IC 设计师,所以我只能这么说。Rosetta Project提供了更多信息。
这反映了消费者软件质量以及其他因素。
ECC RAM 只有在零星位翻转的错误率是失败的主要原因时才真正有帮助。如果您运行不会自行崩溃的高可靠性软件,那么消除少数剩余的错误源实际上会提高系统的MTBF。
如果您运行由于“赢家通吃”经济学而匆忙生产的软件,那么除了 RAM 错误之外,它还会有很多故障源。在这种情况下,支付溢价以将错误率降低几个百分点是没有意义的。
然后是高固定成本商品的典型积极反馈:更高的价格意味着更少的需求,这反过来意味着更高的价格。我认为这不应该归咎于英特尔:他们并没有停止在消费芯片中支持 ECC,因为他们讨厌技术,他们这样做是因为他们通过销售更便宜的非 ECC 芯片赚了更多的钱。
值得注意的是,在运行根据功能安全标准设计的软件的工业微控制器控制器领域,ECC RAM 被广泛使用。
在谈论 ECC 或非 ECC 时,讨论主要集中在位翻转问题上。但在我 15 年使用 40 多个数据中心服务器和/或家庭 NAS 的经验中,位翻转并不是 ECC 可以解决的最大问题。
我有两个可能或实际数据损坏的大问题,都是完全错误的 RAM SIM 模块。
在第一种情况下,有一个 ECC RAM 模块,HP Proliant 服务器只是自动停止,说“ECC 错误,请更换有故障的模块”。尽管运行在其上的 8 个虚拟机意外系统关闭,但没有数据损坏。
在第二种情况下,在非 ECC NAS 上的 RAM 模块发生故障后,NAS 继续将垃圾数据写入磁盘几个小时,然后操作系统崩溃。在过去 24 小时的工作中,没有可恢复的数据。在该 NAS 中运行的整个虚拟机已损坏,其他一些随机文件也已损坏。一切都必须从以前的备份中恢复。
ECC很重要。它不仅可以使您免于轻微的翻转问题,而且还可以使您免于整个 RAM 模块故障,这可能会破坏您的大部分数据。我想要 ECC 我存储数据的地方。