--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 多個塊同時寫內存
圖-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 只寫一個塊
圖-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)中數據符號的總數
圖-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、計算校驗與性能關係內容