基于校驗矩陣的糾刪碼解碼方法
【技術領域】
[0001] 本發明涉及一種基于校驗矩陣的糾刪碼解碼方法。
【背景技術】
[0002] 隨著大型存儲系統中對數據可靠性的要求不斷提升,糾刪碼作為一種高效低成本 的保證高可靠性技術,被廣泛采用。通過使用糾刪碼技術,原始數據與通過編碼生成的校驗 數據被一同存放在多個存儲設備上(典型應用如磁盤陣列),從而當其中一些設備發生故 障時,它所丟失的數據可用其他設備上的數據來恢復。
[0003] 在多種多樣的糾刪碼之中,有一類是基于異或(Exclusive-OR)操作的,另一類則 是基于有限域上的運算來進行編碼解碼的。目前來說,基于異或的編碼更加流行,這是由于 硬件通常都直接支持異或操作,使得這類編碼的運算代價非常低,編碼解碼的效率非常高。 常見的基于異或操作的編碼有如下一些:用于恢復兩個磁盤失效的有EVENODD,RDP編碼, 而能容忍三個磁盤失效的有STAR和HoVer等。
[0004] 通常,我們有兩種途徑來實現這些編碼。第一種方法我們稱之為"矩陣方法":對于 任意一種糾刪碼,只要給出它的"生成矩陣"(所有糾刪碼都有其生成矩陣),我們便能利用 一系列矩陣操作進行編碼或解碼。該方法是一種通用方法,對于任意糾刪碼,我們均可用該 方法來實現。第二種方法我們稱之為專用方法:對于某些編碼,存在一些特定的編碼、解碼 算法。這些算法是根據編碼本身固有的特性來設計的,因此并不具有通用性。具體來說,適 用于一種糾刪碼的專用編碼、解碼算法,通常不適用于另一種糾刪碼。
[0005] 現有的兩種實現糾刪碼的方法,即矩陣方法和專用方法,均存在顯著的缺點。一方 面,矩陣方法雖然較為通用,但它在解碼速度上有顯著的不足,從而限制了磁盤陣列的恢復 速度,降低存儲系統的可靠性與可用性。另一方面,專用方法在解碼速度上仍然不能達到最 優(如EVEN0DD和STAR編碼),而且這類算法的實現非常復雜,不利于進一步優化;此外, 很多高效的編碼并不具有專用的實現方式,因此專用方法存在很大的局限性。總結來說,現 有的實現糾刪碼的兩種方法均不能同時具有通用性和高效性。
【發明內容】
[0006] 本發明的目的在于提供一種基于校驗矩陣的糾刪碼解碼方法,能夠對解碼效率帶 來非常大的提升
[0007] 為解決上述問題,本發明提供一種基于校驗矩陣的糾刪碼解碼方法,包括:
[0008] 根據磁盤陣列的基于異或操作的糾刪碼的編碼矩陣的編碼方式,構造出對應于所 述糾刪碼的校驗矩陣,所述校驗矩陣為一個01矩陣;
[0009] 根據所述校驗矩陣計算出磁盤陣列中失效磁盤的失效數據。
[0010] 進一步的,在上述方法中,,根據所述校驗矩陣計算出磁盤陣列中失效磁盤的失效 數據,包括:
[0011] 標記出磁盤陣列中存活數據S和失效磁盤的失效數據L ;
[0012] 將校驗矩陣H分割成兩個子矩陣扎和H s,分別對應于所述失效數據L和存活數據 S;
[0013] 利用等式L=H/_Hs_s即可通過校驗矩陣計算磁盤陣列中失效磁盤的失效數據, 其中,Hj為01矩陣的廣義逆矩陣。
[0014] 進一步的,在上述方法中,根據磁盤陣列的基于異或操作的糾刪碼的編碼矩陣的 編碼方式,構造出對應于所述糾刪碼的校驗矩陣中,
[0015] 校驗矩陣的行數等于糾刪碼的編碼矩陣中的校驗塊的數量,校驗矩陣的列數等于 糾刪碼的編碼矩陣中所有檢驗塊和數據塊的數量。
[0016] 進一步的,在上述方法中,根據磁盤陣列的基于異或操作的糾刪碼的編碼矩陣的 編碼方式,構造出對應于所述糾刪碼的校驗矩陣中,
[0017] 校驗矩陣的每一行對應所述編碼矩陣的一個校驗計算公式,每一列對應編碼矩陣 中的一個元素,當且僅當第j列對應的元素出現在第i個校驗計算式子中時,校驗矩陣的 第i行j列的元素的值為1。
[0018] 進一步的,在上述方法中,根據磁盤陣列的基于異或操作的糾刪碼的編碼矩陣的 編碼方式,構造出對應于所述糾刪碼的校驗矩陣中,
[0019] 所述校驗矩陣為稀疏校驗矩陣。
[0020] 進一步的,在上述方法中,所述稀疏校驗矩陣通過初等變換得到。
[0021] 進一步的,在上述方法中,所述稀疏校驗矩陣通過如下迭代算法構造得到:
[0022] 步驟S11,設置變量update,表示一輪迭代中校驗矩陣是否被更新,初始值設置為 false ;
[0023] 步驟S12,初始化過程,包括步驟S121~步驟S123:
[0024] 步驟S121,計算數組ones [x],其中,數組ones [x]表示校驗矩陣第x行所包含的 1的數量;
[0025] 步驟S122,記數組from[x],其中from[x]表示第x行存放該行與哪一行之和,初 始值為-1表示不存放任何其他行;
[0026] 步驟S123,記數組visit [x],其中,visit [x]表示第x行是否被訪問過,初始全置 為false,該行未被訪問;
[0027] 步驟S13,循環執行以下步驟S131~步驟S134,直至所有行均被訪問:
[0028] 步驟S131,在所有未被訪問過的行里,選取包含1數量最少的行,假設是x行,即 ones [x]的值最小;
[0029] 步驟S132,枚舉所有其他行,設行號為y,執行如下步驟S1321~S1322:
[0030] 步驟S1321,計算x行與y行的漢明距離,即有多少列的元素不相同,記該值為 dis ;
[0031] 步驟S1322,若dis〈ones[y],則表示需要將x行加至y行,于是將dis賦值給 ones [y],然后將from [y]的值改為X,最后將update的值設成true;
[0032] 步驟S133,若from[x]的值不為-1,則將from[x]這一行加至第x行;
[0033] 步驟S134,將visit [x]設成true,表示該行已經被訪問;
[0034] 步驟S14,若update的值為true,貝1」返回步驟S11,否則算法結束。
[0035] 與現有技術相比,本發明適用于任意基于異或操作的糾刪碼,本發明通過對校驗 矩陣進行解碼,從而對解碼效率帶來非常大的提升。另外,通過構造稀疏校驗矩陣的迭代算 法,能進一步提升本發明的解碼效率。相比于傳統的兩種實現方法,本發明同時具有通用性 和高效性。
【附圖說明】
[0036] 圖1是本發明一實施例的EVEN0DD水平校驗的編碼方式的示意圖;
[0037] 圖2是本發明一實施例的EVEN0DD斜向校驗的編碼方式的示意圖;
[0038] 圖3是本發明一實施例的EVEN0DD的校驗矩陣樣例圖;
[0039] 圖4是本發明一實施例的校驗矩陣解碼流程示意圖。
【具體實施方式】
[0040] 為使本發明的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實 施方式對本發明作進一步詳細的說明。
[0041] 在介紹本發明之前,先通過具體例子來闡述糾刪碼的基本概念與傳統實現方式, 以便于更好地闡述本發明的概念以及展示本發明的優勢。以經典的EVEN0DD編碼作為案 例,該編碼可用來實現RAID-6磁盤陣列,使其能容忍兩個磁盤同時失效而不使數據丟失。 EVEN0DD適用于具有p+2個磁盤的陣列,這里p必須是一個質數;并且在這p+2個磁盤中,有 P個磁盤始終用來存放原始數據,而剩余兩個磁盤用來存放校驗數據,這些校驗數據是由原 始數據經過編碼流程計算而得的。圖1和圖2展示展示了適用于7個磁盤的EVEN0DD的編 碼流程,該編碼對應的質數為P = 5。
[0042] 在圖1和圖2中,我們用一個(p_l)*(p+2)的矩陣來表示EVEN0DD編碼,其中矩陣 的每一列表示一個磁盤,每一個格子表示的是磁盤上一個大小固定的塊。先將矩陣的列從 左至右編號為0-6,前5個磁盤存放數據,后兩個磁盤存放校驗。同樣地,矩陣的行從上至下 編號為0-3,而矩陣中第i行第j列的元素表示為C i;j。
[0043] 圖1展示了磁盤5上的校驗數據的計算方式。對于磁盤5上的每個校驗 塊,它是由磁盤0-4中同一行的數據塊用異或操作求和而得,舉例來說,C a5是由公式 C0.5 =CQ,c?Cfl,1@CQ, 2@Ca3@C(X"+算而得。對應到圖中,每個校驗塊是由同樣形狀的數據 塊用異或求和而得。由于這部分計算只用到同一橫行的元素,因此該校驗通常被稱為橫向 校驗。
[0044] 圖2展示了磁盤6上的校驗數據的計算方式。我們采用了同圖1類似的表達方式, 用同樣的形狀表示參與一個校驗塊計算的所有數據塊。我們首先要計算一個中間值M,計 算公式為M = C31 ? C2,2 ? C13 ? CM。計算出M之后,磁盤6上的每個校驗塊則由圖2中同 樣形狀的數據塊的值,以及M的值一同求和而得。例如,C (3,6=CW)?C3,2@C 2,3@CU4?M。 該校驗通常被稱為斜向校驗。
[0045] 若在一個計算公式中,只有一個元素是丟失數據,那么該元素可通過公式中其他 元素用異或求和而恢復出來。傳統的恢復算法即利用了該特性。例如,當兩個數據盤同時 失效時,首先,該編碼能利用存活的兩個校驗盤上的數據恢復出s的值;然后先尋找一個數 據塊,它能被某個斜向校驗計算公式直接恢復出來;接下來利用橫向校驗公式,可恢復同一 行中的另一個缺失數據;接下來再利用斜向校驗恢復下一個數據,如此迭代直至所有數據 恢復完畢。
[0046] 本發明提供一種基于校驗矩陣的糾刪碼解碼方法,包括:
[0047] 步驟S1,根據磁盤陣列的基于異或操作的糾刪碼的編碼矩陣的編碼方式,構造出 對應于所述糾刪碼的校驗矩陣,所述校驗矩陣為一個01矩陣,將其記為H ;
[0048] 步驟S2,根據所述校驗矩陣計算出磁盤陣列中失效磁盤的失效數據。
[0049] 本發明的基于校驗矩陣的糾刪碼解碼方法的一優選的實施例中,步驟S2,根據所 述校驗矩陣計算出磁盤陣列中失效磁盤的失效數據,包括:
[0050] 步驟S21,標記出磁盤陣列中存活數據S和失效磁盤的失效數據L ;
[0051] 步驟S22,將校驗矩陣H分割成兩個子矩陣扎和H s,分別對應于所述失效數據L和 存活數據S,根據校驗矩陣的性質,滿足如下等式扎? L = Hs ? S ;校驗矩陣有一個重要的性 質,即它與編碼后的數據的乘積始終為0,這個性質是由其定義方式所決定的,且該性質對 解碼步驟來說至關重要,圖3已經借助EVEN0DD的例子闡明了這種關系,而具體的解碼方案 將在下文詳細敘述;
[0052] 步驟S23,由上一步等式可得I^H;1'Hs_S,利用該等式即可通過校驗矩陣計算磁 盤陣列中失效磁盤的失效數據,其中,H,1為01矩陣的廣義逆矩陣。具體的,為了更好地解 釋解碼流程,我們先假設當前有若干個磁盤失效。我們仍然把整個條帶內的數據看作