ECC(错误检查和纠正)——为了处理更大的数据而诞生
1. 简介:
ECC是“Error Checking and
Correcting”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。
2. 出现背景:
数据量越来越大,原来的检验手段力不从心Parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加Parity用来检验的数据位也成倍增加。当数据量非常大时,数据出错的几率也就越大,且其只能纠错不能更正,正是基于这样一种情况,一种新的内存技术应运而生,这就是ECC(错误检查和纠正),
3. ECC校验位增加规律
如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正,数据位每增加一倍,ECC只增加一位检验位
4. ECC校验位如何工作
a)
每256字节原始数据生成3字节ECC校验数据,这24b分成两部分:6比特的列校验和16比特的行校验,多余的两个比特置1
b)
当往写入数据的时候,每256字节我们生成一个ECC校验和,称之为原ECC校验和,保存到OOB(out-of-band)数据区中。每当读取数据时,每256字节我们生成一个ECC校验和,称之为新ECC校验和。
c) 列极性Column Parity表示为CP0~CP5
CP0为第0、2、4、6列的极性,
CP1为第1、3、5、7列的极性,
CP2为第0、1、4、5列的极性,
CP3为第2、3、6、7列的极性,
CP4为第0、1、2、3列的极性,
CP5为第4、5、6、7列的极性。
用公式表示就是:CP0=Bit0^Bit2^Bit4^Bit6,
表示第0列内部256个Bit位异或之后再跟第2列256个Bit位异或,再跟第4列、第6列的每个Bit位异或,这样,CP0其实是256*4=1024个Bit位异或的结果。
CP1 ~ CP5 依此类推。
图:
d) 行极性Row Parity表示为RP0~RP15
l RP0为第0、2、4、6、….252、254 个字节的极性
l RP1-----1、3、5、7……253、255
l RP2----0、1、4、5、8、9…..252、253 (处理2个Byte,跳过2个Byte)
l RP3---- 2、3、6、7、10、11…..254、255 (跳过2个Byte,处理2个Byte)
l RP4---- 处理4个Byte,跳过4个Byte;
l RP5---- 跳过4个Byte,处理4个Byte;
l RP6---- 处理8个Byte,跳过8个Byte
l RP7---- 跳过8个Byte,处理8个Byte;
l RP8---- 处理16个Byte,跳过16个Byte
l RP9---- 跳过16个Byte,处理16个Byte;
l RP10----处理32个Byte,跳过32个Byte
l RP11----跳过32个Byte,处理32个Byte;
l RP12----处理64个Byte,跳过64个Byte
l RP13----跳过64个Byte,处理64个Byte;
l RP14----处理128个Byte,跳过128个Byte
l RP15----跳过128个Byte,处理128个Byte;
l 可见,RP0 ~ RP15
每个Bit位都是128个字节(也就是128行)即128*8(列)=1024个Bit位求异或的结果。
l 图:
e) 综上所述,ECC校验码三个字节的存放次序如下表
f)
将从OOB区中读出的原ECC校验和新ECC校验和按位异或,
若结果为0,则表示不存在错(或是出现了 ECC无法检测的错误);
异或结果存在11个比特位为1,表示存在一个比特错误,且可纠正;(——因代表数据存储位置的行极性8+列极性3=11)
异或结果存在1个比特位为1,表示 OOB区出错;
其他情况均表示出现了无法纠正的错误。
g) 定位出错的比特位的方法是:
确定行地址(即哪个字节出错) 行地址从高位到低位分别是RP15/13/11/09/RP7/5/3/1
再确定列地址(即该字节中的哪一个Bit位出错) 列地址从高到低(3位)CP5/CP3/CP0
h)设两个字节待检验的数据为 0x45(0100
0101)&0x38(0011 1000)
求的ECC和存储如下 (因只有两个字节所以行极性用两个字表示即可)
设传输过程中0x38异变成0x34,新ECC校验和如下:
列极性CP4,CP2,CP1,行极性RP15 13 11 09 07 05 03 01
发生改变
新旧ECC校验和按位异或:受影响的CP4 CP2 CP1,RP1必定等于1,其他位不受影响不会发生改变
行列号确认:
以列号为例的计算判断树
5. ECC码纠错过程
a) ECC码检测到DRAM芯片上发生的任意2个随机错误,
b) ECC内存会生成一个不可隐藏的中断(non-maskable interrupt,NMI),
c) 系统将中止运行以避免出现数据恶化。
6. 算法优势:
a) 可以更正一位错误如果数据中有一位错误
b) 可以发现2~4位错误(不能更正)
c) CC码的长度跟数据的长度成对数关系,当数据长度在64位以上的时候,ECC码在空间占用上就会凸现优势
7. 算法缺点:
a) 比奇偶校验复杂很多
b) 需要专门的芯片来支持,不是所有的电脑主板都支持。
c) 耗时,降低系统速度2%~3%,但以这小小的代价换来系统稳定性的大大提高,可以说是非常值得的。