RAID 6 技術原理 - Part 2

RAID6技術原理

--Party 2算法

Rechard Luoide

1、XOR校驗

XOR算法,最基本的bit運算法則爲:性能

1⊕1 = 0, 0⊕0=0, 1⊕0=1;編碼

所以,會衍生出以下的byte運算法則,對於byte數據M來講:spa

M⊕M=0, M⊕0=M;設計

從而若是P爲數據塊X,Y,Z計算的XOR 值,也就說P = X⊕Y⊕Z時;當X數據塊不可用時,能夠經過P,Y,Z來獲得它,也就是code

X = P⊕Y⊕Z = (X⊕Y⊕Z) ⊕Y⊕Z=X⊕(Y⊕Y) ⊕(Z⊕Z)blog

這就是基於XOR運算的RAID5可以容許一個存儲設備故障的根本緣由。ip

2、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達到更新寫一個塊的數據,更爲簡潔高效。

3、裏德--所羅門(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 – k,對於RAID6來講2t=2,因此它能修復兩個磁盤損壞;若是符號(symbol)的長度爲s,那麼碼字的長度n=2s – 1。Reed-Solomon編碼將會用到伽羅瓦域(GF)運算法則,對於採用byte長度爲Symbol,其最大碼字長度爲n = 28–1=255,因此它此時支持255個磁盤 ,其中253個爲數據盤,剩下2個爲校驗盤,下面對該運算進行詳細講解。

4、伽羅瓦域(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

5、RAID6的數據恢復

5.1 P、Q故障

5.2 P與數據盤故障

5.3 Q與數據盤故障

5.4 兩個數據盤故障

4、計算校驗與性能關係

內容

相關文章
相關標籤/搜索