RAID 6 技術原理 - Part 2
--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 多個塊同時寫
圖-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達到更新寫一個塊的資料,更為簡潔高效。
三、裡德--所羅門(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個為校驗盤,下面對該運算進行詳細講解。
四、伽羅瓦域(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