一種NVMe SSD友好的數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)
閃存介質(zhì)的大規(guī)模使用給傳統(tǒng)存儲(chǔ)系統(tǒng)的設(shè)計(jì)帶來(lái)了強(qiáng)烈的沖擊,傳統(tǒng)存儲(chǔ)系統(tǒng)的很多設(shè)計(jì)理念不再適用于閃存存儲(chǔ)系統(tǒng)。傳統(tǒng)存儲(chǔ)在設(shè)計(jì)過(guò)程中緊緊圍繞磁盤(pán)抖動(dòng)問(wèn)題,所以在數(shù)據(jù)布局方面會(huì)適應(yīng)磁盤(pán)的順序讀寫(xiě)特征。在設(shè)計(jì)過(guò)程中會(huì)大量采用內(nèi)存作為磁盤(pán)緩存,利用數(shù)據(jù)局部性特征過(guò)濾掉大量的磁盤(pán)操作,并且將小寫(xiě)聚合成大寫(xiě);在IO調(diào)度器方面,通過(guò)LBA的調(diào)度將地址臨近的IO進(jìn)行聚合,從而可以優(yōu)化IO Pattern,使得磁盤(pán)的讀寫(xiě)操作具有更強(qiáng)的順序性;在磁盤(pán)內(nèi)部,通過(guò)NCQ方式減少磁頭的抖動(dòng),根據(jù)磁頭當(dāng)前所在位置對(duì)輸入IO進(jìn)行重新排序與調(diào)度,從而達(dá)到減少磁盤(pán)抖動(dòng)的目的,提升磁盤(pán)訪問(wèn)性能。但是在SSD這種介質(zhì)上,磁盤(pán)所存在的IO特性已經(jīng)蕩然無(wú)存,傳統(tǒng)對(duì)磁盤(pán)所做的大量?jī)?yōu)化并不能給SSD帶來(lái)價(jià)值,在有些情況下反而會(huì)影響性能。在基本存儲(chǔ)介質(zhì)、存儲(chǔ)原理發(fā)生變革的情況下,存儲(chǔ)系統(tǒng)軟件的設(shè)計(jì)也需要做出調(diào)整,閃存系統(tǒng)設(shè)計(jì)一方面需要充分利用SSD帶來(lái)的價(jià)值,另一方面需要規(guī)避SSD所存在的問(wèn)題??偟膩?lái)說(shuō),如下圖所示,存儲(chǔ)系統(tǒng)設(shè)計(jì)需要緊緊圍繞應(yīng)用與介質(zhì)特性。磁盤(pán)和SSD相比存在一些共同的特性,但是各自又存在自己獨(dú)特的特性。為了更好的發(fā)揮SSD特性,滿足應(yīng)用需求,需要設(shè)計(jì)面向SSD的存儲(chǔ)軟件系統(tǒng)。
面向SSD設(shè)計(jì)的存儲(chǔ)系統(tǒng)軟件,一方面需要發(fā)揮SSD的特性,另一方面需要規(guī)避SSD的問(wèn)題。NVMe SSD具有的特性可以歸納如下:
1, 具有極高的順序?qū)懶阅埽话愕碾S機(jī)寫(xiě)性能。SSD內(nèi)部采用日志型的寫(xiě)入方式,新寫(xiě)入的數(shù)據(jù)都會(huì)被寫(xiě)入到新的NAND單元,并且建立LBA與PBA之間的映射關(guān)系。正因?yàn)槿绱?,SSD內(nèi)部存在垃圾回收機(jī)制,對(duì)無(wú)效LBA映射單元進(jìn)行回收。垃圾回收會(huì)對(duì)SSD性能產(chǎn)生重大影響,通常所說(shuō)的SSD穩(wěn)態(tài)性能,就是在SSD內(nèi)部垃圾回收單元正常運(yùn)行情況下的測(cè)試結(jié)果。對(duì)于大塊順序?qū)憗?lái)說(shuō),每次寫(xiě)入的LBA都是連續(xù)的,因此可以大大簡(jiǎn)化SSD內(nèi)部的垃圾回收運(yùn)行機(jī)制,減少垃圾回收過(guò)程中的數(shù)據(jù)搬移操作,從而提升SSD的整體性能。對(duì)于隨機(jī)寫(xiě)操作,LBA地址與PBA進(jìn)行雜亂映射,垃圾回收過(guò)程中存在大量的數(shù)據(jù)搬移操作,一方面影響SSD的寫(xiě)放大;另一方面會(huì)造成SSD性能下降。因此,對(duì)于NVMe SSD來(lái)說(shuō),順序?qū)懶阅芤哂陔S機(jī)寫(xiě)性能。為了***程度的發(fā)揮SSD性能,對(duì)SSD盡可能采用順序?qū)懭氲姆绞?,并且采用與SSD內(nèi)部Data Frame對(duì)齊的大數(shù)據(jù)塊方式,這是對(duì)SSD最為友好的IO模式。
2, 具有極高的隨機(jī)讀性能。SSD內(nèi)部采用NANDFlash存儲(chǔ)介質(zhì),對(duì)于這種介質(zhì)不存在類似磁盤(pán)的隨機(jī)讀問(wèn)題。對(duì)于讀請(qǐng)求,在SSD內(nèi)部的固件首先將LBA轉(zhuǎn)換成PBA,然后從NAND介質(zhì)上讀取數(shù)據(jù)。
通過(guò)SSD的讀寫(xiě)特性分析,我們?cè)O(shè)計(jì)了以RISL架構(gòu)為核心的存儲(chǔ)系統(tǒng)。RISL是Random Input Stream Layout的縮寫(xiě),該架構(gòu)***的特性是充分利用NVMeSSD的讀寫(xiě)特性,將業(yè)務(wù)的隨機(jī)IO寫(xiě)請(qǐng)求轉(zhuǎn)換成順序數(shù)據(jù)流寫(xiě)入SSD。在RISL層將寫(xiě)請(qǐng)求進(jìn)行聚合,轉(zhuǎn)換成順序數(shù)據(jù)流之后再寫(xiě)入存儲(chǔ)層,對(duì)于SSD而言可以做到順序?qū)懭氲男Ч?,提升了SSD內(nèi)部固件的工作效率,從而提升系統(tǒng)整體性能。在讀請(qǐng)求處理方面,RISL內(nèi)部建立了請(qǐng)求映射表,通過(guò)請(qǐng)求映射表將用戶請(qǐng)求轉(zhuǎn)換至SSD請(qǐng)求,對(duì)于SSD而言實(shí)現(xiàn)了讀請(qǐng)求隨機(jī)訪問(wèn)的目的。RISL架構(gòu)的存儲(chǔ)系統(tǒng)框架如下圖所示:
RISL系統(tǒng)分成兩大部分,一部分是StorageService System,該部分負(fù)責(zé)寫(xiě)請(qǐng)求順序化以及讀請(qǐng)求的映射處理,并且在寫(xiě)請(qǐng)求處理過(guò)程中可以加入數(shù)據(jù)去重、壓縮等機(jī)制,更加高效的使用SSD存儲(chǔ)空間;另一部分是FlashRAID存儲(chǔ)層,對(duì)外提供存儲(chǔ)對(duì)象Container。FlashRAID提供的存儲(chǔ)對(duì)象分為兩大類,一類為Sealed Container,該類對(duì)象具備只讀特性;另一類為Active Container,具備可寫(xiě)特性。寫(xiě)數(shù)據(jù)流只會(huì)往Active Container中寫(xiě)入數(shù)據(jù),當(dāng)Active Container被寫(xiě)滿之后,該類對(duì)象會(huì)轉(zhuǎn)換成Sealed Container。為了保證在系統(tǒng)突然斷電情況下的數(shù)據(jù)一致性,設(shè)計(jì)采用了NVDIMM存儲(chǔ)介質(zhì),通過(guò)該介質(zhì)對(duì)用戶數(shù)據(jù)進(jìn)行聚合處理,將隨機(jī)的業(yè)務(wù)寫(xiě)數(shù)據(jù)轉(zhuǎn)換成順序數(shù)據(jù)流。聚合完成的順序數(shù)據(jù)流通過(guò)數(shù)據(jù)去重引擎以及數(shù)據(jù)壓縮引擎進(jìn)行數(shù)據(jù)縮減操作,提升SSD的利用率。在數(shù)據(jù)寫(xiě)過(guò)程中會(huì)產(chǎn)生大量的元數(shù)據(jù),這些元數(shù)據(jù)都具有小數(shù)據(jù)的特性,通過(guò)NVDIMM的聚合首先將元數(shù)據(jù)轉(zhuǎn)換成大數(shù)據(jù)塊,然后再寫(xiě)入持久化SSD介質(zhì),這樣可以避免元數(shù)據(jù)操作引入的小寫(xiě)問(wèn)題。
對(duì)于讀操作,邏輯處理過(guò)程比較簡(jiǎn)單,在RISL架構(gòu)中維護(hù)了一個(gè)數(shù)據(jù)映射表格,通過(guò)該表格實(shí)現(xiàn)業(yè)務(wù)請(qǐng)求與SSD請(qǐng)求之間的映射。SSD請(qǐng)求在存儲(chǔ)介質(zhì)上隨機(jī)分布,獲取并發(fā)讀取效果。RISL架構(gòu)中的數(shù)據(jù)映射表格容量與存儲(chǔ)容量相關(guān),為了提升IO性能,該映射表格通常會(huì)全部加載在內(nèi)存中。此外,該表格在寫(xiě)處理過(guò)程中會(huì)對(duì)其進(jìn)行修改,在讀操作過(guò)程中會(huì)對(duì)其進(jìn)行檢索,因此,如何保證該表格的并發(fā)訪問(wèn)是設(shè)計(jì)與實(shí)現(xiàn)的重點(diǎn)。
存儲(chǔ)系統(tǒng)的設(shè)計(jì)本質(zhì)上就是數(shù)據(jù)布局的設(shè)計(jì)。從數(shù)據(jù)布局的角度來(lái)看RISL,其可以很好的與NVMe SSD的特性進(jìn)行匹配。下圖所示是RISL架構(gòu)的數(shù)據(jù)布局圖:
其中綠點(diǎn)表示讀請(qǐng)求,紅點(diǎn)表示寫(xiě)請(qǐng)求。從圖中可以看出寫(xiě)請(qǐng)求在SSD上具有很強(qiáng)的局部性,具備順序?qū)懙奶攸c(diǎn);讀請(qǐng)求在SSD上具有很強(qiáng)的離散性。讀寫(xiě)請(qǐng)求在SSD上沒(méi)有沖突,但是在NVDIMM中具有混合訪問(wèn)特性,也就是說(shuō)熱點(diǎn)數(shù)據(jù)在NVDIMM中進(jìn)行處理,避免讀寫(xiě)在SSD中沖突,從而可以緩解讀請(qǐng)求由于寫(xiě)請(qǐng)求而引入的延遲的問(wèn)題。從圖中也可以看出RISL架構(gòu)的數(shù)據(jù)布局與磁盤(pán)存儲(chǔ)系統(tǒng)的數(shù)據(jù)布局完全不同,從而也說(shuō)明了RISL是一種面向SSD設(shè)計(jì)、SSD友好的存儲(chǔ)系統(tǒng)設(shè)計(jì)方法。
RISL架構(gòu)設(shè)計(jì)還需要考慮的一個(gè)問(wèn)題是數(shù)據(jù)回收(GarbageCollection)。由于RISL將用戶隨機(jī)寫(xiě)請(qǐng)求轉(zhuǎn)換成了順序IO流,簡(jiǎn)化了SSD內(nèi)部的數(shù)據(jù)回收操作,該問(wèn)題被轉(zhuǎn)移到了系統(tǒng)層面去解決。由于系統(tǒng)層面離業(yè)務(wù)層更近,因此可以與業(yè)務(wù)進(jìn)行配合更好的實(shí)現(xiàn)垃圾數(shù)據(jù)的回收。在面向Flash的存儲(chǔ)系統(tǒng)設(shè)計(jì)中,有一種設(shè)計(jì)思路是將底層的FTL轉(zhuǎn)移到系統(tǒng)層去實(shí)現(xiàn),該想法的一個(gè)缺陷是需要定制化SSD,將NAND Flash的接口直接暴露給系統(tǒng)層。RISL架構(gòu)可以在標(biāo)準(zhǔn)SSD上實(shí)現(xiàn),但同樣可以在系統(tǒng)層實(shí)現(xiàn)垃圾數(shù)據(jù)塊的回收,并且可以與業(yè)務(wù)配合提升閃存存儲(chǔ)系統(tǒng)的性能。這是RISL架構(gòu)的優(yōu)勢(shì)。
在RISL架構(gòu)設(shè)計(jì)的基礎(chǔ)上,我們實(shí)現(xiàn)了閃存存儲(chǔ)系統(tǒng)的原型系統(tǒng)。如下圖所示,在多塊Intel NVMe SSD盤(pán)的基礎(chǔ)上,當(dāng)寫(xiě)IOPS達(dá)到80萬(wàn)時(shí),IO的平均延遲可以控制在160us左右。達(dá)到了高IOPS、低IO延遲的設(shè)計(jì)目標(biāo)。
NVMe SSD是未來(lái)的發(fā)展趨勢(shì),隨著NVMe SSD在主存儲(chǔ)領(lǐng)域的大規(guī)模應(yīng)用,面向NVMe SSD的存儲(chǔ)系統(tǒng)設(shè)計(jì)必將是一個(gè)熱門(mén)話題。RISL架構(gòu)是一種NVMe SSD友好的存儲(chǔ)系統(tǒng)設(shè)計(jì)方法,符合了SSD的讀寫(xiě)特性,可以很好的發(fā)揮SSD的性能優(yōu)勢(shì)。




















 
 
 











 
 
 
 