徐 偉
(國家安全生產(chǎn)監(jiān)督管理總局通信信息中心 北京 100713)
針對(duì)RAID在線重構(gòu)研究,國內(nèi)外相關(guān)研究從預(yù)測失效、spare布局、數(shù)據(jù)布局和重構(gòu)策略四個(gè)方面來探索如何加速RAID在線重構(gòu)。
預(yù)測失效主要使用磁盤自動(dòng)檢測功能,探測出即將不能正常運(yùn)行的磁盤,在失效前將其復(fù)制到spare盤上,從而減少重構(gòu)時(shí)間,提高磁盤陣列可靠性。在大型peer-to-peer的存儲(chǔ)系統(tǒng)Oceanstore里也采取了磁盤失效預(yù)測技術(shù)[1]。但這種方式不能完全準(zhǔn)確預(yù)測出磁盤失效。文獻(xiàn)[2]指出:現(xiàn)有技術(shù)只能預(yù)告實(shí)際磁盤故障的50%,其效果被夸大。
Spare布局分為Dedicated sparing、Parity sparing[3]和Distributed sparing[4]這三種方式。Dedicated sparing模式專門用一塊磁盤作為空閑盤,當(dāng)磁盤陣列發(fā)生磁盤失效,將失效磁盤上數(shù)據(jù)完全重構(gòu)到spare磁盤。Parity sparing將spare磁盤作為第二塊parity盤,減少parity組長度。當(dāng)陣列中某塊磁盤失效,兩個(gè)parity組合并生成一個(gè)更大的單一陣列,該陣列只有一個(gè)parity組。Distributed sparing將spare空間分布在所有磁盤上,而不是專門用一個(gè)磁盤作為spare盤。當(dāng)陣列中某塊磁盤失效,失效磁盤上數(shù)據(jù)會(huì)被重構(gòu),并分布于所有磁盤的空閑空間。但當(dāng)用戶負(fù)載急劇增加時(shí),磁盤陣列RAID5重構(gòu)性能顯著降低,重構(gòu)時(shí)間大幅增加。
通過優(yōu)化RAID數(shù)據(jù)布局來加速重構(gòu)過程是常用的一種方法。Decluster parity[5]通過虛擬邏輯盤構(gòu)成磁盤陣列,設(shè)物理磁盤個(gè)數(shù)為C,虛擬邏輯盤個(gè)數(shù)為G,將(G-1)/(C-1)定義為α,C和G確定了parity數(shù)據(jù)消耗總磁盤空間,α確定了系統(tǒng)的重構(gòu)性能。當(dāng)α值越小,重構(gòu)所需時(shí)間則越少,parity數(shù)據(jù)所占比例越多;當(dāng)α值越大,重構(gòu)所需時(shí)間則越多,parity數(shù)據(jù)所占比例越小??梢哉{(diào)節(jié)α,從而在重構(gòu)和parity數(shù)據(jù)所占比例間取得平衡。但是,當(dāng)α值很小時(shí),用于parity數(shù)據(jù)的存儲(chǔ)開銷將非常大,而且當(dāng)用戶負(fù)載很大時(shí),重構(gòu)所需時(shí)間仍然相當(dāng)大。文獻(xiàn)[6]提出了一種新型數(shù)據(jù)布局方式提高了鏡像磁盤陣列重構(gòu)過程。文獻(xiàn)[7]在RAID結(jié)構(gòu)里構(gòu)建了一個(gè)子陣列從而顯著加速數(shù)據(jù)重構(gòu)過程。文獻(xiàn)[8-10]對(duì)RAID6編碼布局進(jìn)行研究以便改善RAID6重構(gòu)性能。
重構(gòu)策略[11]主要由重構(gòu)對(duì)象、重構(gòu)順序、重構(gòu)與服務(wù)協(xié)作這三個(gè)方面組成。
重構(gòu)對(duì)象主要分為面向條帶重構(gòu)、并行條帶重構(gòu)和面向磁盤重構(gòu)。面向條帶重構(gòu)是按條帶來進(jìn)行重構(gòu)的,并行條帶重構(gòu)采取多個(gè)并行的面向條帶重構(gòu),面向磁盤重構(gòu)采取與陣列中磁盤相同個(gè)數(shù)的進(jìn)程,一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)磁盤。但是,當(dāng)用戶負(fù)載較大時(shí),重構(gòu)所需時(shí)間仍然相當(dāng)長,且對(duì)服務(wù)性能影響顯著。
重構(gòu)順序主要分為head-following、closet active stripe、multiple reconstruction points和基于局部性的多線程重構(gòu)。head-following重構(gòu)的主要原理:重構(gòu)磁盤總是從處于低地址的尚未重構(gòu)單元進(jìn)行順序重構(gòu)。Closest active stripe重構(gòu)的主要原理:在完成用戶請(qǐng)求時(shí),總是從靠近磁頭位置的尚未重構(gòu)單元進(jìn)行重構(gòu)。Multiple reconstruction points重構(gòu)的主要原理:將磁盤分為多個(gè)重構(gòu)段,在完成用戶請(qǐng)求時(shí),從當(dāng)前最近重構(gòu)點(diǎn)開始重構(gòu)?;诰植啃缘亩嗑€程重構(gòu)的主要原理:利用用戶負(fù)載訪問的局部性,優(yōu)先重構(gòu)頻繁訪問的區(qū)域[12]。
重構(gòu)與服務(wù)協(xié)作方面主要分為用戶請(qǐng)求操作、重構(gòu)速率控制兩方面。用戶請(qǐng)求操作處理方式分為直讀、回寫和直寫。直讀主要原理:如果用戶對(duì)失效磁盤讀請(qǐng)求所涉及數(shù)據(jù)已經(jīng)被重構(gòu)并已經(jīng)在spare盤上,則直接從spare盤上讀取該數(shù)據(jù)。回寫的主要原理:用戶對(duì)失效磁盤讀請(qǐng)求重構(gòu)出數(shù)據(jù),該數(shù)據(jù)不僅被發(fā)送給用戶,而且被寫到spare盤上。直寫的主要原理:用戶的寫請(qǐng)求直接發(fā)送到spare盤上,寫入spare盤的相應(yīng)位置。基于NAND閃存的高新能和可靠的PRAID-6[13]提出一種新型的數(shù)據(jù)提交方法從而獲得與RAID6同樣的恢復(fù)能力。文獻(xiàn)[14]通過對(duì)磁盤陣列讀寫方式和數(shù)據(jù)塊聚合來優(yōu)化磁盤陣列讀寫性能。
重構(gòu)速率控制主要在服務(wù)性能和重構(gòu)速率之間尋找平衡點(diǎn),從而使得服務(wù)性能處于用戶可承受范圍,盡可能提高重構(gòu)速率文獻(xiàn)[15]。文獻(xiàn)[16-17]指出可以根據(jù)磁頭移動(dòng)軌跡來利用空閑帶寬處理后臺(tái)應(yīng)用,這也有助于提高重構(gòu)性能和服務(wù)性能。其他方式還可以通過文獻(xiàn)[18-20]來加速磁盤陣列重構(gòu)過程。文獻(xiàn)[18]通過將熱點(diǎn)數(shù)據(jù)復(fù)制到固態(tài)硬盤上來加速重構(gòu)過程。文獻(xiàn)[19] 在分布式RAID上利用獨(dú)立GPU加速重構(gòu)過程。文獻(xiàn)[20] 利用節(jié)點(diǎn)的計(jì)算編碼能力,傳輸經(jīng)過編碼的數(shù)據(jù)塊來修復(fù)校驗(yàn)盤,減少修復(fù)過程中的數(shù)據(jù)傳輸量,縮短校驗(yàn)盤的修復(fù)時(shí)間。
針對(duì)RAID在線重構(gòu),國內(nèi)外相關(guān)研究主要從預(yù)測失效、spare分布、數(shù)據(jù)分布、重構(gòu)策略四個(gè)方面來提高磁盤陣列服務(wù)性能和重構(gòu)性能。
在對(duì)數(shù)據(jù)存儲(chǔ)可靠性有高要求時(shí),RAID6作為一種RAID技術(shù),會(huì)被經(jīng)常采用。但國內(nèi)外現(xiàn)有研究始終無法解決重負(fù)載持續(xù)訪問情況下,RAID6的重構(gòu)性能和服務(wù)性能急劇惡化這一問題。而企業(yè)存儲(chǔ)網(wǎng)絡(luò)系統(tǒng)多數(shù)由生產(chǎn)系統(tǒng)和備份系統(tǒng)構(gòu)成。生產(chǎn)系統(tǒng)由于直接對(duì)外提供服務(wù),其可靠性和可用性非常重要。隨著大容量磁盤越來越便宜,備份系統(tǒng)越來越多采用磁盤存儲(chǔ)備份數(shù)據(jù)。
因此,本文提出了“利用外部存放的備份數(shù)據(jù)來加速RAID6在線重構(gòu)”的思想,構(gòu)建了基于備份的RAID6在線重構(gòu)框架,從而充分挖掘了閑置備份系統(tǒng)磁盤存儲(chǔ)設(shè)備的強(qiáng)大IO能力,顯著提高生產(chǎn)系統(tǒng)RAID6的在線重構(gòu)速度。
基于備份的RAID6在線重構(gòu)框架的核心思想:當(dāng)生產(chǎn)系統(tǒng)磁盤陣列RAID6出現(xiàn)磁盤失效時(shí),可以由備份系統(tǒng)虛擬出失效磁盤處于最近備份時(shí)間點(diǎn)的歷史版本,通過將歷史版本恢復(fù)至spare磁盤上,從而使得spare磁盤映像為處于最近備份時(shí)間點(diǎn)的版本;利用生產(chǎn)系統(tǒng)虛擬出的當(dāng)前版本將失效磁盤上自最近一次備份時(shí)間點(diǎn)之后已修改數(shù)據(jù)重構(gòu)至spare磁盤上。此框架的主要優(yōu)點(diǎn)為:利用備份系統(tǒng)所提供的穩(wěn)定恢復(fù)帶寬,顯著降低了應(yīng)用負(fù)載對(duì)重構(gòu)過程的影響,同時(shí),顯著減少了磁盤陣列RAID6參入重構(gòu),使得磁盤陣列RAID6優(yōu)先滿足用戶服務(wù)。
重構(gòu)過程分為兩階段:版本恢復(fù)階段和版本修復(fù)階段。
當(dāng)生產(chǎn)系統(tǒng)RAID6出現(xiàn)兩塊磁盤(disk2和disk3)失效時(shí),激活兩塊spare磁盤,如圖1(a)所示。首先,重構(gòu)過程進(jìn)入版本恢復(fù)階段,把兩塊spare硬盤從生產(chǎn)系統(tǒng)中換出,完全由備份系統(tǒng)將失效磁盤(disk2)處于最近備份時(shí)間點(diǎn)的歷史版本恢復(fù)至spare磁盤(disk2),從而將spare磁盤(disk2)恢復(fù)成失效磁盤(disk2)處于最近備份時(shí)間點(diǎn)的版本。另一塊失效磁盤(disk3)版本恢復(fù)與上述類似,如圖1(b)所示。然后重構(gòu)過程進(jìn)入版本修復(fù)階段,將spare磁盤(disk2)重新加入到生產(chǎn)系統(tǒng)磁盤陣列中,利用虛擬當(dāng)前版本將spare磁盤(disk2)修復(fù)為當(dāng)前版本(disk2),從而完成失效磁盤自最近一次備份時(shí)間點(diǎn)之后已修改數(shù)據(jù)的重構(gòu)。隨著spare磁盤(disk3)版本修復(fù)與上述類似,如圖1(c)所示。通過版本恢復(fù)階段和版本修復(fù)階段,完成兩塊spare磁盤的數(shù)據(jù)重構(gòu),從而將生產(chǎn)系統(tǒng)恢復(fù)到正常運(yùn)行狀態(tài),如圖1(d)所示。
圖1 損壞兩個(gè)硬盤的情況下,此框架的重構(gòu)過程
當(dāng)生產(chǎn)系統(tǒng)RAID6出現(xiàn)一塊磁盤失效時(shí),只有一塊spare磁盤參與重構(gòu)過程,重構(gòu)過程與上述類似,不再贅述。
基于備份的RAID6在線重構(gòu)框架的原型系統(tǒng)主要由面向數(shù)據(jù)的磁盤陣列架構(gòu)、映射管理、恢復(fù)管理和重構(gòu)管理四部分構(gòu)成。通過這四部分協(xié)作,完成磁盤陣列RAID6在線重構(gòu)過程。
2.1 面向數(shù)據(jù)的磁盤陣列架構(gòu)
通過對(duì)傳統(tǒng)磁盤陣列進(jìn)行簡單改進(jìn),我們實(shí)現(xiàn)了面向數(shù)據(jù)的磁盤陣列架構(gòu)。面向數(shù)據(jù)的磁盤陣列架構(gòu)與傳統(tǒng)磁盤陣列架構(gòu)根本差異就是面向數(shù)據(jù)的磁盤陣列中未被使用邏輯塊上數(shù)據(jù)一定為零。我們使用一個(gè)全局位圖記錄磁盤陣列中所有邏輯塊的使用情況,bit位為0即標(biāo)識(shí)該邏輯塊未被使用(其上數(shù)據(jù)為零),不需要對(duì)該邏輯塊進(jìn)行寫零操作,并通過在傳統(tǒng)磁盤陣列轉(zhuǎn)發(fā)讀寫請(qǐng)求路徑上添加訪問位圖接口,從而實(shí)現(xiàn)了面向數(shù)據(jù)的磁盤陣列架構(gòu)。面向數(shù)據(jù)磁盤陣列必須按照條帶分配和釋放邏輯單元,以避免引起附加的讀寫操作。
2.2 映射管理
映射管理主要負(fù)責(zé)以下三類映射關(guān)系的建立和維護(hù):(1) 邏輯卷邏輯塊與最新備份數(shù)據(jù)塊的映射關(guān)系;(2) 失效磁盤邏輯塊與最新備份數(shù)據(jù)塊的映射關(guān)系;(3) 失效磁盤上自最近備份時(shí)間點(diǎn)之后修改數(shù)據(jù)塊的位置標(biāo)識(shí)。見圖2。
圖2 磁盤邏輯塊與最新備份數(shù)據(jù)塊的映射關(guān)系
圖2(a)描述了備份版本、邏輯卷、磁盤陣列和磁盤之間的映射關(guān)系。假設(shè)陣列RAID6由disk0、disk1、disk2和disk3四塊磁盤構(gòu)成;邏輯卷塊級(jí)備份粒度(備份數(shù)據(jù)塊)、磁盤上邏輯塊、RAID6上chunk、邏輯卷空間分配粒度都為4 KB;一個(gè)邏輯卷lv1已被創(chuàng)建;邏輯卷lv1做了兩次塊級(jí)備份,第一次備份版本為version_1,第二次備份版本為version_2;位圖lv1-bmp為自最近一次備份時(shí)間點(diǎn)之后的差別增量位圖,也就是第二次備份時(shí)間點(diǎn)之后所修改數(shù)據(jù)塊的位圖。
如圖2(a)所示,邏輯卷lv1的第0邏輯塊和第4邏輯塊未分配實(shí)際磁盤邏輯塊,第1塊映射到磁盤disk0的第0塊(d00),lv1其余邏輯塊與磁盤上邏輯塊的映射關(guān)系不再贅述;邏輯卷lv1的version_1上數(shù)據(jù)塊v110,根據(jù)version_1的位圖,v110對(duì)應(yīng)lv1的第1塊數(shù)據(jù)(處于version_1時(shí)刻),其余版本所保存的數(shù)據(jù)塊與邏輯卷lv1邏輯塊的映射關(guān)系不再贅述;根據(jù)位圖lv1-bmp,邏輯卷lv1的第1個(gè)邏輯塊自最近一次備份時(shí)間點(diǎn)之后被修改;磁盤邏輯塊d22和d32未被使用,其上數(shù)據(jù)為零。
根據(jù)圖2(a)的備份版本、邏輯卷與磁盤陣列邏輯塊的映射關(guān)系、以及磁盤陣列與磁盤邏輯塊的映射關(guān)系,可以計(jì)算出任一磁盤邏輯塊與最新備份數(shù)據(jù)塊的映射關(guān)系。根據(jù)圖2(a)所描述的映射關(guān)系,計(jì)算出disk0、disk1、disk2和disk3這四塊磁盤的數(shù)據(jù)塊與備份數(shù)據(jù)塊的映射關(guān)系,如圖2(b)所示。在圖2(b)中,備份數(shù)據(jù)塊v110映射在disk0的第0塊(d00)上,其余不再贅述。
圖2(c)描述了各磁盤上自最近一次備份時(shí)間點(diǎn)之后修改數(shù)據(jù)的位置標(biāo)識(shí)(版本修復(fù)位圖)。在圖2(a)中,根據(jù)位圖lv1-bmp,可知磁盤disk0上邏輯塊d00上數(shù)據(jù)自最近一次備份之后已被修改,因此,磁盤disk2邏輯塊p20和磁盤disk3邏輯塊Q30上數(shù)據(jù)自最近一次備份之后都已被修改;生成了磁盤disk0、disk1、disk2和disk3上自最近一次備份時(shí)間點(diǎn)之后修改數(shù)據(jù)的位置標(biāo)識(shí)。
圖2(d)中描述了使用最新備份數(shù)據(jù)塊來生成各磁盤邏輯塊數(shù)據(jù)。如圖2(d)所示,磁盤disk0邏輯塊d01數(shù)據(jù)等同于備份數(shù)據(jù)塊v112,其他不再贅述;由于磁盤disk0邏輯塊d00自最近一次備份時(shí)間點(diǎn)后被修改,所以磁盤disk2邏輯塊P20上數(shù)據(jù)由邏輯塊d00上數(shù)據(jù)和備份數(shù)據(jù)塊V211計(jì)算出來,其他不再贅述;由于d01和d31自最近一次備份時(shí)間點(diǎn)都未修改,因此,備份數(shù)據(jù)塊V112和V113計(jì)算出P11和Q21。
2.3 恢復(fù)管理
恢復(fù)管理構(gòu)件由多個(gè)讀線程和一個(gè)寫線程構(gòu)成,映射管理構(gòu)件由一個(gè)線程構(gòu)成。當(dāng)恢復(fù)管理構(gòu)件進(jìn)行spare磁盤的恢復(fù)操作時(shí),映射管理構(gòu)件并行生成映射關(guān)系和版本修復(fù)位圖。
恢復(fù)管理構(gòu)件采取多個(gè)讀線程并發(fā)讀取備份數(shù)據(jù)。一個(gè)讀線程從映射緩沖內(nèi)順序取出一個(gè)映射關(guān)系,對(duì)于P和Q兩個(gè)校驗(yàn)碼,讀線程將所有相關(guān)數(shù)據(jù)(若干塊備份數(shù)據(jù))讀出,計(jì)算出P和Q兩個(gè)校驗(yàn)碼,存放于數(shù)據(jù)緩沖相應(yīng)位置;對(duì)于數(shù)據(jù),則將相應(yīng)數(shù)據(jù)(一塊備份數(shù)據(jù))讀出,存放于數(shù)據(jù)緩沖相應(yīng)位置。當(dāng)某個(gè)讀線程完成數(shù)據(jù)讀取后,則順序處理還未讀取的數(shù)據(jù)。
恢復(fù)管理構(gòu)件采用單個(gè)寫線程將數(shù)據(jù)順序?qū)懭雜pare磁盤。恢復(fù)管理構(gòu)件有兩個(gè)數(shù)據(jù)緩沖,當(dāng)讀線程讀取數(shù)據(jù)并存放于一個(gè)緩沖時(shí),寫線程將已放滿數(shù)據(jù)的另一個(gè)緩沖中數(shù)據(jù)寫入spare盤中。
2.4 重構(gòu)管理
在此原型系統(tǒng)中,重構(gòu)管理構(gòu)件僅負(fù)責(zé)版本修復(fù)階段。通過版本修復(fù)位圖和輔助位圖兩者合作,重構(gòu)管理構(gòu)件實(shí)現(xiàn)了版本修復(fù)功能。版本修復(fù)位圖是自最近備份時(shí)間點(diǎn)之后修改數(shù)據(jù)的位置標(biāo)識(shí),輔助位圖上所有位初始為0,兩個(gè)位圖上每一位與磁盤上4 KB邏輯塊一一對(duì)應(yīng)。通過版本修復(fù)位圖和輔助位圖之間合作,可以判斷邏輯塊上數(shù)據(jù)是否有效。spare磁盤邏輯塊上數(shù)據(jù)被定義了兩種狀態(tài):
VALID——如果版本修復(fù)位圖中某位為0或者輔助位圖中某位為1,則對(duì)應(yīng)邏輯塊上數(shù)據(jù)有效。
INVALID——如果版本修復(fù)位圖中某位為1,且輔助位圖中相應(yīng)位為0,則對(duì)應(yīng)邏輯塊上數(shù)據(jù)無效,即邏輯塊上數(shù)據(jù)自最近一次備份時(shí)間點(diǎn)之后已被修改。
在版本修復(fù)階段,版本修復(fù)位圖和輔助位圖協(xié)作過程如下:
(1) 按照版本修復(fù)位圖和輔助位圖,順序發(fā)出對(duì)于無效數(shù)據(jù)塊的重構(gòu)請(qǐng)求。當(dāng)所計(jì)算出的數(shù)據(jù)被寫入spare磁盤對(duì)應(yīng)邏輯塊之后,則將輔助位圖上相應(yīng)位設(shè)為1,從而標(biāo)識(shí)對(duì)應(yīng)邏輯塊上數(shù)據(jù)已經(jīng)有效。
(2) 用戶讀請(qǐng)求訪問spare磁盤時(shí),被訪問邏輯塊上數(shù)據(jù)有效,則直接訪問spare磁盤;否則,通過同一條帶上其余數(shù)據(jù)塊構(gòu)建出被訪問的數(shù)據(jù)塊,并將其寫入spare盤,同時(shí),將輔助位圖上相應(yīng)位設(shè)為1,從而標(biāo)識(shí)被訪問邏輯塊上數(shù)據(jù)已經(jīng)有效。
(3) 用戶寫請(qǐng)求訪問spare磁盤時(shí),將版本修復(fù)位圖上相應(yīng)位設(shè)為1,并直接將寫請(qǐng)求發(fā)送給spare磁盤;寫請(qǐng)求完成之后,則將輔助位圖上相應(yīng)位設(shè)為1,標(biāo)識(shí)被訪問邏輯塊上數(shù)據(jù)已經(jīng)有效。
通過面向數(shù)據(jù)的磁盤陣列架構(gòu)、映射管理、恢復(fù)管理和重構(gòu)管理四個(gè)構(gòu)件,我們實(shí)現(xiàn)了基于備份的RAID6在線重構(gòu)框架的原型系統(tǒng)。
本文主要使用面向磁盤重構(gòu)算法DOR(Disk-Oriented Reconstruction)與基于備份的RAID6在線重構(gòu)框架進(jìn)行對(duì)比。因?yàn)镈OR方法是現(xiàn)有重構(gòu)方法中最有效算法之一,而且已經(jīng)被實(shí)現(xiàn)于許多軟RAID6和硬RAID6產(chǎn)品中,并且在許多文獻(xiàn)中受到最廣泛的研究。
本節(jié)的測試配置如下設(shè)置:cello99(12-25、和10-05) 和 F1.spc應(yīng)用模式;對(duì)于cello99和F1.spc這兩種應(yīng)用模式,生產(chǎn)系統(tǒng)RAID6單塊磁盤容量分別設(shè)為92 GB和31 GB;邏輯卷空間分配粒度為32 MB,完全隨機(jī)分配;生產(chǎn)系統(tǒng)RAID6由10塊磁盤構(gòu)成,生產(chǎn)系統(tǒng)RAID6中第8塊磁盤單塊磁盤失效和生產(chǎn)系統(tǒng)RAID6中第8塊和第9塊磁盤兩塊磁盤失效兩種情況;4 KB、8 KB和16 KB備份版本集合;每個(gè)邏輯卷對(duì)應(yīng)備份版本集合包含了184個(gè)版本;備份數(shù)據(jù)存儲(chǔ)設(shè)備為磁盤陣列RAID5,由6塊磁盤構(gòu)成;恢復(fù)管理模塊里讀線程數(shù)目設(shè)置為30,寫線程數(shù)目設(shè)置為1。
在下文中,4 KB表示為:備份版本集合的備份粒度為4 KB;8 KB、16 KB含義與4 KB類似。
3.1 重構(gòu)性能
圖3描述了一塊磁盤失效時(shí),基于備份的RAID6在線重構(gòu)框架的重構(gòu)性能相對(duì)于DOR提高倍數(shù)。在圖3中,對(duì)于cello99-12-25應(yīng)用負(fù)載(每天修改數(shù)據(jù)量較小且負(fù)載壓力較小),此框架的重構(gòu)性能比DOR提高了1.43至3.06倍;而對(duì)于cello99-10-05應(yīng)用負(fù)載(每天修改數(shù)據(jù)量較小且負(fù)載壓力較大),此框架的重構(gòu)性能比DOR提高了11.51至15.49倍;對(duì)于F1.spc(每天修改數(shù)據(jù)量非常大),此框架的重構(gòu)性能也比DOR提高了2.53至3.01倍左右。
圖3 一塊磁盤失效時(shí),此框架重構(gòu)性能相對(duì)于DOR提高倍數(shù)
圖4描述了兩塊磁盤失效時(shí),基于備份的RAID6在線重構(gòu)框架的重構(gòu)性能相對(duì)于DOR提高倍數(shù)。在圖4中,對(duì)于cello99-12-25應(yīng)用負(fù)載,此框架的重構(gòu)性能比DOR提高了1.83至3.46倍;而對(duì)于cello99-10-05應(yīng)用負(fù)載,此框架的重構(gòu)性能比DOR提高了11.95至15.93倍;對(duì)于F1.spc,此框架的重構(gòu)性能也比DOR提高了2.93至3.39倍左右。
圖4 兩塊磁盤失效時(shí),此框架重構(gòu)性能相對(duì)于DOR提高倍數(shù)
3.2 服務(wù)性能
圖5描述了一塊磁盤失效時(shí),基于備份的RAID6在線重構(gòu)框架的總體平均響應(yīng)時(shí)間相對(duì)于DOR降低百分比。如圖5所示,當(dāng)一塊磁盤失效時(shí),對(duì)于cello99-12-25應(yīng)用負(fù)載,此框架的總體平均響應(yīng)時(shí)間比DOR降低10%左右;而對(duì)于cello99-10-05應(yīng)用負(fù)載,此框架的平均響應(yīng)時(shí)間比DOR降低12.8%左右;對(duì)于F1.spc應(yīng)用模式,此框架的總體平均響應(yīng)時(shí)間僅比DOR降低了7.7%左右。
圖5 一塊磁盤失效,此框架的總體平均響應(yīng)時(shí)間相對(duì)于DOR降低百分比
圖6描述了基于備份的RAID6在線重構(gòu)框架的總體平均響應(yīng)時(shí)間相對(duì)于DOR降低百分比。如圖6所示,對(duì)于cello99-12-25應(yīng)用負(fù)載,此框架的總體平均響應(yīng)時(shí)間比DOR降低10.6%左右;而對(duì)于cello99-10-05應(yīng)用負(fù)載,此框架的平均響應(yīng)時(shí)間比DOR降低13.5%左右;對(duì)于F1.spc應(yīng)用模式,此框架的總體平均響應(yīng)時(shí)間僅比DOR降低了8.2%左右。
圖6 兩塊磁盤失效,此框架的總體平均響應(yīng)時(shí)間相對(duì)于DOR降低百分比
4.1 磁盤陣列備份映射關(guān)系的維護(hù)開銷
為了在發(fā)生磁盤失效時(shí)能夠盡快建立起所需映射關(guān)系,必須維護(hù)最新備份數(shù)據(jù)塊與磁盤陣列上邏輯塊的映射關(guān)系(磁盤陣列備份映射關(guān)系)。維護(hù)此類映射關(guān)系的空間開銷和時(shí)間開銷如表1所示。
表1 磁盤陣列備份映射關(guān)系的維護(hù)開銷
(1) 空間開銷。假設(shè)磁盤容量為2 TB,磁盤數(shù)為6,備份數(shù)據(jù)塊為4 KB,生產(chǎn)系統(tǒng)上磁盤陣列RAID6存儲(chǔ)容量為8 TB;由于備份系統(tǒng)上存儲(chǔ)容量一般大于生產(chǎn)系統(tǒng),假設(shè)備份系統(tǒng)上存儲(chǔ)容量為8 TB;如表1所示,該映射關(guān)系占用16 GB空間,僅占備份系統(tǒng)上存儲(chǔ)容量的0.2%;假如備份數(shù)據(jù)塊粒度為64 KB時(shí),僅占備份系統(tǒng)上存儲(chǔ)容量的0.012%。因此,日常所需維護(hù)的映射關(guān)系所產(chǎn)生的空間開銷可以忽略不計(jì)。
(2) 時(shí)間開銷。在備份系統(tǒng)上進(jìn)行日常維護(hù),日常維護(hù)映射關(guān)系的算法如下:首先從生產(chǎn)系統(tǒng)里讀取邏輯卷和磁盤陣列邏輯塊映射關(guān)系;讀取邏輯卷最新備份版本位圖;然后在內(nèi)存中更新磁盤陣列備份映射關(guān)系(順序排列),每500 MB寫回一次;每個(gè)邏輯卷依次進(jìn)行。
測試配置如下設(shè)置:生產(chǎn)系統(tǒng)上磁盤陣列RAID6由6塊磁盤構(gòu)成,單塊磁盤容量為2 TB;空間分配粒度為32 MB,完全隨機(jī)分配;4 KB備份版本集合;生產(chǎn)系統(tǒng)RAID6分配了64個(gè)128 GB邏輯卷;備份系統(tǒng)為單塊磁盤,磁盤容量為2 TB,存放了64個(gè)邏輯卷全量備份的備份版本位圖,也即每個(gè)備份版本位圖所有bit位為1,每個(gè)備份版本位圖為4 MB。磁盤陣列備份映射關(guān)系文件為16 GB,也存放在備份系統(tǒng)單塊2 TB磁盤上。測試結(jié)果顯示更新磁盤陣列備份映射關(guān)系只需要14.4 min。而且,在備份系統(tǒng)上通常采用磁盤陣列,則讀寫性能會(huì)更高,磁盤陣列備份映射關(guān)系維護(hù)時(shí)間開銷將更少。
4.2 失效磁盤備份映射關(guān)系的建立開銷
當(dāng)磁盤陣列發(fā)生磁盤失效時(shí),需要建立失效磁盤邏輯塊與最新備份數(shù)據(jù)塊的映射關(guān)系(失效磁盤備份映射關(guān)系),本節(jié)主要考察了建立失效磁盤備份映射關(guān)系的開銷。
表2 失效磁盤備份映射關(guān)系的建立開銷
表2描述了失效磁盤備份映射關(guān)系的建立開銷。測試配置如下設(shè)置:生產(chǎn)系統(tǒng)上磁盤陣列RAID6由6塊磁盤構(gòu)成,單塊磁盤容量為2 TB;其中,1塊磁盤失效;空間分配粒度為32 MB,完全隨機(jī)分配;4 KB備份版本集合;生產(chǎn)系統(tǒng)RAID6分配了64個(gè)128 GB邏輯卷;1個(gè)16 GB磁盤陣列備份映射關(guān)系文件存放在單塊磁盤上。如表2所示,失效磁盤備份映射關(guān)系的建立速度是磁盤陣列備份映射關(guān)系讀取速度的0.25倍。由于磁盤陣列備份映射關(guān)系讀取速度接近磁盤順序讀速度60 MB/s,失效磁盤備份映射關(guān)系的建立速度為15 MB/s。其他條件不變,當(dāng)生產(chǎn)系統(tǒng)RAID6磁盤數(shù)增加到602個(gè)時(shí),失效磁盤備份映射關(guān)系的建立速度降低為0.1 MB/s,每秒讀取12.8 KB個(gè)備份數(shù)據(jù)塊位置信息,即能夠滿足備份數(shù)據(jù)塊讀取速度51.2 MB/s,遠(yuǎn)超出該框架備份數(shù)據(jù)讀取速度。
即使生產(chǎn)系統(tǒng)RAID6磁盤數(shù)大量增加,失效磁盤備份映射關(guān)系建立速度仍然能滿足該框架備份數(shù)據(jù)讀取速度。
4.3 相關(guān)位圖的開銷
相對(duì)于傳統(tǒng)RAID重構(gòu)方法,該框架增加了全局位圖、版本修復(fù)位圖和輔助位圖所引起的開銷如表3所示。
表3 位圖規(guī)模
(1) 訪問開銷。由于全局位圖、版本修復(fù)位圖和輔助位圖都存放于內(nèi)存中,因此,訪問這三個(gè)位圖所產(chǎn)生的開銷可以忽略不計(jì)。
(2) 空間開銷。1 TB存儲(chǔ)容量一般配置3 GB內(nèi)存,假設(shè)S為2 TB,磁盤數(shù)為6,磁盤陣列為RAID6;如表3所示,版本修復(fù)位圖和輔助位圖都為64 MB,全局位圖為256 MB,僅為系統(tǒng)內(nèi)存總量(3×8) GB的1.56%。因此,三個(gè)位圖的空間開銷幾乎可以忽略不計(jì)。
對(duì)于RAID6在線重構(gòu)的研究,國內(nèi)外現(xiàn)有研究一直解決不了重負(fù)載持續(xù)訪問下磁盤陣列RAID6重構(gòu)性能急劇惡化的問題。由于大容量磁盤越來越便宜,日常備份系統(tǒng)也常采用磁盤陣列存儲(chǔ)備份數(shù)據(jù)。
基于備份的RAID6在線重構(gòu)框架利用備份系統(tǒng)所提供的穩(wěn)定恢復(fù)帶寬,顯著降低了應(yīng)用負(fù)載對(duì)重構(gòu)過程的影響,同時(shí),顯著減少了磁盤陣列RAID6參入重構(gòu),使得磁盤陣列RAID6優(yōu)先滿足用戶服務(wù)。該框架顯著改善了重構(gòu)性能,也改善了即時(shí)服務(wù)性能。相對(duì)于DOR算法(現(xiàn)在最常用且最有效重構(gòu)算法之一),在一塊磁盤失效情況下,此框架將重構(gòu)性能提高了1.43至15.49倍,平均響應(yīng)時(shí)間改善了7.7%至12.8%;在兩塊磁盤失效情況下,此框架將重構(gòu)性能提高了1.83至15.93倍,平均響應(yīng)時(shí)間改善了8.2%至13.5%。
我們下一步工作將根據(jù)應(yīng)用負(fù)載的基本信息,考慮當(dāng)前的系統(tǒng)服務(wù)性能和應(yīng)用負(fù)載特征,確定磁盤陣列RAID6內(nèi)重構(gòu)帶寬和備份系統(tǒng)上恢復(fù)帶寬的利用比例,并能夠隨著應(yīng)用負(fù)載變化進(jìn)行自適應(yīng)調(diào)整,以便在服務(wù)性能和重構(gòu)性能之間取得平衡,完成數(shù)據(jù)重構(gòu)。
參考文獻(xiàn)
[1] Rhea S, Wells C, Eaton P, et al. Maintenance-free global data storage[J]. IEEE Internet Computing, 2001, 5(5):40-49.
[2] Pinheiro E, Weber W D, Barroso L A. Failure Trends in a Large Disk Drive Population.[C]// Usenix Conference on File and Storage Technologies. San Jose, Usa. USENIX, 2007:17-28.
[3] Reddy A L N, Chandy J, Banerjee P. Design and Evaluation of Gracefully Degradable Disk Arrays[J]. Journal of Parallel & Distributed Computing, 1993, 17(1-2):28-40.
[4] Qin X, Miller E L, Schwarz S J T J E. Evaluation of distributed recovery in large-scale storage systems[C]// IEEE International Symposium on High PERFORMANCE Distributed Computing, 2004. Proceedings. IEEE, 2004:172-181.
[5] Wu X, Li J, Kameda H. Reliability Modeling of Declustered-Parity RAID Considering Uncorrectable Bit Errors[J]. Ieice Transactions on Fundamentals of Electronics Communications & Computer Sciences, 1997, 80(8):1508-1514.
[6] Luo X, Shu J, Zhao Y. Shifted Element Arrangement in Mirror Disk Arrays for High Data Availability during Reconstruction[C]// International Conference on Parallel Processing. IEEE, 2012:178-188.
[7] Wan J, Wang J, Xie C, et al. Formula Not Shown-RAID: Parallel RAID Architecture for Fast Data Recovery[J]. IEEE Transactions on Parallel & Distributed Systems, 2014, 25(6):1638-1647.
[8] Xie P, Huang J Z, Cao Q, et al. V2-Code: A new non-MDS array code with optimal reconstruction performance for RAID-6[C]// 2013 IEEE International Conference on Cluster Computing (CLUSTER). IEEE, 2013:1-8.
[9] Xie P, Huang J Z, Dai E W, et al. An efficient data layout scheme for better I/O balancing in RAID-6 storage systems[J]. Frontiers of Information Technology & Electronic Engineering, 2015, 16(5):335-345.
[10] Fu Y, Shu J, Luo X, et al. Short Code: An Efficient RAID-6 MDS Code for Optimizing Degraded Reads and Partial Stripe Writes[J]. IEEE Transactions on Computers, 2016, 66(1):127-137.
[11] Fu G, Thomasian A, Han C, et al. Rebuild Strategies for Redundant Disk Arrays.[C]// Symposium on Mass Storage Systems. 2004:223-226.
[12] Tian L, Feng D, Jiang H, et al. PRO: A Popularity-based Multi-threaded Reconstruction Optimization for RAID-Structured Storage Systems.[C]// Usenix Conference on File and Storage Technologies, FAST 2007, February 13-16, 2007, San Jose, Ca, Usa. DBLP, 2007:277-290.
[13] 陳金忠, 姚念民, 蔡紹濱. 基于NAND閃存的高性能和可靠的PRAID-6[J]. 電子學(xué)報(bào),2015,43 (6): 1211-1217.
[14] 劉靖宇,譚毓安,薛靜鋒,等.S-RAID中基于連續(xù)數(shù)據(jù)特征的寫優(yōu)化策略[J].計(jì)算機(jī)學(xué)報(bào),2014,37(3):721-734.
[15] Lei T, Hong J, Dan F, et al. Implementation and Evaluation of a Popularity-Based Reconstruction Optimization Algorithm in Availability-Oriented Disk Arrays[C]// MASS Storage Systems and Technologies, 2007. MSST 2007. IEEE Conference on. IEEE, 2007:233-238.
[16] Lumb C R,Schindler J,Ganger G R,et al.Towards higher disk head utilization:extracting free bandwidth from busy disk drives[C]// Conference on Symposium on Operating System Design & Implementation.USENIX Association, 2000:7-7.
[17] Thereska E, Schindler J, Bucy J, et al. A framework for building unobtrusive disk maintenance applications[C]// Proceedings of the third USENIX Conference on File and Storage Technologies, 2004,2: 213-226.
[18] Liu F, Pan W, Xie T, et al. PDB: A Reliability-Driven Data Reconstruction Strategy Based on Popular Data Backup for RAID4 SSD Arrays[M]// Algorithms and Architectures for Parallel Processing. 2013:87-100.
[19] Khasymski A, Rafique M M, Butt A R, et al. On the Use of GPUs in Realizing Cost-Effective Distributed RAID[C]// IEEE, International Symposium on Modeling, Analysis and Simulation of Computer and Telecommunication Systems. IEEE Computer Society, 2012:469-478.
[20] 高玲玲,許胤龍,王英子,等. 基于RAID6編碼的校驗(yàn)盤故障修復(fù)算法[J]. 計(jì)算機(jī)應(yīng)用與軟件,2014, 31(6):248-251,302.