性能服务器检验阳性,【服务器知识】ECC错误检查和纠正技术实现原理与过程

ECC(错误检查和纠正)——为了处理更大的数据而诞生

1. 简介:

ECC是“Error Checking and

Correcting”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。

2. 出现背景:

数据量越来越大,原来的检验手段力不从心Parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加Parity用来检验的数据位也成倍增加。当数据量非常大时,数据出错的几率也就越大,且其只能纠错不能更正,正是基于这样一种情况,一种新的内存技术应运而生,这就是ECC(错误检查和纠正),

3. ECC校验位增加规律

如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正,数据位每增加一倍,ECC只增加一位检验位

a4c26d1e5885305701be709a3d33442f.png

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 依此类推。

图:

a4c26d1e5885305701be709a3d33442f.png

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 图:

a4c26d1e5885305701be709a3d33442f.png

e) 综上所述,ECC校验码三个字节的存放次序如下表

a4c26d1e5885305701be709a3d33442f.png

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和存储如下 (因只有两个字节所以行极性用两个字表示即可)

a4c26d1e5885305701be709a3d33442f.png

设传输过程中0x38异变成0x34,新ECC校验和如下:

列极性CP4,CP2,CP1,行极性RP15 13 11 09 07 05 03 01

发生改变

 a4c26d1e5885305701be709a3d33442f.png

新旧ECC校验和按位异或:受影响的CP4 CP2 CP1,RP1必定等于1,其他位不受影响不会发生改变

  a4c26d1e5885305701be709a3d33442f.png

行列号确认:

a4c26d1e5885305701be709a3d33442f.png

以列号为例的计算判断树

a4c26d1e5885305701be709a3d33442f.png

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%,但以这小小的代价换来系统稳定性的大大提高,可以说是非常值得的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值