解析IBM服务器Chipkill内存技术

解析 IBM 服务器内存技术 IBM 作为全球服务器行业的领导厂商,不完全是依靠它几十年建立起来的品牌优势,更重 要是它在服务器领域长期处于领先地位的各项服务器技术。 虽然它的服务器内存技术并不是 IBM 的一项关键优势,但这也不是随便那个厂商都具备的,同时它却对整个服务器稳定性 的保障起着至关重要的作用。正因如此,IBM 的服务器除了具备更高的性能外,另一个重 要卖点就是具有非常高的稳定性,可以在各种非常复杂的运算环境下永久保持高度的稳定 性,这其中本文所要介绍的 IBM内存技术功不可没。

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 可以把错误改正过来不影响系统运行。

工作原理 

除了能够检查到并改正单比特错误之外,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 等。