本文将mark下Error Check Scrub (ECS)的相关notes。

Prerequisite

Overview

ECS 会在 DRAM 内部依次检查存储阵列中的数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
从 DRAM 阵列读出一个内部数据块

On-Die ECC 检查

是否有单比特错误?
/ \
没有 有
| |
继续检查 纠正错误数据

把正确数据写回阵列

更新错误计数

ECS 读取内部数据;若发现可纠正错误,就把纠正后的数据重新写回。它可以由命令手动启动,也可以由 DRAM 自动调度执行。

What

可以把ECS理解成:

DDR5 DRAM 芯片内部自带的一套“巡检 + 纠错 + 回写 + 记账”机制。

ECS有点像内存控制器的Patrol Scrub,但 ECS 运行在 DRAM 芯片内部,使用的是 DDR5 的 On-Die ECC

Why

假设 DRAM 中保存的是:

1
2
3
4
原始正确数据:10110010
实际阵列数据:10100010

一位翻转

普通读取时,On-Die ECC 可以临时纠正:

1
2
3
4
5
阵列中的错误数据

On-Die ECC 纠正

向 CPU 输出正确数据

但这里有一个问题:

向 CPU 输出正确数据,不一定意味着阵列中原来的错误已经被清掉。

如果错误数据长期留在阵列里,之后同一内部 ECC 保护块中又出现第二个错误,单比特纠错能力就可能不够。

ECS 因此会进一步执行:

1
2
3
4
5
读出错误数据

纠正

把正确数据重新写回 DRAM

这叫 scrub。它的主要作用是防止多个潜伏错误逐渐累积。

How

Allows the DRAM to:

  1. internally read
  2. correct single-bit errors
  3. write back corrected data bits to the DRAM array

error counts

虽然错误在 DRAM 内部被纠正了,但 DRAM仍可以把错误统计信息暴露出来。

如果没有 ECS 统计,系统可能看到:

1
2
3
CPU 每次读取的数据都是正确的

误以为 DRAM 完全健康

实际上可能是:

1
DRAM 内部已经纠正了大量单比特错误

ECS 让管理软件能够知道:

  • 扫描期间纠正了多少错误
  • 有多少行或内部数据块出现过错误
  • 哪一行的错误最多
  • 是否已经超过设定阈值

因此,ECS 在一定程度上弥补了 On-Die ECC 带来的“错误不可见”问题。在完整扫描后,DDR5 可以报告已纠正错误数量,并报告错误数量最多的行。

ECS threshold count

它是一个报告门槛

例如,假设阈值设置为 256:

1
2
3
4
5
6
7
8
9
错误计数 < 256

继续计数,通常不触发阈值告警

错误计数 ≥ 256

标记超过阈值

允许固件或管理软件获取告警/日志

设置阈值是为了避免一个偶发单比特错误就不断产生告警。

它通常用于回答:

这颗 DRAM 中被纠正的小错误是否已经多到值得关注?

控制接口还可以配置是统计“出现错误的行”,还是统计“出现错误的内部 ECC 数据块”。

需要注意:

阈值主要控制统计和报告策略,不是说超过阈值之后 ECS 才开始纠错。

ECS 扫描时发现可纠正错误,就会进行纠正;阈值更多决定何时将其视作值得报告的可靠性事件。

When

主要有两种方式。

自动模式

DRAM 自己安排 ECS 操作:

1
2
3
4
5
正常运行

DRAM 利用合适时机逐步扫描阵列

最终完成一次全阵列 ECS

自动模式由 DRAM 调度 ECS,以在建议的 24 小时周期内完成一次数据阵列扫描。

手动模式

内存控制器或固件向 DRAM 发出命令,要求执行 ECS:

1
2
3
4
5
内存控制器
↓ 特定命令
DDR5 DRAM

执行一次或一系列 ECS 操作

手动模式适合:

  • 启动时检测
  • 维护窗口
  • 管理员主动诊断
  • 发现异常后提高扫描力度

所以 mode of operation 本质上是在选择:

1
2
3
由 DRAM 自动安排

由系统显式触发

Reset the ECS counter

就是清空本轮 ECS 统计信息,例如:

  • 错误总数
  • 超过阈值的状态
  • 错误最多的行
  • 该行的错误数量
  • 相关地址信息

例如:

1
2
3
4
5
6
7
8
9
10
过去一周:
ECS count = 300

管理员读取日志并完成维护

Reset ECS counter

ECS count = 0

开始观察下一周期

它不是关闭 ECS,也不是关闭 On-Die ECC。

清零之后,系统可以判断:

  • 错误是否继续增长
  • 某次维修是否有效
  • 错误是一次性事件还是持续性缺陷

总结

ECS 是 DDR5 DRAM 内部的主动巡检机制:它周期性读取内部数据,用 On-Die ECC 纠正单比特错误,把正确数据写回,并记录错误数量及高风险行。

最关键的价值有两个:

  1. 清除潜伏错误,防止错误累积成不可纠正错误
  2. 把原本被 On-Die ECC 隐藏的错误,以计数或日志形式暴露给系统

参考资料:

  1. Micron® DDR5 SDRAM: New Features
  2. Unification of RAS feature control - Enhancing EDAC
  3. An Overview of RAS for Compute Express Link® Covering from CXL® 2.0 to CXL® 3.1