一种容忍dram颗粒失效的内存存取方法
【技术领域】
[0001 ]本发明涉及计算机内存技术领域,具体涉及一种容忍DRAM颗粒失效的内存存取方法。
【背景技术】
[0002]内存是计算机中重要的部件之一,计算机中所有程序的运行都是在内存中进行的,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来。
[0003]一般服务器内存条物理组成包括DRAM颗粒和Regi ster芯片,信号接口包括Command命令、Control控制、Address地址、64bit数据和8bit ECC。传统的内存存取方式是,将64bit数据信息按顺序存放在数据颗粒里面,Sbit校验信息存放在ECC颗粒里面,ECC可以纠正单bit的内存错误。
[0004]内存通常使用的技术包括Parity(奇偶校验)和ECC(Error Correcting Code,错误检查和纠正);但是Parity有一个缺点,当计算机查到某个Byte有错误时,并不能确定错误在哪一个bit,也就无法修正错误。ECC比Parity技术先进的地方在于它不仅能发现错误,而且能纠正这个单bit的错误,错误纠正之后计算机才能正确执行下面的任务,确保服务器的正常运行。随着计算机规模的不断扩大,使用的内存数量越来越多,出错的概率也越来越大,传统ECC只能纠正单bit的内存错误,当单颗DRAM失效时ECC就无法解决,系统就有宕机的风险。
[0005]如图2所示,内存控制器和内存条之间的任一笔传输数据(64bit数据位和SbitECC校验),传统内存的存取方式是按顺序存放的。假设DRAM的位宽是x8、64bit中第I个byte数据为10101010,所以10101010存放在第一颗x8 DRAM中,其他剩余数据位依次存放在第2-8颗DRAM中,ECC校验位存在第9颗ECC x8 DRAM中。当发生单bit错误时,通过ECC纠正可以保证系统正常运行,但是但单颗DRAM实效时(8bit同时失效),ECC则无法纠正该错误。
【发明内容】
[0006]本发明要解决的技术问题是:为了解决上述问题,本发明提出了一种在服务器上容忍DRAM颗粒失效的内存存取方法,将每个Byte的数据存放到不同的DRAM中,每个Byte对应CRC存放到ECC颗粒中,利用CRC纠错技术,当发生单颗DRAM失效时也能将错误纠正过来保证系统可正常运行。
[0007]本发明所采用的技术方案为:
一种容忍DRAM颗粒失效的内存存取方法,所述方法通过将内存控制器和内存条之间的任一笔传输数据,由64bit数据位和8bit ECC位组成,以字节Byte为单位,组成8 Byte数据和I Byte ECC;
然后将每个Byte的8 bit数据分散存放到不同DRAM颗粒,并对每个Byte进行单独的CRC(Cyclic Redundancy Check,循环冗余校验),并将CRC校验码存储到内存条的ECC颗粒;从而能够将失效颗粒中的数据还原出来,所以即使单颗DRAM失效,系统也可以正常运行。
[0008]所述传输数据每个Byte的8 bit数据存放到不同DRAM颗粒的方式如下:第I颗DRAM中第I个bit存放第一个Byte的第I bit,第2颗DRAM中第一个bit存放第一个Byte的第2bit,以此类推;
第2-8个Byte的8bit也按上述方法处理,分别存放到8颗DRAM中。
[0009]所述传输数据每个Byte进行单独的CRC循环冗余校验计算,并将CRC校验码存储到内存条的第9颗ECC DRAM中。
[0010]当任意一颗DRAM失效时,也只相当于每个Byte的只有I个bit失效,利用第9颗DRAM中的CRC数据可纠正单bit的错误,将失效颗粒中的数据还原出来,系统也可以正常运行。
[0011]本发明的有益效果为:
本发明提供了一种可显著降低内存故障的方法,提高了公司布局服务器内存设计,减少了因为内存原因引起的故障,提高了产品竞争力。
【附图说明】
[0012]图1为内存条组成示意图;
图2为传统内存数据顺序存放示意图;
图3为本发明内存数据分散存放示意图。
【具体实施方式】
[0013]下面根据说明书附图,结合【具体实施方式】对本发明进一步说明:
实施例1:
一种容忍DRAM颗粒失效的内存存取方法,所述方法通过将内存控制器和内存条之间的任一笔传输数据,由64bit数据位和8bit ECC位组成,以字节Byte为单位,组成8 Byte数据和I Byte ECC;
然后将每个Byte的8 bit数据分散存放到不同DRAM颗粒,并对每个Byte进行单独的CRC(Cyclic Redundancy Check,循环冗余校验),并将CRC校验码存储到内存条的ECC颗粒;从而能够将失效颗粒中的数据还原出来,所以即使单颗DRAM失效,系统也可以正常运行。
[0014]实施例2:
如图1所示,为服务器内存条物理组成,一般包括DRAM颗粒和Register芯片,以x8的颗粒组成的内存条为例进行说明,其中8颗x8 DRAM用于存放64bit数据,I颗x8 DRAM用于存放8bit ECC位。
[0015]在实施例1的基础上,本实施例所述传输数据每个Byte的8bit数据存放到不同DRAM颗粒的方式如下:
第I颗DRAM中第I个bit存放第一个Byte的第I bit,第2颗DRAM中第一个bit存放第一个Byte的第2 bit,以此类推;
第2-8个Byte的8bit也按上述方法处理,分别存放到8颗DRAM中。
[0016]如图3所示,假设第I个Byte数据为10101010,那么第I颗DRAM中第I个bit存放I,第2颗DRAM中第一个bit存放O,以此类推; 第2个Byte的8bit也按上述方法处理,分别存放到8颗DRAM中。
[0017]实施例3:
在实施例2的基础上,本实施例所述传输数据每个Byte进行单独的CRC循环冗余校验计算,并将CRC校验码存储到内存条的第9颗ECC DRAM中。
[0018]实施例4:
在实施例3的基础上,本实施例当任意一颗DRAM失效时,也只相当于每个Byte的只有I个bit失效,利用第9颗DRAM中的CRC数据可纠正单bit的错误,将失效颗粒中的数据还原出来,系统也可以正常运行。
[0019]以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
【主权项】
1.一种容忍DRAM颗粒失效的内存存取方法,其特征在于:所述方法通过将内存控制器和内存条之间的任一笔传输数据,由64bit数据位和8bit ECC位组成,以字节Byte为单位,组成8 Byte数据和I Byte ECC ; 然后将每个Byte的8 bit数据分散存放到不同DRAM颗粒,并对每个Byte进行单独的CRC,并将CRC校验码存储到内存条的ECC颗粒;从而能够将失效颗粒中的数据还原出来。2.根据权利要求1所述的一种容忍DRAM颗粒失效的内存存取方法,其特征在于:所述传输数据每个Byte的8 bit数据存放到不同DRAM颗粒的方式如下:第I颗DRAM中第I个bit存放第一个Byte的第I bit,第2颗DRAM中第一个bit存放第一个Byte的第2 bit,以此类推; 第2-8个Byte的8bit也按上述方法处理,分别存放到8颗DRAM中。3.根据权利要求2所述的一种容忍DRAM颗粒失效的内存存取方法,其特征在于:所述传输数据每个Byte进行单独的CRC循环冗余校验计算,并将CRC校验码存储到内存条的第9颗ECC DRAM 中。4.根据权利要求2所述的一种容忍DRAM颗粒失效的内存存取方法,其特征在于:当任意一颗DRAM失效时,利用第9颗DRAM中的CRC数据可纠正单bit的错误,将失效颗粒中的数据还原出来。
【专利摘要】本发明公开了一种容忍DRAM颗粒失效的内存存取方法,所述方法通过将内存控制器和内存条之间的任一笔传输数据,由64bit数据位和8bit?ECC位组成,以字节Byte为单位,组成8?Byte数据和1?Byte?ECC;然后将每个Byte的8?bit数据分散存放到不同DRAM颗粒,并对每个Byte进行单独的CRC,并将CRC校验码存储到内存条的ECC颗粒;从而能够将失效颗粒中的数据还原出来。本发明提供了一种可显著降低内存故障的方法,提高了公司布局服务器内存设计,减少了因为内存原因引起的故障,提高了产品竞争力。
【IPC分类】G06F11/10
【公开号】CN105511982
【申请号】CN201510949032
【发明人】贡维, 李鹏翀, 林楷智
【申请人】山东海量信息技术研究院
【公开日】2016年4月20日
【申请日】2015年12月18日