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