|
Chipkill内存技术最初出现在上世纪80年代的IBM大型主机上,其典型应用场景是2003年在美国航空航天局(NASA)“探路者”火星探测器上使用。该技术是IBM公司为了弥补目前服务器内存中ECC技术的不足而开发的,是一种高可靠的内存保护技术。
众所周知,ECC内存技术虽然可以同时检测和纠正单一比特错误,但如果同时检测出两个以上比特的数据错误,则无能为力。但基于英特尔处理器架构的服务器的CPU性能以几何级的倍数提高,而硬盘驱动器的性能同期只提高了5倍,因此为了保证正常运行,服务器需要大量的内存来临时保存从CPU上读取的数据。这样大的数据访问量就导致单一内存芯片在每次访问时通常要提供4(32位)或8(64位)字节以上的数据。一次性读取这么多数据,出现多位数据错误的可能性会大大提高,而ECC又不能纠正双比特以上的错误,这样就很可能造成全部比特数据的丢失。
Chipkill内存子系统的设计原理是这样的:单一内存芯片无论数据宽度是多少,只有一个给定的ECC识别码,即存储器中的每个字节外加一个ECC位构成ECC字。如果存储器系统的数据宽度为32个字节(或256位),实际的存储器数据的宽度是256+32=288位。同时,每一个数据位都被置于分离的ECC字中。
如图1所示,存储系统由4个DIMM模块构成,32个字节(256位)的数据被分成4个ECC字,每个ECC字含有8个字节(64位)的数据位和8个ECC位。这样,一个ECC字的实际长度为64+8=72位,存储数据总长度为72×4=288位。
如图2所示,存储器控制器(Memory Controller)把每个ECC字分成4个长度为18位的段,分别存储于4个DIMM中。同时,每个DIMM中也存储了4个来自不同的ECC字的段。然后,每个段的18个位再被存储在不同的RAM芯片中。
经过上述处理,每个DRAM芯片中只保存了ECC字的一位。如果RAM芯片失效,导致某个芯片中的全部18个位都出错,也只是造成ECC字的一位错误。因为每个ECC字具有SEC/DED能力,可以自动纠错,所以可以恢复所有的数据。当然,对于RAM中的某一位、某一行、某一列发生失效,系统也可以实现自动纠正错误。采用这种Chipkill内存技术的内存可以同时检查并修复4个错误数据位,进一步提高了服务器的实用性。
与ECC技术相比,Chipkill内存技术更加有效,它提供对每个DIMM内存芯片纠正4比特错误的能力。如果内存发生错误,Chipkill将自动平稳地让出错的内存芯片离线,而服务器继续保持正常工作。
Chipkill内存技术与ECC技术一样,不仅原来的SD内存可以支持,现在主流的DDR内存也对它提供了支持。由于Chipkill内存技术是通过内存控制器提供的,所以可以在标准的ECC DIMM内存上实现,并对于操作系统是透明的。Chipkill技术有效避免系统瘫痪和数据丢失,在交通调度、证券交易等高可靠性系统中得到广泛应用。 (谢文砚)
|