3.2 通用服务器内存技术服务器内存技术是所有服务器技术之中比较重要、也是比较基础的一类。因为内存技术非常尖端,所以并不是所有服务器厂商都能推出具有价值的内存技术。目前在内存技术方面除了一些通用的内存技术外,另外主要的就是像IBM、HP和Intel这样的巨头所推出的专用服务器内存技术。
大家知道,内存是引起电脑故障的一个重要因素,当使用PC机时,经常会因读写内存而出现故障或死机。而由于服务器对高可用性的要求,就必须对服务器所使用的内存采取比普通PC机内存更高的内存保护技术,使它能长期稳定地工作。同时服务器所需面对的应用请求比PC机多许多,所以对内存容量和散热性能方面的要求都较PC机高。这就涉及内存纠错、内存保护、内存镜像和各种特殊的模组技术的使用。
3.2.1 奇偶校验技术对于内存中的“奇偶校验(Parity)”技术的介绍要从比特的概念说起。学习过数字电路的人都知道,在数字电路中最小的数据单位就叫“比特(bit)”,也叫数据“位”,而电脑是一种数字产品,所以“比特”也是内存中的最小单位。
比特是通过“1”和“0”来表示数据高、低电平信号的。在数字电路中将8个连续的比特叫做一个字节(byte),在不带“奇偶校验”的内存中的每字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位来进行错误检测。
对于奇偶校验位的电平值可以通过下面的例子来说明。比如,一字节中存储了某一数值(1,0,1,0,1,0,1,1),把这每一位相加起来(1+0+1+0+1+0+1+1=5),若其结果是奇数,校验位就定义为1,反之则为0。当CPU返回读取的存储数据时,它会再次检测前8位中存储的数据的计算结果是否与校验位相一致。当CPU发现两者不同时,就试图纠正这些错误。但奇偶校验有一个缺点,当内存查到某个数据位有错误时,却并不一定能确定错误出在哪一位,也就不一定能修正错误,所以带有奇偶校验的内存的主要功能是“发现错误”,并能纠正部分简单的错误。这种内存技术最早应用于72线EDO内存时代(现在普遍是168线的内存),随着这种技术的应用领域的扩展和价格的下降,现在带有奇偶校验技术的内存极为普遍,广泛应用于普通PC机上。所以目前奇偶校验内存并不是服务器专用的,而目前服务器上所用的内存一般都是ECC内存,它同样具有奇偶校验功能,但它却能实实在在地起到纠错的作用,比奇偶校验内存更先进。
注意:有的主板可以同时使用带奇偶校验位或不带奇偶校验位的两种内存条,但它们不能混用。3.2.2 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)。将所有校验位加在一起的和是“校验和”(check sum),校验和与数据一起存放。当这些数据从内存中读出时,采用同一算法再次计算校验和,并和前面的计算结果相比较,如果结果相同,说明数据是正确的,反之说明是错误的,ECC可以从逻辑上分离错误并通知系统。当只出现单比特错误的时候,ECC可以把错误改正过来而不影响系统运行。ECC的工作原理如图3-8所示。
除了能够检查到并改正单比特错误之外,ECC码还能检查到(但不改正)单DRAM芯片上发生的任意2个随机错误,并最多可以检查到4比特的错误。当有多比特错误发生的时候,ECC内存会生成一个不可隐藏的中断(non-maskable interrupt,NMI),系统会中止运行以避免出现数据恶化。
显然ECC码的长度跟数据的长度成对数关系,当数据长度在64位以上的时候,ECC码在空间占用上就会凸现优势。此外,ECC校验最大的优点是如果数据中有一位错误,它不但能发现而且可以对其更正,ECC校验还可以发现2~4位错误(不能更正),当然这样的情况出现的几率是非常低的。但ECC码的校验算法比奇偶校验复杂不少,需要专门的芯片来支持,所以普通的电脑主板不一定支持。而且因为系统需要时间来等待校验的结果,所以ECC校验会降低系统速度2%~3%,但以这小小的代价换来系统稳定性的大大提高,可以说是非常值得的。
注意:ECC不是一种内存型号,而是一种内存技术,不仅以前的EDO内存可以有,SD内存也可有。现在主流的DDR、DDR2、DDR3内存同样可以有,所以在现在的服务器配置中都可见到“512 MB ECC DDR-400内存”之类的字样。那是因为ECC并不是一种影响内存结构和存储速度的技术,它可以应用到不同的内存类型之中,就像在前面讲到的“奇遇校验”内存一样。