李 國(guó),曾婷婷,曹衛(wèi)東,李 靜
(中國(guó)民航大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,天津 300300)
大規(guī)模云存儲(chǔ)系統(tǒng)作為主流數(shù)據(jù)中心的主要存儲(chǔ)架構(gòu),需要數(shù)以百萬(wàn)計(jì)的硬盤(pán)來(lái)存儲(chǔ)數(shù)據(jù),硬盤(pán)故障會(huì)造成數(shù)據(jù)丟失,從而影響系統(tǒng)性能[1-3]。為了提高存儲(chǔ)可靠性,以副本或糾刪碼為代表的被動(dòng)容錯(cuò)技術(shù)和以硬盤(pán)故障預(yù)測(cè)為代表的主動(dòng)容錯(cuò)技術(shù)被廣泛應(yīng)用于各大云存儲(chǔ)系統(tǒng)[4-7]。硬盤(pán)故障預(yù)測(cè)模型能監(jiān)控硬盤(pán)的運(yùn)行情況,在發(fā)現(xiàn)即將故障的硬盤(pán)時(shí)發(fā)出預(yù)警,從而提醒操作人員盡快處理預(yù)警硬盤(pán),降低數(shù)據(jù)丟失的概率。
然而,隨著存儲(chǔ)系統(tǒng)規(guī)模的不斷擴(kuò)大,硬盤(pán)故障預(yù)測(cè)模型發(fā)出的預(yù)警也在隨之增加,由于網(wǎng)絡(luò)帶寬等資源的限制,系統(tǒng)無(wú)法一次性處理多個(gè)預(yù)警,否則會(huì)影響正常的用戶(hù)服務(wù)。通常情況下,操作人員根據(jù)FIFO來(lái)處理預(yù)警事件,對(duì)于大規(guī)模云存儲(chǔ)系統(tǒng)來(lái)說(shuō),無(wú)論是通過(guò)提前預(yù)測(cè)對(duì)故障硬盤(pán)中的數(shù)據(jù)進(jìn)行遷移,還是通過(guò)被動(dòng)容錯(cuò)方式進(jìn)行重構(gòu),都需要幾個(gè)小時(shí)甚至幾天的時(shí)間[8]。同時(shí),考慮到系統(tǒng)的冗余機(jī)制,大多數(shù)操作人員并不會(huì)及時(shí)地處理預(yù)警[9],而預(yù)警不能得到及時(shí)處理會(huì)導(dǎo)致數(shù)據(jù)丟失。因此,系統(tǒng)需要更合適的調(diào)度策略來(lái)避免該情況的發(fā)生。文獻(xiàn)[10]通過(guò)構(gòu)建遞歸神經(jīng)網(wǎng)絡(luò)模型來(lái)確定硬盤(pán)故障模型發(fā)出的預(yù)警的優(yōu)先級(jí),為預(yù)警調(diào)度提供了依據(jù)。優(yōu)先級(jí)調(diào)度能夠保證系統(tǒng)優(yōu)先處理更緊急的預(yù)警事件,然而該方法有一定的缺陷:①低優(yōu)先級(jí)的預(yù)警事件可能會(huì)“饑餓”;②無(wú)法保證響應(yīng)時(shí)間,除非一個(gè)預(yù)警事件的優(yōu)先級(jí)在優(yōu)先級(jí)隊(duì)列中最高,否則程序?qū)o(wú)法立即處理該預(yù)警事件。
為解決以上問(wèn)題,本文提出了一種調(diào)度策略,將優(yōu)先級(jí)思想引入云存儲(chǔ)系統(tǒng)并加以改進(jìn),使用非完全搶占式的動(dòng)態(tài)優(yōu)先級(jí)策略調(diào)度不同的預(yù)警事件。同時(shí),該策略在保證系統(tǒng)性能的情況下分配帶寬資源,并統(tǒng)計(jì)存儲(chǔ)系統(tǒng)在一定運(yùn)行周期內(nèi)發(fā)生數(shù)據(jù)丟失事件的期望次數(shù)。利用本文的方法可以調(diào)度預(yù)測(cè)模型在一段時(shí)間內(nèi)發(fā)出的多個(gè)預(yù)警,降低云存儲(chǔ)系統(tǒng)中的數(shù)據(jù)丟失次數(shù),提高云存儲(chǔ)系統(tǒng)的性能。
RAID-5和RAID-6冗余機(jī)制廣泛應(yīng)用于云存儲(chǔ)系統(tǒng)中,是在故障發(fā)生后進(jìn)行數(shù)據(jù)重構(gòu)的被動(dòng)容錯(cuò)技術(shù)。硬盤(pán)在系統(tǒng)中被劃分為不同的校驗(yàn)組,若校驗(yàn)組內(nèi)出現(xiàn)的故障超出限制,則會(huì)導(dǎo)致數(shù)據(jù)丟失。硬盤(pán)發(fā)生故障后,RAID會(huì)自動(dòng)根據(jù)剩余硬盤(pán)中的數(shù)據(jù)和校驗(yàn)數(shù)據(jù)重建丟失的數(shù)據(jù),如果重構(gòu)過(guò)程能夠及時(shí)完成,則可以避免數(shù)據(jù)丟失事件的發(fā)生。然而,RAID是以犧牲空間換取更高的可靠性和性能的冗余機(jī)制,這會(huì)減少全體硬盤(pán)的總可用存儲(chǔ)空間[11]。此外,硬盤(pán)的容量不斷增加,但其讀寫(xiě)速度卻增長(zhǎng)得十分緩慢,這樣就導(dǎo)致了硬盤(pán)故障之后RAID重構(gòu)時(shí)間不斷延長(zhǎng)。在重構(gòu)數(shù)據(jù)的過(guò)程中,校驗(yàn)組中其它硬盤(pán)發(fā)生故障的可能性增加[12],這無(wú)疑增加了數(shù)據(jù)丟失的風(fēng)險(xiǎn),進(jìn)而降低系統(tǒng)的服務(wù)質(zhì)量。
硬盤(pán)故障預(yù)測(cè)模型可以在硬盤(pán)即將發(fā)生故障時(shí)發(fā)出預(yù)警,在故障發(fā)生之前進(jìn)行處理,是典型的主動(dòng)容錯(cuò)技術(shù)[13]。目前,大部分硬盤(pán)內(nèi)部都具有S.M.A.R.T.配置,即“自我監(jiān)測(cè)、分析及報(bào)告技術(shù)”,可以實(shí)時(shí)采集硬盤(pán)的參數(shù)信息[14]。硬盤(pán)故障預(yù)測(cè)模型就是根據(jù)S.M.A.R.T.參數(shù)信息,運(yùn)用統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)的相關(guān)算法建立的[15,16]。一般情況下,硬盤(pán)故障預(yù)測(cè)模型都是二分類(lèi)模型,即一個(gè)硬盤(pán)的狀態(tài)是“健康”或“即將故障”。在主動(dòng)容錯(cuò)系統(tǒng)中,硬盤(pán)故障預(yù)測(cè)模型監(jiān)測(cè)工作硬盤(pán)的狀態(tài)并輸出預(yù)警,但由于二進(jìn)制結(jié)果既不能提供預(yù)警命令,也不能提供準(zhǔn)確的值來(lái)指示預(yù)警的優(yōu)先級(jí),因此很難對(duì)預(yù)警調(diào)度提供有效的幫助。
目前,部署有故障預(yù)測(cè)模型的存儲(chǔ)系統(tǒng)默認(rèn)的預(yù)警調(diào)度算法是先進(jìn)先出算法(FIFO)。FIFO的特點(diǎn)是易于實(shí)現(xiàn),并且系統(tǒng)的調(diào)度開(kāi)銷(xiāo)比較少,任務(wù)平均完成時(shí)間較短[17]。研究表明,硬盤(pán)故障預(yù)測(cè)模型可以提前幾十甚至幾百個(gè)小時(shí)的時(shí)間發(fā)出預(yù)警[7]。隨著預(yù)測(cè)模型發(fā)出的預(yù)警的數(shù)量不斷增加,對(duì)于被預(yù)測(cè)為短時(shí)間內(nèi)即將發(fā)生故障的硬盤(pán),如果僅遵循FIFO的順序等待處理,則很有可能因?yàn)榈却龝r(shí)間過(guò)長(zhǎng)而造成數(shù)據(jù)丟失。
優(yōu)先級(jí)調(diào)度是按照系統(tǒng)分配的優(yōu)先級(jí)數(shù)值的大小來(lái)調(diào)度任務(wù)的一種調(diào)度策略[18]。在這種策略下,系統(tǒng)給每一個(gè)任務(wù)分配一個(gè)優(yōu)先級(jí)數(shù)值來(lái)確定其優(yōu)先級(jí),優(yōu)先級(jí)高的任務(wù)會(huì)被優(yōu)先響應(yīng),而對(duì)于優(yōu)先級(jí)相同的任務(wù)請(qǐng)求,則按照FIFO的順序進(jìn)行響應(yīng)。
一個(gè)完整的調(diào)度機(jī)制應(yīng)具有兩方面的功能:一是主動(dòng)容錯(cuò),即能夠提前預(yù)測(cè)出將要發(fā)生的故障并發(fā)出預(yù)警;二是調(diào)度,即能對(duì)系統(tǒng)發(fā)出的多個(gè)預(yù)警事件進(jìn)行處理。本文提出的調(diào)度模型不僅可以利用硬盤(pán)監(jiān)測(cè)數(shù)據(jù)訓(xùn)練預(yù)測(cè)模型,還可以對(duì)多個(gè)預(yù)警事件進(jìn)行調(diào)度。
圖1描述了調(diào)度模型的基本框架。模型首先解析硬盤(pán)在RAID校驗(yàn)組中的分布,然后將預(yù)處理后的硬盤(pán)監(jiān)測(cè)數(shù)據(jù)傳輸?shù)接脖P(pán)故障預(yù)測(cè)模型,接著根據(jù)硬盤(pán)的數(shù)據(jù)以及預(yù)測(cè)模型的結(jié)果發(fā)出預(yù)警事件,調(diào)度算法根據(jù)系統(tǒng)中的冗余布局將不同級(jí)別的預(yù)警事件按照一定的順序加入優(yōu)先級(jí)隊(duì)列,在系統(tǒng)帶寬允許的情況下將其依次加入工作隊(duì)列并分配帶寬資源,最后校驗(yàn)組進(jìn)行故障重構(gòu)。
對(duì)于一個(gè)RAID-5校驗(yàn)組,當(dāng)有一個(gè)硬盤(pán)發(fā)生故障時(shí),校驗(yàn)組會(huì)進(jìn)入降級(jí)模式,如果故障盤(pán)能夠得到及時(shí)有效的處理(故障盤(pán)被及時(shí)替換,并完成數(shù)據(jù)重構(gòu)),則不會(huì)造成數(shù)據(jù)丟失;若不能及時(shí)處理,一旦校驗(yàn)組內(nèi)發(fā)生并發(fā)故障則會(huì)造成數(shù)據(jù)永久丟失,不能再提供正常服務(wù),即一個(gè)RAID-5校驗(yàn)組只能容許一個(gè)運(yùn)行故障發(fā)生。
如圖2所示,校驗(yàn)組DG3中已有一個(gè)硬盤(pán)處于故障狀態(tài),該校驗(yàn)組處于降級(jí)狀態(tài),此時(shí)硬盤(pán)D1發(fā)出預(yù)警,必須盡快進(jìn)行處理,否則將會(huì)造成數(shù)據(jù)丟失,影響系統(tǒng)性能。對(duì)于校驗(yàn)組DG2來(lái)說(shuō),硬盤(pán)D2發(fā)出預(yù)警,但其所在校驗(yàn)組其余的硬盤(pán)是健康狀態(tài),故若硬盤(pán)D1和D2同時(shí)發(fā)出預(yù)警,則應(yīng)優(yōu)先處理D1硬盤(pán),以最大程度地避免數(shù)據(jù)丟失事件的發(fā)生。
圖2 RAID-5示例
同樣地,對(duì)于一個(gè)RAID-6校驗(yàn)組,當(dāng)有一個(gè)故障發(fā)生故障時(shí),校驗(yàn)組會(huì)進(jìn)入降級(jí)模式,本文稱(chēng)之為降級(jí)1,當(dāng)有兩個(gè)硬盤(pán)發(fā)生故障時(shí),稱(chēng)為降級(jí)2。當(dāng)校驗(yàn)組處于降級(jí)2模式時(shí),若故障盤(pán)能夠得到及時(shí)有效地處理,則不會(huì)造成數(shù)據(jù)丟失;若不能及時(shí)處理,當(dāng)?shù)谌齻€(gè)硬盤(pán)故障發(fā)生時(shí)就會(huì)造成數(shù)據(jù)永久丟失,不能再提供正常服務(wù),即一個(gè)RAID-6校驗(yàn)組最多能容許兩個(gè)運(yùn)行故障發(fā)生。
如圖3所示,校驗(yàn)組DG1中已有兩個(gè)硬盤(pán)處于故障狀態(tài),該校驗(yàn)組處于降級(jí)2模式,此時(shí)硬盤(pán)D1發(fā)出預(yù)警,必須盡快進(jìn)行處理,否則將會(huì)造成數(shù)據(jù)丟失,影響系統(tǒng)性能。而校驗(yàn)組DG3處于降級(jí)1模式,故若硬盤(pán)D1和D4同時(shí)發(fā)出預(yù)警,則應(yīng)優(yōu)先處理D1硬盤(pán),以最大程度地避免數(shù)據(jù)丟失事件的發(fā)生。
圖3 RAID-6示例
一個(gè)好的硬盤(pán)故障預(yù)測(cè)模型,應(yīng)該實(shí)現(xiàn)較高的預(yù)測(cè)準(zhǔn)確率和較低的誤報(bào)率。為了更真實(shí)地反映大型云存儲(chǔ)系統(tǒng)的硬盤(pán)運(yùn)行狀況,本文使用了Backblaze公司提供的公共數(shù)據(jù)集來(lái)構(gòu)建硬盤(pán)故障預(yù)測(cè)模型,并將預(yù)測(cè)結(jié)果用于之后的實(shí)驗(yàn)。數(shù)據(jù)集中記錄了超過(guò)10萬(wàn)個(gè)硬盤(pán),覆蓋了Seagate和West Digital的30多個(gè)不同的硬盤(pán)型號(hào)。為排除型號(hào)影響,本文選擇了2019年數(shù)據(jù)量最大的型號(hào)為ST4000DM0007的Seagate硬盤(pán)進(jìn)行實(shí)驗(yàn)。從這個(gè)硬盤(pán)型號(hào)中,本文收集了37 102個(gè)健康盤(pán)和1144個(gè)故障盤(pán)的屬性信息。在本文的實(shí)驗(yàn)中,從健康盤(pán)中隨機(jī)選出70%作為訓(xùn)練集,剩余30%作為測(cè)試集;從故障盤(pán)中隨機(jī)選出70%作為訓(xùn)練集,剩余30%作為測(cè)試集。
本文使用了決策樹(shù)和BP神經(jīng)網(wǎng)絡(luò)兩種方法來(lái)構(gòu)建硬盤(pán)故障預(yù)測(cè)模型。此外,考慮原始值屬性對(duì)預(yù)測(cè)結(jié)果的影響[15],基于是否增加原始值屬性分別進(jìn)行了兩次實(shí)驗(yàn)。其中,對(duì)于決策樹(shù)預(yù)測(cè)模型,設(shè)置復(fù)雜性CP為0.01,劃分前最小樣本數(shù)Min Split為20,葉子節(jié)點(diǎn)最小樣本數(shù)Min Bucket為7;對(duì)于BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型,設(shè)置隱藏層個(gè)數(shù)為4個(gè),每層神經(jīng)元個(gè)數(shù)分別設(shè)為1000、500、200、100,輸出層為3個(gè),激活函數(shù)選擇tanh。其結(jié)果見(jiàn)表1。
表1 預(yù)測(cè)結(jié)果分析/%
由表1可以看出,選擇12個(gè)屬性并通過(guò)決策樹(shù)模型訓(xùn)練可以實(shí)現(xiàn)更高的準(zhǔn)確率和更低的誤報(bào)率,故本文選用決策樹(shù)預(yù)測(cè)模型作為實(shí)驗(yàn)的基本預(yù)測(cè)模型,模型的預(yù)測(cè)結(jié)果顯示在圖4中。由圖4可以看出,超過(guò)半數(shù)的預(yù)警可以在硬盤(pán)發(fā)生故障前兩周以上發(fā)出預(yù)警,而對(duì)于提前預(yù)警時(shí)間較短的硬盤(pán),系統(tǒng)應(yīng)盡快處理。圖4中提前預(yù)警時(shí)間的概率分布將用于后續(xù)的實(shí)驗(yàn)中。
圖4 提前預(yù)警時(shí)間分布
2.4.1 硬盤(pán)健康度
以往的研究大多以提高預(yù)測(cè)性能為目的,提出的預(yù)測(cè)模型大都是二分類(lèi)模型,其產(chǎn)生的結(jié)果只有兩種:健康或預(yù)警。在一般情況下,硬盤(pán)故障并不是突然發(fā)生的,它往往是一個(gè)漸變的過(guò)程,而簡(jiǎn)單的二分類(lèi)預(yù)測(cè)結(jié)果并不能指導(dǎo)如何進(jìn)行預(yù)警調(diào)度。本文使用具體的值來(lái)描述預(yù)警硬盤(pán)的危險(xiǎn)程度,稱(chēng)為健康度,其計(jì)算過(guò)程如式(1)
(1)
式中:wd(i) 表示i時(shí)刻硬盤(pán)d的剩余壽命,即從發(fā)出預(yù)警到真實(shí)的故障發(fā)生所間隔的時(shí)間,wd(i) 可由決策樹(shù)預(yù)測(cè)模型獲得,由于本文使用的故障硬盤(pán)樣本均被預(yù)測(cè)為14天以?xún)?nèi)發(fā)生故障,故設(shè)wc(i) 為336 h。
若硬盤(pán)為健康硬盤(pán)或在短時(shí)間內(nèi)不會(huì)發(fā)生故障,設(shè)hd(i) 為0;若硬盤(pán)被預(yù)測(cè)為將在336 h之內(nèi)發(fā)生故障,則hd(i)∈(-1,0); 若硬盤(pán)已經(jīng)發(fā)生故障,設(shè)hd(i) 為-1。hd(i) 既可以衡量硬盤(pán)d在i時(shí)刻的運(yùn)行狀況,又可以作為設(shè)定預(yù)警事件優(yōu)先級(jí)的一個(gè)重要指標(biāo)。
2.4.2 校驗(yàn)組
對(duì)預(yù)警事件的處理不僅需要考慮單個(gè)硬盤(pán),還要結(jié)合云存儲(chǔ)系統(tǒng)的特點(diǎn),考慮冗余機(jī)制的影響。對(duì)于配置了RAID-5或RAID-6的云存儲(chǔ)系統(tǒng),除了將硬盤(pán)的健康度作為一個(gè)評(píng)價(jià)指標(biāo),還要考慮硬盤(pán)所在校驗(yàn)組的所有硬盤(pán)的健康狀況,對(duì)于已經(jīng)處于降級(jí)模式的校驗(yàn)組,該組中的預(yù)警硬盤(pán)應(yīng)獲得更高的分?jǐn)?shù),其組中的預(yù)警硬盤(pán)應(yīng)得到優(yōu)先處理。每個(gè)校驗(yàn)組的嚴(yán)重程度分?jǐn)?shù)的計(jì)算公式為
(2)
式中:hk(i) 表示校驗(yàn)組k中硬盤(pán)i的健康度。算法1對(duì)校驗(yàn)組的嚴(yán)重程度分?jǐn)?shù)的計(jì)算進(jìn)行了詳細(xì)描述。
算法1:校驗(yàn)組嚴(yán)重程度分?jǐn)?shù)算法
輸入:硬盤(pán)信息及其預(yù)測(cè)結(jié)果集D={d11,d12,…,d1n,d21,d22,…,d2n,…,dmn} 和校驗(yàn)組集R={r1,r2,r3,…,rm}
輸出:校驗(yàn)組的嚴(yán)重程度分?jǐn)?shù)集S={s1,s2,s3,…,sm}
(1)Begin
(2)/* 初始化健康度集 */
(3)H={h11,h12,…,h1n,h21,h22,…,h2n,…,hmn}
(4)For each ri∈R
(5)/* 校驗(yàn)組分布 */
(6) ri={di1,…,di2,di3,…,din}
(7) For each dij∈ri
(8)/* 使用式(1)計(jì)算硬盤(pán)dij的健康度hij*/
(9) hij←dij
(10)/* 更新健康度集 */
(11) H←hij
(12) End for
(13)/* 使用式(2)計(jì)算每個(gè)校驗(yàn)組的嚴(yán)重程度分?jǐn)?shù) */
(14) sj←ri
(15)/* 更新嚴(yán)重程度分?jǐn)?shù)集ri*/
(16) S←si
(17)End for
(18)End
2.4.3 預(yù)警優(yōu)先級(jí)
本文依據(jù)硬盤(pán)的健康度以及存儲(chǔ)系統(tǒng)的冗余機(jī)制為每個(gè)預(yù)警事件設(shè)置優(yōu)先級(jí),優(yōu)先處理較高優(yōu)先級(jí)的預(yù)警事件。每個(gè)預(yù)警事件的嚴(yán)重程度的計(jì)算公式為
pd(i)=α×hd(i)+β×scorek(i)
(3)
式中:hd(i) 和scorek(i) 由式(1)和式(2)分別給出,α和β為動(dòng)態(tài)因數(shù)權(quán)值,滿(mǎn)足條件α+β=1。
預(yù)警事件嚴(yán)重程度值的大小代表該事件的緊急程度,可以用該值來(lái)劃分預(yù)警事件的優(yōu)先級(jí)。在劃分優(yōu)先級(jí)時(shí),對(duì)于嚴(yán)重程度相差不多的預(yù)警事件,處理順序的先后不會(huì)對(duì)系統(tǒng)的性能造成很大的影響,故本文將預(yù)警事件嚴(yán)重程度的值映射為k個(gè)離散的值,它們代表不同的優(yōu)先級(jí)。結(jié)合預(yù)測(cè)模型的預(yù)測(cè)結(jié)果以及存儲(chǔ)系統(tǒng)中的冗余機(jī)制,本文設(shè)置k值為6。預(yù)警事件的嚴(yán)重程度與其優(yōu)先級(jí)的映射關(guān)系見(jiàn)表2。
表2 優(yōu)先級(jí)映射
為了減少主動(dòng)容錯(cuò)機(jī)制對(duì)系統(tǒng)性能的影響,當(dāng)故障發(fā)生后,RAID只使用系統(tǒng)總帶寬的一小部分用于重構(gòu)數(shù)據(jù),以此來(lái)保證系統(tǒng)的正常服務(wù)質(zhì)量。由于帶寬資源的限制,優(yōu)先級(jí)隊(duì)列中的預(yù)警事件不能無(wú)限增加,否則將集體陷入“饑餓”狀態(tài)。因此,設(shè)置優(yōu)先級(jí)隊(duì)列中的預(yù)警事件總數(shù)上限為5,在不超過(guò)上限的情況下,優(yōu)先級(jí)隊(duì)列中的所有任務(wù)都可以獲取帶寬資源用于數(shù)據(jù)重構(gòu),而不是等待前一個(gè)預(yù)警事件處理完成,此為非完全搶占式的優(yōu)先級(jí)調(diào)度。此外,未加入優(yōu)先級(jí)隊(duì)列的預(yù)警事件由于等待時(shí)間的不斷延長(zhǎng),其嚴(yán)重程度會(huì)越來(lái)越高,系統(tǒng)定時(shí)更新處于等待狀態(tài)的預(yù)警事件的優(yōu)先級(jí),以保證帶寬資源允許時(shí)優(yōu)先處理更緊急的預(yù)警事件。本文設(shè)置了一個(gè)閾值,系統(tǒng)為校驗(yàn)組重構(gòu)數(shù)據(jù)所分配的帶寬之和不超過(guò)該值,否則調(diào)度任務(wù)將會(huì)被延后執(zhí)行。為了保證更危險(xiǎn)的硬盤(pán)或校驗(yàn)組被快速處理,系統(tǒng)按照式(4)為每個(gè)預(yù)警事件分配帶寬,在這樣的分配方式下,優(yōu)先級(jí)高的預(yù)警事件將會(huì)獲得更多的帶寬資源。
(4)
式中:pd(i) 為硬盤(pán)d在i時(shí)刻對(duì)應(yīng)預(yù)警事件的優(yōu)先級(jí),由式(3)得出。MAX為系統(tǒng)分配的總帶寬,?為一個(gè)動(dòng)態(tài)因數(shù),可根據(jù)系統(tǒng)的負(fù)載情況來(lái)調(diào)整?值的大小。
DPS(dynamic priority-incorporated scheduling)的設(shè)計(jì)過(guò)程如下所述:
步驟1 根據(jù)硬盤(pán)故障預(yù)測(cè)模型得出的結(jié)果,將云存儲(chǔ)系統(tǒng)中的硬盤(pán)分為健康盤(pán)和預(yù)警盤(pán),健康盤(pán)為被預(yù)測(cè)為近期不會(huì)出現(xiàn)故障的硬盤(pán),預(yù)警盤(pán)為被預(yù)測(cè)為近期即將發(fā)生故障的硬盤(pán)。
步驟2 啟動(dòng)硬盤(pán)預(yù)警進(jìn)程,更新本地信息。
步驟3 根據(jù)預(yù)測(cè)結(jié)果按照式(1)計(jì)算出硬盤(pán)的健康度。
步驟4 定位硬盤(pán)所在的RAID校驗(yàn)組,根據(jù)式(2)計(jì)算出其所在校驗(yàn)組的嚴(yán)重程度分?jǐn)?shù)。
步驟5 根據(jù)以下兩種情況調(diào)整預(yù)警事件的優(yōu)先級(jí)。
情況1:若系統(tǒng)配置RAID-5被動(dòng)容錯(cuò)機(jī)制,首先判斷預(yù)警盤(pán)所在的校驗(yàn)組是否已處于降級(jí)模式。若校驗(yàn)組中已處于降級(jí)模式,則該預(yù)警事件的優(yōu)先級(jí)設(shè)為最高,即Level 6。若校驗(yàn)組沒(méi)有處于降級(jí)模式,則基于步驟2和步驟3的結(jié)果,根據(jù)式(3)設(shè)置預(yù)警事件的優(yōu)先級(jí)。
情況2:若系統(tǒng)配置RAID-6被動(dòng)容錯(cuò)機(jī)制,首先判斷預(yù)警盤(pán)所在的校驗(yàn)組是否處于降級(jí)模式。若校驗(yàn)組處于降級(jí)2模式,則該預(yù)警事件的優(yōu)先級(jí)設(shè)為最高,即Level 6。若校驗(yàn)組處于降級(jí)1模式或沒(méi)有處于降級(jí)模式,則基于步驟2和步驟3的結(jié)果,根據(jù)式(3)設(shè)置預(yù)警事件的優(yōu)先級(jí)。
步驟6 建立優(yōu)先級(jí)隊(duì)列。將預(yù)警事件按照優(yōu)先級(jí)的大小先后加入到優(yōu)先級(jí)隊(duì)列中。
步驟7 建立工作隊(duì)列。將優(yōu)先級(jí)隊(duì)列中的預(yù)警事件按照優(yōu)先級(jí)的大小依次加入到工作隊(duì)列中,并更新優(yōu)先級(jí)隊(duì)列中預(yù)警事件的優(yōu)先級(jí)。
步驟8 分配帶寬。根據(jù)式(4)為工作隊(duì)列中的預(yù)警事件分配帶寬。
步驟9 移除工作隊(duì)列中已完成的任務(wù),并更新工作隊(duì)列。
步驟10 判斷是否達(dá)到指定條件,達(dá)到則結(jié)束程序,否則重復(fù)步驟3~步驟10。
其中,硬盤(pán)預(yù)警進(jìn)程的流程如圖5所示。
圖5 硬盤(pán)預(yù)警進(jìn)程流程
本文根據(jù)第2.1節(jié)提出的預(yù)警調(diào)度模型設(shè)計(jì)了仿真程序,仿真程序通過(guò)事件轉(zhuǎn)換模擬主動(dòng)容錯(cuò)系統(tǒng)中各個(gè)事件的發(fā)生過(guò)程。程序通過(guò)4種仿真事件向前推進(jìn)模擬時(shí)間:
(1)運(yùn)行故障事件,系統(tǒng)中的每一塊硬盤(pán)均有幾率觸發(fā),事件發(fā)生后系統(tǒng)將增加一個(gè)新的硬盤(pán);
(2)故障預(yù)警事件,在故障預(yù)測(cè)模型檢測(cè)到某塊硬盤(pán)即將發(fā)生故障時(shí)觸發(fā);
(3)數(shù)據(jù)重構(gòu)完成事件,在校驗(yàn)組重構(gòu)數(shù)據(jù)完成后觸發(fā);
(4)預(yù)警處理完成事件,在所有預(yù)警硬盤(pán)所在的校驗(yàn)組完成數(shù)據(jù)重構(gòu)后觸發(fā)。
仿真程序使用一個(gè)最小堆來(lái)保存即將發(fā)生的事件,這些事件根據(jù)時(shí)間的先后順序插入最小堆。程序在開(kāi)始時(shí)基于硬盤(pán)的屬性信息和決策樹(shù)預(yù)測(cè)模型的結(jié)果生成一些預(yù)警事件,并將預(yù)警事件的信息保存在預(yù)警信息表中,然后按照時(shí)間的先后順序?qū)㈩A(yù)警事件依次插入最小堆。
仿真程序引入了一種值守進(jìn)程,它按時(shí)從最小堆的頂部彈出預(yù)警事件,調(diào)度算法根據(jù)事件彈出的時(shí)間及其信息來(lái)進(jìn)行調(diào)度。在程序運(yùn)行期間,每個(gè)事件發(fā)生的時(shí)間將會(huì)被累積,直到達(dá)到指定條件或者超過(guò)設(shè)定的仿真時(shí)間,程序才會(huì)停止運(yùn)行。在本文中,重復(fù)執(zhí)行仿真程序,直到數(shù)據(jù)丟失次數(shù)達(dá)到十次以上才停止運(yùn)行,并在最后統(tǒng)計(jì)運(yùn)行周期內(nèi)發(fā)生數(shù)據(jù)丟失事件的期望次數(shù),并以此作為仿真程序的結(jié)果。
對(duì)于仿真程序中的故障預(yù)警事件,根據(jù)2.3節(jié)的預(yù)測(cè)結(jié)果確定提前預(yù)警時(shí)間的概率分布。預(yù)警事件彈出后,系統(tǒng)會(huì)啟動(dòng)硬盤(pán)預(yù)警進(jìn)程。表3列出了仿真程序使用的參數(shù),參數(shù)對(duì)應(yīng)的數(shù)據(jù)為默認(rèn)值。仿真程序執(zhí)行環(huán)境為Intel Core i7 CPU 3.0 G,內(nèi)存4 G,64位微軟操作系統(tǒng)windows 10,集成開(kāi)發(fā)環(huán)境為JetBrains PyCharm Professional 2020.1.2。
表3 參數(shù)設(shè)置
在主動(dòng)容錯(cuò)云存儲(chǔ)系統(tǒng)中,出現(xiàn)多個(gè)故障預(yù)警是十分常見(jiàn)的,而系統(tǒng)用于重構(gòu)數(shù)據(jù)的帶寬資源十分有限。在本節(jié)中,實(shí)驗(yàn)使用了一組不同優(yōu)先級(jí)的預(yù)警事件來(lái)說(shuō)明調(diào)度算法如何調(diào)度多個(gè)預(yù)警事件并為其分配合適的帶寬。在不考慮系統(tǒng)性能影響的情況下,設(shè)置?=0.3,先后觸發(fā)3個(gè)不同優(yōu)先級(jí)的預(yù)警事件,它們的優(yōu)先級(jí)分別為L(zhǎng)evel 1、Level 3和Level 5。為了驗(yàn)證算法的效果好壞,先觸發(fā)優(yōu)先級(jí)較低的預(yù)警事件,一段時(shí)間后再觸發(fā)優(yōu)先級(jí)更高的預(yù)警事件。圖6顯示了3個(gè)不同優(yōu)先級(jí)的預(yù)警事件的帶寬分配情況。
圖6 不同優(yōu)先級(jí)的預(yù)警事件的帶寬
實(shí)驗(yàn)在開(kāi)始時(shí)觸發(fā)了Level 1的預(yù)警事件,當(dāng)系統(tǒng)中只有一個(gè)任務(wù)時(shí),它獲得了全部的帶寬資源。10 h之后,觸發(fā)級(jí)別為L(zhǎng)evel 3的預(yù)警事件,由于該任務(wù)級(jí)別較高,因此它會(huì)獲得更多的帶寬資源;24 h之后,再次觸發(fā)級(jí)別為L(zhǎng)evel 5的預(yù)警事件,系統(tǒng)再次重新分配帶寬。由圖6可以看出,系統(tǒng)會(huì)優(yōu)先處理優(yōu)先級(jí)更高的預(yù)警事件,當(dāng)隊(duì)列中加入了更高優(yōu)先級(jí)的預(yù)警事件后,系統(tǒng)會(huì)重新分配帶寬,優(yōu)先級(jí)高的事件將會(huì)獲得更多的帶寬資源。
根據(jù)本文提出的調(diào)度模型,操作人員可以更高效率地處理多個(gè)預(yù)警事件,本節(jié)實(shí)驗(yàn)將對(duì)比分析本文提出的DPS與系統(tǒng)默認(rèn)的FIFO在不同情境下的應(yīng)用效果。
5.3.1 RAID重構(gòu)時(shí)間
本節(jié)實(shí)驗(yàn)分析了兩種調(diào)度方式在RAID-5和RAID-6系統(tǒng)中統(tǒng)計(jì)的運(yùn)行周期內(nèi)的數(shù)據(jù)丟失事件的期望次數(shù),通過(guò)調(diào)節(jié)參數(shù)Rc改變RAID重構(gòu)時(shí)間,其余參數(shù)參照表3中的默認(rèn)值,結(jié)果顯示在圖7中。
圖7(a)和圖7(b)分別給出了兩種調(diào)度方式在RAID-5和RAID-6系統(tǒng)中運(yùn)行的結(jié)果,可以看出隨著重構(gòu)時(shí)間的增加,發(fā)生數(shù)據(jù)丟失事件的期望次數(shù)不斷增多。其中,在RAID-5云存儲(chǔ)系統(tǒng)中,DPS相比于FIFO的調(diào)度方式,其數(shù)據(jù)丟失事件的期望次數(shù)降低約14.5%~35.8%;在RAID-6云存儲(chǔ)系統(tǒng)中,其數(shù)據(jù)丟失事件的期望次數(shù)降低約12.5%~29.5%。
圖7 不同重構(gòu)時(shí)間下的數(shù)據(jù)丟失事件期望次數(shù)
5.3.2 操作人員反應(yīng)時(shí)間
在大型的數(shù)據(jù)中心中,操作人員往往不能及時(shí)對(duì)預(yù)測(cè)模型發(fā)出的預(yù)警進(jìn)行處理,從而增加了并發(fā)故障發(fā)生的概率,造成數(shù)據(jù)丟失。在不同的數(shù)據(jù)中心中,操作人員處理預(yù)警事件的間隔時(shí)間不同,本文將從系統(tǒng)發(fā)出預(yù)警到操作人員處理預(yù)警事件的時(shí)間稱(chēng)為反應(yīng)時(shí)間。本節(jié)實(shí)驗(yàn)對(duì)比了不同反應(yīng)時(shí)間下在一定運(yùn)行周期內(nèi)云存儲(chǔ)系統(tǒng)中發(fā)生數(shù)據(jù)丟失事件的期望次數(shù),通過(guò)調(diào)節(jié)參數(shù)Rt改變反應(yīng)時(shí)間,其余參數(shù)參照表3中的默認(rèn)值,結(jié)果顯示在圖8中。
圖8(a)和圖8(b)分別給出了兩種調(diào)度方式在RAID-5和RAID-6系統(tǒng)中運(yùn)行的結(jié)果,隨著操作人員反應(yīng)時(shí)間的增加,發(fā)生數(shù)據(jù)丟失事件的期望次數(shù)增多。其中,在RAID-5云存儲(chǔ)系統(tǒng)中,DPS相比于FIFO的調(diào)度方式,其數(shù)據(jù)丟失事件的期望次數(shù)降低約27.1%~34.1%;在RAID-6云存儲(chǔ)系統(tǒng)中,其數(shù)據(jù)丟失事件的期望次數(shù)降低約27.2%~36.1%。
圖8 不同反應(yīng)時(shí)間下的數(shù)據(jù)丟失事件期望次數(shù)
本文將硬盤(pán)故障預(yù)測(cè)技術(shù)與調(diào)度算法結(jié)合起來(lái),并提出了一種改進(jìn)的動(dòng)態(tài)優(yōu)先級(jí)調(diào)度策略,更高效地處理主動(dòng)容錯(cuò)云存儲(chǔ)中的硬盤(pán)故障預(yù)測(cè)模型發(fā)出的多個(gè)預(yù)警。該策略綜合考慮了RAID-5和RAID-6云存儲(chǔ)系統(tǒng)中的冗余機(jī)制和主動(dòng)容錯(cuò)技術(shù),合理分配系統(tǒng)中的用于RAID重構(gòu)的帶寬資源,降低了云存儲(chǔ)系統(tǒng)中的數(shù)據(jù)丟失次數(shù)。
本文的調(diào)度策略?xún)H考慮了RAID云存儲(chǔ)系統(tǒng),未來(lái)的一個(gè)研究方向是將調(diào)度策略推廣到配置了其它被動(dòng)容錯(cuò)及主動(dòng)容錯(cuò)技術(shù)的存儲(chǔ)系統(tǒng)中,并針對(duì)不同存儲(chǔ)系統(tǒng)的結(jié)構(gòu)對(duì)調(diào)度策略進(jìn)行改進(jìn)。
計(jì)算機(jī)工程與設(shè)計(jì)2022年12期