一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列的制作方法
【專利摘要】本發(fā)明涉及一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列Ripple?RAID 6的構(gòu)建方法,適用于連續(xù)數(shù)據(jù)存儲(chǔ),屬于獨(dú)立硬盤冗余陣列技術(shù)領(lǐng)域。本發(fā)明針對(duì)連續(xù)數(shù)據(jù)存儲(chǔ)的特點(diǎn),設(shè)計(jì)實(shí)現(xiàn)一種可消除局部并行中小寫操作的雙盤容錯(cuò)分布校驗(yàn)式硬盤陣列Ripple?RAID 6,主要包括:存儲(chǔ)數(shù)據(jù)在Ripple?RAID 6上的布局方式、基于流水技術(shù)漸進(jìn)生成校驗(yàn)的寫操作方法、數(shù)據(jù)容錯(cuò)等內(nèi)容。硬盤陣列Ripple?RAID 6在雙盤容錯(cuò)條件下,既保持了局部并行的節(jié)能性,又解決了局部并行帶來(lái)的小寫問題,能夠極大提高寫性能和整體性能,具有突出的節(jié)能效率。
【專利說(shuō)明】
一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列的構(gòu)建方法,適用于 連續(xù)數(shù)據(jù)存儲(chǔ),屬于獨(dú)立硬盤冗余陣列技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 硬盤包括磁盤和固態(tài)盤(Solid State Disk,SSD),由于磁盤是海量數(shù)據(jù)存儲(chǔ)的主 體,因此這里的硬盤主要指磁盤。
[0003] 為了提高存儲(chǔ)數(shù)據(jù)的安全性,改善存儲(chǔ)系統(tǒng)的輸入、輸出性能,人們?cè)O(shè)計(jì)了各種類 型的獨(dú)立硬盤冗余陣列(Redundant Arrays of Independent Disks JAIDhRAID技術(shù)使用 特定的硬件或軟件,把多個(gè)物理存儲(chǔ)設(shè)備如磁盤、SSD聯(lián)合起來(lái),形成一個(gè)統(tǒng)一的邏輯存儲(chǔ) 設(shè)備。
[0004] RAID中常用的技術(shù)術(shù)語(yǔ)如下:
[0005] 條帶:硬盤陣列中不同盤上的位置相關(guān)的分塊的集合,是組織不同盤上條塊的單 位。
[0006] 條帶化:把一段連續(xù)數(shù)據(jù)分割成相同大小的數(shù)據(jù)塊,把每塊數(shù)據(jù)分別寫入到硬盤 陣列的不同盤上的方法。
[0007] 鏡像:把原數(shù)據(jù)復(fù)制到一個(gè)或更多盤上。
[0008] 容錯(cuò):利用某種運(yùn)算,如異或運(yùn)算,生成冗余的校驗(yàn)數(shù)據(jù)并保存。當(dāng)硬盤出現(xiàn)故障 丟失數(shù)據(jù)時(shí),可利用校驗(yàn)數(shù)據(jù)進(jìn)行數(shù)據(jù)恢復(fù)。
[0009] 單盤容錯(cuò):利用校驗(yàn)數(shù)據(jù)和其它盤上的數(shù)據(jù),可恢復(fù)RAID中任意1塊故障盤上的數(shù) 據(jù)。常見的單盤容錯(cuò)RAID有RAID 4和RAID 5。
[0010] 雙盤容錯(cuò):利用校驗(yàn)數(shù)據(jù)和其它盤上的數(shù)據(jù),可恢復(fù)RAID中任意2塊故障盤上的數(shù) 據(jù)。常見的雙盤容錯(cuò)RAID有RAID 6。
[0011] 分布校驗(yàn):校驗(yàn)數(shù)據(jù)按一定規(guī)律分布在構(gòu)成RAID的各個(gè)盤上。
[0012] 局部并行:陣列中僅部分硬盤并行,而不是全部硬盤并行,能夠提供合適的性能, 并且便于調(diào)度其余硬盤待機(jī)節(jié)能。
[0013] RAID中的寫操作:分為3種情況,①寫數(shù)據(jù)恰好與RAID中的整個(gè)條帶對(duì)齊,稱為完 全寫;②寫數(shù)據(jù)不能覆蓋整個(gè)條帶,但不少于整個(gè)條帶的1/2時(shí),稱為重構(gòu)寫;③寫數(shù)據(jù)不足 整個(gè)條帶1/2時(shí),稱為小寫,也叫"讀-改-寫",寫新數(shù)據(jù)時(shí)需要先讀取對(duì)應(yīng)的舊數(shù)據(jù)、舊校驗(yàn) 數(shù)據(jù),與新數(shù)據(jù)一起生成新校驗(yàn)數(shù)據(jù)后,再寫入新校驗(yàn)數(shù)據(jù)。
[0014] P+Q方式的RAID 6的校驗(yàn)生成方法為:P+Q方式的RAID 6對(duì)同條帶內(nèi)的數(shù)據(jù)進(jìn)行異 或運(yùn)算,生成該條帶的校驗(yàn)數(shù)據(jù)P;然后利用伽羅華域(GF)的乘法和加法(異或運(yùn)算),生成 該條帶的校驗(yàn)數(shù)據(jù)Q。假設(shè)條帶內(nèi)的數(shù)據(jù)塊為Do和Db則校驗(yàn)塊P、Q的計(jì)算公式如公式(1)和 公式(2)所示。
[0015] P C1)
[0016] Q=(A0*D0)?(A1 *A) (2)
[0017] 其中,?表示異或運(yùn)算,*表示伽羅華域乘法,如、&為互異的伽羅華域乘法系數(shù)。
[0018] P+Q方式的RAID 6的數(shù)據(jù)恢復(fù)過程具體為:
[0019] 磁盤陣列中任意2±夬磁盤出現(xiàn)故障,可利用公式(1)和公式⑵進(jìn)行數(shù)據(jù)恢復(fù),具體 如下:
[0020] 1:校驗(yàn)塊P、Q所在磁盤出現(xiàn)故障,只需由同條帶內(nèi)的數(shù)據(jù)塊,分別按照生成P、Q的 公式(1)、式公(2),計(jì)算出P、Q即可;
[0021 ] 2:校驗(yàn)塊Q與任一數(shù)據(jù)塊所在磁盤出現(xiàn)故障,不妨設(shè)該數(shù)據(jù)塊為Di,首先利用校驗(yàn) 塊P恢復(fù)Di,由式(1)推導(dǎo)得到公式(3)。
[0022] = P@D(t (3)
[0023]異或運(yùn)算性質(zhì):〇= Mm恢復(fù)后,再利用公式(2)恢復(fù)校驗(yàn)塊Q; [0024] 3:校驗(yàn)塊P與任一數(shù)據(jù)塊所在磁盤出現(xiàn)故障,不妨設(shè)該數(shù)據(jù)塊為Di,首先利用校驗(yàn) 塊Q恢復(fù)Di,由公式(2)推導(dǎo)得到公式(4)。
[0025] ;(4 *^) = (,40*Ba)mQ;
[0026] 所以恢復(fù)0:如下:
[0027] D, = (4 * Dj) / 4 - [(-40 * A) ? 01f A (4)
[0028] 其中,/為伽羅華除法成功恢復(fù)后,再利用式(1)恢復(fù)校驗(yàn)塊P。
[0029] 4:任意2個(gè)數(shù)據(jù)塊所在磁盤出現(xiàn)故障,不妨設(shè)這兩個(gè)數(shù)據(jù)塊為DdPDi,由式(1)得 D, = ,把Dl代入式⑵得到公式⑶。
[0030] P ? )]二[(4 十八" ] ? ( 4 * 廠) (「))
[0031] *對(duì)?滿足分配律;公式(5)與Do相關(guān),并且不包含Di,利用公式(5)求解Do如公式 (6)和公式(7)所示。
[0032] =(々=尸)十 0 (6)
[0033] IV 二丨.(冬*乃?0]44串4) (7)
[0034] Do恢復(fù)后,再利用公式(1)恢復(fù)Di。
[0035] RAID 6具有雙磁盤容錯(cuò)特性,并且具有良好的綜合性能,適合對(duì)數(shù)據(jù)安全性、性能 要求均較高的領(lǐng)域。視頻監(jiān)控、備份、歸檔等連續(xù)數(shù)據(jù)存儲(chǔ)應(yīng)用,以順序數(shù)據(jù)訪問為主,對(duì)隨 機(jī)性能要求較低,不需要RAID 6等陣列全局并行提供的高性能。為此,發(fā)明專利 ZL201010256899.5、ZL201010256665. (KZL201010256711.7、ZL201010256908.0、 ZL201010256679.2、ZL201010256699.X、ZL201010575578.1、ZL201010575625.2、 ZL201010575611.0等提出多種局部并行數(shù)據(jù)布局,把采用該類局部并行數(shù)據(jù)布局的節(jié)能 RAID 統(tǒng)稱為 S-RAID。
[0036] S-RAID基本思想是:①把陣列中的存儲(chǔ)區(qū)分成若干組,組內(nèi)并行以提供合適的性 能,分組便于調(diào)度部分硬盤運(yùn)行而其余硬盤待機(jī)節(jié)能;②采用貪婪編址法,在順序訪問模式 下,保證讀寫操作在較長(zhǎng)時(shí)間內(nèi)分布在部分確定的硬盤上,其它硬盤可以長(zhǎng)時(shí)間待機(jī)節(jié)能。 [0037] S-RAID基本執(zhí)行小寫操作,原因如下:局部并行節(jié)能的核心是把讀寫操作集中在 部分并行工作的硬盤上,從而調(diào)度其它硬盤待機(jī)節(jié)能。小寫可有效減少活動(dòng)硬盤的數(shù)量,即 使有機(jī)會(huì)執(zhí)行重構(gòu)寫,也依然會(huì)執(zhí)行小寫,因?yàn)橹貥?gòu)寫需要啟動(dòng)所有硬盤,會(huì)使S-RAID喪失 節(jié)能性。小寫中寫操作引入了等量的、額外的讀操作,因此嚴(yán)重降低寫性能。
[0038] S-RAID主要面向視頻監(jiān)控、備份、歸檔等連續(xù)數(shù)據(jù)存儲(chǔ)應(yīng)用,該類應(yīng)用以寫操作為 主,這導(dǎo)致S-RAID的小寫問題異常突出。小寫使S-RAID中單位硬盤的有效寫帶寬,極限值 (100%順序?qū)憰r(shí))不到其最大寫帶寬的一半。為了提供額定的寫性能,S-RAID必須運(yùn)行更多 硬盤彌補(bǔ)小寫帶來(lái)的性能損失,會(huì)消耗更多能量,其節(jié)能效率亟待提高。
【發(fā)明內(nèi)容】
[0039] 本發(fā)明的目的是克服已有技術(shù)存在的不足,在提高存儲(chǔ)系統(tǒng)節(jié)能效率、改善存儲(chǔ) 性能的前提下,提出一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列。消除局部并行中小 寫操作的雙盤容錯(cuò)盤陣列,記作Ripple-RAID 6。
[0040] 本發(fā)明的目的是通過下述技術(shù)方案實(shí)現(xiàn)的。
[0041] 本發(fā)明提出的一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列,記作Ripple-RAID 6,其結(jié)構(gòu)布局為:
[0042] 硬盤陣列Ripple-RAID 6包含N塊硬盤,N彡4且為正整數(shù)。每個(gè)硬盤平均分成kXN+ 1個(gè)存儲(chǔ)塊,k為大于0的整數(shù)(一般在1到幾十范圍內(nèi)取值),各盤中偏移量相同的N個(gè)存儲(chǔ)塊 組成1個(gè)條帶,共組成kXN+1個(gè)條帶,任取其中1個(gè)條帶作為影子條帶,其余為基本條帶。
[0043] 每個(gè)基本條帶包含2個(gè)校驗(yàn)存儲(chǔ)塊(簡(jiǎn)稱校驗(yàn)塊),分別為P校驗(yàn)塊和Q校驗(yàn)塊,N-2 個(gè)數(shù)據(jù)存儲(chǔ)塊(簡(jiǎn)稱數(shù)據(jù)塊)。當(dāng)j小于N-1時(shí),基本條帶i中的P校驗(yàn)塊位于硬盤N-2-j,Q校驗(yàn) 塊位于硬盤N-1-j;當(dāng)j等于N-1時(shí),P校驗(yàn)塊位于硬盤N-1,Q校驗(yàn)塊位于硬盤0,這里0<i〈(k XN),j = i MOD N(M0D為模運(yùn)算)。
[0044] 每個(gè)數(shù)據(jù)塊、校驗(yàn)塊進(jìn)一步劃分為M個(gè)大小相等的子塊,每個(gè)子塊包含若干個(gè)地址 連續(xù)的扇區(qū),分別稱為數(shù)據(jù)子塊(記作Strip)、P校驗(yàn)子塊(記作PStrip)、Q校驗(yàn)子塊(記作 QStrip)。每個(gè)基本條帶中偏移量相同的子塊組成一個(gè)子條帶(記作Stripe ),這樣每個(gè)基本 條帶包含M個(gè)大小相同的子條帶。
[0045] 子條帶Stripe m內(nèi)的N-2個(gè)數(shù)據(jù)子塊Strip m異或運(yùn)算,生成該子條帶的P校驗(yàn)子 塊PStrip m;進(jìn)行伽羅華域乘法和加法運(yùn)算,生成該子條帶的Q校驗(yàn)子塊QStrip m,分別如 公式(8)和公式(9)所示。
[0046] PStrip/?2='_?Sh.ip"2 C 0 < m < M ) ( 8 ) v=0
[0047] QStrip/n = (/i(l * Strip/?/)?(/(, * Strip, *Strip/?2) i9 )
[0048] 其中,?表示異或運(yùn)算,*表示伽羅華域乘法,Aoi、…,An-3為互異的伽羅華域乘法 系數(shù)。
[0049] 為了提供合適的性能,每個(gè)基本條帶中的N-2個(gè)數(shù)據(jù)塊按順序分成F組,每組包含G 個(gè)數(shù)據(jù)塊;其中,F(xiàn)、G是大于0的整數(shù),滿足FXG = N-2,G值根據(jù)實(shí)際存儲(chǔ)帶寬需求確定。每個(gè) 子條帶中的數(shù)據(jù)子塊也被分成F組,每組包含G個(gè)數(shù)據(jù)子塊,每個(gè)子條帶中僅組內(nèi)的G個(gè)數(shù)據(jù) 子塊提供并行性,不是全部數(shù)據(jù)子塊提供并行性。
[0050] Ripple-RAID 6采用適度貪婪的地址分配策略,從基本條帶0內(nèi)、組0內(nèi)的首個(gè)數(shù)據(jù) 子塊開始,按如下規(guī)則編址:①同一組內(nèi),同一子條帶內(nèi)、編號(hào)相鄰數(shù)據(jù)塊內(nèi)的數(shù)據(jù)子塊的 地址相鄰;②同一基本條帶內(nèi),編號(hào)相鄰的兩個(gè)子條帶,前一個(gè)在組內(nèi)的末尾數(shù)據(jù)子塊,與 后一個(gè)在該組內(nèi)的起始數(shù)據(jù)子塊的地址相鄰;③同一基本條帶內(nèi),編號(hào)相鄰的組的地址相 鄰;④編號(hào)相鄰的基本條帶的地址相鄰?;緱l帶、組、數(shù)據(jù)塊均從〇開始編號(hào)。
[0051 ] Ripple-RAID 6僅對(duì)基本條帶進(jìn)行編址,影子條帶不參與編址,僅供Ripple-RAID 6內(nèi)部使用,對(duì)上層應(yīng)用是透明的,其功能在寫操作方法中會(huì)詳細(xì)介紹。上述數(shù)據(jù)布局和編 址方式,既具有局部并行的節(jié)能性,又通過引入特殊功能的影子條帶,同時(shí)具有解決局部并 行中小寫問題的基本條件。
[0052] 2寫操作方法
[0053] Ripple-RAID 6的寫操作,綜合運(yùn)用了地址映射、異地?cái)?shù)據(jù)更新、漸進(jìn)式生成校驗(yàn) 等方法,生成校驗(yàn)數(shù)據(jù)時(shí)不需讀取舊數(shù)據(jù);進(jìn)一步采用流水技術(shù)讀取已有校驗(yàn)(與舊校驗(yàn)不 同)、寫入新校驗(yàn)時(shí),可有效解決局部并行帶來(lái)的小寫問題。此外,地址映射把非順序?qū)戅D(zhuǎn)換 為順序?qū)?,可進(jìn)一步提升Ripple-RAID 6的寫性能。
[0054] 2.1地址映射
[0055]上層應(yīng)用程序發(fā)來(lái)的讀寫請(qǐng)求地址,稱為虛擬地址;數(shù)據(jù)在Ripple-RAID 6存儲(chǔ)空 間內(nèi)的存儲(chǔ)地址(Ripple-RAID 6在RAID級(jí)的編址,不包括影子條帶),稱為物理地址。地址 映射實(shí)現(xiàn)虛擬地址到物理地址的轉(zhuǎn)換:把非連續(xù)(可能部分連續(xù))的虛擬地址映射為連續(xù)的 物理地址,并記錄映射關(guān)系到地址映射表。地址映射后,寫操作在物理地址空間內(nèi)完全連 續(xù),Ripple-RAID 6完全執(zhí)行順序?qū)憽?br>[0056] Ripple-RAID 6非常適合進(jìn)行地址映射,原因如下:①連續(xù)數(shù)據(jù)存儲(chǔ)應(yīng)用以寫操作 為主,順序?qū)懣梢燥@著提高寫性能和整體性能;②讀操作以數(shù)據(jù)回放為主,即重復(fù)以前某時(shí) 間段內(nèi)的寫操作,例如視頻回放等,通??色@得與寫性能接近的讀性能;③以寫新數(shù)據(jù)為 主,很少進(jìn)行改寫操作,可以忽略改寫操作引發(fā)的垃圾回收,或在負(fù)載較輕時(shí)進(jìn)行垃圾回 收。
[0057]以若干個(gè)連續(xù)扇區(qū)為單位進(jìn)行地址映射,稱為扇區(qū)組映射方式。該方式多扇區(qū)映 射時(shí)效率高,但改寫組中部分?jǐn)?shù)據(jù)時(shí),需要讀取未修改數(shù)據(jù),與改寫數(shù)據(jù)一起重新映射。 Ripple-RAID 6很少進(jìn)行改寫操作,適合采用該映射方式。地址映射信息需要作為元數(shù)據(jù)保 存,大小為存儲(chǔ)容量的8/( 1024 X x),其中8個(gè)字節(jié)記錄一個(gè)扇區(qū)組地址,x為扇區(qū)組大小,以 KB為單位。
[0058] 2.2異地?cái)?shù)據(jù)更新
[0059] 地址映射后Ripple-RAID 6執(zhí)行順序?qū)?,依次向每個(gè)基本條帶寫數(shù)據(jù),不會(huì)同時(shí)向 兩個(gè)基本條帶寫數(shù)據(jù),也不會(huì)在一個(gè)基本條帶沒有寫滿的情況下,向另一個(gè)基本條帶寫數(shù) 據(jù)。在此基礎(chǔ)上,Ripple-RAID 6內(nèi)部執(zhí)行異地?cái)?shù)據(jù)更新,基本過程如下:
[0060] (1)向物理地址A所在的基本條帶i寫數(shù)據(jù)時(shí),數(shù)據(jù)并不直接寫入該條帶,而是寫入 地址A的影子地址A ',A '位于影子條帶,與地址A具有相同的條帶內(nèi)地址偏移量;
[0061] (2)如果影子條帶沒寫滿,轉(zhuǎn)到(1);
[0062] (3)否則,用影子條帶替換基本條帶i,即把影子條帶作為基本條帶i參與編址,實(shí) 現(xiàn)影子地址到物理地址的轉(zhuǎn)換,本次循環(huán)結(jié)束;
[0063] (4)被替換的原基本條帶i,此時(shí)沒有參與編址,在下一循環(huán)中作為影子條帶。
[0064] 2.3漸進(jìn)式生成校驗(yàn)
[0065]影子條帶的校驗(yàn)數(shù)據(jù)是根據(jù)本次循環(huán)中已寫數(shù)據(jù)生成的,稱為局部校驗(yàn)數(shù)據(jù)(不 同于舊校驗(yàn))。寫操作時(shí),根據(jù)寫數(shù)據(jù)、已有局部校驗(yàn)數(shù)據(jù)計(jì)算新的局部校驗(yàn)數(shù)據(jù),不需要讀 取舊數(shù)據(jù)。隨著寫數(shù)據(jù)的增加,局部校驗(yàn)數(shù)據(jù)的校驗(yàn)范圍逐漸擴(kuò)大,直至覆蓋整個(gè)影子條 帶。新數(shù)據(jù)的寫入、局部校驗(yàn)數(shù)據(jù)的校驗(yàn)范圍,如水中漣漪一樣向前推進(jìn),因此該硬盤陣列 稱為Ripple-RAID 6。
[0066] I.相關(guān)流水方式
[0067] 漸進(jìn)生成校驗(yàn)數(shù)據(jù)時(shí),不需讀取舊數(shù)據(jù),僅需讀取局部校驗(yàn)數(shù)據(jù)。可以增加2個(gè)輔 助存儲(chǔ)設(shè)備,與影子條帶中局部校驗(yàn)數(shù)據(jù)所在磁盤,以流水方式生成新校驗(yàn),可有效消除讀 局部校驗(yàn)數(shù)據(jù)對(duì)寫性能的影響。影子條帶中校驗(yàn)數(shù)據(jù)所在磁盤,與輔助存儲(chǔ)設(shè)備一起進(jìn)行 流水,稱該流水方式為相關(guān)流水。
[0068] 假設(shè)每個(gè)基本條帶被分成3個(gè)組,分別記作組0、組1和組2,兩個(gè)輔助存儲(chǔ)設(shè)備分別 記作輔存1和輔存2,容量均與校驗(yàn)塊相同,基于相關(guān)流水漸進(jìn)生成校驗(yàn)的寫過程如下:
[0069] (1)向任一基本條帶(稱原條帶)的組0寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組0,并 生成組〇的P校驗(yàn)、Q校驗(yàn),分別寫入影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊;
[0070] (2)組0寫滿后,向原條帶的組1寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組1,并根據(jù)寫 數(shù)據(jù)、局部校驗(yàn)(組〇的校驗(yàn),在影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊),生成新校驗(yàn)(組〇、組1的P校 驗(yàn)、Q校驗(yàn)),并分別寫入輔存1、輔存2;
[0071] (3)組1寫滿后,向原條帶的組2寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組2,并根據(jù)寫 數(shù)據(jù)、局部校驗(yàn)(組〇、組1的P校驗(yàn)、Q校驗(yàn),分別在輔存1、輔存2),生成新校驗(yàn)(組0、組1、組2 的P校驗(yàn)、Q校驗(yàn)),分別寫入影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊;
[0072] (4)影子條帶寫滿后,令其取代原條帶參與編址,被替換的原條帶不參與編址,作 為下一循環(huán)中的影子條帶。
[0073] 為保證最后生成的校驗(yàn)數(shù)據(jù)寫入影子條帶的校驗(yàn)塊,需按如下規(guī)則流水:若影子 條帶的組數(shù)為奇數(shù),首先向影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊寫校驗(yàn)數(shù)據(jù);否則首先向輔存1、輔 存2寫校驗(yàn)數(shù)據(jù)。當(dāng)輔存1、輔存2采用低功耗的SSD時(shí),其能耗增加可忽略。
[0074] n ?基于SSD的非流水方式
[0075] 優(yōu)選的,輔存采用低功耗的SSD時(shí),可不采用流水方式生成校驗(yàn)數(shù)據(jù):從輔存1、輔 存2讀局部校驗(yàn)數(shù)據(jù),新校驗(yàn)數(shù)據(jù)也寫入輔存1、輔存2,直至寫影子條帶的最后一組時(shí),從輔 存1、輔存2讀局部校驗(yàn)數(shù)據(jù),并將最終校驗(yàn)數(shù)據(jù)寫入影子條帶的P、Q校驗(yàn)塊,稱該方式為基 于SSD的非流水方式。該方式中P、Q校驗(yàn)塊所在磁盤也可待機(jī)節(jié)能,節(jié)能效果將進(jìn)一步提升。 生成校驗(yàn)時(shí)需要同時(shí)讀、寫輔存,因此輔存可能成為性能瓶頸。
[0076] m.無(wú)關(guān)流水方式
[0077] 優(yōu)選的,為了使影子條帶中P、Q校驗(yàn)塊所在硬盤大部分時(shí)間也可待機(jī)節(jié)能,進(jìn)一步 提高節(jié)能效率,同時(shí)又不影響性能,可采用如下流水方式:設(shè)置4個(gè)輔助存儲(chǔ)設(shè)備,分別記作 輔存1、輔存2、輔存3、輔存4,容量均與校驗(yàn)塊相同,輪流從其中2個(gè)讀P、Q局部校驗(yàn)數(shù)據(jù),向 另2個(gè)寫新的P、Q局部校驗(yàn)數(shù)據(jù),直至生成影子條帶的最終P、Q校驗(yàn)數(shù)據(jù),再將其寫入影子條 帶的P校驗(yàn)塊、Q校驗(yàn)塊。
[0078] 影子條帶中P、Q校驗(yàn)塊所在磁盤不參與流水,稱該流水方式為無(wú)關(guān)流水。當(dāng)輔存1、 輔存2、輔存3、輔存4采用低功耗的SSD時(shí),可忽略其能耗增加。無(wú)關(guān)流水與相關(guān)流水相似,僅 有以下幾點(diǎn)不同:
[0079] (1)向組0寫數(shù)據(jù)時(shí),生成組0的P、Q校驗(yàn)數(shù)據(jù),分別寫入輔存1、輔存3;
[0080] (2)向組1寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn)(組0的P、Q校驗(yàn),分別在輔存1、輔存3), 生成新校驗(yàn)(組〇、組1的P、Q校驗(yàn)),分別寫入輔存2、輔存4;
[0081] (3)向組2寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn)(組0、組1的P、Q校驗(yàn),分別在輔存2、輔 存4),生成新校驗(yàn)(組0、組1、組2的P、Q校驗(yàn)),最終寫入影子條帶的P、Q校驗(yàn)塊。
[0082] 3.數(shù)據(jù)容錯(cuò)
[0083]由數(shù)據(jù)布局得,Ripple-RAID 6包含N個(gè)基本條帶和1個(gè)影子條帶。按當(dāng)前狀態(tài)(是 否正在被更新)把基本條帶進(jìn)一步分為活躍條帶和睡眠條帶,影子條帶的數(shù)據(jù)組織方式與 活躍條帶相同。由于地址映射后執(zhí)行順序?qū)?,在確定時(shí)間內(nèi)只有1個(gè)基本條帶正在被更新, 即只有1個(gè)活躍條帶,其余基本條帶為睡眠條帶。
[0084]對(duì)于任意2塊故障盤中的每個(gè)存儲(chǔ)子塊,根據(jù)其不同位置,按如下方法進(jìn)行恢復(fù)。 [0085]情況1:故障盤中的存儲(chǔ)子塊位于睡眠條帶,由Ripple-RAID 6的寫操作方法得,當(dāng) 根據(jù)公式(8)和公式(9)建立校驗(yàn)關(guān)系后,睡眠條帶沒有進(jìn)行任何修改,已建立的校驗(yàn)關(guān)系 完整有效。利用【背景技術(shù)】中介紹的P+Q方式的RAID 6的數(shù)據(jù)恢復(fù)方法,可恢復(fù)該類存儲(chǔ)子 塊。
[0086] 情況2:故障盤中的存儲(chǔ)子塊位于活躍條帶,由寫操作方法得,當(dāng)根據(jù)公式(8)和公 式(9)建立校驗(yàn)關(guān)系后,活躍條帶也沒有被真正修改過(對(duì)應(yīng)的新數(shù)據(jù)實(shí)際寫入了影子條帶 的對(duì)應(yīng)位置),已建立的校驗(yàn)關(guān)系完整有效。利用【背景技術(shù)】中介紹的P+Q方式的RAID 6的數(shù) 據(jù)恢復(fù)方法,也可恢復(fù)該類存儲(chǔ)子塊。
[0087] 情況3:故障盤中的存儲(chǔ)子塊位于影子條帶,對(duì)于影子條帶,以最后一次局部并行 寫為分界線,分界線之前為已寫區(qū),其后為待寫區(qū),設(shè)分界線在組f中偏移量為m的數(shù)據(jù)子塊 Strip m之后,(Xf<F,(Xm〈M。特別強(qiáng)調(diào):當(dāng)f彡1時(shí),影子條帶校驗(yàn)塊均為已寫區(qū)。
[0088] I.故障盤中的存儲(chǔ)子塊位于影子條帶的已寫區(qū)
[0089]影子條帶的已寫區(qū)數(shù)據(jù),在影子條帶中具有完整、有效的校驗(yàn)關(guān)系,設(shè)存儲(chǔ)子塊位 于影子條帶中的子條帶Stripe k,當(dāng)(Xk<m時(shí),校驗(yàn)關(guān)系見公式(10)和公式(11)。
C10)
[0092]當(dāng)m〈k〈M時(shí)(僅當(dāng)f彡1時(shí)存在),校驗(yàn)關(guān)系見公式(12)和公式(13):
[0095] 此時(shí),可根據(jù)所在子條帶的位置,利用公式(10)和公式(11)恢復(fù)故障盤中的存儲(chǔ) 子塊,或利用公式(12)和公式(13)恢復(fù)故障盤中的存儲(chǔ)子塊。
[0096] n .故障盤中的存儲(chǔ)子塊位于影子條帶的待寫區(qū)
[0097]由Ripple-RAID 6的寫操作方法得,該部分?jǐn)?shù)據(jù)不是有效數(shù)據(jù),并且沒有參與所在 子條帶的P、Q校驗(yàn)運(yùn)算,因此數(shù)據(jù)恢復(fù)時(shí)不需要考慮。
[0098]綜上,Ripple-RAID 6具有雙盤容錯(cuò)能力,其中任意2塊硬盤出現(xiàn)故障丟失數(shù)據(jù)時(shí), 可按上述方法恢復(fù)該盤數(shù)據(jù)。分界線(最后一次局部并行寫位置)、影子條帶位置,對(duì)數(shù)據(jù)恢 復(fù)至關(guān)重要,需要記錄到元數(shù)據(jù)中,至少同時(shí)存儲(chǔ)在3塊盤上,以確保數(shù)據(jù)恢復(fù)正確執(zhí)行。 [0099] 4.讀操作
[0100]對(duì)Ripple-RAID 6進(jìn)行讀操作時(shí),需要根據(jù)上層應(yīng)用程序發(fā)來(lái)的虛擬地址,查找地 址映射表,獲得該虛擬地址對(duì)應(yīng)的物理地址A,①如果地址A位于活躍條帶的已寫區(qū)(與影子 條帶已寫區(qū)具有相同的條帶內(nèi)起始、終止偏移地址),則從地址A的影子地址A'讀取數(shù)據(jù);② 否則,直接從地址A讀取數(shù)據(jù)。
[0101] 5.節(jié)能調(diào)度
[0102] Ripple-RAID 6需要對(duì)硬盤進(jìn)行節(jié)能調(diào)度,調(diào)度空閑磁盤待機(jī)節(jié)能,當(dāng)任務(wù)到來(lái)時(shí) 喚醒待機(jī)磁盤工作。
[0103] 有益效果
[0104] 本發(fā)明的一種硬盤陣列Ripple-RAID 6的構(gòu)建方法,與已有技術(shù)比較,具有以下優(yōu) 占.
[0105] (1)保持節(jié)能性的同時(shí),具有突出的寫性能。采用新的局部并行數(shù)據(jù)布局,通過綜 合運(yùn)用異地?cái)?shù)據(jù)更新、基于流水技術(shù)漸進(jìn)生成校驗(yàn)等策略,既保持了局部并行的節(jié)能性,又 解決了局部并行中嚴(yán)重影響寫性能的小寫問題,極大提高了寫性能。
[0106] (2)可充分發(fā)揮磁盤性能優(yōu)勢(shì)。通過地址映射把非順序?qū)戅D(zhuǎn)換為順序?qū)?,可充分發(fā) 揮磁盤善于順序讀寫的性能優(yōu)勢(shì),進(jìn)一步提高寫性能。在連續(xù)數(shù)據(jù)存儲(chǔ)中,由于讀操作以回 放為主,即重復(fù)先前某段時(shí)間內(nèi)的寫操作,因此通??色@得與寫性能接近的讀性能。
[0107] (3)具有突出的節(jié)能效率。單位磁盤的寫性能極大提高后,當(dāng)存儲(chǔ)應(yīng)用需要額定的 寫性能時(shí),Ripple-RAID 6運(yùn)行更少的磁盤就能夠滿足性能需求,會(huì)節(jié)省更多能量;反之,在 運(yùn)行磁盤數(shù)相同的條件下,Ripple-RAID 6具有更高的性能裕量。
【附圖說(shuō)明】
[0108] 圖1為本發(fā)明的【具體實(shí)施方式】中的硬盤陣列Ripple-RAID 6的總體數(shù)據(jù)布局;
[0109] 圖2為本發(fā)明的【具體實(shí)施方式】中的基本條帶0的子塊劃分與校驗(yàn)關(guān)系示意圖;
[0110] 圖3為本發(fā)明的【具體實(shí)施方式】中的硬盤陣列Ripple-RAID 6的地址分配示意圖;
[0111] 圖4為本發(fā)明的【具體實(shí)施方式】中的基于相關(guān)流水的寫操作示意圖;
[0112] 圖5為本發(fā)明的【具體實(shí)施方式】中的基于SSD的非流水寫操作示意圖;
[0113] 圖6為本發(fā)明的【具體實(shí)施方式】中的基于無(wú)關(guān)流水的寫操作示意圖;
[0114] 圖7為本發(fā)明的【具體實(shí)施方式】中的數(shù)據(jù)容錯(cuò)示意圖。
【具體實(shí)施方式】
[0115] 下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
[0116] 本實(shí)施例中,硬盤陣列Ripple-RAID 6由6塊磁盤組成,每塊磁盤容量為3TB,其實(shí) 現(xiàn)主要包括數(shù)據(jù)布局、寫操作方法、數(shù)據(jù)容錯(cuò)3部分。
[0117] 1.數(shù)據(jù)布局
[0118] 如圖1所示,每塊硬盤平均分成7個(gè)存儲(chǔ)塊,各盤中偏移量相同的存儲(chǔ)塊組成1個(gè)條 帶,共組成7個(gè)條帶。任取其中1個(gè)條帶作為影子條帶(這里取第1個(gè)),其余為基本條帶。每個(gè) 基本條帶包含2個(gè)校驗(yàn)存儲(chǔ)塊(簡(jiǎn)稱校驗(yàn)塊),分別為P校驗(yàn)塊和Q校驗(yàn)塊,N-2個(gè)數(shù)據(jù)存儲(chǔ)塊 (簡(jiǎn)稱數(shù)據(jù)塊)?;緱l帶〇的P校驗(yàn)塊位于硬盤4,Q校驗(yàn)塊位于硬盤5,……,基本條帶5中的P 校驗(yàn)塊位于硬盤5,Q校驗(yàn)塊位于硬盤0。
[0119] 每個(gè)數(shù)據(jù)塊、校驗(yàn)塊(大小均為3TB/7 = 428GB)分成M= 107,000,000個(gè)相等的子 塊,子塊大小為4KB,分別稱為數(shù)據(jù)子塊、P校驗(yàn)子塊、Q校驗(yàn)子塊。每個(gè)基本條帶中偏移量相 同的子塊組成M= 107,000,000個(gè)子條帶。(注:1TB = 103GB= 106MB= 109KB)。
[0120] 如圖2所示,基本條帶0中子條帶1的P校驗(yàn)子塊由該子條帶的4個(gè)數(shù)據(jù)子塊異或運(yùn) 算生成,Q校驗(yàn)子塊由該子條帶的4個(gè)數(shù)據(jù)子塊進(jìn)行伽羅華域乘法、加法運(yùn)算生成,具體如 下:
[0121] P校驗(yàn)子塊1=(數(shù)據(jù)子塊1)。?(數(shù)據(jù)子塊1),?(數(shù)據(jù)子塊1)2@(數(shù)據(jù)子塊1)3 [0122] Q校驗(yàn)子塊1=為*(數(shù)據(jù)子塊認(rèn)細(xì),(數(shù)據(jù)子塊1), ?為*(數(shù)據(jù)子塊1)2#為氣數(shù)據(jù) 子塊1)3
[0123] 其中,?為異或,*為伽羅華域乘法,A〇、Ai、A2、A3為伽羅華域乘法系數(shù),對(duì)于伽羅華 域GF(2 8),可取A〇 = 1,Ai = 2,A2 = 4,A3 = 8,數(shù)據(jù)子塊1的下標(biāo)為所在磁盤的序號(hào),如磁盤0上 的數(shù)據(jù)子塊1表示為(數(shù)據(jù)子塊1)〇。其它子條帶校驗(yàn)子塊的計(jì)算方法,與子條帶1相同。
[0124] 每個(gè)子條帶中的數(shù)據(jù)子塊分成2組,每組2個(gè)數(shù)據(jù)子塊,由組內(nèi)2個(gè)數(shù)據(jù)子塊提供并 行性,而不是全部4個(gè)。采用適度貪婪的地址分配策略,從基本條帶0內(nèi)、組0內(nèi)的首個(gè)數(shù)據(jù)子 塊開始分配地址,具體情況見圖3,箭頭連接線兩端的數(shù)據(jù)子塊的地址相鄰,且地址由小到 大。影子條帶不參與編址,僅供Ripple-RAID 6內(nèi)部使用,對(duì)上層應(yīng)用是透明的。
[0125] 2 ?寫操作方法
[0126] 地址映射時(shí),采用扇區(qū)組映射方式,總存儲(chǔ)容量為10.3TB(每盤3TB X 6塊盤X 4/7, 去除的3/7為校驗(yàn)塊和影子條帶存儲(chǔ)塊,見圖3),扇區(qū)組大小為64KB,8個(gè)字節(jié)記錄1個(gè)扇區(qū) 組地址,則地址映射信息為10.3TB X 8B/(64 X 1024B)~1.26GB,運(yùn)行時(shí)基本可以完全調(diào)入 內(nèi)存。
[0127] 本實(shí)施例中,每個(gè)基本條帶分成了 2個(gè)組,每組包含2個(gè)數(shù)據(jù)塊。為了充分說(shuō)明寫操 作過程,這里以3個(gè)組為例進(jìn)行說(shuō)明,分別記作組0、組1和組2。
[0128] I.相關(guān)流水方式
[0129] 如圖4所示,基于相關(guān)流水的寫操作,需要2個(gè)輔助存儲(chǔ)設(shè)備,分別記作輔存1、輔存 2,容量均與校驗(yàn)塊相同,執(zhí)行過程如下:
[0130] (1)向任一基本條帶(稱原條帶)的組0寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組0,并 生成組〇的P校驗(yàn)、Q校驗(yàn),分別寫入影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊,見圖4(a);
[0131] (2)組0寫滿后,向原條帶的組1寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組1,并根據(jù)寫 數(shù)據(jù)、局部校驗(yàn)(組〇的校驗(yàn),在影子條帶的P、Q校驗(yàn)塊),生成新校驗(yàn)(組〇、組1的P校驗(yàn)、Q校 驗(yàn))并分別寫入輔存1、輔存2,見圖4(b);
[0132] (3)組1寫滿后,向原條帶的組2寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組2,并根據(jù)寫 數(shù)據(jù)、局部校驗(yàn)(組〇、組1的P校驗(yàn)、Q校驗(yàn),分別在輔存1、輔存2),生成新校驗(yàn)(組0、組1、組2 的P校驗(yàn)、Q校驗(yàn)),寫入影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊,見圖4(c);
[0133] (4)影子條帶寫滿后,令其替換原條帶參與編址,被替換的原條帶不參與編址,作 為下一循環(huán)中的影子條帶。
[0134] 影子條帶的組數(shù)為奇數(shù),因此流水時(shí)首先向影子條帶的P、Q校驗(yàn)塊寫校驗(yàn)數(shù)據(jù)。圖 4中,陰影部分為本次循環(huán)中寫入影子條帶的新數(shù)據(jù)、以及根據(jù)寫入新數(shù)據(jù)生成的局部校驗(yàn) 數(shù)據(jù),隨著寫入數(shù)據(jù)的增加,局部校驗(yàn)數(shù)據(jù)的校驗(yàn)范圍逐漸擴(kuò)大,最終覆蓋整個(gè)影子條帶。
[0135] n .基于SSD的非流水方式
[0136] 優(yōu)選的,采用低功耗的SSD作為輔存,不采用流水方式生成校驗(yàn)數(shù)據(jù),具體寫過程 與相關(guān)流水相似,僅有以下幾點(diǎn)不同,見圖5:
[0137] (1)向組0寫數(shù)據(jù)時(shí),生成組0的P、Q校驗(yàn)數(shù)據(jù),分別寫入輔存1、輔存2,見圖5(a);
[0138] (2)向組1寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn)(組0的P、Q校驗(yàn),分別在輔存1、輔存2), 生成新校驗(yàn)(組〇、組1的P、Q校驗(yàn)),分別寫入輔存1、輔存2,見圖5 (b);
[0139] (3)向組2寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn)(組0、組1的P校驗(yàn)、Q校驗(yàn),在輔存1、輔 存2),生成新校驗(yàn)(組0、組1、組2的P校驗(yàn)、Q校驗(yàn)),最終寫入影子條帶的P、Q校驗(yàn)塊,見圖5 (c) 〇
[0140] 圖5中陰影部分的含義,與圖4相同。
[0141] m.無(wú)關(guān)流水方式
[0142] 優(yōu)選的,基于無(wú)關(guān)流水的寫操作,需要4個(gè)輔助存儲(chǔ)設(shè)備,分別為輔存1、輔存2、輔 存3、輔存4,容量均與校驗(yàn)塊相同,具體過程與相關(guān)流水相似,僅有以下幾點(diǎn)不同,見圖6:
[0143] (1)向組0寫數(shù)據(jù)時(shí),生成組0的P、Q校驗(yàn)數(shù)據(jù),分別寫入輔存1、輔存3,見圖6(a);
[0144] (2)向組1寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn)(組0的P、Q校驗(yàn),分別在輔存1、輔存3), 生成新校驗(yàn)(組〇、組1的P、Q校驗(yàn)),分別寫入輔存2、輔存4,見圖6(b);
[0145] (3)向組2寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn)(組0、組1的P校驗(yàn)、Q校驗(yàn),分別在輔存 2、輔存4),生成新校驗(yàn)(組0、組1、組2的P校驗(yàn)、Q校驗(yàn)),最終寫入影子條帶的P、Q校驗(yàn)塊,見 圖 6(c)。
[0146] 圖6中陰影部分的含義,與圖4相同。
[0147] 3數(shù)據(jù)容錯(cuò)
[0148] 恢復(fù)Ripple-RAID 6中任意2塊故障盤上的數(shù)據(jù)時(shí),首先讀取分界線(最后一次局 部并行寫位置)、影子條帶的位置,這2個(gè)數(shù)據(jù)至少同時(shí)存儲(chǔ)在3塊盤上,2塊磁盤壞后仍可讀 出。對(duì)于故障盤上的每個(gè)存儲(chǔ)子塊,根據(jù)其不同位置,按如下方法進(jìn)行恢復(fù)。
[0149] 情況1、情況2:故障盤上的存儲(chǔ)子塊位于基本條帶(包括睡眠條帶和活躍條帶),當(dāng) 根據(jù)式(3)、式(4)建立校驗(yàn)關(guān)系后,基本條帶沒有進(jìn)行過實(shí)際修改,利用【背景技術(shù)】中介紹的 P+Q方式的RAID 6的恢復(fù)方法,可恢復(fù)該類存儲(chǔ)子塊。
[0150] 例如圖7中,磁盤0、磁盤2出現(xiàn)故障時(shí),這2塊盤在子條帶8中的2個(gè)數(shù)據(jù)子塊,可按 如下方法恢復(fù),根據(jù)子條帶8中的校驗(yàn)關(guān)系,有下式成立:
[0151] (數(shù)據(jù)子塊8)Q@(數(shù)據(jù)子塊8)斤(數(shù)據(jù)子塊8)2@ (數(shù)據(jù)子塊8)HP校驗(yàn)子塊8 (14)
[0152] 為*(數(shù)據(jù)子塊8)t)?為*(數(shù)據(jù)子塊數(shù)據(jù)子塊8)2?為*(數(shù)據(jù)子塊8)3=Q校驗(yàn) 子塊(15)
[0153] 整理式(14)、式(15)得:
[0154] (數(shù)據(jù)子塊8)0 e (數(shù)據(jù)子塊8)2=P校驗(yàn)子塊8 ? (數(shù)據(jù)子塊8), ? (數(shù)據(jù)子塊8)3 (16)
[0155] 為>*(數(shù)據(jù)子塊8)〇@為*(數(shù)據(jù)子塊8)2=Q校驗(yàn)子塊8H*(數(shù)據(jù)子塊數(shù)據(jù)子 塊 8}; (17)
[0156] 式(16)、式(17)是關(guān)于(數(shù)據(jù)子塊8)〇、(數(shù)據(jù)子塊8)2的方程,利用代入法或消元法, 可以恢復(fù)(數(shù)據(jù)子塊8) 〇、(數(shù)據(jù)子塊8) 2,實(shí)現(xiàn)雙盤容錯(cuò)。
[0157] 情況3:故障盤中的存儲(chǔ)子塊位于影子條帶,對(duì)于影子條帶,分界線之前為已寫區(qū), 其后為待寫區(qū),設(shè)分界線位于組1 (f= 1)中數(shù)據(jù)子塊8之后,此時(shí)滿足f多1條件,因此影子條 帶校驗(yàn)塊均為已寫區(qū)。
[0158] I.故障盤中的存儲(chǔ)子塊位于影子條帶的已寫區(qū)
[0159] 可利用影子條帶中的校驗(yàn)關(guān)系恢復(fù)數(shù)據(jù),待寫區(qū)數(shù)據(jù)子塊不參與數(shù)據(jù)恢復(fù)。
[0160] 例如,圖7中磁盤2、磁盤3出現(xiàn)故障,這2塊盤在影子條帶中的數(shù)據(jù)子塊,可利用上 述基本條帶中的數(shù)據(jù)恢復(fù)方法進(jìn)行恢復(fù)。
[0161] 又如,圖7中磁盤0、磁盤1出現(xiàn)故障,這2塊盤在影子條帶中的數(shù)據(jù)子塊M-1,按如下 方法進(jìn)行恢復(fù),根據(jù)校驗(yàn)關(guān)系有下式成立:
[0162] (數(shù)據(jù)子塊M4)。十(數(shù)據(jù)子塊M-1)產(chǎn)P校驗(yàn)子塊M-l (18)
[0163] A0*(數(shù)據(jù)子塊抓l)〇? A,(數(shù)據(jù)子塊P校驗(yàn)子塊M-1 (19)
[0164] 整理式(18)、式(19)得:
[0165] (數(shù)據(jù)子塊)(,=P校驗(yàn)子塊M-l ? (數(shù)據(jù)子塊M-1), (20)
[0166] A0*(數(shù)據(jù)子塊M-1 )。= P校驗(yàn)子塊姐-1 ? AA數(shù)據(jù)子塊M-lh (21)
[0167] 式(20)、式(21)是(數(shù)據(jù)子塊M-l)〇、(數(shù)據(jù)子塊M-lh的方程,利用代入法、或消元法 可求解出(數(shù)據(jù)子塊M-1) 〇、(數(shù)據(jù)子塊M-1):,實(shí)現(xiàn)雙盤容錯(cuò)。
[0168] 子條帶M-1在磁盤2、磁盤3中的數(shù)據(jù)子塊(X表示)位于待寫區(qū),沒有參與子條帶M-1的P、〇校驗(yàn)運(yùn)算,因此不參與數(shù)據(jù)恢復(fù)。
[0169] n .故障盤中的存儲(chǔ)子塊位于影子條帶的待寫區(qū)
[0170] 該部分?jǐn)?shù)據(jù)不是有效數(shù)據(jù),并且沒有參與所在子條帶的P、0校驗(yàn)運(yùn)算,不需要恢 復(fù)。
[0171] 綜上,Ripple-RAID 6具有雙盤容錯(cuò)能力,其中任意2塊硬盤出現(xiàn)故障丟失數(shù)據(jù)時(shí), 可按上述方法恢復(fù)數(shù)據(jù)。
[0172] 以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人 員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn),或者對(duì)其中部分技術(shù)特征進(jìn) 行等同替換,這些改進(jìn)和替換也應(yīng)視為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1. 一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列Ripple-RAID 6,其特征在于:其結(jié) 構(gòu)布局為: 硬盤陣列Ripple-RAID 6包含N塊硬盤,N彡4且為正整數(shù);每個(gè)硬盤平均分成kXN+Ι個(gè) 存儲(chǔ)塊,k為大于0的整數(shù),各盤中偏移量相同的N個(gè)存儲(chǔ)塊組成1個(gè)條帶,共組成k X N+1個(gè)條 帶,任取其中1個(gè)條帶作為影子條帶,其余為基本條帶; 每個(gè)基本條帶包含2個(gè)校驗(yàn)存儲(chǔ)塊,簡(jiǎn)稱校驗(yàn)塊,分別為P校驗(yàn)塊和Q校驗(yàn)塊,N-2個(gè)數(shù)據(jù) 存儲(chǔ)塊,簡(jiǎn)稱數(shù)據(jù)塊;當(dāng)j小于N-1時(shí),基本條帶i中的P校驗(yàn)塊位于硬盤N-2-j,Q校驗(yàn)塊位于 硬盤N-1-j ;當(dāng)j等于N-1時(shí),P校驗(yàn)塊位于硬盤N-1,Q校驗(yàn)塊位于硬盤0,這里(Xi〈(kXN),j =i MOD N; MOD為模運(yùn)算; 每個(gè)數(shù)據(jù)塊、校驗(yàn)塊進(jìn)一步劃分為M個(gè)大小相等的子塊,每個(gè)子塊包含若干個(gè)地址連續(xù) 的扇區(qū),分別稱為數(shù)據(jù)子塊,記作Strip、Ρ校驗(yàn)子塊,記作PStrip、Q校驗(yàn)子塊,記作QStrip; 每個(gè)基本條帶中偏移量相同的子塊組成一個(gè)子條帶,記作Stripe,這樣每個(gè)基本條帶包含Μ 個(gè)大小相同的子條帶; 子條帶Stripe m內(nèi)的Ν-2個(gè)數(shù)據(jù)子塊Strip m異或運(yùn)算,生成該子條帶的Ρ校驗(yàn)子塊 PStrip m;進(jìn)行伽羅華域乘法和加法運(yùn)算,生成該子條帶的Q校驗(yàn)子塊QStrip m,分別如公 式(8)和公式(9)所示;其中,後表示異或運(yùn)算,*表示伽羅華域乘法,AhAi、…,An-3為互異的伽羅華域乘法系 數(shù); 為了提供合適的性能,每個(gè)基本條帶中的N-2個(gè)數(shù)據(jù)塊按順序分成F組,每組包含G個(gè)數(shù) 據(jù)塊;其中,F(xiàn)、G是大于0的整數(shù),滿足FXG = N-2,G值根據(jù)實(shí)際存儲(chǔ)帶寬需求確定;每個(gè)子條 帶中的數(shù)據(jù)子塊也被分成F組,每組包含G個(gè)數(shù)據(jù)子塊,每個(gè)子條帶中僅組內(nèi)的G個(gè)數(shù)據(jù)子塊 提供并行性,不是全部數(shù)據(jù)子塊提供并行性; Ripple-RAID 6采用適度貪婪的地址分配策略,從基本條帶0內(nèi)、組0內(nèi)的首個(gè)數(shù)據(jù)子塊 開始,按如下規(guī)則編址:①同一組內(nèi),同一子條帶內(nèi)、編號(hào)相鄰數(shù)據(jù)塊內(nèi)的數(shù)據(jù)子塊的地址 相鄰;②同一基本條帶內(nèi),編號(hào)相鄰的兩個(gè)子條帶,前一個(gè)在組內(nèi)的末尾數(shù)據(jù)子塊,與后一 個(gè)在該組內(nèi)的起始數(shù)據(jù)子塊的地址相鄰;③同一基本條帶內(nèi),編號(hào)相鄰的組的地址相鄰;④ 編號(hào)相鄰的基本條帶的地址相鄰;基本條帶、組、數(shù)據(jù)塊均從〇開始編號(hào); Ripple-RAID 6僅對(duì)基本條帶進(jìn)行編址,影子條帶不參與編址,僅供Ripple-RAID 6內(nèi) 部使用,對(duì)上層應(yīng)用是透明的,其功能在寫操作方法中會(huì)詳細(xì)介紹;上述數(shù)據(jù)布局和編址方 式,既具有局部并行的節(jié)能性,又通過引入特殊功能的影子條帶,同時(shí)具有解決局部并行中 小寫問題的基本條件。2. 如權(quán)利要求1所述的一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列Ripple-RAID 6,其特征在于:其寫操作方法具體為: Ripple-RAID 6的寫操作,綜合運(yùn)用了地址映射、異地?cái)?shù)據(jù)更新、漸進(jìn)式生成校驗(yàn)等方 法,生成校驗(yàn)數(shù)據(jù)時(shí)不需讀取舊數(shù)據(jù);進(jìn)一步采用流水技術(shù)讀取已有校驗(yàn)、寫入新校驗(yàn)時(shí), 可有效解決局部并行帶來(lái)的小寫問題;此外,地址映射把非順序?qū)戅D(zhuǎn)換為順序?qū)?,可進(jìn)一步 提升Ripple-RAID 6的寫性能; 2.1地址映射; 上層應(yīng)用程序發(fā)來(lái)的讀寫請(qǐng)求地址,稱為虛擬地址;數(shù)據(jù)在Ripple-RAID 6存儲(chǔ)空間內(nèi) 的存儲(chǔ)地址,稱為物理地址;地址映射實(shí)現(xiàn)虛擬地址到物理地址的轉(zhuǎn)換:把非連續(xù)的虛擬地 址映射為連續(xù)的物理地址,并記錄映射關(guān)系到地址映射表;地址映射后,寫操作在物理地址 空間內(nèi)完全連續(xù),Ripple-RAID 6完全執(zhí)行順序?qū)懀? 以若干個(gè)連續(xù)扇區(qū)為單位進(jìn)行地址映射,稱為扇區(qū)組映射方式;該方式多扇區(qū)映射時(shí) 效率高,但改寫組中部分?jǐn)?shù)據(jù)時(shí),需要讀取未修改數(shù)據(jù),與改寫數(shù)據(jù)一起重新映射;Ripple-RAID 6 很少進(jìn)行改寫操作,適合采用該映射方式; 地址映射信息需要作為元數(shù)據(jù)保存,大小 為存儲(chǔ)容量的8/(1024 Xx),其中8個(gè)字節(jié)記錄一個(gè)扇區(qū)組地址,X為扇區(qū)組大小,以KB為單 位; 2.2異地?cái)?shù)據(jù)更新; 地址映射后Ripple-RAID 6執(zhí)行順序?qū)懀来蜗蛎總€(gè)基本條帶寫數(shù)據(jù),不會(huì)同時(shí)向兩個(gè) 基本條帶寫數(shù)據(jù),也不會(huì)在一個(gè)基本條帶沒有寫滿的情況下,向另一個(gè)基本條帶寫數(shù)據(jù);在 此基礎(chǔ)上,Ripple-RAID 6內(nèi)部執(zhí)行異地?cái)?shù)據(jù)更新,基本過程如下: (1) 向物理地址A所在的基本條帶i寫數(shù)據(jù)時(shí),數(shù)據(jù)并不直接寫入該條帶,而是寫入地址 A的影子地址A ',A '位于影子條帶,與地址A具有相同的條帶內(nèi)地址偏移量; (2) 如果影子條帶沒寫滿,轉(zhuǎn)到(1); (3) 否則,用影子條帶替換基本條帶i,即把影子條帶作為基本條帶i參與編址,實(shí)現(xiàn)影 子地址到物理地址的轉(zhuǎn)換,本次循環(huán)結(jié)束; (4) 被替換的原基本條帶i,此時(shí)沒有參與編址,在下一循環(huán)中作為影子條帶; 2.3漸進(jìn)式生成校驗(yàn); 影子條帶的校驗(yàn)數(shù)據(jù)是根據(jù)本次循環(huán)中已寫數(shù)據(jù)生成的,稱為局部校驗(yàn)數(shù)據(jù);寫操作 時(shí),根據(jù)寫數(shù)據(jù)、已有局部校驗(yàn)數(shù)據(jù)計(jì)算新的局部校驗(yàn)數(shù)據(jù),不需要讀取舊數(shù)據(jù);隨著寫數(shù) 據(jù)的增加,局部校驗(yàn)數(shù)據(jù)的校驗(yàn)范圍逐漸擴(kuò)大,直至覆蓋整個(gè)影子條帶;新數(shù)據(jù)的寫入、局 部校驗(yàn)數(shù)據(jù)的校驗(yàn)范圍,如水中漣漪一樣向前推進(jìn),因此該硬盤陣列稱為Ripple-RAID 6; 漸進(jìn)式生成校驗(yàn)具體分為以下3種方式: I.相關(guān)流水方式 漸進(jìn)生成校驗(yàn)數(shù)據(jù)時(shí),不需讀取舊數(shù)據(jù),僅需讀取局部校驗(yàn)數(shù)據(jù);可以增加2個(gè)輔助存 儲(chǔ)設(shè)備,與影子條帶中局部校驗(yàn)數(shù)據(jù)所在磁盤,以流水方式生成新校驗(yàn),可有效消除讀局部 校驗(yàn)數(shù)據(jù)對(duì)寫性能的影響;影子條帶中校驗(yàn)數(shù)據(jù)所在磁盤,與輔助存儲(chǔ)設(shè)備一起進(jìn)行流水, 稱該流水方式為相關(guān)流水; 假設(shè)每個(gè)基本條帶被分成3個(gè)組,分別記作組0、組1和組2,兩個(gè)輔助存儲(chǔ)設(shè)備分別記作 輔存1和輔存2,容量均與校驗(yàn)塊相同,基于相關(guān)流水漸進(jìn)生成校驗(yàn)的寫過程如下: (1) 向任一基本條帶的組0寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組0,并生成組0的P校 驗(yàn)、Q校驗(yàn),分別寫入影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊;所述任一基本條帶稱為原條帶; (2) 組0寫滿后,向原條帶的組1寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組1,并根據(jù)寫數(shù) 據(jù)、局部校驗(yàn)生成新校驗(yàn),并分別寫入輔存1、輔存2;此時(shí),局部校驗(yàn)為組0的校驗(yàn),在影子條 帶的P校驗(yàn)塊、Q校驗(yàn)塊;新校驗(yàn)為組0、組1的P校驗(yàn)、Q校驗(yàn); (3) 組1寫滿后,向原條帶的組2寫數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際寫入影子條帶的組2,并根據(jù)寫數(shù) 據(jù)、局部校驗(yàn)生成新校驗(yàn),分別寫入影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊;所述局部校驗(yàn)為組〇、組1 的P校驗(yàn)、Q校驗(yàn),分別在輔存1、輔存2內(nèi);所述新校驗(yàn)為組0、組1、組2的P校驗(yàn)、Q校驗(yàn); (4) 影子條帶寫滿后,令其取代原條帶參與編址,被替換的原條帶不參與編址,作為下 一循環(huán)中的影子條帶; 為保證最后生成的校驗(yàn)數(shù)據(jù)寫入影子條帶的校驗(yàn)塊,需按如下規(guī)則流水:若影子條帶 的組數(shù)為奇數(shù),首先向影子條帶的P校驗(yàn)塊、Q校驗(yàn)塊寫校驗(yàn)數(shù)據(jù);否則首先向輔存1、輔存2 寫校驗(yàn)數(shù)據(jù);當(dāng)輔存1、輔存2采用低功耗的SSD時(shí),其能耗增加可忽略; Π .基于SSD的非流水方式 優(yōu)選的,輔存采用低功耗的SSD時(shí),可不采用流水方式生成校驗(yàn)數(shù)據(jù):從輔存1、輔存2讀 局部校驗(yàn)數(shù)據(jù),新校驗(yàn)數(shù)據(jù)也寫入輔存1、輔存2,直至寫影子條帶的最后一組時(shí),從輔存1、 輔存2讀局部校驗(yàn)數(shù)據(jù),并將最終校驗(yàn)數(shù)據(jù)寫入影子條帶的P、Q校驗(yàn)塊,稱該方式為基于SSD 的非流水方式;該方式中P、Q校驗(yàn)塊所在磁盤也可待機(jī)節(jié)能,節(jié)能效果將進(jìn)一步提升;生成 校驗(yàn)時(shí)需要同時(shí)讀、寫輔存,因此輔存可能成為性能瓶頸; ΙΠ .無(wú)關(guān)流水方式 優(yōu)選的,為了使影子條帶中P、Q校驗(yàn)塊所在硬盤大部分時(shí)間也可待機(jī)節(jié)能,進(jìn)一步提高 節(jié)能效率,同時(shí)又不影響性能,可采用如下流水方式:設(shè)置4個(gè)輔助存儲(chǔ)設(shè)備,分別記作輔存 1、 輔存2、輔存3、輔存4,容量均與校驗(yàn)塊相同,輪流從其中2個(gè)讀P、Q局部校驗(yàn)數(shù)據(jù),向另2個(gè) 寫新的P、Q局部校驗(yàn)數(shù)據(jù),直至生成影子條帶的最終P、Q校驗(yàn)數(shù)據(jù),再將其寫入影子條帶的P 校驗(yàn)塊、Q校驗(yàn)塊; 影子條帶中P、Q校驗(yàn)塊所在磁盤不參與流水,稱該流水方式為無(wú)關(guān)流水;當(dāng)輔存1、輔存 2、 輔存3、輔存4采用低功耗的SSD時(shí),可忽略其能耗增加;無(wú)關(guān)流水與相關(guān)流水相似,僅有以 下幾點(diǎn)不同: (1) 向組0寫數(shù)據(jù)時(shí),生成組0的P、Q校驗(yàn)數(shù)據(jù),分別寫入輔存1、輔存3; (2) 向組1寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn),生成新校驗(yàn),分別寫入輔存2、輔存4;此 時(shí),局部校驗(yàn)為組〇的P、Q校驗(yàn),分別在輔存1、輔存3;新校驗(yàn)為組0、組1的P、Q校驗(yàn); (3) 向組2寫數(shù)據(jù)時(shí),根據(jù)寫數(shù)據(jù)、局部校驗(yàn),生成新校驗(yàn),最終寫入影子條帶的P、Q校驗(yàn) 塊;此時(shí),局部校驗(yàn)為組0、組1的P、Q校驗(yàn),分別在輔存2、輔存4;新校驗(yàn)為組0、組1、組2的P、Q 校驗(yàn)。3.如權(quán)利要求1或2所述的一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列Ripple-RAID 6,其特征在于:其數(shù)據(jù)容錯(cuò)方法為: 由數(shù)據(jù)布局得,Ripple-RAID 6包含N個(gè)基本條帶和1個(gè)影子條帶;按當(dāng)前狀態(tài)是否正在 被更新,把基本條帶進(jìn)一步分為活躍條帶和睡眠條帶,影子條帶的數(shù)據(jù)組織方式與活躍條 帶相同;由于地址映射后執(zhí)行順序?qū)?,在確定時(shí)間內(nèi)只有1個(gè)基本條帶正在被更新,即只有1 個(gè)活躍條帶,其余基本條帶為睡眠條帶; 對(duì)于任意2塊故障盤中的每個(gè)存儲(chǔ)子塊,根據(jù)其不同位置,按如下方法進(jìn)行恢復(fù); 情況1:故障盤中的存儲(chǔ)子塊位于睡眠條帶,由Ripple-RAID 6的寫操作方法得,當(dāng)根據(jù) 公式(8)和公式(9)建立校驗(yàn)關(guān)系后,睡眠條帶沒有進(jìn)行任何修改,已建立的校驗(yàn)關(guān)系完整 有效;利用【背景技術(shù)】中介紹的P+Q方式的RAID 6的數(shù)據(jù)恢復(fù)方法,可恢復(fù)該類存儲(chǔ)子塊; 情況2 :故障盤中的存儲(chǔ)子塊位于活躍條帶,由寫操作方法得,當(dāng)根據(jù)公式(8)和公式 (9)建立校驗(yàn)關(guān)系后,活躍條帶也沒有被真正修改過(對(duì)應(yīng)的新數(shù)據(jù)實(shí)際寫入了影子條帶的 對(duì)應(yīng)位置),已建立的校驗(yàn)關(guān)系完整有效;利用【背景技術(shù)】中介紹的P+Q方式的RAID 6的數(shù)據(jù) 恢復(fù)方法,也可恢復(fù)該類存儲(chǔ)子塊; 情況3:故障盤中的存儲(chǔ)子塊位于影子條帶,對(duì)于影子條帶,以最后一次局部并行寫為 分界線,分界線之前為已寫區(qū),其后為待寫區(qū),設(shè)分界線在組f中偏移量為m的數(shù)據(jù)子塊 Strip m之后,0彡f〈F,0<m〈M;特別強(qiáng)調(diào):當(dāng)f彡1時(shí),影子條帶校驗(yàn)塊均為已寫區(qū); I.故障盤中的存儲(chǔ)子塊位于影子條帶的已寫區(qū) 影子條帶的已寫區(qū)數(shù)據(jù),在影子條帶中具有完整、有效的校驗(yàn)關(guān)系,設(shè)存儲(chǔ)子塊位于影 子條帶中的子條帶Stripe k,當(dāng)(Xk<m時(shí),校驗(yàn)關(guān)系見公式(10)和公式(11);當(dāng)m〈k〈M時(shí)(僅當(dāng)f多1時(shí)存在),校驗(yàn)關(guān)系見公式(12)和公式(13):此時(shí),可根據(jù)所在子條帶的位置,利用公式(10)和公式(11)恢復(fù)故障盤中的存儲(chǔ)子塊, 或利用公式(12)和公式(13)恢復(fù)故障盤中的存儲(chǔ)子塊; Π .故障盤中的存儲(chǔ)子塊位于影子條帶的待寫區(qū) 由Ripple-RAID 6的寫操作方法得,該部分?jǐn)?shù)據(jù)不是有效數(shù)據(jù),并且沒有參與所在子條 帶的P、Q校驗(yàn)運(yùn)算,因此數(shù)據(jù)恢復(fù)時(shí)不需要考慮; 綜上,Ripple-RAID 6具有雙盤容錯(cuò)能力,其中任意2塊硬盤出現(xiàn)故障丟失數(shù)據(jù)時(shí),可按 上述方法恢復(fù)該盤數(shù)據(jù);分界線,即最后一次局部并行寫位置以及影子條帶位置,對(duì)數(shù)據(jù)恢 復(fù)至關(guān)重要,需要記錄到元數(shù)據(jù)中,至少同時(shí)存儲(chǔ)在3塊盤上,以確保數(shù)據(jù)恢復(fù)正確執(zhí)行。4. 如權(quán)利要求1或2所述的一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列Ripple-RAID 6, 其特征在于: 其讀操方法為 : 對(duì)Ripple-RAID 6進(jìn)行讀操作時(shí),需要根據(jù)上層應(yīng)用程序發(fā)來(lái)的虛擬地址,查找地址映 射表,獲得該虛擬地址對(duì)應(yīng)的物理地址A,①如果地址A位于活躍條帶的已寫區(qū),即地址A與 影子條帶已寫區(qū)具有相同的條帶內(nèi)起始、終止偏移地址,則從地址A的影子地址A'讀取數(shù) 據(jù);②否則,直接從地址A讀取數(shù)據(jù)。5. 如權(quán)利要求1或2所述的一種消除局部并行中小寫操作的雙盤容錯(cuò)盤陣列Ripple-RAID 6, 其特征在于: 其節(jié)能調(diào)度方法為: Ripple-RAID 6需要對(duì)硬盤進(jìn)行節(jié)能調(diào)度,調(diào)度空閑磁盤待機(jī)節(jié)能,當(dāng)任務(wù)到來(lái)時(shí)喚醒 待機(jī)磁盤工作。
【文檔編號(hào)】G06F3/06GK105930099SQ201610230361
【公開日】2016年9月7日
【申請(qǐng)日】2016年4月14日
【發(fā)明人】孫志卓, 王洪豐, 于瑞玲, 劉利東, 譚毓安
【申請(qǐng)人】德州學(xué)院