DDR5 的 on-die ECC 能挡什么,挡不住什么

DDR5 规范里加了一项 DDR4 没有的东西:颗粒内部的 ECC,业内叫 on-die ECC 或者 OD-ECC。有人因此认为"DDR5 都自带 ECC 了,普通条也能当服务器条用"。这个理解是错的,差得还挺远。

它保护的是颗粒内部那一段路

on-die ECC 的纠错发生在颗粒内部:数据从存储阵列读出来,在颗粒里做校验和纠正,然后才送到 DQ 引脚上。它的设计目标很具体,是补偿工艺缩小之后阵列内部越来越高的单比特错误率。

一旦数据离开颗粒,进入 PCB 走线、金手指、主板插槽、CPU 内存控制器这条链路,on-die ECC 就管不着了。链路上的串扰、反射、接触不良造成的错误,它一个都拦不住。

模组级 ECC 保护的是另一段

服务器条上那颗额外的 ECC 芯片(以及 CPU 侧的 ECC 逻辑)覆盖的正是链路这一段,从条子一直到内存控制器。两者是串联关系,不是替代关系。

所以结论很直接:一根没有 ECC 位宽的 DDR5 UDIMM,无论 on-die ECC 多强,都不等于 ECC 内存。工控和服务器场景该上 ECC 还得上。

真正的麻烦:它让衰退变得看不见

这一点在做筛选和二手分级时特别重要。

DDR4 时代,颗粒开始老化会表现为主机侧偶发报错,运维能提前察觉。DDR5 上,早期的单比特错误被 on-die ECC 静默纠正,操作系统日志干干净净。等到某个 codeword 里出现两个错误位、超过纠错能力,故障直接从"完全正常"跳到"读出错误数据"或者宕机。

换个说法:on-die ECC 把渐变的失效曲线削成了悬崖。对整机用户是好事,对做质量判定的人是坏事,因为预警窗口消失了。

那要怎么测

只看"跑通不跑通"没有意义,通过是常态。可行的做法是把颗粒往边界上推,看它还剩多少余量:

  • 抬高温度到 85℃ 以上,缩短 refresh 间隔的裕量,观察错误是否出现;
  • 压缩时序参数(tRCD、tRP 一类),在规格边缘做读写,好颗粒和临界颗粒的差别会暴露出来;
  • 如果平台支持,直接读取颗粒的 ECC 纠错统计,把纠错次数当成健康度分级依据;
  • 长时间保持数据后再读,检验 retention 能力,这一项对老化颗粒最敏感。

拿到一根跑得过 MemTest 的 DDR5,只能说明它现在能用,说明不了它半年后还能用。区别就在这些边界数据里。