ECC的介绍:
ECC,全称是Error Correction Code,也就是用于检查并且纠正错误的一个机制。这对于数据安全和高可靠的应用来说非常重要。
ECC内存系统可以检查并且纠正出单bit的内存错误,而对于多比特的内存错误,取决于多比特的数量和ECC的算法,有可能会被纠正,也有可能只是被检测出来。接下来我们介绍一个典型的内存错误。
Row hammer——一种经典的内存硬件错误
在服务器行业工作久一点的朋友可能熟悉一种错误,叫做row hammer fault,这个错误在DDR3时代被暴露并且关注,并且在后续时间内被利用生成row hammer攻击。Row Hammer就是狂锤某一行,隔山打牛,让隔壁的行不寒而栗,在颤抖中改变立场。
这里再用通俗一点的语言解释一下row hammer:在之前的文章中我们介绍了DDR数据读取的过程,是通过ACT命令激活某一行row,读取到sense amp中,之后再写回到原来的cell。由于DDR芯片密度的增高,这种频繁的读写会对临近行(row)产生影响,多次之后甚至会造成该cell的电量变化,进一步引起电平翻转。
ECC内存系统的流程:
ECC的实现依赖于ECC的编码,在写入数据的时候,进行编码写入,而读出的时候,进行解码验证。
ECC内存系统的写入流程:
-
CPU先将要写入的数据发给片上的内存控制器;
-
内存控制器基于数据产生ECC编码;
-
内存控制器将数据和ECC编码分别发到内存总线上的数据线和ECC数据线;(这里可以回顾之前对于DDR总线的介绍 DDR5基本介绍);
-
数据和ECC编码数据写入到DRAM芯片;
ECC内存系统的读取流程:
-
CPU内存控制器发出读请求命令;
-
内存控制器把数据和ECC编码从内存中读出;
-
内存控制器基于读取的数据产生ECC编码;
-
内存控制器将读取的ECC编码和刚才产生的ECC编码进行对比验证。如果不同,则使用ECC机制将数据进行纠正或者检查。
以上就是我们常说的内存中使用的ECC的机制和流程,了解到这个,我们就可以对比性的解释了on die ECC。
ECC的分类:
On die ECC最大的不同就是,ECC的机制实现是在内存颗粒芯片上进行的,而不同于以上介绍的ECC,是在端到端的CPU到内存的通路上实现的。
前者我们叫做on die ECC的话,后者可以被称之为边带 ECC,边带是指它需要利用到额外的DDR数据线来进行传输。
解释及总结:
边带ECC:
边带ECC在CPU的内存控制器上实现了ECC的产生和验证逻辑,在内存总线上需要额外的bit,在内存条上需要额外的DRAM芯片储存ECC编码。因此,DDR5用于ECC的额外数据总线比例要比DDR4高,这是由于DDR5 sub channel的关系,不明白的朋友可以回顾之前的系列文章。
On die ECC:
作为在DDR5上的新特性,这个ECC机制在DDR5内存颗粒上实现,而不会暴露与内存颗粒芯片之外。所以on die ECC也不会对端到端的数据通信进行保护,它只是为了保护在内存颗粒芯片内部的数据储存的一致性。
On die ECC只能纠正单比特错误。