李 楚 馮 丹 王 芳
(武漢光電國(guó)家實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (信息存儲(chǔ)系統(tǒng)教育部重點(diǎn)實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074)
(lichu@hust.edu.cn)
一種高性能高可靠的混合客戶端緩存系統(tǒng)
李 楚 馮 丹 王 芳
(武漢光電國(guó)家實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (信息存儲(chǔ)系統(tǒng)教育部重點(diǎn)實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074)
(lichu@hust.edu.cn)
現(xiàn)代數(shù)據(jù)中心普遍使用網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)提供共享存儲(chǔ)服務(wù).存儲(chǔ)服務(wù)端通常使用獨(dú)立冗余磁盤陣列(RAID)技術(shù)保障數(shù)據(jù)可靠性,如可以容單雙盤錯(cuò)的RAID56.相比于傳統(tǒng)磁盤,固態(tài)盤具有更低的訪問時(shí)延和更高的價(jià)格,因此將固態(tài)盤作為存儲(chǔ)客戶端緩存成為一種流行的方案.寫回法可以充分發(fā)揮固態(tài)盤的優(yōu)勢(shì)加速存儲(chǔ)讀寫性能,然而一旦固態(tài)盤發(fā)生故障,寫回法無法保證數(shù)據(jù)的一致性和持久性.寫直達(dá)法簡(jiǎn)化了一致性模型,但是無法減小寫時(shí)延.設(shè)計(jì)并實(shí)現(xiàn)一種新的混合客戶端緩存(hybrid host cache, HHC),HHC通過使用廉價(jià)的日志磁盤鏡像存放固態(tài)盤上的臟數(shù)據(jù)來提高可靠性,并且利用寫屏障語義保證數(shù)據(jù)的可靠性和一致性.分析表明,HHC的平均無故障時(shí)間遠(yuǎn)遠(yuǎn)高于后端存儲(chǔ)系統(tǒng).最后實(shí)現(xiàn)了一個(gè)原型系統(tǒng)并使用Filebench進(jìn)行性能評(píng)估,結(jié)果表明在不同負(fù)載下,HHC性能與傳統(tǒng)的寫回法接近,遠(yuǎn)遠(yuǎn)超過寫直達(dá)法.
固態(tài)盤;客戶端緩存;緩存管理;可靠性;性能
現(xiàn)代數(shù)據(jù)中心普遍使用網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)提供海量存儲(chǔ)服務(wù),如網(wǎng)絡(luò)附加存儲(chǔ)(network attached storage,NAS)和存儲(chǔ)區(qū)域網(wǎng)絡(luò)(storage area network, SAN)等. 存儲(chǔ)應(yīng)用程序,如郵件服務(wù)器、文件服務(wù)器等分布在計(jì)算節(jié)點(diǎn)對(duì)外提供服務(wù),并通過網(wǎng)絡(luò)訪問后端共享存儲(chǔ)服務(wù)器.存儲(chǔ)服務(wù)器通常使用獨(dú)立冗余磁盤陣列(redundant array of independent disks, RAID)[1]技術(shù)保障存儲(chǔ)系統(tǒng)的可靠性.比如RIAD5/6分別可以容單盤和雙盤故障,既滿足高性能高可靠需求,又能提供較高的存儲(chǔ)利用率,在存儲(chǔ)服務(wù)器中得到廣泛應(yīng)用[2].
隨著固態(tài)盤(solid-state drive, SSD)存儲(chǔ)密度的提高以及價(jià)格的不斷降低,數(shù)據(jù)中心節(jié)點(diǎn)中部署SSD已成為較為普遍的做法.相對(duì)于DRAM,SSD具有大容量、非易失等優(yōu)勢(shì);相對(duì)于傳統(tǒng)的磁盤(hard disk drive, HDD),SSD有著更高隨機(jī)訪問性能.計(jì)算節(jié)點(diǎn)上利用SSD作為緩存設(shè)備,不僅可以減少對(duì)后端存儲(chǔ)的訪問競(jìng)爭(zhēng),而且能夠大大降低應(yīng)用的訪問時(shí)延.因此,近幾年工業(yè)界紛紛使用基于SSD的存儲(chǔ)客戶端緩存來提高存儲(chǔ)服務(wù)能力[3-5].寫直達(dá)法(write through)和寫回法(write back)是2種基本的緩存寫策略.寫直達(dá)法會(huì)將寫請(qǐng)求寫入后端存儲(chǔ)然后寫入緩存;寫回法只將寫請(qǐng)求的數(shù)據(jù)寫入緩存就返回,緩存中的臟數(shù)據(jù)由緩存管理模塊選擇合適的時(shí)機(jī)刷回到后端存儲(chǔ).寫直達(dá)法可以減小讀請(qǐng)求的時(shí)延,但因?qū)懻?qǐng)求的同步寫回,寫性能無法得到改善.然而最近的研究表明:企業(yè)級(jí)工作負(fù)載含有大量寫操作,且寫/讀比例有增加的趨勢(shì)[6-8],在這種負(fù)載下,采用寫回法能夠得到比寫直達(dá)法好得多的性能[9],這在我們后面的實(shí)驗(yàn)中也得到了證實(shí).
盡管寫回法能更好地發(fā)揮SSD緩存的讀寫優(yōu)勢(shì),但同時(shí)也面臨著嚴(yán)峻的挑戰(zhàn):現(xiàn)代SSD中大量使用的多層單元(multi-level cell, MLC)閃存芯片擦除次數(shù)只有10 000次,可靠性遠(yuǎn)低于后端的RAID5/6.我們通過對(duì)可靠性的定量分析發(fā)現(xiàn),單塊SSD設(shè)備與多塊磁盤構(gòu)成的RAID5/6相比,其平均無數(shù)據(jù)丟失時(shí)間(mean time to data loss, MTTDL)少了2個(gè)數(shù)量級(jí)以上.那么當(dāng)SSD發(fā)生不可恢復(fù)的故障時(shí),采用傳統(tǒng)的寫回法將帶來2個(gè)問題:1)臟數(shù)據(jù)異步刷回機(jī)制破壞了原來的寫入順序,因此無法保證存儲(chǔ)服務(wù)器端的數(shù)據(jù)一致性;2)緩存數(shù)據(jù)的丟失使得原本被認(rèn)為持久化的數(shù)據(jù)并沒有寫入后端存儲(chǔ),這樣就無法保證數(shù)據(jù)的持久性,尤其是目前的SSD容量不斷提升,一旦SSD出現(xiàn)故障將造成大量數(shù)據(jù)不可恢復(fù)的丟失,這是很多存儲(chǔ)應(yīng)用以及用戶無法容忍的.因此,如何克服這些問題成為近幾年的研究熱點(diǎn).
為了解決寫回法帶來的問題,研究人員提出了各種方案,按照實(shí)施的層次可分為2類:1)提高SSD緩存層的可靠性,從而降低緩存層失效的概率.其方法主要是使用 RAID技術(shù)組織多個(gè)SSD,利用冗余數(shù)據(jù)保證緩存層的可靠性,如Oh等人[10]提出的SRC(SSD RAID cache)以RAID5方式管理多塊SSD緩存數(shù)據(jù),Arteaga等人[9]則使用RAID1來構(gòu)建SSD緩存層.盡管這種方式確實(shí)可以大大提高SSD緩沖層的可靠性,但是同時(shí)也導(dǎo)致成本大幅增加,而且RAID帶來的冗余數(shù)據(jù)增加了SSD的擦寫次數(shù),加速了SSD的磨損,更嚴(yán)重的是均勻的磨損分布增加了多個(gè)SSD同時(shí)失效的風(fēng)險(xiǎn)[11-12].2)通過提出基于寫回法的新緩存策略來應(yīng)對(duì)SSD失效問題.如Koller等人[13]提出了2種緩存策略:Ordered Write-back和Journaled Write-back,可以保證臟數(shù)據(jù)的刷回順序與應(yīng)用程序?qū)懭氲捻樞蛲耆嗤?雖然這種方式保證了SSD緩存設(shè)備失效時(shí)存儲(chǔ)服務(wù)端的數(shù)據(jù)一致性,但是并不能保證數(shù)據(jù)的持久性.Qin等人[14]提出Write-back Flush策略,利用文件系統(tǒng)、數(shù)據(jù)庫等存儲(chǔ)應(yīng)用提供的寫屏障(write barrier)機(jī)制, 在SSD緩存層實(shí)現(xiàn)寫屏障操作的語義來保證數(shù)據(jù)的一致性和持久性.寫屏障會(huì)阻塞隨后的寫請(qǐng)求,直到緩存中所有臟數(shù)據(jù)被持久化存儲(chǔ),文件系統(tǒng)等存儲(chǔ)應(yīng)用通過該機(jī)制保證數(shù)據(jù)的寫入順序[15].在Write-back Flush策略中,寫屏障操作會(huì)觸發(fā)緩存管理程序?qū)SD中所有臟數(shù)據(jù)刷回到網(wǎng)絡(luò)存儲(chǔ)系統(tǒng),這使得寫屏障時(shí)延較長(zhǎng),因此對(duì)于寫密集尤其是同步密集型(如fsync,該操作會(huì)觸發(fā)寫屏障)負(fù)載,頻繁的數(shù)據(jù)刷回操作直接影響到存儲(chǔ)應(yīng)用的響應(yīng)時(shí)間.
本文提出一種新的混合客戶端緩存(hybrid host cache, HHC)架構(gòu).HHC由SSD和廉價(jià)的HDD組成,緩存管理模塊選擇性地將SSD緩存中的臟數(shù)據(jù)以日志方式順序?qū)懭際DD,一方面保證了緩存層的可靠性,另一方面充分利用磁盤順序?qū)懙膸拑?yōu)勢(shì),盡可能減小冗余的寫入操作對(duì)前臺(tái)寫請(qǐng)求的影響.另外,在寫回法的基礎(chǔ)上,HHC利用寫屏障機(jī)制實(shí)現(xiàn)新的緩存策略,通過結(jié)合精心設(shè)計(jì)的日志管理策略保證數(shù)據(jù)的一致性和可靠性.最后我們實(shí)現(xiàn)原型系統(tǒng)并使用Filebench[16]對(duì)I/O吞吐率進(jìn)行測(cè)試和分析.實(shí)驗(yàn)結(jié)果表明,在讀密集型負(fù)載websearch下HHC與其他緩存策略表現(xiàn)相當(dāng),在寫密集型負(fù)載fileserver下HHC相對(duì)于寫直達(dá)可以提高75.4%~388.2%,相對(duì)于Write-back Flush提高了48.2%~173.4%;在同步密集的負(fù)載varmail下比寫直達(dá)提高了3.7~8.2倍,相對(duì)于Write-back Flush提高了5.5~10.2倍.
1.1設(shè)計(jì)目標(biāo)
在設(shè)計(jì)HHC時(shí),我們致力于達(dá)到4個(gè)目標(biāo):
1) 持久性.當(dāng)SSD設(shè)備發(fā)生故障時(shí),將導(dǎo)致所有的緩存數(shù)據(jù)不可用.由于使用基于寫回法的緩存策略,緩存中的數(shù)據(jù)塊主要有2種:干凈緩存塊和臟緩存塊.干凈緩存塊是當(dāng)讀不命中時(shí)從后端讀入緩存的數(shù)據(jù)塊,而臟緩存塊是由應(yīng)用程序?qū)懭刖彺媲椅幢凰⒒睾蠖舜鎯?chǔ)服務(wù)器的數(shù)據(jù)塊.由于干凈緩存塊在后端有同樣的副本,因此不需要額外的保護(hù).而對(duì)于臟緩存塊應(yīng)當(dāng)提供與后端RAID5/6相當(dāng)級(jí)別的可靠性保障[9].HHC使用磁盤來鏡像地存放SSD緩存中的臟數(shù)據(jù),通過定量的可靠性分析發(fā)現(xiàn):當(dāng)使用1塊磁盤時(shí)HHC可達(dá)到超過RAID5的可靠性級(jí)別;而當(dāng)使用2塊磁盤做鏡像時(shí),HHC的可靠性可以超過RAID6(見第2節(jié),可靠性分析).因此,可以根據(jù)后端存儲(chǔ)的RAID級(jí)別使用不同的HHC配置.
2) 一致性.存儲(chǔ)應(yīng)用通常會(huì)利用寫屏障請(qǐng)求來實(shí)現(xiàn)原子操作和持久化操作(如fsync)等,從而確保數(shù)據(jù)的一致性[14].當(dāng)存儲(chǔ)應(yīng)用發(fā)出寫屏障請(qǐng)求時(shí),存儲(chǔ)設(shè)備會(huì)將其緩存中的所有臟數(shù)據(jù)持久化到設(shè)備之后才返回到應(yīng)用,這樣使得寫屏障之前與之后的寫操作的順序性得到保證.需要注意的是,對(duì)于寫屏障之后的寫操作,存儲(chǔ)系統(tǒng)并不保證其持久化到存儲(chǔ)設(shè)備,即在2個(gè)寫屏障之間的寫操作并不需要強(qiáng)制保證其持久化到存儲(chǔ)設(shè)備時(shí)的順序.HHC在緩存層實(shí)現(xiàn)寫屏障語義,當(dāng)來自存儲(chǔ)應(yīng)用的寫屏障請(qǐng)求到達(dá)時(shí),HHC一方面將對(duì)SSD設(shè)備發(fā)送寫屏障以確保緩存數(shù)據(jù)和緩存索引的持久化,另一方面確保SSD中的臟緩存塊全部持久化到磁盤日志.因此即使SSD或HDD出現(xiàn)故障,仍然能保證寫屏障時(shí)所有數(shù)據(jù)不會(huì)丟失,從而保證寫屏障語義的正確實(shí)施.
3) 高性能.存儲(chǔ)應(yīng)用程序發(fā)送的寫屏障操作要求將所有SSD中的臟數(shù)據(jù)持久化到磁盤日志,為了降低寫屏障的時(shí)延, HHC在內(nèi)存中維護(hù)多個(gè)內(nèi)存緩沖區(qū),對(duì)應(yīng)到磁盤上的日志段,存儲(chǔ)應(yīng)用的寫請(qǐng)求被寫入內(nèi)存緩沖區(qū),并采用流水線的方式異步地寫回到磁盤日志.這樣既可以避免因臟數(shù)據(jù)累積過多而增加寫屏障的開銷,又可以充分利用磁盤順序?qū)懙膸拑?yōu)勢(shì).研究表明大量的負(fù)載都有著突發(fā)性特征,I/O空閑期廣泛存在[17],因此為了保證充足的日志空間,HHC在系統(tǒng)空閑的時(shí)間進(jìn)行日志回收操作,從而盡可能避免日志回收帶來的開銷.
4) 低成本.盡管SSD的價(jià)格逐步降低,然而其單位存儲(chǔ)的價(jià)格仍然比磁盤高出10倍左右.因此使用額外的磁盤并不會(huì)帶來成本的顯著增加,而且由于數(shù)據(jù)中心的計(jì)算節(jié)點(diǎn)常常會(huì)有備用的磁盤處于空閑狀態(tài),HHC可以將這些磁盤作為日志盤使用,進(jìn)一步降低存儲(chǔ)系統(tǒng)的成本.
表1給出了5種不同緩存策略的對(duì)比,依次是寫直達(dá)法(WT)、寫回法(WB)、Ordered Write Back(WB-Ordered)、Write-back Flush(WB-Flush)以及我們的HHC.WB能夠提供最好的性能,但是它既不能保證一致性也不能保證持久性;WB-Ordered在不同的負(fù)載下都有很好的性能,但是同樣不能提供持久性;WT和WB-Flush能夠保證一致性和持久性,但是對(duì)于寫密集型和同步密集型(如郵件服務(wù)器等)的存儲(chǔ)應(yīng)用,并不能充分發(fā)揮SSD的讀寫優(yōu)勢(shì);而HHC在不同負(fù)載下能夠達(dá)到或接近WB的性能,同時(shí)能夠保證數(shù)據(jù)的一致性和持久性.
Table 1 Comparison of Different Policies表1 不同緩存策略的對(duì)比
Note:“√” means support; “×” means nonsupport.
1.2HHC系統(tǒng)架構(gòu)概述
如圖1所示,根據(jù)后端存儲(chǔ)服務(wù)可靠性的不同,HHC在傳統(tǒng)的固態(tài)盤緩存層添加一個(gè)或多個(gè)磁盤,多個(gè)磁盤將以鏡像的方式存儲(chǔ)數(shù)據(jù),從而保證可靠性需求.固態(tài)盤作為讀寫緩存使用,其緩存策略可以選擇傳統(tǒng)的LRU方式,也可以使用近年來提出的一些針對(duì)固態(tài)盤特性的選擇性緩存策略等.固態(tài)盤緩存中的數(shù)據(jù)按照緩存狀態(tài)可分為2類:1)干凈緩存塊,即緩存塊中的數(shù)據(jù)在后端存儲(chǔ)中有相同的副本;2)臟緩存塊,即由應(yīng)用程序?qū)懭氲男聰?shù)據(jù),尚未寫回到后端存儲(chǔ).為了充分發(fā)揮固態(tài)盤緩存帶來的性能提升,以及充分利用磁盤優(yōu)秀的順序?qū)懶阅埽琀HC采用異步的方式將固態(tài)盤中的臟緩存塊寫入附加的磁盤中,磁盤數(shù)據(jù)以日志的方式進(jìn)行組織,即所有的寫操作都是追加寫,最大程度上減小磁盤的尋道時(shí)延和旋轉(zhuǎn)時(shí)延.
Fig. 1 Architecture of HHC圖1 HHC架構(gòu)圖
HCC主要包含3個(gè)模塊:固態(tài)盤緩存管理模塊、磁盤日志管理模塊和故障處理模塊.固態(tài)盤緩存管理模塊主要用來響應(yīng)上層應(yīng)用程序的讀寫請(qǐng)求、管理緩存空間、緩存塊的狀態(tài)以及與后端存儲(chǔ)上的映射關(guān)系等;磁盤日志管理模塊負(fù)責(zé)管理磁盤上的日志空間,其功能主要包括日志的寫入、垃圾回收等;故障處理模塊負(fù)責(zé)當(dāng)發(fā)生故障時(shí),根據(jù)故障類型執(zhí)行相應(yīng)的故障恢復(fù)工作,保證存儲(chǔ)系統(tǒng)的數(shù)據(jù)一致性和持久性.
1.3固態(tài)盤緩存管理
固態(tài)盤緩存管理將固態(tài)盤分為2個(gè)區(qū)域,即元數(shù)據(jù)區(qū)和數(shù)據(jù)區(qū).元數(shù)據(jù)區(qū)記錄緩存塊的狀態(tài)以及邏輯地址映射信息等,容量較小,通??扇糠湃隓RAM中以加速緩存查找.數(shù)據(jù)區(qū)用來存放緩存數(shù)據(jù),以固定大小劃分,默認(rèn)選用4 KB.該模塊對(duì)上主要提供3種操作:讀、寫和寫屏障操作.
對(duì)于讀請(qǐng)求,首先以請(qǐng)求的邏輯塊地址為關(guān)鍵字在緩存中查找是否命中,如命中則根據(jù)緩存元數(shù)據(jù)信息中的映射關(guān)系,從相應(yīng)的緩存塊讀出完成讀操作;如不命中,則從后端存儲(chǔ)服務(wù)器讀取數(shù)據(jù)塊,并申請(qǐng)緩存塊寫入固態(tài)盤緩存,同時(shí)在內(nèi)存中添加相應(yīng)的元數(shù)據(jù)信息.對(duì)于寫請(qǐng)求,與讀請(qǐng)求類似,首先在緩存中查找,如果命中則寫入緩存,否則申請(qǐng)新的緩存塊將數(shù)據(jù)寫入并修改元數(shù)據(jù)信息.元數(shù)據(jù)信息被同步刷回到固態(tài)盤,使得即使客戶端重啟,緩存中的數(shù)據(jù)塊和其狀態(tài)仍然能夠正確恢復(fù).事實(shí)上以上也是傳統(tǒng)的寫回法緩存處理流程.當(dāng)申請(qǐng)緩存塊的時(shí)候,如果緩存塊已滿則需要進(jìn)行緩存替換操作,為了減小緩存替換時(shí)的延遲時(shí)間,HHC采用LRU的方式優(yōu)先替換干凈緩存塊以避免寫回操作.為了保證以上緩存替換過程的順利進(jìn)行,在后臺(tái)執(zhí)行臟數(shù)據(jù)塊刷回操作,使得SSD緩存中臟數(shù)據(jù)塊的數(shù)量不超過一定的閾值.刷回操作在后臺(tái)執(zhí)行,并且根據(jù)負(fù)載密集程度調(diào)整優(yōu)先級(jí).當(dāng)負(fù)載較輕或空閑時(shí),提高刷回優(yōu)先級(jí)使得更多緩存塊可用;當(dāng)負(fù)載較重時(shí),降低刷回優(yōu)先級(jí)以減小對(duì)前臺(tái)應(yīng)用I/O的影響.當(dāng)刷回操作完成時(shí),同時(shí)會(huì)向磁盤日志管理模塊發(fā)送相應(yīng)的revoke通知,日志會(huì)記錄相應(yīng)的撤銷塊,這種機(jī)制有利于日志盤的空間利用以及降低日志操作開銷.
另外,HHC對(duì)于寫操作增加了異步提交日志的操作.當(dāng)數(shù)據(jù)寫入緩存的同時(shí),并行地將其提交給磁盤日志管理模塊,該模塊負(fù)責(zé)將其異步地寫入磁盤以提供可靠性保證.HHC提供的另一個(gè)特殊的操作為寫屏障操作, 該操作將會(huì)觸發(fā)日志寫入操作,直到SSD緩存中的臟數(shù)據(jù)都被寫到磁盤寫屏障才會(huì)返回,這樣可以保證寫屏障操作的語義.即該操作完成后,保證所有數(shù)據(jù)持久化到存儲(chǔ)設(shè)備.為了保證異步提交日志機(jī)制的正確執(zhí)行,HHC在SSD緩存塊元數(shù)據(jù)信息中加入了一個(gè)標(biāo)記位Logged_Flag,表示該數(shù)據(jù)塊是否已提交給磁盤日志管理模塊.日志管理的具體流程將在1.4節(jié)給出.
需要注意的是,寫屏障操作并不會(huì)改變SSD緩存塊狀態(tài),原來的臟緩存塊仍然保留臟塊的標(biāo)記,否則可能會(huì)導(dǎo)致數(shù)據(jù)丟失而破壞寫屏障語義.例如,寫屏障操作使得臟緩存塊D被寫入HDD日志中,然后將其標(biāo)記為干凈,隨后緩存塊D被替換出緩存,此時(shí)假如HDD出現(xiàn)故障,緩存塊D的數(shù)據(jù)將無法恢復(fù).
1.4磁盤日志管理
為方便進(jìn)行日志管理,磁盤采用如下組織方式:磁盤開頭存放日志超級(jí)塊,剩余部分被分成固定長(zhǎng)度的段(segment),每個(gè)段有一個(gè)頭部(header)記錄該段日志的元數(shù)據(jù)信息.當(dāng)采用多個(gè)磁盤時(shí),由于采用鏡像方式,所以各個(gè)磁盤上的劃分是一樣的.磁盤日志管理主要包含2個(gè)方面:1)日志的寫入;2)日志的回收.日志的管理我們采用類似文獻(xiàn)[18]中Everest store的設(shè)計(jì),但是根據(jù)新的應(yīng)用場(chǎng)景進(jìn)行了一些修改和優(yōu)化.
1.4.1 關(guān)鍵數(shù)據(jù)結(jié)構(gòu)
日志超級(jí)塊用來記錄日志的基本信息,如日志頭和尾的位置、日志塊大小、每個(gè)段的長(zhǎng)度等.在HHC的設(shè)計(jì)中,日志超級(jí)塊主要是用來在故障恢復(fù)時(shí)定位日志起始位置,從而減少掃描日志所需要的時(shí)間,超級(jí)塊并不需要頻繁地持久化到磁盤,而只在系統(tǒng)空閑時(shí)間或周期性地寫入日志盤,因此并不會(huì)影響日志寫入的性能.日志段是真正存放日志數(shù)據(jù)塊的地方,分為段頭部和數(shù)據(jù)區(qū),段的頭部主要包含6個(gè)字段:
1) SegmentID.當(dāng)前的段號(hào),編號(hào)從0開始.
2) SequenceID.表示該段的序列號(hào),每當(dāng)寫入新的日志段時(shí),該值加1.
3) Barrier_Flag.當(dāng)該日志段是針對(duì)寫屏障操作的最后一個(gè)日志段時(shí),將該標(biāo)記位置1.
4) Checksum.日志數(shù)據(jù)的校驗(yàn)和,主要用來保證日志段的完整性,在恢復(fù)時(shí)可以根據(jù)校驗(yàn)和判斷該日志段是否寫入成功.
5) Log_LBA_Table.記錄該段中日志塊對(duì)應(yīng)的原來邏輯塊地址.例如,假如第1個(gè)日志塊對(duì)應(yīng)的后端存儲(chǔ)的LBA(logicalblockaddress)為8192,那么Log_LBA_Table的第1項(xiàng)就寫入8192.
Fig. 2 In-memory structure for log blocks圖2 內(nèi)存中的日志塊索引結(jié)構(gòu)
HHC在內(nèi)存中維護(hù)日志盤的當(dāng)前狀態(tài),如當(dāng)前日志的起始和結(jié)束位置、當(dāng)前日志段的序列號(hào)等.Log Entry結(jié)構(gòu)記錄一個(gè)數(shù)據(jù)塊在日志中的位置,即所在日志的段和在數(shù)據(jù)區(qū)中的塊索引號(hào).屬于相同日志段的Log Entry結(jié)構(gòu)被串聯(lián)起來以方便日志回收.所有的Log Entry以Hash鏈表的方式組織起來,以加速日志塊的查找,如圖2所示.另外內(nèi)存中維護(hù)一個(gè)緩沖池,用來緩沖新來的日志數(shù)據(jù)塊.緩沖池中包含多個(gè)緩沖區(qū),每個(gè)緩沖區(qū)跟日志磁盤上的一個(gè)段大小一樣,緩沖區(qū)頭部對(duì)應(yīng)日志段頭部,緩沖區(qū)數(shù)據(jù)區(qū)對(duì)應(yīng)日志段中的數(shù)據(jù)塊.日志段大小設(shè)置存在一個(gè)權(quán)衡的問題.如果設(shè)置太小,則無法充分發(fā)揮磁盤大塊寫的帶寬優(yōu)勢(shì),而且會(huì)增加日志元數(shù)據(jù)的存儲(chǔ)開銷;如果設(shè)置過大,則當(dāng)寫屏障請(qǐng)求到達(dá)時(shí)需要等待的時(shí)間可能會(huì)比較長(zhǎng),對(duì)于fsync操作密集的負(fù)載會(huì)增加訪問時(shí)延.因此管理員需要根據(jù)實(shí)際的負(fù)載特征使用合理的設(shè)置.
1.4.2 日志寫入
在進(jìn)行日志寫入時(shí),HHC首先將日志塊寫入到內(nèi)存中的緩沖區(qū),更新日志Hash表中相應(yīng)的Log Entry結(jié)構(gòu),并且將SSD緩存數(shù)據(jù)塊元數(shù)據(jù)信息中的Logged_Flag標(biāo)志位置1.當(dāng)緩沖區(qū)寫滿或?qū)懫琳险?qǐng)求到達(dá)時(shí),將該緩存區(qū)寫入當(dāng)前日志尾部對(duì)應(yīng)的日志段,對(duì)于由寫屏障觸發(fā)的最后一個(gè)日志段需要將頭部的Barrier_Flag標(biāo)記位置1,代表本次寫屏障操作完成,在日志恢復(fù)時(shí)需要用到該標(biāo)記位.固態(tài)盤緩存臟數(shù)據(jù)的刷回操作會(huì)使得舊的日志塊無效,此時(shí)如果對(duì)應(yīng)的日志塊尚處在內(nèi)存緩沖區(qū)中,則只需要在內(nèi)存中刪除該日志塊,否則將該日志塊對(duì)應(yīng)RAID中的邏輯塊地址記錄到緩沖區(qū)中的Revoke_Table,最后將該塊對(duì)應(yīng)的Log Entry從內(nèi)存Hash表中刪除.注意,對(duì)緩沖區(qū)中的日志塊進(jìn)行更改時(shí)可以在內(nèi)存中進(jìn)行原地更新,而為了避免產(chǎn)生隨機(jī)I/O增加時(shí)延,一旦緩沖區(qū)被持久化到日志段,HHC將不會(huì)對(duì)日志段進(jìn)行更新操作,而是通過維護(hù)內(nèi)存中的日志Hash表來記錄有效的日志塊信息.
由于緩沖池中包含多個(gè)緩沖區(qū),當(dāng)一個(gè)緩沖區(qū)在刷回磁盤時(shí),新來的日志數(shù)據(jù)可以寫入另一個(gè)緩沖區(qū),這樣的并行處理可以最大程度提高日志盤的寫入帶寬.盡管目前的SSD寫入帶寬高于磁盤,通常情況下,緩沖池中的數(shù)據(jù)仍然可以及時(shí)刷回到日志盤而不會(huì)造成緩沖池緊缺,原因主要有2個(gè)方面:1)SSD緩存盤作為讀寫緩存設(shè)備,其負(fù)載包含了讀和寫,再加上SSD的讀寫干擾問題[19]使得其寫帶寬遠(yuǎn)達(dá)不到其飽和值;2)SSD的寫入操作主要有2部分組成:1)讀不命中時(shí)從后端存儲(chǔ)載入數(shù)據(jù);2)寫入臟數(shù)據(jù).而第1類寫操作并不產(chǎn)生日志數(shù)據(jù),因此這也降低了日志數(shù)據(jù)的產(chǎn)生頻率.然而對(duì)于極端情況,比如當(dāng)寫操作非常密集時(shí),仍然有可能會(huì)造成緩沖池不足的情況,這時(shí)對(duì)于新來的日志數(shù)據(jù)并不做處理,當(dāng)有空緩沖區(qū)時(shí),從SSD緩存元數(shù)據(jù)中遍歷Logged_Flag=0的臟緩存塊,將其讀入日志緩沖區(qū),隨后的操作與前面描述的一致.
1.4.3 日志回收
由于日志總是順序地追加到日志尾部,日志盤的可用空間會(huì)持續(xù)減小.而為了保證日志的順利寫入就需要在合適的時(shí)間進(jìn)行日志回收操作.由于有效日志塊以Log Entry及Hash表方式存儲(chǔ)在內(nèi)存,且相同日志段的日志塊被串聯(lián)在一起,HHC可以很方便地識(shí)別待回收的日志塊,加速日志回收過程.考慮到HHC只緩存SSD緩存中的臟數(shù)據(jù)等特點(diǎn),我們將日志回收分為主動(dòng)回收和被動(dòng)回收2種.
主動(dòng)回收是指將日志頭部的有效日志塊遷移到日志尾部從而釋放日志空間.與傳統(tǒng)的日志回收不同的是,HHC并不需要從日志磁盤中讀取數(shù)據(jù),而是選擇從SSD緩存中讀取相應(yīng)的數(shù)據(jù)塊.這是由HHC的日志管理機(jī)制決定的,因?yàn)楫?dāng)SSD中緩存塊變?yōu)楦蓛魻顟B(tài)時(shí),會(huì)向日志管理模塊發(fā)送revoke通知,使得日志中對(duì)應(yīng)的日志塊變無效,也就是說日志塊中的有效塊必然在SSD緩存中有相同的副本.這樣就可以充分利用SSD的讀優(yōu)勢(shì),而且避免了傳統(tǒng)日志回收對(duì)日志寫入的負(fù)面影響.
被動(dòng)回收是指利用緩存本身的特點(diǎn)進(jìn)行自我回收.其原理是考慮到日志管理的特點(diǎn)和負(fù)載特征.在HHC的日志管理中,有2種情況下會(huì)將之前的日志塊置無效,一種是SSD緩存塊的覆蓋寫,一種是周期性的臟塊刷回操作.最近寫入的數(shù)據(jù)位于更靠近日志尾部的日志段,而很久未被修改的臟數(shù)據(jù)位于更靠近日志頭部的段.這樣日志段事實(shí)上就形成一種天然的LRU排序方式.考慮到負(fù)載的局部性特征,通常緩存的刷回操作也采用LRU的方式進(jìn)行,隨著將日志尾部所在日志段中的臟數(shù)據(jù)刷回后端緩存,日志頭部索引向尾部靠近,從而釋放日志空間.HHC充分利用緩存特點(diǎn)和日志管理模式,結(jié)合主動(dòng)回收和被動(dòng)回收2種方式,降低日志回收帶來的開銷.
1.5故障處理
HHC的特點(diǎn)之一就是混合緩存層的高可靠性.對(duì)于非設(shè)備故障如斷電重啟,由于固態(tài)盤緩存的元數(shù)據(jù)信息已經(jīng)被持久化,因此不會(huì)影響數(shù)據(jù)的一致性.對(duì)于設(shè)備故障,如果是日志盤故障,同樣不影響數(shù)據(jù)的一致性,因?yàn)樗芯彺鏀?shù)據(jù)仍然在SSD緩存中.
當(dāng)固態(tài)盤失效時(shí),需要從日志盤中恢復(fù)出最近一次寫屏障操作之前的所有臟數(shù)據(jù),寫回到后端存儲(chǔ).其恢復(fù)過程主要分3個(gè)步驟:
步驟1. 讀取日志盤的超級(jí)塊找到需要恢復(fù)的日志起始和結(jié)束位置.日志結(jié)束位置是指最近一次成功執(zhí)行寫屏障操作的日志段,這是通過從日志頭順序掃描日志段頭部直到下一個(gè)SequenceID小于當(dāng)前段,然后反向查找離該段最近的一個(gè)Barrier_Flag被置位的段并通過校驗(yàn)和確保該段寫入完整,否則繼續(xù)往前查找.
步驟2. 根據(jù)讀上來的日志元數(shù)據(jù)信息,順序地從日志盤讀取相應(yīng)的數(shù)據(jù)塊寫入后端存儲(chǔ).
步驟3. 重新初始化將日志盤完成數(shù)據(jù)恢復(fù)工作.
如果SSD和所有HDD都失效,那么不可避免地會(huì)導(dǎo)致緩存數(shù)據(jù)的丟失.不過通過我們對(duì)HHC的可靠性分析可以發(fā)現(xiàn),HHC的可靠性甚至高于后端存儲(chǔ)通常采用的RAID5/6,因此全部失效的概率是極低的.具體分析在第2節(jié)給出.
為了保證緩存數(shù)據(jù)不丟失,就需要使得緩存層盡可能地滿足高可靠性.HHC的一個(gè)設(shè)計(jì)原則就是保證混合緩存層的可靠性不低于后端存儲(chǔ)的可靠性.RAID5/6作為底層存儲(chǔ)廣泛應(yīng)用于數(shù)據(jù)中心以及云存儲(chǔ)環(huán)境下,因此這里只對(duì)HHC和RAID5/6的可靠性進(jìn)行定量分析和比較.
平均無數(shù)據(jù)丟失時(shí)間(MTTDL)作為一個(gè)重要的可靠性指標(biāo),被廣泛用來衡量存儲(chǔ)系統(tǒng)的可靠性.假設(shè)磁盤故障、固態(tài)盤故障以及修復(fù)過程是獨(dú)立的,且服從參數(shù)分別為λ,φ,μ的指數(shù)分布,通過構(gòu)造Markov鏈可以方便地計(jì)算存儲(chǔ)系統(tǒng)的MTTDL.
設(shè)N為陣列中的磁盤數(shù),RAID5的MTTDL計(jì)算為
RAID6的MTTDL計(jì)算為
Fig. 3 State-transition probability diagram for HHC (M=1)圖3 HHC狀態(tài)遷移概率圖 (M=1)
為了計(jì)算HHC的MTTDL,首先假設(shè)磁盤數(shù)M=1,使用Markov模型構(gòu)造狀態(tài)遷移概率圖,如圖3所示.狀態(tài)0表示磁盤和固態(tài)盤都正常工作;當(dāng)磁盤失效時(shí)進(jìn)入狀態(tài)1,若此時(shí)在恢復(fù)完成前固態(tài)盤失效則會(huì)導(dǎo)致緩存數(shù)據(jù)丟失;類似地處于狀態(tài)0時(shí),當(dāng)固態(tài)盤發(fā)生故障則進(jìn)入狀態(tài)2,若在故障恢復(fù)前磁盤失效也會(huì)造成數(shù)據(jù)丟失.為描述該過程可通過構(gòu)造Kolmogorov微分方程系統(tǒng)來實(shí)現(xiàn)[20]:
其中pi(t)代表HHC處于狀態(tài)i的概率,其初始條件為
對(duì)式(3)進(jìn)行拉普拉斯變換得到:
由式(3)(4)最終得到HHC的MTTDL為
式(6)得到當(dāng)磁盤數(shù)M=1時(shí)的MTTDL計(jì)算方法.當(dāng)Mgt;1時(shí),由于修復(fù)前平均時(shí)間(mean time to failure, MTTF)遠(yuǎn)遠(yuǎn)超過平均修復(fù)時(shí)間(mean time to repair, MTTR),可以用下面的方法近似計(jì)算出HHC的MTTDL.首先計(jì)算出M個(gè)磁盤作為整體的MTTDLMirror-M,那么該整體的故障率將服從參數(shù)為λ′的指數(shù)分布,將λ′代入式(6)即可得到新的MTTDL.這里僅以M=2為例給出計(jì)算過程,λ′的計(jì)算公式如下:
將式(6)中的λ替換為式(7)中得到的λ′即可得到MTTDLHHC-2,鑒于結(jié)果過于冗長(zhǎng),這里不給出推導(dǎo)后的公式,而是用圖來給出更為直觀的對(duì)比結(jié)果.參考目前主流設(shè)備的數(shù)據(jù)表(datasheet),實(shí)驗(yàn)中使用的參數(shù)取值如表2所示.
圖4(a)中給出了使用一個(gè)磁盤時(shí)HHC與RAID5的MTTDL對(duì)比圖,為方便比較,圖4也給出了SSD設(shè)備的MTTF.圖4中x坐標(biāo)軸表示后端RAID5陣列使用的磁盤數(shù);y坐標(biāo)軸表示故障修復(fù)平均需要的時(shí)間;z坐標(biāo)軸代表最終計(jì)算出的MTTDL,該值越大代表可靠性越高.從圖4中可以看出,SSD的可靠性最低,遠(yuǎn)低于后端存儲(chǔ),這也再次證實(shí)了提高緩存可靠性的必要性;RAID5的可靠性隨磁盤數(shù)的增加而下降;隨著平均修復(fù)時(shí)間的增加,HHC和RAID5的可靠性都有所下降,但是可以清晰地看到,HHD的可靠性始終遠(yuǎn)高于RAID5(注意圖4中的z軸使用的是對(duì)數(shù)坐標(biāo)).圖4(b)給出了使用2塊磁盤做鏡像時(shí)HHC與RAID6的MTTDL對(duì)比圖.可以看到與圖4(a)類似地趨勢(shì),HHC-2的可靠性遠(yuǎn)遠(yuǎn)超過了RAID6,而隨著后端磁盤數(shù)的增加,優(yōu)勢(shì)會(huì)更加明顯.
Table 2 Main Parameters for Reliability Analysis表2 可靠性分析中的主要參數(shù)表
Fig. 4 MTTDL Comparison of HHC and RAID5/6圖4 HHC與RAID5/6的MTTDL對(duì)比
我們?cè)贚inux系統(tǒng)中實(shí)現(xiàn)了HHC緩存架構(gòu)內(nèi)核模塊,使用LRU替換算法,支持基本的寫直達(dá)法(WT)、寫回法(WB)以及本文提出的緩存策略(WB-HHC).同時(shí)實(shí)現(xiàn)了最近提出的Write-back Flush(WB-Flush)緩存策略.使用通用測(cè)試工具對(duì)比測(cè)試在不同負(fù)載環(huán)境下各種緩存策略所能提供的性能.為了展示緩存在網(wǎng)絡(luò)存儲(chǔ)環(huán)境中帶來的優(yōu)勢(shì),實(shí)驗(yàn)也給出不使用SSD緩存Raw時(shí)的性能作為對(duì)比.由于HHC中磁盤是以鏡像方式組織的,日志采用完全并行的方式寫入,使用兩塊盤的時(shí)候僅對(duì)可靠性帶來提升,對(duì)性能并沒有太大影響,因此在本節(jié)實(shí)驗(yàn)部分只對(duì)單磁盤架構(gòu)下的HHC進(jìn)行性能測(cè)試.
3.1實(shí)驗(yàn)環(huán)境及測(cè)試方法
測(cè)試平臺(tái)主要由2部分構(gòu)成,即存儲(chǔ)客戶端(host)和存儲(chǔ)服務(wù)端(server),通過1 GB以太網(wǎng)連接.Host配備2個(gè)2.4 GHz的Intel Xeon E5620 CPU,1塊120 GB的SATA接口SSD作為緩存,2塊1 TB SATA2接口的HDD,其中1塊安裝CentOS release 5.4系統(tǒng),另外1塊HDD與SSD一起構(gòu)成混合緩存.存儲(chǔ)客戶端使用3.12.9內(nèi)核版本.為了減少Host端操作系統(tǒng)的頁高速緩存帶來的影響,我們將其內(nèi)存設(shè)置為512 MB或1 GB.存儲(chǔ)服務(wù)端配備2個(gè)2.13 GHz的Inter Xeon E5606 CPU,16 GB內(nèi)存.5塊1TB的HDD使用Linux的MD模塊構(gòu)成軟RAID5通過iSCSI為存儲(chǔ)客戶端提供存儲(chǔ)服務(wù).為了體現(xiàn)陣列的真實(shí)性能,存儲(chǔ)服務(wù)端禁用緩存.
存儲(chǔ)客戶端使用iSCSI發(fā)起程序?qū)arget端連接到本地,并格式化成Ext4文件系統(tǒng),使用ordered日志模式.為了測(cè)試在不同負(fù)載下的性能,我們使用Filebench生成不同類型的負(fù)載.主要使用3種測(cè)試負(fù)載:websearch, fileserver, varmail,分別代表讀負(fù)載密集型、寫負(fù)載密集型以及同步操作密集型(fsync操作).websearch代表Web服務(wù)器的負(fù)載,讀寫比例設(shè)置為10∶1,文件平均大小為16 KB,文件數(shù)為100 000工作集大約為1.6 GB.本實(shí)驗(yàn)中該負(fù)載使用40個(gè)線程并發(fā)進(jìn)行I/O操作,包括隨機(jī)讀取整個(gè)文件,追加寫入日志文件,追加塊平均大小也為16 KB.fileserver模擬多用戶的文件服務(wù)器負(fù)載,每個(gè)用戶對(duì)應(yīng)到一個(gè)測(cè)試線程,獨(dú)立地訪問屬于該用戶的目錄,主要操作包括創(chuàng)建、刪除、讀、寫等.其讀寫比例為1∶2,本實(shí)驗(yàn)采用的負(fù)載大小約為2.2 GB.varmail模擬電子郵件服務(wù)器的負(fù)載,與Postmark類似,但Filebench使用多線程的方式進(jìn)行一系列操作,主要包括讀整個(gè)文件、追加寫以及頻繁的fsync操作,本實(shí)驗(yàn)中其工作集大小設(shè)置約為1.6 GB.以下每次測(cè)試時(shí)間為15 min,每項(xiàng)測(cè)試都執(zhí)行3次取平均,測(cè)試指標(biāo)為吞吐率(IOPS).如果參數(shù)有所改變,會(huì)在相應(yīng)地方給出說明.
3.2不同負(fù)載下的性能及分析
我們?cè)赟SD上劃分4 GB空間作為緩存,圖5顯示使用3種負(fù)載以及使用不同緩存策略的性能.其中Raw代表不使用緩存,WB表示寫回法,WT表示寫直達(dá)法,這3種緩存策略作為基準(zhǔn).WB-HHC是本文提出的緩存策略,WB-Flush作為最近提出的一種提供可靠性保證的緩存策略,是我們主要的對(duì)比對(duì)象.
Fig. 5 IOPS under different caching policies圖5 不同緩存策略的IOPS
從圖5可以看出,由于SSD的速度優(yōu)勢(shì),使用SSD緩存確實(shí)能帶來明顯的性能提升.對(duì)于websearch負(fù)載來說,由于其主要以讀請(qǐng)求為主,因此5種緩存策略性能幾乎沒有差異.當(dāng)使用fileserver負(fù)載時(shí),WB-HHC的性能比WT和WB-Flush分別提高了388.2%和63.1%.這是由于fileserver負(fù)載中寫操作比較多,使得緩存中累積大量的臟數(shù)據(jù),EXT4周期性的commit會(huì)觸發(fā)寫屏障操作,從而使得WB-Flush從SSD中讀出所有臟數(shù)據(jù)寫回RAID5陣列.這部分開銷使得其性能低于WB.WB-HHC異步地將臟數(shù)據(jù)順序?qū)懭氡镜卮疟P日志,大大緩解了WB-Flush中的寫屏障開銷,使得其性能基本上可以達(dá)到WB的水平.在varmail負(fù)載中,可以看到WB-Flush的性能甚至低于Raw和WT,分析發(fā)現(xiàn)這主要是因?yàn)関armail使用大量的線程并發(fā)操作,且使用了大量的fsync操作,這就使得寫屏障操作非常密集.而對(duì)于寫Raw和WT來說,臟數(shù)據(jù)會(huì)直接從內(nèi)存寫入到RAID5,而WB-Flush則需要先從SSD讀出,然后寫入后端陣列,由于頻繁的fsync使得這部分開銷無法被忽略.盡管WB-HHC也受到一些影響,但是相對(duì)于WT和WB-Flush分別提高了5.1倍和10.2倍.
3.3緩存大小對(duì)性能的影響
緩存策略與緩存大小有關(guān),本節(jié)使用fileserver負(fù)載來深入理解不同緩存大小對(duì)性能帶來的影響.考慮到實(shí)際環(huán)境下的DRAM/SSD容量比,本實(shí)驗(yàn)中客戶端內(nèi)存大小設(shè)置為512 MB,緩存大小為1~3 GB,負(fù)載為2.2 GB.從圖6的測(cè)試結(jié)果可以看出,隨著緩存的增加,IOPS逐漸增高,當(dāng)緩存達(dá)到2 GB以上時(shí)性能趨于飽和;隨著緩存的增加,WB-Flush相對(duì)WT有著越來越明顯的性能優(yōu)勢(shì),因?yàn)檠舆t的刷回操作減少了對(duì)前臺(tái)寫操作的影響;然而WB-HHC在不同緩存大小下的性能仍然能夠接近WB策略,相對(duì)于WT性能提高了75.4%~355.6%,比WB-Flush提高了48.2%~173.4%.
Fig. 6 Sensitivity to different cache sizes圖6 不同緩存大小對(duì)性能的影響
3.4負(fù)載強(qiáng)度對(duì)性能的影響
本節(jié)討論不同的負(fù)載強(qiáng)度對(duì)緩存策略帶來的影響.為此我們使用同步密集型的varmail負(fù)載,通過調(diào)整負(fù)載的并發(fā)線程數(shù)來模擬不同強(qiáng)度的郵件訪問場(chǎng)景.考慮到一般郵件服務(wù)器的工作集不會(huì)太大,實(shí)驗(yàn)中使用的負(fù)載大小約為1.6 GB,緩存大小設(shè)置為4 GB,客戶端內(nèi)存設(shè)置為512 MB.圖7顯示了負(fù)載線程數(shù)從2~32時(shí)不同緩存策略的測(cè)試結(jié)果.
Fig. 7 Sensitivity to different number of threads圖7 不同線程數(shù)對(duì)性能的影響
從圖7中可以看出,隨著線程數(shù)的增加各種緩存策略的性能也有所增加,然而WB-Flush的增加幅度小于其他緩存策略,這使得在負(fù)載較重時(shí)(線程數(shù)不低于8),其性能甚至低于WT和Raw.其原因是大量的fsync操作導(dǎo)致密集的寫屏障,WB-Flush需要頻繁地從SSD讀取臟數(shù)據(jù)寫入RAID5,增加了fsync操作的延時(shí),這種開銷隨著負(fù)載強(qiáng)度的增加會(huì)愈加明顯.對(duì)于WB-HHC來講,頻繁的寫屏障操作使得臟數(shù)據(jù)在內(nèi)存中的聚集時(shí)間變短,降低了日志盤批量寫回的優(yōu)勢(shì),因此隨著線程數(shù)的增加,WB-HHC與WB的差距會(huì)愈發(fā)明顯.但是相比于WT和WB-Flush,WB-HHC的性能分別提高了3.7~8.2倍和5.5~9.1倍.
3.5HHC內(nèi)存開銷分析
HHC的內(nèi)存開銷主要來自于2個(gè)方面:固態(tài)盤緩存在內(nèi)存中的元數(shù)據(jù)信息;用于日志管理的額外的內(nèi)存開銷.
1) 所有緩存策略所共有的、對(duì)于4 KB緩存塊大小而言,每個(gè)緩存塊在內(nèi)存中的元數(shù)據(jù)信息主要包括其在固態(tài)盤及磁盤陣列中的邏輯塊地址、緩存塊狀態(tài)以及用于索引結(jié)構(gòu)的指針等,一共約20 B,因此其內(nèi)存開銷與固態(tài)盤容量的比例約為0.49%.
2) 內(nèi)存開銷主要來源于日志塊索引(如圖2所示),由于HHC只在內(nèi)存中維護(hù)有效日志塊信息,其數(shù)量等同于固態(tài)盤中臟緩存塊的個(gè)數(shù)(通常被限制在一定閾值之內(nèi),如不超過緩存塊總量的30%),而每個(gè)Log Entry的大小約為10 B,因此其內(nèi)存開銷約為固態(tài)盤緩存容量的0.07%.從以上分析可以看出,HHC的總內(nèi)存開銷約為固態(tài)盤緩存總?cè)萘康?.56%,盡管相比其他算法略有增加,但是在現(xiàn)代存儲(chǔ)系統(tǒng)中仍然是可以接受的.
現(xiàn)代數(shù)據(jù)中心普遍使用固態(tài)盤作為緩存加速對(duì)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)的訪問,寫直達(dá)法可以嚴(yán)格保證數(shù)據(jù)的一致性,但對(duì)于寫操作較多的負(fù)載,其性能遠(yuǎn)低于寫回法.作為改進(jìn)寫回法的Write-back Flush策略將存儲(chǔ)系統(tǒng)的寫屏障語義引入SSD緩存層,來保證數(shù)據(jù)的一致性和持久性,然而實(shí)驗(yàn)發(fā)現(xiàn)對(duì)于同步操作密集型的負(fù)載,如郵件服務(wù)器,其性能甚至低于寫直達(dá)法.本文使用SSD和廉價(jià)的HDD構(gòu)成混合客戶端緩存,避免了SRC帶來的高成本,同時(shí)降低了寫屏障操作的時(shí)延,實(shí)驗(yàn)結(jié)果證實(shí)了HHC的優(yōu)越性.
[1]Chen P, Lee E, Gibson G, et al. RAID: High-performance, reliable secondary storage[J]. ACM Computing Surveys, 1994, 26(2): 145-185
[2]Zhang Guangyan, Zheng Weimin, Li Keqin. Rethinking RAID-5 data layout for better scalability[J]. IEEE Trans on Computers, 2012, 61(11): 2816-2828
[3]Hensbergen V, Zhao Ming. Dynamic policy disk caching for storage networking[R]. Austin, TX: IBM, 2006
[4]Byan S, Lentini J, Madan A, et al. Mercury: Host-side flash caching for the data center[C]Proc of IEEE MSST’12. Piscataway, NJ: IEEE, 2012: 37-48
[5]Saab P. Releasing flashcache: Facebook blog[OL]. 2010 [2016-07-09]. https:www.facebook.comnotesmysql-at-facebookreleasing-flashcache388112370932
[6]Leung A, Pasupathy S, Goodson G, et al. Measurement and analysis of large-scale network file system workloads[C]Proc of USENIX ATC’08. Berkeley, CA: USENIX Association, 2008: 213-226
[7]Koller R, Rangaswami R. IO deduplication: Utilizing content similarity to improve IO performance[C]Proc of USENIX FAST’10. Berkeley, CA: USENIX Association, 2010: 211-224
[8]Roselli D, Anderson T. A comparison of file system workloads[C]Proc of USENIX ATC’00. Berkeley, CA: USENIX Association, 2000: 41-54
[9]Arteaga D, Zhao Ming. Client-side flash caching for cloud systems[C]Proc of the 7th ACM SIGOPS Int Systems amp; Storage Conf. New York: ACM, 2014: 7:1-7:11
[10]Oh Y, Choi J, Lee D, et al. Improving performance and lifetime of the SSD RAID-based host cache through a log-structured approach[C]Proc of the 1st Workshop on Interactions of NVMFLASH with Operating Systems and Workloads. New York: ACM, 2013: 5:1-5:8
[11]Balakrishnan M, Kadav A, Prabhakaran V, et al. Differential RAID: Rethinking RAID for SSD reliability[C]Proc of the 5th European Conf on Computer System. New York: ACM, 2010: 15-26
[12]Jeremic N, Muhl G, Busse A,et al. The pitfalls of deploying solid-state drive RAIDs[C]Proc of the 4th Annual Int Conf on Systems and Storage. New York: ACM, 2011: 14:1-14:13
[13]Koller R, Marmol L, Rangaswami R, et al. Write policies for host-side flash caches[C]Proc of the 11th USENIX FAST’13. Berkeley, CA: USENIX Association, 2013: 45-58
[14]Qin Dai, Brown D, Goel A. Reliable writeback for client-side flash caches[C]Proc of USENIX ATC’14. Berkeley, CA: USENIX Association, 2014: 451-462
[15]Fedora Documentation. Write barriers[OL]. [2016-05-21]. http:docs.fedoraproject.orgen-US-Fedora14htmlStorage_Administration_ Guidewritebarr.html
[16]Amvrosiadis G. Filebench: A model based file system workload generator[CPOL]. 2011[2015-11-11]. https:github.comfilebenchfilebench
[17]Mao Bo, Jiang Hong, Wu Suzhen, et al. HPDA: A hybrid parity-based disk array for enhanced performance and reliability[J]. ACM Trans on Storage, 2012, 8(1): 1-20
[18]Narayanan D, Donnelly A, Rowstron A. Write off-loading: Practical power management for enterprise storage[C]Proc of USENIX FAST’08, Berkeley, CA: USENIX Association, 2008: 253-267
[19]Chen F, Koufaty D A, Zhang X. Understanding intrinsic characteristics and system implications of flash memory based solid state drives[C]Proc of ACM SIGMETRICS’09. New York: ACM, 2009: 181-192
[20]Paris J, Amer A, Long D. Using storage class memories to increase the reliability of two-dimensional RAID arrays[C]Proc of the 17th Annual Meeting of the IEEEACM Int Symp on Modeling, Analysis, and Simulation of Computer and Telecommunication Systems. Piscataway, NJ: IEEE, 2009: 1-8
LiChu, born in 1989. PhD in computer architecture from Huazhong University of Science and Technology, China. His main research interests include RAID system and flash memory.
FengDan, born in 1970. PhD, professor, PhD supervisor. Senior member of CCF. Her main research interests include computer architecture, massive storage systems, and parallel file systems.
WangFang, born in 1972. PhD, professor. Member of CCF. Her main research interests include distribute file systems, parallel I/O storage systems and graph processing.
AHighPerformanceandReliableHybridHostCacheSystem
Li Chu, Feng Dan, and Wang Fang
(Wuhan National Laboratory for Optoelectronics (Huazhong University of Science and Technology), Wuhan 430074) (Key Laboratory of Information Storage System (Huazhong University of Science and Technology), Ministry of Education, Wuhan 430074)
Modern date centers widely use network storage systems as shared storage solutions. Storage server typically deploys the redundant array of independent disks (RAID) technique to provide high reliability, e.g., RAID56 can tolerate onetwo disk failures. Compared with traditional hard disk drives (HDDs), solid-state drives (SSDs) have lower access latency but higher price. As a result, client-side SSD-based caching has gained more and more popularity. Write-back policy can significantly accelerate the storage IO performance, however, it fails to ensure date consistency and durability under SSD failures. Write-though policy simplifies the consistence model, but fails to accelerate the write accesses. In this paper, we design and implement a new hybrid host cache (HHC). HHC selectively stores mirrored dirty cache blocks into HDDs in a log-structured manner, and utilizes the write barrier to guarantee the data consistency and durability. Through reliability analysis, we show that the HHC layer has much longer mean time to data loss (MTTDL) than the corresponding backend storage array. In addition, we implement a prototype of HHC and evaluate its performance in comparison with other competitors by using Filebench. The experimental results show that under various workloads, HHC achieves comparable performance compared with the write-back policy, and significantly outperforms the write-through policy.
solid-state drive (SSD); host cache; cache management; reliability; performance
2016-11-02;
2017-02-06
國(guó)家“八六三”高技術(shù)研究發(fā)展計(jì)劃基金項(xiàng)目(2015AA015301);國(guó)家自然科學(xué)基金項(xiàng)目(61472153,61402189,61502191)
This work was supported by the National High Technology Research and Development Program of China (863 Program) (2015AA015301) and the National Natural Science Foundation of China (61472153, 61402189, 61502191).
馮丹(dfeng@hust.edu.cn)
TP334