RAID 6 技术原理 - Part 2

RAID6技术原理

--Party 2

Rechard Luo

一、XOR校验

XOR算法,最基本的bit运算法则为:

1�1 = 0, 0�0=0, 1�0=1;

因此,会衍生出如下的byte运算法则,对于byte数据M来说:

M�M=0, M�0=M;

从而如果P为数据块X,Y,Z计算的XOR 值,也就说P = X�Y�Z时;当X数据块不可用时,可以通过P,Y,Z来得到它,也就是

X = P�Y�Z = (X�Y�Z) �Y�Z=X�(Y�Y) �(Z�Z)

这就是基于XOR运算的RAID5能够允许一个存储设备故障的根本原因。

二、P+Q校验

2.1 多个块同时写

clip_image002

图-1 同时写多个块的P+Q校验

对于RAID6需要计算双重校验,第一重校验和RAID5一样,采用XOR校验,从上面的讲解可知,异或运算法则比较简单,所以可以设计专门的硬件来完成;在Intel的IOP33x处理器上就有专门的硬件模块,XOR应用加速器 (Application Accelerator with XOR),它专门处理异或运算,将CPU解放出来,从而提高整个系统的性能。如图-1,同时写多个数据块时,P = D0�D1�D2�D3,只需告诉XOR应用加速器D0, D1, D2, D3在内存的位置,它就可以自动的完成XOR计算得到P。

对于第二重校验,需要采用基于伽罗瓦域(Galois Field)计算操作的Reed- Solomon编码,也就是说在计算Q时,会引入一个系数Ki,如图-1所示:

Q = (K0⊙D0)�(K1⊙D1)�(K2⊙D2)�(K3⊙D3)

同样,由于RAID6采用了更为复杂的算法,因此可以设计专门的硬件来完成RAID6计算,Intel的IOP333上就有RAID6应用加速器 (Application Accelerator for RAID6);它和XOR应用加速器一样,只需要知道数据D0,D1,D2,D3在内存中的位置,它就可以自动完成RAID6的计算。

2.1 只写一个块

clip_image004

图-2 写一个块的P+Q校验

当系统只需要写一个数据块时,如果把所有的其他相关的数据块都读取出来计算校验,是比较耗费计算资源的。如图-2所示,此时先把需要写的块D0new对应的旧数据D0old读取,同时还有对应的Pold和Dold读取出来,从而可以得到如下公式:

Pnew = Pold � (D0new � D0old)

= (D0old�D1�D2�D3)�(D0new � D0old)

= D0new�D1�D2�D3

Qnew = Qold � Kx ⊙ (D0new� D0old)

=(K0⊙D0)�(K1⊙D1)�(K2⊙D2)�(K3⊙D3)�Kx⊙(D0new� D0old)

=(K0⊙D0)�(K1⊙D1)�(K2⊙D2)�(K3⊙D3)�K0⊙(D0new� D0old)

=(K0⊙D0)�(K1⊙D1)�(K2⊙D2)�(K3⊙D3)

�(K0⊙D0new)�(K0⊙ D0old)

= (K1⊙D1)�(K2⊙D2)�(K3⊙D3)�(K0⊙D0new)

= (K0⊙D0new)�(K1⊙D1)�(K2⊙D2)�(K3⊙D3)

显然,通过上述只操作P和Q达到更新写一个块的数据,更为简洁高效。

三、里德--所罗门(Reed-Solomon)编码

Reed-Solomon编码,是欧文.里德(Irving Reed)和格斯.所罗门(Gus Solomon)于1960年发布的一种纠错编码,它是最大距离可分码(MDS码,Maximum Distance Separable Code)的一种类型;表示为RS(n,k),其中n表示每个码字(codeword)符号的总数,k表示每个码字(codeword)中数据符号的总数

clip_image006

图-3 RS码字

其中2t = n �C k,对于RAID6来说2t=2,所以它能修复两个磁盘损坏;如果符号(symbol)的长度为s,那么码字的长度n=2s �C 1。Reed-Solomon编码将会用到伽罗瓦域(GF)运算法则,对于采用byte长度为Symbol,其最大码字长度为n = 28�C1=255,所以它此时支持255个磁盘 ,其中253个为数据盘,剩下2个为校验盘,下面对该运算进行详细讲解。

四、伽罗瓦域(Galois Field)运算

它包括+,-,×, ÷四种运算,其中+,-操作和XOR运算一样,表示为�;而×表示为乘以基数a,表示为⊙;同样,÷定义为,若A=C÷B,则C=A⊙B。

十进制整数

(常规数学运算)

伽罗瓦域

(用XOR表示+)

(十进制)

X=10

有效值={0…9}

(二进制/十六进制)

X=a

有效值={0,1}

256

2X2+5X1+6X0

1/0x1

1a0

15

1 X1+5 X0

101/0x5

1a2+0a1+1a0

求多项式的根

X2-3X1+2=0,X2=3X1+2

X={1,2}

如果a为多项式

P(x)= X3+X1+1=0的根,那么由于+为XOR操作,所以a3=a1+1

推导公式: E0=1,En+1= En +1

推导公式: E0=a0,En+1= aEn

表-1 十进制运算和伽罗瓦域运算对比

因此,可以得到GF(8)在产生多项式X8+ X4+ X3+ X2+1情况下的表:

多项式X8+ X4+ X3+ X2+1

求a8+ a4+ a3+ a2+1=0的根为

-> a8=a4+ a3+ a2+1

HEX

0

0

0h

a0

1

1h

a1

a

2h

a2

a2

4h

a3

a3

8h

a4

a4

10h

a5

a5

20h

a6

a6

40h

a7

a7

80h

a8

a4+ a3+ a2+1

1dh

a9

a(a4+ a3+ a2+1)= a5+ a4+ a3+a

3ah

表-2多项式X8+ X4+ X3+ X2+1的GF(8)表

从而得到该多项式GF(8)的运算表为:

Gfilog(x)=

ars

s

0

1

2

3

4

5

6

7

8

f

r

0

1

2

4

8

10

20

40

80

1d

26

1

4c

98

2d

5a

b4

75

ea

c9

8f

c0

表-3 GF(8)运算表

对应GF(8)的逆运算表GF-1(8)为

Gflog(x)=

ars

s

0

1

2

3

4

5

6

7

8

f

r

0

--

0

1

19

2

32

1a

c6

3

4b

1

4

64

e0

e

34

8d

ef

81

1c

71

表-3 GF-1(8)运算表

从而,在GF运算将通过查表完成,如

2⊙8 = gfilog [gflog[2] + gflog[8] ] = gfilog[1+3]

= gfilog[4] = 0x10

五、RAID6的数据恢复

5.1 P、Q故障

5.2 P与数据盘故障

5.3 Q与数据盘故障

5.4 两个数据盘故障

四、计算校验与性能关系

内容

你可能感兴趣的:(技术,原理,raid,存储,part)