ECC 内存到底纠什么错,又不纠什么错

ECC 做的是“带病运行”,不是“证明健康”

ECC(Error Correcting Code)在每 64 位数据外多加 8 位校验位,能纠正一个比特的错误(SEC)、发现两个比特的错误(DED)。它的设计初衷是让系统在偶尔出现单比特翻转时不停机,而不是用来判断内存颗粒本身是否可靠。

它不管的几件事

其一,ECC 纠的是已经发生的错误,不预防还没发生的。一颗正在劣化的颗粒,今天纠一个、明天纠一个,系统不报错,但劣化趋势被盖住了。其二,多位同时翻转(尤其相邻比特因电气问题一起出错)超出了 ECC 的纠正能力,只能被发现、被上报,严重的直接触发告警或宕机。其三,ECC 完全不涉及“这条内存的寿命还剩多少”“高温下余量够不够”这类合格判据。

所以“这是 ECC 条,所以有错也不怕”是个危险想法。ECC 让你有机会在错误变严重前处理,但它本身不替代筛选和分级。ECC 的纠正边界后面会单独讲,这里先记住:有 ECC 只说明系统更耐错,不说明条子更合格。

对测试的启示

  • ECC 是系统的容错网,不是内存的合格证。
  • 靠 ECC 掩盖错误,会错过早期失效信号。
  • 合格判定要看颗粒是否在规范余量内,而非看 ECC 是否兜底。

延伸阅读