我们都知道,在INTEL平台,北桥负责与CPU的联系,并控制内存、AGP、PCI数据在北桥内部传输。基本上只要主板芯片组确定,那么其支持的内存类型也就确定了。在介绍主板的时候,我们已经说过,INTEL芯片组划分的很清楚,865PE属于工作站级别芯片组,不支持ECC内存,只能使用普通内存,875P芯片组属于低端服务器/工作站级别,支持ECC内存和普通非ECC内存,而E7525属于高端服务器,为了保证其稳定性,必须采用ECC REG内存,使用其他内存无法点亮。在AMD方面,K8 CPU集成了内存控制器,CPU与内存直接交换数据,不通过北桥。939针的ALTHON 64系列不支持ECC,所以只能用普通内存,939针的OPTERON支持ECC内存和普通非ECC内存,940针的OPTERON系列只能使用ECC REG内存,插入普通内存无法点亮。
普通内存 ECC内存 REG ECC内存有什么不同?
普通内存大家经常接触,DDR400的内存现在遍地都是,很多高档内存甚至可以运行DDR600/DDR2 800,而有些内存也可以达到2-2-2-5这样低的延迟,因为大家接触的比较多,这里就暂不作介绍了。 反观ECC和REG ECC内存不追求高频率和低延迟,INTLE平台内存运行频率一般在DDR333或者是DDR2 400,,AMD平台内存运行频率在DDR400,延时也多在4-4-4-8左右,从性能上看丝毫不占优势,但是稳定才是其立足的根本。图为DDR2 ECC内存。这里我们常说的ECC内存就是单指的 Unbuffer ECC,其价格和普通内存相比只贵10%-20%,从外观来说,Unbuffer ECC内存因为要满足效验纠错的需要,加入了一颗ECC效验颗粒,由于采用的是TOSP封装,使得内存看上去每面有9颗内存颗粒。
图为DDR2 ECC内存
而REG ECC的价格就贵了许多,内存上面的芯片一般比普通主板多出2-3个,主要是PLL (Phase Locked Loop)和Register IC,它们的具体用处如下 PLL(Phase Locked Loop) 琐相环集成电路芯片,内存条底部较小IC,比Register IC小,一般只有一个,起到调整时钟信号,保证内存条之间的信号同步的作用。Register IC内存条底部较小的集成电路芯片(2-3片),起提高驱动能力的作用。服务器产品需要支持大容量的内存,单靠主板无法驱动如此大容量的内存,而使用带Register的内存条,通过Register IC提高驱动能力,使服务器可支持高达32GB的内存。
图为DDR2 400 ECC REG 1 SPD芯片 2 PLL芯片 3 Register IC芯片 4 内存颗粒
因为有了PLL和 Register芯片的支持,服务器内存可以做的很大,更好的满足日益庞大的软件对内存无止境的要求。
图为日本上市的单条4GB REG ECC内存
另外看留言,有朋友提到目前很多高端服务器都是多通道,在我们DIY服务器的范畴内,这种多通道服务器很少遇到,在此不重点介绍。
ECC 原理 以及Registers功能
服务器一般要求24小时×365天不间断运行,而且不允许中途故障频出或者频繁重启,对可靠性和稳定性两项指标要求极为苛刻。相比较而言,PC机对可靠性和稳定性的要求就相对简单了许多——系统崩溃重启即可,每天开机时间多数不超过10小时。截然不同的应用决定了二者对内存功能要求的差异性。
为什么拥有ECC技术的服务器可以做到7X24或者365X24不死机重起呢,我们要先从最原始的奇偶校验说起。在计算机内,所有的信息都是以简单的“0”与“1”表示;不过当数据在电子元件间进行传递时,是有可能发生数据“误传”的情形,也就是说原来该是0的比特数据,却被误植为1的比特数据,而产生错误。其可能发生的原因相当多,包括电子噪声、元件硬件上的问题,或是传输接口不稳等,都可能数据错误,随之而来的时服务器重起,数据丢失,WINDOWS崩溃等一系列严重的后果,正如混沌学中的蝴蝶效益,极小的起因引发巨大的后果。也正因为如此,在存储器中便发展出ECC(Error-Correcting Code)与Parity Check等的检错方式,希望能降低数据传输的错误,使服务器能够长时间稳定工作。
比特(bit)是内存中的最小单位,也称“位”、它只有两个状态分别以1和0表示。我们将8个连续的比特叫做一个字节(byte)。非奇偶校验内存的每个字节只有8位,若它的某一位存储了错误的值,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而奇偶校验内存在每一字节(8位)外又额外增加了一位作为错误检测之用。比如一个字节中存储了某一数值(1、0、0、1、1、1、1、0),把这每一位相加起来(1+0+0+1+1+1+1+0=5)。若其结果是奇数,校验位就定义为1,反之则为0。当CPU返回读取储存的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就作出一定的反应。但Parity有个缺点,当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,只能让数据源重新发送一次信号,再次校验。所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并能纠正部分简单的错误。
通过上面的分析我们知道Parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加Parity用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了,正是基于这样一种情况,一种新的内存技术应允而生了,这就是ECC(错误检查和纠正).
ECC(Error Checking and Correcting)内存,它也是在原来的数据位上外加位来实现的。不同的是两者增加的方法不一样,这也就导致了两者的主要功能不太一样。它与Parity不同的是如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正,数据位每增加一倍,ECC只增加一位检验位,也就是说当数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推,数据位每增加一倍,ECC位只增加一位。总之,在内存中ECC能够容许错误,并可以将错误更正,使系统得以持续正常的操作,不致因错误而中断,且ECC具有自动更正的能力,可以将Parity无法检查出来的错误位查出并将错误修正。当然在纠错时系统的性能有着明显降低,不过这种纠错对服务器等应用而言是十分重要的。