内存错误并不罕见
2009 年发表的一项针对 Google 服务器集群的大规模实地研究发现,约三分之一的机器每年至少出现一次可纠正的内存错误,而且错误率比实验室估算值高出几个数量级。对于一台常年 24/7 不间断运行的服务器,心存“这种事轮不到我”的侥幸,就是押错了宝。
ECC 的作用
ECC 内存会在数据旁额外存储校验位。内存控制器利用这些校验位即时纠正单比特错误,并检测多比特错误,而不是悄无声息地把损坏的数据交给您的应用程序,或者写入磁盘,让文件系统老老实实地为损坏后的数据计算校验和。
DDR5 的片上 ECC 不等于真正的 ECC
每颗 DDR5 芯片都内置片上 ECC(On-Die ECC),用于修正芯片内部的错误。但它不保护数据在内存模组与 CPU 之间传输的过程,也不会向操作系统报告任何信息。真正的 ECC 内存模组增加了额外的芯片和更宽的总线,使内存控制器能够端到端地纠正并记录错误。我们所说的 ECC 指的是后者:Ryzen 平台使用 ECC UDIMM,EPYC 和 Xeon 平台使用寄存器式 ECC RDIMM。
在您的服务器上检查
$ ls /sys/devices/system/edac/mc/
mc0
$ grep . /sys/devices/system/edac/mc/mc*/ce_count
/sys/devices/system/edac/mc/mc0/ce_count:0如果 EDAC 下列出了内存控制器,说明错误报告已启用。某根内存条的 ce_count(已纠正错误计数)持续上升是一个早期预警:请提交工单,我们会在它演变成问题之前更换该内存条。
资料来源
- B. Schroeder、E. Pinheiro、W.-D. Weber,“DRAM Errors in the Wild: A Large-Scale Field Study”,ACM SIGMETRICS 2009 会议论文






