IBM作为全球服务器行业的领导厂商,不完全是依***它几十年建立起来的品牌优势,更重要是它在服务器领域长期处于领先地位的各项服务器技术。虽然它的服务器内存技术并不是IBM的一项关键优势,但这也不是随便那个厂商都具备的(主要还是像IBM、HP和SUN三家巨头才具有),同时它却对整个服务器稳定性的保障起着至关重要的作用。正因如此,IBM的服务器除了具备更高的性能外,另一个重要卖点就是具体要求有非常高的稳定性,可以在各种非常复杂的运算环境下永久保持高度的稳定性,这其中本文所要介绍的IBM三大内存技术功不可没。
IBM的服务器三大内存技术包括:Chipkill内存、Memory ProteXion(内存保护)和Memory Mirroring(内存镜像)。下面分别予以介绍。
一、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的英文全称是“ Error Checking and Correcting”(错误检查和纠正),从这个名称就可以看出它的主要功能就是“发现并纠正错误”。奇偶校验技术一样,ECC纠错技术也需要额外的空间来储存校正码,但其占用的位数跟数据的长度并非成线性关系。具体来说,它是以8位数据、5位ECC码为基准,随后每增加一个8位数据只需另增加一位ECC码即可。通俗地讲就是,一个8位的数据产生的ECC码要占用5位的空间,而一个16位数据ECC码只需在原来基础上再增加一位,也就是6位;而32位的数据则只需再在原来基础增加一位,即7位的ECC码即可,如此类推。
ECC码将信息进行8比特位的编码,采用这种方式可以恢复1比特的错误。每一次数据写入内存的时候,ECC码使用一种特殊的算法对数据进行计算,其结果称为校验位(check bits)。然后将所有校验位加在一起的和是“校验和”(checksum),校验和与数据一起存放。当这些数据从内存中读出时,采用同一算法再次计算校验和,并和前面的计算结果相比较,如果结果相同,说明数据是正确的,反之说明有错误,ECC可以从逻辑上分离错误并通知系统。当只出现单比特错误的时候,ECC可以把错误改正过来不影响系统运行。工作原理见图1。
图1
除了能够检查到并改正单比特错误之外,ECC码还能检查到(但不改正)单DRAM芯片上发生的任意2个随机错误,并最多可以检查到4比特的错误。当有多比特错误发生的时候,ECC内存会生成一个不可隐藏(non-maskable interrupt)的中断(NMI),会中止系统运行,以避免出现数据恶化。
显然ECC码的长度跟数据的长度是成对数关系,当数据长度在64位以上的时候,ECC码在空间占用上就会凸现优势。此外,ECC校验最大的优点是如果数据中有一位错误,它不但能发现而且可以对其更正,ECC校验还可以发现2~4位错误(不能更正),当然这样的情况出现的几率是非常低的。但ECC码的校验算法比奇偶校验复杂不少,需要专门的芯片来支持,所以普通的电脑主板不一定支持。而且因为系统需要时间来等待校验的结果,所以ECC校验会降低系统速度2%-3%左右,但这小小的代价换来系统稳定性的大大提高可以说事非常值得的。
注意:ECC不是一种内存类型,只是一种内存技术,不仅以前的EDO内存可以有、SD内存也可有,现在主流的DDR内存同样可以有,所以在现在服务器配置中我们都可见到“512MB ECC DDR-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内存技术是通过内存控制器提供的,所以可以在标准的ECC DIMM内存上实现,并且对于***作系统是透明的。目前Chipkill内存技术不仅在IBM的x系列服务器广泛采用,而且通过授权许多国内外品牌服务器中使用,如宝德公司的64位新至强机架式服务器PR2520(该公司还有许多其它服务器也支持这一内存技术,如PT4050R和PR2520等)、方正公司的方正圆明MT500等。
二、内存保护(Memory ProteXion)技术
Memory ProteXion技术最初是为IBM的主机开发的,在IBM公司的z系列和i系列服务器中应用了多年。它相对前面介绍的Chipkill内存技术在保护能力上更强些。
它的工作原理与硬盘的热备份类似,为了确保当某个DIMM存储芯片失效的时候,内存保护技术能够自动利用备用的比特位自动找回数据,从而保证服务器的平稳运行。该技术可以纠正发生在每对DIMM内存中多达4个连续比特位的错误。当出现随机性的软内存错误,可以通过使用热备份的比特位来解决;如果出现永久性的硬件错误,也将利用热备份的比特位使得DIMM内存芯片继续工作,直到被替换为止。
在存储器纠错方面,Memory ProteXion技术比ECC技术更加有效,同时它使用的是标准的ECC 168内存。它的工作方式有点像在Windows NT的NTFS文件系统下的在线备份磁盘扇区一样:当***作系统在磁盘上检测到坏的磁盘扇区时,它将在另外的扇区中写下这些数据留作备用。我们可以认为内存保护技术就是提供在线备份数据位。在一个2路交叉存取的内存系统中,每片168线ECC内存包含72位,但其实只有700位是用于数据存取和校验的,余下的2位是备用的,如图2所示。
图2
因为IBM的内存镜像技术对内存错误的纠正是通过内存控制器来完成的,所以不会增加***作系统的工作量,也不需要***作系统来提供支持,完全与***作系统无关。另因为只需采用标准的ECC 168线内存,所以也无需另外购买定制的内存,也就无需为这种保护增加另外的开支。
标准的ECC内存虽然可以检测出2位的数据错误,但它只能纠正一位错误。如果同时在内存上有多位出错,仅采用ECC技术的整块内存读取就失败了,此时唯有使系统临时挂起来,以尽量减少内存容量的需求,直到这个节点被更换。如果采用内存保护技术,那么就可以立即隔离这个失效的内存,重写数据在空余的数据位。通过这种方法可以在每4对168线内存中修复4个4位连续的内存错误,是前面介绍的Chipkill内存技术保护能力的两倍。而且它还还无需添加另外的硬件、无需增加额外的费用,独立***作系统工作,也不会给系统增加任何额外负担。当服务器下次重启就会重新检查内存的状态,如果是内存软错误(临时的),系统重启后内存的这些用于在线数据备份的数据位就重新释放了,恢复空的状态。如果是属于硬故障,这些在线备份数据位还会继续用来备份,直到更换为止。这种先进技术可以使减少停机时间,使服务器持续保持高效的计算平台。这对于大型的数据库系统中尤其重要。
三、内存镜像(Memory Mirroring)技术
IBM的另一种更高级内存技术就是内存镜像技术,它又相对前面的内存保护技术,在内存保护能力上更强。当服务器遇到了前面介绍的Chipkill修复技术和内存保护技校术都不能完全修复时,内存镜像技术可以得到更高级的内存保护。
内存镜像技术很像磁盘镜像技术,就是将数据同时写入到两个独立的内存卡中(每个内存卡的配置者是一样的)。正常工作情况下,内存数据读取只从活动内存卡中进行,只是当活动内存出现故障时,才会从镜像内存中读取数据。如图3所示的是CPU同时把数据写入到两片内存中的示意图。
图3
从图中可以看出,如果一个内存中有足以引起系统报警的软故障,系统会报告系统管理员,提醒管理员这个内存条将要出故障;同时服务器就会自动地切换到使用镜像内存卡,直到这个有故障的内存被更换。镜像内存允许进行热交换(Hot swap)和在线添加(Hot-add)内存。因为镜像内存采用的的两套内存中实际只有一套在使用,另一套用于备份,所以对于软件系统来说也就只有整个内存的一半容量是可用的。如果不希望镜像,在BIOS中进行禁止即可。