DDR 内存 ECC 纠错

4 篇文章 3 订阅

对于 DDR4 DIMM 和 SODIMM(支持 ECC),ECC(纠错码)由内存控制器为写入的每个字节计算。每字节一个位作为计算的一部分提供,并存储在与存储其保护的字节不同的设备中。但是,一旦写入数据到达 DRAM,就不会对其进行检查。ECC 实际上仅用于保护 Read 上的数据。读回数据后,内存控制器检查 ECC,如果不正确,则尝试进行某种恢复。该恢复取决于系统,并且未由 JEDEC 规范指定。事实上,ECC 的计算和算法也没有具体说明,许多系统供应商也没有发布他们的 ECC 算法。如果是单个位错误,它将进行更正并将更正后的数据写回 DRAM。单位错误也称为“软错误”。如果它检测到双位错误,则无法进行任何纠正,因为 ECC 算法在数学上受到限制,只能进行单错误检测和纠正,而只能进行双位错误检测。您可能已经看过首字母缩略词 SECDED,这就是它的来源,单错误纠正,双错误检测。你可能已经看到首字母缩略词 SECDED,这就是它的来源,单错误纠正,双错误检测。系统日志文件应显示所有软错误和发生错误的地址。此外,它还应指明所有硬错误以及产生双位错误的读取地址。

数据源自内存控制器,然后通过内存通道,进入 DRAM。如果内存通道受到串扰、电源波动或其它信号完整性问题的影响,则数据到达 DRAM 时可能有问题,而且由于没有在 DRAM 中进行检查,我们不知道它是否正确。

接下来,写入数据被存储在 DRAM 中,并且可能会保留数天。当它位于 DRAM 中时它可能会被损坏(这可能以多种方式发生!)。当它最终被存储控制器读取时,计算 ECC 以查看是否可以检测到单个或双位错误,如果存在多个单或双位错误,则无法检测到。想象一下会对关键应用程序造成破坏的破坏!现在绝大多数时候,数据是好的,但是在出现错误的情况下,任何地方都没有指定错误处理。许多人不明白 JEDEC 规范是 DRAM 规范,而不是系统或内存控制器规范。更复杂的是,内存控制器没有向 DDR4 总线发出信号,表明它已检测到错误。所以我们不能在有问题的读取事务上触发逻辑分析器或范围。

那么我们如何找出将错误归咎于谁呢?由于 DDR4(和之前的 DDR3)架构在及时错误检测和恢复方面很差,我们必须采取务实的方法。我们必须通过查看重载和轻载下的信号完整性来验证信道。我们必须检查内存控制器是否违反协议。这可能是由于 BIOS 错误地设置了时序参数。我们需要查看读取数据的信号完整性,看看DIMM是否有问题。我们需要检查 SPD 以查看内存控制器是否将正确的参数编程到 DRAM 中。我们还需要查看导致系统最常出现故障的应用程序,以查看其是否可以指示“Row Hammer”事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值