IBM作为全球服务器行业的领导厂商,不完全是依靠它几十年建立起来的品牌优势,更重要是它在服务器领域长期处于领先地位的各项服务器技术。虽然它的服务器内存技术并不是IBM的一项关键优势,但这也不是随便那个厂商都具备的(主要还是像IBM、HP和SUN三家巨头才具有),同时它却对整个服务器稳定性的保障起着至关重要的作用。正因如此,IBM的服务器除了具备更高的性能外,另一个重要卖点就是具体要求有非常高的稳定性,可以在各种非常复杂的运算环境下永久保持高度的稳定性,这其中本文所要介绍的IBM三大内存技术功不可没。
IBM的服务器三大内存技术包括:Chipkill内存、MemoryProteXion(内存保护)和MemoryMirroring(内存镜像)。下面分别予以介绍。
一、Chipkill内存技术
在服务呖呖领域,ECC几乎是内存技术的代名词,基本上所有品牌服务器都支持ECC技术,但要说明的是,ECC并不是最先进的内存技术。本文所要介绍的IBM三大内存技术就是三种更先进的内存技术。
Chipkill内存最初是由20年前的IBM大型机发展过来的,ChipKill最初是为美国航空航天局(NASA)的“探路者”探测器赴火星探险而研制。它是IBM公司为了解决通用服务器ECC内存技术的不足而开发的,是一种新的ECC内存保护技术(HP也有更新的ECC内存技术)。要注意,Chipkill内存只是一种内存技术,并不是一种特殊的内存类型,所采用的只需普通的内存即可,如原来的SD内存,现在的DDR内存均可。这样就可大大节省用户的投资,适应范围更广。
要正确理解IBM的Chipkill内存技术优势,先要对通用的ECC内存技术有一个全面的了解。因为IBM的Chipkill内存技术是在ECC技术基础上的改进。
ECC的英文全称是“ErrorCheckingandCorrecting”(错误检查和纠正),从这个名称就可以看出它的主要功能就是“发现并纠正错误”。
奇偶校验技术一样,ECC纠错技术也需要额外的空间来储存校正码,但其占用的位数跟数据的长度并非成线性关系。具体来说,它是以8位数据、5位ECC码为基准,随后每增加一个8位数据只需另增加一位ECC码即可。通俗地讲就是,一个8位的数据产生的ECC码要占用5位的空间,而一个16位数据ECC码只需在原来基础上再增加一位,也就是6位;而32位的数据则只需再在原来基础增加一位,即7位的ECC码即可,如此类推。
ECC码将信息进行8比特位的编码,采用这种方式可以恢复1比特的错误。每一次数据写入内存的时候,ECC码使用一种特殊的算法对数据进行计算,其结果称为校验位(checkbits)。然后将所有校验位加在一起的和是“校验和”(checksum),校验和与数据一起存放。当这些数据从内存中读出时,采用同一算法再次计算校验和,并和前面的计算结果相比较,如果结果相同,说明数据是正确的,反之说明有错误,ECC可以从逻辑上分离错误并通知系统。当只出现单比特错误的时候,ECC可以把错误改正过来不影响系统运行。工作原理见图1。
除了能够检查到并改正单比特错误之外,ECC码还能检查到(但不改正)单DRAM芯片上发生的任意2个随机错误,并最多可以检查到4比特的错误。当有多比特错误发生的时候,ECC内存会生成一个不可隐藏(non-maskableinterrupt)的中断(NMI),会中止系统运行,以避免出现数据恶化。
显然ECC码的长度跟数据的长度是成对数关系,当数据长度在64位以上的时候,ECC码在空间占用上就会凸现优势。此外,ECC校验最大的优点是如果数据中有一位错误,它不但能发现而且可以对其更正,ECC校验还可以发现2~4位错误(不能更正),当然这样的情况出现的几率是非常低的。但ECC码的校验算法比奇偶校验复杂不少,需要专门的芯片来支持,所以普通的电脑主板不一定支持。而且因为系统需要时间来等待校验的结果,所以ECC校验会降低系统速度2%-3%左右,但这小小的代价换来系统稳定性的大大提高可以说事非常值得的。
注意:ECC不是一种内存类型,只是一种内存技术,不仅以前的EDO内存可以有、SD内存也可有,现在主流的DDR内存同样可以有,所以在现在服务器配置中我们都可见到“512MBECCDDR-400内存”之类的字样。那是因为它并不是一种影响内存结构和存储速度的技术,可以应用到不同的内存类型之中,就象我们经常到的“奇遇校正”内存技术一样。
ECC内存技术虽然可以同时检测和纠正单一比特错误,但如果同时检测出两个以上比特的数据有错误,则无能为力。但随着基于Intel处理器架构服务器的CPU性能呈几何级的倍数提高,而硬盘驱动器的性能同期只提高了5倍。因此为了获得足够的性能,服务器需要大量的内存来临时保存在CPU上读取的数据。这样大的数据访问量就导致单一内存芯片上每次访问时通常要提供4(32位)或8(64位)比特以上的数据。一次性读取这么多数据,出现多位数据错误的可能性会大大地提高,而ECC又不能纠正双比特以上的错误,这样就很可能造成全部比特数据的丢失,系统就很快崩溃了。IBM的Chipkill技术是利用内存的子结构方法来解决这一难题。
Chipkill内存子系统的设计原理是这样的:在Chipkill技术支持下,单一内存芯片,无论数据宽度是多少,只有一个给定的ECC识别码,它的影响最多为一比特。举个例子来说明的就是,如果使用4比特宽的SDRAM,4比特中的每一位奇偶性将分别组成不同的ECC识别码,每个ECC单元可单独用一个数据位来保存的,也就是说这些识别码分别保存在不同的内存空间中。因此,即使整个内存芯片出了故障,每个ECC单元也将最多出现一比特坏数据。这种情况完全可以通过ECC逻辑修复,从而保证内存子系统的容错性,保证了服务器在出现故障时,有强大的自我恢复能力。
Chipkill内存控制器所提供的存储保护在概念上和具有校验功能的磁盘阵列类似,在写数据的时候,把数据写到多个DIMM内存芯片上。这样,每个DIMM所起的作用和存储阵列相同。如果其中任何一个芯片失效了,它只影响到一个数据字节的某一比特,因为其他比特存储在另外的芯片上。出现错误后,内存控制器能够从失效的芯片重新构造“失去”的数据,使得服务器可以继续正常工作。采用这种Chipkill内存技术的内存可以同时检查并修复4个错误数据位,进一步提高服务器的实用性。
新型的第三代Chipkill内存技术已经集成到了IBM的X架构芯片组中,不必另外定制。与ECC技术相比,Chipkill内存技术更加有效,它提供对每个DIMM内存芯片纠正4比特错误的能力。如果内存发生错误,Chipkill内存将自动和平稳地让出错的内存芯片离线,而服务器继续保持正常工作。
由于Chipkill内存技术是通过内存控制器提供的,所以可以在标准的ECCDIMM内存上实现,并且对于操作系统是透明的。目前Chipkill内存技术不仅在IBM的x系列服务器广泛采用,而且通过授权许多国内外品牌服务器中使用,如宝德公司的64位新至强机架式服务器PR2520(该公司还有许多其它服务器也支持这一内存技术,如PT4050R和PR2520等)、方正公司的方正圆明MT500等。