H08 —— DDR5 的 On-Die ECC 和 Sideband ECC:片内纠错和系统 ECC 的区别
金句:ECC 不只是一种技术,它是一种信任——对数据的可靠性负责。
DDR5 引入的 ECC 类型
DDR5 有三种 ECC,分别在不同层级工作:
DDR5 ECC 的三层架构:
Layer 1:On-Die ECC(片内 ECC)
→ DRAM 颗粒内部,每颗颗粒自己纠错
→ 64bit 数据 + 4bit 内部 ECC(存在颗粒内部)
Layer 2:Sideband ECC(边带 ECC,DDR5 新增)
→ DIMM 上的额外 ECC,存储在独立的 ECC 区域
→ 64bit 数据 + 8bit Sideband ECC(存在于 DIMM 上)
Layer 3:System ECC(系统 ECC)
→ RDIMM/LRDIMM 上的外置 ECC 芯片(Register)
→ 72bit 数据(64bit + 8bit ECC)通过 ECC 芯片纠错
三层可以同时启用,实现最高级别的数据保护。On-Die ECC:颗粒内部的纠错
On-Die ECC 工作原理:
DRAM 颗粒内部(DDR5 32Gb 颗粒):
- 核心阵列(Core Array)存储 64bit 数据
- 额外存储 4bit ECC(每 64bit 数据 + 4bit 纠错码)
- 写入时:CPU 写 64bit → 颗粒内部计算 4bit ECC → 存储
- 读取时:读取 64bit + 4bit → 内部纠错 → 返回 64bit 正确数据
为什么要 4bit ECC?
- 汉明码(SECDED)可以纠 1bit 检 2bit
- 4bit ECC 可以保护更大的数据块,减少内部错误率
On-Die ECC 的效果:
- DRAM 颗粒内部的比特翻转(α粒子、EMI等)会被自动纠正
- 颗粒到控制器之间的"Channel"错误减少
- 这不会减少最终的 UCE(Uncorrectable Error),但减少 CE(Correctable Error)
On-Die ECC 不等于系统 ECC:
- 它只工作在 DRAM 颗粒内部
- 控制器看到的还是 64bit 数据(不带 ECC)
- 它不能替代 RDIMM 的系统级 ECCSideband ECC:DDR5 的新特性
Sideband ECC(边带 ECC):
DDR5 新增的功能,原因是 DDR5 的数据速率更高,
错误率比 DDR4 更高,所以加了额外的保护。
工作原理:
- 每个 DDR5 DIMM 有额外的 8bit ECC 通道(72-pin)
- 这 8bit ECC 不在主数据通道上,而是通过独立的"边带"传输
- CPU → 控制器:先发数据,再发 ECC(分两次)
结构:
传统 DDR4 ECC(72-bit):64 数据 + 8 ECC 合并传输
DDR5 Sideband ECC:64 数据 + 8 ECC 分开传输(边带)
Sideband 的优势:
- 不影响主数据通道的时序(ECC 计算不影响数据传输)
- 允许更灵活的 ECC 策略(控制器决定何时检查)
- DDR5-6400+ 的数据速率下,边带 ECC 比传统 ECC 更稳定
实际配置:
DDR5 UDIMM:40-bit × 2 通道(80 数据 + 10 ECC)
(不是 64+8,而是 40×2=80 数据 + 10 ECC)
DDR5 RDIMM:同样的边带 ECC + Register 芯片System ECC:RDIMM 和 LRDIMM 的外置 ECC 芯片
RDIMM 的 Register 芯片:
RDIMM(Registered DIMM)上的 Register 芯片:
- 位于 CPU 内存控制器和 DRAM 颗粒之间
- 缓存所有命令和地址信号(减轻负载)
- 还负责 ECC 计算和纠错(Server 版本)
工作原理:
CPU → 内存控制器 → Register(ECC纠错) → DRAM 颗粒
ECC 计算流程:
1. CPU 写 64bit 数据
2. 内存控制器计算 8bit ECC
3. 72bit 数据(64+8)发给 Register 芯片
4. Register 芯片存储和转发
5. 如果 Register 检测到错误(从 DRAM 读回时),它会:
- 纠正单比特错误(CE)
- 报告多比特错误(UCE)给 CPU
RDIMM vs UDIMM 的区别:
UDIMM(无寄存器):
- CPU 直接连接 DRAM 颗粒
- 适合 2~4 条,负载轻的系统
- 没有额外延迟,延迟最低
RDIMM(有寄存器):
- CPU 连接 Register,Register 连接 DRAM
- 适合 8~16 条,负载重的系统
- Register 增加 ~1ns 延迟
LRDIMM(Load-Reduced DIMM):
- Register + 数据缓冲(Data Buffer)
- 进一步减少负载,支持 16~32 条
- 延迟更高(~2ns),但容量最大三种 ECC 的协作
多层 ECC 保护的实际场景:
场景:α粒子击中 DRAM 颗粒内部的一个 Cell
第 1 层(On-Die ECC):
→ 颗粒检测到 1bit 翻转
→ 内部 SECDED 纠错,纠正这个 bit
→ 数据正常输出,控制器不知道发生了错误
场景:干扰更强,同时击中了 2 个 Cell
第 1 层(On-Die ECC):
→ 2bit 错误,On-Die ECC 无法纠正(只能纠1bit)
→ 报错给颗粒内部的 ECC 逻辑
第 2 层(Sideband ECC):
→ 读取时,数据 + Sideband ECC 传到控制器
→ 控制器检测到 2bit 错误
→ Sideband ECC 尝试纠正
第 3 层(RDIMM Register):
→ 如果是系统 ECC,Register 检测到错误
→ 单比特错误:纠正(CE),继续运行
→ 双比特错误:上报 UCE → MCE → 系统可能重启
这种多层保护让服务器的内存在极端环境下也能可靠运行。总结
- On-Die ECC:DDR5 颗粒内部,4bit ECC/64bit,保护 DRAM Cell 内部的错误
- Sideband ECC:DDR5 新特性,40bit×2 通道 + 10bit ECC,边带传输不占主通道带宽
- System ECC:RDIMM/LRDIMM 上的 Register 芯片,72pin DIMM,8bit ECC,系统级保护
- 三者协作:On-Die → Sideband → System,层层保护,单比特错误多层纠正,多比特错误最终上报 MCE
- 不替代关系:On-Die ECC 不等于系统 ECC,它只工作在颗粒内部
下篇预告(H09):内存条是怎么被制造出来的?PCB 生产、颗粒焊接、测试和老化筛选——为什么有些内存条能跑到 4800,有些只能 2400。
关注公众号「AI不着急」,回复”资料”获取内存学习路线图。
评论