返回

文章详情

ECC和DDR5

Hacker News2026年7月19日 16:31

汉明编码ECC RAM可以纠正内存中发生的错误,确保这些错误在到达CPU之前被修正。最常见的ECC形式是汉明码[1],当它具有R个冗余位时,可以纠正单比特错误并检测双比特错误,适用于具有2^R-R-1比特数据的消息。在PC使用中,这意味着如果您想保护32位数据,您需要R=6;对于64位数据,您需要R=7。DDR4及类似RAM的标准是72位数据宽度,并使用汉明码来纠正单比特错误和检测65比特数据的双比特错误。我们使用的计算机具有64位数据,这意味着可以额外添加一个比特作为额外的奇偶校验,我不知道这个额外比特做了什么。RDIMM与UDIMM 关于这些内容的一个困惑点是,注册内存(即RDIMM)[2]和普通PC/笔记本内存(通常称为UDIMM)之间的区别。“注册”只是一个缓存,由于复杂的问题与此文无关,意味着DIMM可以更大,并且系统中可以有更多的DIMM,但延迟可能会稍微更差。技术上可以创建没有ECC的RDIMM(宽度为64位而不是72位),但我从未见过使用这种RAM的系统。我使用过几个带有ECC UDIMM的系统,并建议在方便的情况下避免使用它们,因为ECC UDIMM在二手市场上非常昂贵,而ECC RDIMM则可以非常便宜。有一些带有ECC RDIMM的服务器非常不适合家庭使用(如双CPU 1RU服务器非常吵),因此一旦超过五年的税收抵免期,服务器机箱会被送往电子废物,而RAM则会进入二手市场,大量没有系统使用的RAM导致价格下跌。在最常见的系统中,RDIMM系统具有ECC,而UDIMM系统没有ECC。Chipkill 如果RAM中的每个比特彼此独立,那么基本的汉明码将解决大多数问题。然而,单个芯片中的多个比特可能会受到相同问题的影响,或者一根DIMM上的一个芯片可能会完全失败。每个RDIMM有18或36个DRAM芯片,每个芯片有2或4个比特。在具有36个DRAM芯片的DIMM上,如果一个芯片失败,汉明码可以可靠地检测到错误。在具有18个DRAM芯片的DIMM上,一个失败的芯片不一定能够通过汉明码检测到。IBM为能够处理单个DRAM芯片故障的ECC系统注册了商标ChipKill[3]。在戴尔和惠普服务器上,这被称为“高级ECC”,需要偶数个DIMM。如果有人知道“ChipKill”类型系统使用什么编码方法,请告诉我。具有高级ECC的系统通常还具有RAM的热备份和RAID-1等功能,这很有趣,但大多数阅读我博客的人可能永远不会想要使用。DDR5 DDR5具有芯片内ECC,以处理小型快速内存导致的错误发生率增加[4],这被指定为每128比特数据8比特的错误校正,意味着基本的汉明码。芯片内ECC并不是常规ECC的替代品,它是为了解决新出现的问题而采取的缓解措施。我对内存错误的经验是,大多数可重复的错误(即系统在Memtest86+或ECC错误报告中重复出现错误)是DIMM座位问题,我可以拔掉并重新插入相关的DIMM,然后相同的测试将通过。这些错误不会受到芯片内ECC的影响。让我担心的一件事是,芯片内ECC可能与主板上的ECC交互,从而降低其有效性。我还没有找到足够的信息来确定这是否属实。我担心的是,用基本汉明码纠正的3+比特的错误可能比原始错误更有可能创建“高级ECC”无法修复的错误条件。目前,关于ECC在RAM错误上有效性的最佳已发布研究是2009年谷歌发表的论文,基于DDR和DDR2 RAM[5]。因此,我不期待很快会看到关于DDR4 ECC的已发布研究。我推测谷歌和其他云提供商仍在进行此类研究,并在保密协议下向DRAM供应商提供信息,因此我们只能希望DRAM供应商能做出所需的改进,以正确工作,并让我们根据该研究购买产品。DDR5 EC4与EC8 DDR5支持2*32位“子通道”,而不仅仅支持64位字[6]。对于DDR5 ECC RAM,有EC4变体,每个子通道有36比特数据,EC8变体每个子通道有40比特。EC8允许对每个子通道分别使用汉明码。我没有找到有关EC4如何运作的参考资料,它可能是一次读取64比特(没有利用子通道)来使用汉明码,或者可能为每个子通道有1个奇偶校验位,并假设除非子通道奇偶校验失败,否则无需检查汉明码。EC8允许完整的汉明码实现。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡