一種加速糾刪碼編解碼過程的通用矩陣優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于糾刪碼技術(shù)領(lǐng)域,更具體地,涉及一種加速糾刪碼編解碼過程的通用 矩陣優(yōu)化方法。
【背景技術(shù)】
[0002] 糾刪碼是一種通過編碼生成冗余數(shù)據(jù)塊以實(shí)現(xiàn)數(shù)據(jù)保護(hù)的技術(shù)。糾刪碼技術(shù)被廣 泛應(yīng)用到磁盤陣列中以提高可靠性。對(duì)于使用伽羅華域運(yùn)算進(jìn)行編碼和解碼的糾刪碼,編 解碼過程通常涉及到矩陣與數(shù)據(jù)塊的運(yùn)算。但是現(xiàn)有的編解碼算法在實(shí)現(xiàn)矩陣與數(shù)據(jù)塊的 運(yùn)算時(shí)缺乏并行能力,同時(shí)對(duì)數(shù)據(jù)塊進(jìn)行操作的次數(shù)過多,使得編解碼性能不佳。
【發(fā)明內(nèi)容】
[0003] 針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供一種加速糾刪碼編解碼過程的 通用矩陣優(yōu)化方法,該方法能夠縮短糾刪碼編解碼過程的時(shí)間花銷。本發(fā)明通過對(duì)糾刪碼 在編解碼過程中使用的矩陣進(jìn)行拆分以提高并行計(jì)算能力,以及優(yōu)化矩陣運(yùn)算的順序以減 少數(shù)據(jù)塊運(yùn)算的次數(shù),從而實(shí)現(xiàn)縮短編解碼過程時(shí)間花銷的目的。
[0004] 為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種加速糾刪碼編解碼過程的通用矩陣優(yōu)化方 法,其特征在于,包括:
[0005] 在條帶內(nèi)部分磁盤以及部分?jǐn)?shù)據(jù)塊失效后,記失效數(shù)據(jù)塊數(shù)量為j,數(shù)據(jù)塊向 量BS被分為兩個(gè)部分,分別是失效塊向量FS= (FSi,F(xiàn)S2,…,F(xiàn)Sj)T以及存活塊向量SS= (SSpSS2,…,SSn_pT;與之對(duì)應(yīng),校驗(yàn)矩陣P被劃分為兩個(gè)子矩陣,記作F和S,其中F是一個(gè) jXj的方陣而S是一個(gè)jX(n-j)的矩陣;
[0006] 數(shù)據(jù)塊失效后的恢復(fù)過程是通過方程F*FS=S*SS計(jì)算失效數(shù)據(jù)塊FS,把方程 F*FS=S*SS的計(jì)算分解為多個(gè)方程的計(jì)算:
[0007]
[0008] 其中FSgi以及SS^分別是部分失效塊向量和部分存活塊向量,F(xiàn)被劃分為多個(gè)相 互獨(dú)立的子方陣h、F2、…Fk以及一個(gè)剩余矩陣FMst,其中兩個(gè)子方陣相互獨(dú)立是指這兩個(gè) 子方陣在原方陣中所處的行和列都不相同,剩余矩陣通常與其他子方陣不獨(dú)立,矩陣S也 被劃分為多個(gè)相互獨(dú)立的子矩陣SpS2、…Sk和一個(gè)剩余矩陣SMst。
[0009] 本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)據(jù)塊向量BS通過如下方式得到:將一個(gè)條帶內(nèi) 的糾刪碼用校驗(yàn)矩陣的形式表示,把條帶的所有數(shù)據(jù)塊寫作一個(gè)縱向量BS= (B&,BS2,… ,BSn)T,糾刪碼的校驗(yàn)矩陣記作P,則該糾刪碼滿足等式P*BS= 0,n是條帶中數(shù)據(jù)塊的總數(shù)。
[0010] 本發(fā)明的一個(gè)實(shí)施例中,所述糾刪碼使用伽羅華域運(yùn)算實(shí)施編解碼。
[0011] 本發(fā)明的一個(gè)實(shí)施例中,所述方程組(1)的前k個(gè)方程都獨(dú)立求解,前k個(gè)方程求 解完以后再對(duì)最后的方程F_t*FS=SMst*SS進(jìn)行求解即可完成所有失效數(shù)據(jù)塊的解碼。
[0012] 本發(fā)明的一個(gè)實(shí)施例中,所述方程(1)中通過方程Fi*FSgi=Si*SSgi直接計(jì)算出部 分失效數(shù)據(jù)塊FSgi,其中
,其中方程Fi*FSgi=Si*SSgi是方程 組⑴前k個(gè)方程中的一個(gè)。
[0013]本發(fā)明的一個(gè)實(shí)施例中,計(jì)算順序使用先計(jì)算(/^1 * &),后計(jì)算
i的方式,其中方程Fi*FSgi= 5 方程組(1)前k個(gè)方程中的一 個(gè)。
[0014] 總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
[0015] 提升糾刪碼編解碼過程的性能,尤其是在多核處理器上運(yùn)行時(shí)的性能。使用本發(fā) 明實(shí)現(xiàn)的編解碼過程可以利用編碼的潛在并行能力,充分發(fā)揮多核處理器的并行處理能 力,縮短計(jì)算過程所花費(fèi)的時(shí)間。即使是在單核處理器上,由于本方法減少了計(jì)算過程中使 用數(shù)據(jù)塊的次數(shù),依然能提升編解碼性能。
【附圖說明】
[0016] 圖la為糾刪碼編解碼時(shí)失效數(shù)據(jù)塊對(duì)應(yīng)的校驗(yàn)矩陣的子矩陣;
[0017] 圖lb為糾刪碼編解碼時(shí)存活數(shù)據(jù)塊對(duì)應(yīng)的校驗(yàn)矩陣的子矩陣;
[0018] 圖2為本發(fā)明實(shí)施例中一個(gè)條帶的示意圖。
【具體實(shí)施方式】
[0019] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì) 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要 彼此之間未構(gòu)成沖突就可以相互組合。
[0020] 本發(fā)明實(shí)施例中將會(huì)用到一些新的定義,其中的名詞解釋如下:
[0021] 條帶(Stripe):是本發(fā)明中應(yīng)用糾刪碼進(jìn)行數(shù)據(jù)保護(hù)的基本單元。一個(gè)磁盤陣列 被邏輯地劃分為多個(gè)條帶,每個(gè)條帶橫跨多個(gè)磁盤,在這些磁盤里占用相同的容量。條帶內(nèi) 使用糾刪碼對(duì)數(shù)據(jù)進(jìn)行保護(hù)。
[0022] 數(shù)據(jù)塊(datablock):是本發(fā)明中進(jìn)行編解碼的數(shù)據(jù)的基本單位。條帶由多個(gè)數(shù) 據(jù)塊組成,不可用的數(shù)據(jù)塊稱為丟失塊。
[0023] 編碼過程(encoding):是在條帶中利用原始數(shù)據(jù)塊生成校驗(yàn)數(shù)據(jù)塊的過程。
[0024] 解碼過程(decoding):是在條帶中部分?jǐn)?shù)據(jù)塊失效后用存活數(shù)據(jù)塊重構(gòu)丟失數(shù) 據(jù)塊的過程。
[0025] 編解碼(coding):是指編碼過程和解碼過程。
[0026] SD碼(Sector-DiskErasureCode):是一種使用伽羅華域運(yùn)算進(jìn)行編解碼的糾刪 碼,通過配置可以實(shí)現(xiàn)對(duì)多個(gè)磁盤加上多個(gè)數(shù)據(jù)塊的冗余保護(hù)。
[0027] 本發(fā)明提供一種加速糾刪碼編解碼過程的通用矩陣優(yōu)化方法,包括:
[0028] -個(gè)條帶內(nèi)的糾刪碼可以用校驗(yàn)矩陣的形式表示,把條帶的所有數(shù)據(jù)塊寫作一個(gè) 縱向量BS= (BSi,BS2,…,BSn)T,糾刪碼的校驗(yàn)矩陣記作P,則該糾刪碼滿足等式P*BS= 0。
[0029] 條帶內(nèi)部分磁盤以及部分?jǐn)?shù)據(jù)塊失效后,失效數(shù)據(jù)塊數(shù)量記作j,數(shù)據(jù)塊向量 BS被分為兩個(gè)部分,分別是失效塊向量FS= (FSi,F(xiàn)S2,…,F(xiàn)Sj)T以及存活塊向量SS= (SSpSS2,…,SSn_pT。與之對(duì)應(yīng),校驗(yàn)矩陣P被劃分為兩個(gè)子矩陣,記作F和S,其中F是一 個(gè)jXj的方陣而S是一個(gè)jX(n-j)的矩陣。只要失效情況在該糾刪碼的容錯(cuò)能力范圍內(nèi), FS、SS、F以及S滿足以下等式:F*FS=S*SS。
[0030] 數(shù)據(jù)塊失效后的恢復(fù)過程(解碼過程)實(shí)際上就是通過方程F*FS=S*SS計(jì)算失 效數(shù)據(jù)塊FS的過程。對(duì)于使用伽羅華域運(yùn)算實(shí)施編解碼的糾刪碼,方陣F通常是一個(gè)具 有大量〇元素的方陣,并且非零元素可以被劃分為多個(gè)相互獨(dú)立的子方陣以及一個(gè)剩余矩 陣。其中兩個(gè)子方陣相互獨(dú)立是指這兩個(gè)子方陣在原方陣中所處的行和列都不相同,剩余 矩陣通常與其他子方陣不獨(dú)立。與方陣F類似,矩陣S也可以被劃分為多個(gè)相互獨(dú)立的子 矩陣和一個(gè)剩余矩陣。圖la和圖lb分別是方陣F以及矩陣S的示意圖。圖la中子方陣 F#Fk是由方陣F劃分得到的相互獨(dú)立的子方陣,而F_t則是其剩余矩陣。類似地,圖lb 中子矩陣3:至Sk是由矩陣S劃分得到的相互獨(dú)立的子矩陣,而SMst則是其剩余矩陣。從而 方程F*FS=S*SS的計(jì)算可以被分解為多個(gè)方程的計(jì)算:
[0031]
[0032] 其中FSgi以及SS#分別是部分失效塊向量和部分存活塊向量。
[0033