1. 程式人生 > 實用技巧 >RAID 6 技術原理 - Part 2

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 – k,對於RAID6來說2t=2,所以它能修復兩個磁碟損壞;如果符號(symbol)的長度為s,那麼碼字的長度n=2s – 1。Reed-Solomon編碼將會用到伽羅瓦域(GF)運演算法則,對於採用byte長度為Symbol,其最大碼字長度為n = 28–1=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 兩個資料盤故障

四、計算校驗與效能關係

內容

轉載於:https://blog.51cto.com/luoqingchao/155088