陳 博,肖 儂,劉 芳,歐 洋,何晚輝
(國(guó)防科學(xué)技術(shù)大學(xué)高性能計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,湖南 長(zhǎng)沙 410073)
隨著大數(shù)據(jù)時(shí)代的到來(lái),目前NAND Flash已經(jīng)不僅局限于嵌入式領(lǐng)域,基于NAND Flash的SSD(Solid State Disk)已經(jīng)在大型數(shù)據(jù)中心得到廣泛應(yīng)用。越來(lái)越多的公司開(kāi)始涉足SSD市場(chǎng),不僅一些老牌磁盤(pán)廠商,例如希捷、西部數(shù)據(jù),開(kāi)始生產(chǎn)SSD,華為公司也宣布其第一款PCIe SSD ES3000正式上市。然而,隨著NAND Flash單片容量的不斷增大,SSD的容量也不斷增加,源科公司的Kylin III MAX的單盤(pán)容量達(dá)到4.6 TB。
相比機(jī)械磁盤(pán),基于NAND Flash的SSD具有諸多優(yōu)勢(shì),例如低延遲、無(wú)噪聲、抗震動(dòng)等[1],但是SSD還沒(méi)有替代機(jī)械磁盤(pán),一個(gè)很大的原因是SSD的價(jià)格遠(yuǎn)高于機(jī)械磁盤(pán)。為了降低MYM/GB的價(jià)格,相繼出現(xiàn)MLC和TLC。但是,相比SLC的105的擦寫(xiě)次數(shù),MLC和TLC的擦寫(xiě)次數(shù)急劇下降,僅有104和103[2,3],并且數(shù)據(jù)的錯(cuò)誤率也會(huì)增加[4]。
為了保證數(shù)據(jù)的可靠性,傳統(tǒng)的方法是采用ECC校驗(yàn),在數(shù)據(jù)寫(xiě)入Flash的每一頁(yè)時(shí),相應(yīng)的校驗(yàn)信息寫(xiě)入頁(yè)的Spare Area。但是,基于海明碼的ECC校驗(yàn)僅能檢測(cè)兩位錯(cuò),糾正一位錯(cuò);而基于RS和BCH及LDPC的ECC校驗(yàn)?zāi)芗m正多位錯(cuò),但是硬件實(shí)現(xiàn)復(fù)雜,并且增加了數(shù)據(jù)訪問(wèn)的延遲[5]。
另外一種保證數(shù)據(jù)可靠性的方法是采用RAID技術(shù)。RAID技術(shù)可以用在SSD與SSD之間,SSD內(nèi)部的Flash芯片與芯片之間,提供不同層次的可靠性。當(dāng)前的一些PCIe SSD產(chǎn)品中已經(jīng)使用RAID技術(shù)來(lái)保證數(shù)據(jù)的可靠性。例如,Violin Memory的閃存系統(tǒng)采用了ECC和獨(dú)有的RAID技術(shù)保證數(shù)據(jù)的可靠性,在有Flash芯片出現(xiàn)故障時(shí)不會(huì)造成數(shù)據(jù)的丟失,華為的ES3000也采用了Dynamic RAID技術(shù)保證數(shù)據(jù)的可靠性。但是, Skyera公司指出,使用最為廣泛的RAID5技術(shù)在用于SSD陣列時(shí),會(huì)縮短SSD壽命。這是因?yàn)槊恳淮胃聰?shù)據(jù),都需要更新相應(yīng)的校驗(yàn)信息,使得校驗(yàn)信息更新比較頻繁,從而產(chǎn)生較多的無(wú)效頁(yè),增加SSD的擦除次數(shù),降低了整個(gè)SSD的性能且縮短了壽命。
針對(duì)這個(gè)問(wèn)題,本文提出了校驗(yàn)信息感知的SSD控制器,稱為PA-SSD(Parity-Aware SSD)控制器。傳統(tǒng)的RAID5控制器向SSD控制器發(fā)送數(shù)據(jù)請(qǐng)求和校驗(yàn)請(qǐng)求時(shí),在SSD控制器看來(lái)都是數(shù)據(jù)請(qǐng)求,從而SSD控制器不能針對(duì)校驗(yàn)信息做專門(mén)的處理。本文稍微修改RAID5控制器,使其在向SSD控制器發(fā)送校驗(yàn)請(qǐng)求時(shí),同時(shí)發(fā)送一個(gè)校驗(yàn)標(biāo)志,表示該請(qǐng)求是校驗(yàn)請(qǐng)求。在SSD控制器層設(shè)置一個(gè)校驗(yàn)緩存Pcache,更新校驗(yàn)信息時(shí),SSD控制器接收到校驗(yàn)標(biāo)志后,將校驗(yàn)信息緩存在Pcache中;讀取校驗(yàn)信息時(shí),先在Pcache中查找該校驗(yàn),如果命中,則將校驗(yàn)信息返回給RAID5控制器;否則,向SSD發(fā)送讀請(qǐng)求,這樣就減少了對(duì)SSD的讀寫(xiě)操作。在將Pcache中的校驗(yàn)信息寫(xiě)回SSD時(shí),寫(xiě)入專門(mén)的一片空間。與數(shù)據(jù)相比,校驗(yàn)信息相當(dāng)于熱數(shù)據(jù),將熱點(diǎn)數(shù)據(jù)單獨(dú)存放可以減少整體的擦除次數(shù),從而提高SSD的性能和壽命。實(shí)驗(yàn)表明,PA-SSD控制器能夠?qū)SD的壽命提升28%。
Im S等人[5]提出了一種Delayed Partial Parity Update的RAID策略來(lái)構(gòu)造高性能高可靠性的SSD,在每次更新數(shù)據(jù)時(shí),計(jì)算當(dāng)前新數(shù)據(jù)的校驗(yàn)信息,并將校驗(yàn)信息緩存在RAID控制器的Cache中,在下次更新數(shù)據(jù)時(shí),利用Cache中存在的校驗(yàn)信息再一次更新校驗(yàn)信息,這樣多次更新數(shù)據(jù)只需要更新一次校驗(yàn)信息,但在Cache中保存的是部分校驗(yàn)信息。這種延遲更新校驗(yàn)信息的方法減少了校驗(yàn)信息更新的開(kāi)銷,但是這種策略是在RAID控制器層工作,不能利用SSD控制器針對(duì)校驗(yàn)信息的特點(diǎn)做優(yōu)化。
Lee Y等人[6]提出FRA(Flash-aware Redundancy Array)方法,將寫(xiě)數(shù)據(jù)和寫(xiě)校驗(yàn)兩部分分開(kāi),當(dāng)寫(xiě)請(qǐng)求到達(dá)時(shí),先將要寫(xiě)入的數(shù)據(jù)寫(xiě)入SSD,在系統(tǒng)空閑時(shí)再將校驗(yàn)寫(xiě)入SSD。這種方法將校驗(yàn)信息和數(shù)據(jù)信息一起存放,頻繁地更新校驗(yàn)信息使得塊中無(wú)效頁(yè)的數(shù)量增加很快,進(jìn)而觸發(fā)垃圾回收,影響系統(tǒng)的性能。
杜溢墨等人[7]提出MuLe-RAID(Multiple Level RAID)技術(shù),將RAID控制器分成兩層,即上層的RAID5控制器和下層的RAID0控制器,這種方法減輕了上層RAID5控制器的負(fù)載,提高了整個(gè)系統(tǒng)的性能,但是沒(méi)有解決校驗(yàn)信息的更新對(duì)系統(tǒng)的影響。
傳統(tǒng)的SSD控制器不能感知校驗(yàn)信息,因此不能針對(duì)校驗(yàn)信息的特點(diǎn)做出相應(yīng)的優(yōu)化,只能在其訪問(wèn)頻繁時(shí),當(dāng)做普通的熱點(diǎn)數(shù)據(jù)處理。當(dāng)前針對(duì)基于SSD的RAID系統(tǒng)的校驗(yàn)信息的優(yōu)化都是在RAID控制器層或者文件系統(tǒng)層,沒(méi)有在SSD控制器層次做優(yōu)化的。而在RAID控制器層對(duì)校驗(yàn)信息處理時(shí),RAID控制器不知道底層SSD的數(shù)據(jù)布局。針對(duì)這一問(wèn)題,我們提出PA-SSD控制器設(shè)計(jì)。
PA-SSD控制器的體系結(jié)構(gòu)圖如圖1所示。與傳統(tǒng)的RAID5控制器和SSD控制器不同的是,RAID5控制器將校驗(yàn)信息請(qǐng)求發(fā)送給SSD控制器的同時(shí),發(fā)送校驗(yàn)標(biāo)志信號(hào),通知SSD控制器該請(qǐng)求是校驗(yàn)信息。此外,在SSD控制器內(nèi)部增加一個(gè)緩存Pcache,將更新的校驗(yàn)信息暫存在Pcache中,以減少對(duì)SSD的寫(xiě)次數(shù)。同時(shí),在SSD內(nèi)將存儲(chǔ)區(qū)間分為數(shù)據(jù)區(qū)和校驗(yàn)區(qū),分別存放數(shù)據(jù)和校驗(yàn)。
Figure 1 PA-SSD controller architecture圖1 PA-SSD控制器體系結(jié)構(gòu)圖
下面是PA-SSD控制器的訪問(wèn)流程偽代碼:
//lpn:請(qǐng)求的邏輯地址
//ppn:lpn對(duì)應(yīng)的物理地址
/request:RAID5控制器發(fā)出的請(qǐng)求
//parity_flag:RAID5控制器發(fā)出的校驗(yàn)標(biāo)志
RAID5控制器發(fā)送request和parity_flay
if(request==parity_request)
if(request==read)
parity=find(lpn,pache);
if(parity不為空)
將parity返回給RAID5控制器
else
ppn=map_table[lpn];
ssd_read(ppn);
endif
else
write_pcache(parity);
endif
else
if(request==read)
ppn=map_table[lpn];
ssd_read(ppn);
else
ppn=alloc(lpn);
write_ssd(ppn,data);
endif
endif
RAID5控制器發(fā)出請(qǐng)求和校驗(yàn)標(biāo)志,PA-SSD控制器根據(jù)校驗(yàn)標(biāo)志判斷請(qǐng)求類型。如果是數(shù)據(jù)請(qǐng)求,則根據(jù)地址映射表訪問(wèn)SSD,如果是校驗(yàn)請(qǐng)求,則判斷讀寫(xiě)類型,如果是寫(xiě)請(qǐng)求,則寫(xiě)入Pcache中,如果是讀請(qǐng)求,則根據(jù)邏輯地址在Pcache中查找校驗(yàn)信息是否存在,如果存在,則將校驗(yàn)信息返回RAID5控制器,如果不存在,則根據(jù)地址映射表訪問(wèn)SSD。
根據(jù)程序的局部性原理,一個(gè)被訪問(wèn)的地址在將來(lái)一段時(shí)間內(nèi)可能被再次訪問(wèn),在一段時(shí)間內(nèi),程序的訪問(wèn)空間集中在某一片區(qū)域。因此,在更新某一個(gè)地址的數(shù)據(jù)后,在將來(lái)一段時(shí)間內(nèi),該地址以及它周圍的地址的數(shù)據(jù)可能被再次更新,如此,校驗(yàn)信息的更新將會(huì)很頻繁。如果不加處理,每次更新校驗(yàn)信息都對(duì)SSD執(zhí)行寫(xiě)操作,同時(shí)將舊的校驗(yàn)信息置為無(wú)效,則SSD中會(huì)有許多無(wú)效頁(yè),進(jìn)而觸發(fā)垃圾回收操作。為了減少校驗(yàn)信息的更新對(duì)SSD的寫(xiě)操作,在SSD內(nèi)部設(shè)置Pcache存放更新的校驗(yàn)信息。更新校驗(yàn)信息時(shí),如果在Pcache中存在該校驗(yàn)信息,則直接覆蓋舊的校驗(yàn)信息,這樣就減少了校驗(yàn)信息的更新對(duì)SSD的寫(xiě)次數(shù)。
由于Pcache中保存的是最近一段時(shí)間內(nèi)使用的校驗(yàn)信息,根據(jù)程序的局部性原理,最久未被使用的校驗(yàn)信息可能在將來(lái)也不會(huì)被使用,因此Pcache的替換策略采用LRU方式。
校驗(yàn)信息需要被頻繁地更新,與數(shù)據(jù)相比,校驗(yàn)信息相當(dāng)于熱點(diǎn)數(shù)據(jù)。如果將校驗(yàn)信息與數(shù)據(jù)共同存放,則頻繁更新校驗(yàn)數(shù)據(jù)會(huì)使得數(shù)據(jù)塊中無(wú)效頁(yè)的數(shù)量快速增加,在垃圾回收時(shí)需要擦除較多的數(shù)據(jù)塊,并且移動(dòng)大量的有效數(shù)據(jù)頁(yè),增加了垃圾回收的負(fù)擔(dān)。將數(shù)據(jù)和校驗(yàn)信息分開(kāi)存放,則校驗(yàn)信息的頻繁更新不會(huì)影響到數(shù)據(jù)塊,數(shù)據(jù)塊的垃圾回收次數(shù)減少,校驗(yàn)塊的垃圾回收移動(dòng)的有效頁(yè)數(shù)量減少,減輕了垃圾回收的負(fù)擔(dān)。
PA-SSD控制器將SSD的地址空間分為數(shù)據(jù)區(qū)和校驗(yàn)區(qū),由圖1中的地址分配單元負(fù)責(zé)數(shù)據(jù)和校驗(yàn)的地址分配。寫(xiě)數(shù)據(jù)請(qǐng)求到達(dá)時(shí),地址分配單元在數(shù)據(jù)區(qū)分配一個(gè)空閑頁(yè)給該請(qǐng)求,同時(shí)將地址映射表中與該邏輯地址對(duì)應(yīng)的物理地址賦值。寫(xiě)校驗(yàn)信息時(shí),控制器不給校驗(yàn)信息分配物理地址,而是將校驗(yàn)信息先寫(xiě)入Pcache中。當(dāng)Pcache需要替換時(shí),地址分配單元給替換出的校驗(yàn)信息在校驗(yàn)區(qū)分配一個(gè)空閑頁(yè)。
校驗(yàn)區(qū)存放的校驗(yàn)信息雖然由于Pcache的存在減少了校驗(yàn)信息寫(xiě)入SSD的次數(shù),但是由于校驗(yàn)信息的更新比數(shù)據(jù)的更新更加頻繁,所以與數(shù)據(jù)區(qū)的塊相比,校驗(yàn)區(qū)中塊的擦除次數(shù)更多,因此校驗(yàn)區(qū)的塊更加容易磨損。針對(duì)這種情況,我們?cè)诳刂破髦芯S護(hù)兩個(gè)塊地址鏈表,一個(gè)是校驗(yàn)區(qū)塊地址鏈表,另一個(gè)是數(shù)據(jù)區(qū)塊地址鏈表。對(duì)每個(gè)塊記錄擦除次數(shù),當(dāng)校驗(yàn)區(qū)的塊擦除次數(shù)超過(guò)一定閾值時(shí),就與數(shù)據(jù)區(qū)中干凈的擦除次數(shù)最少的塊做交換,以此來(lái)延長(zhǎng)整個(gè)SSD的壽命。
Pcache使用RAM實(shí)現(xiàn),為了防止掉電時(shí)Pcache中的校驗(yàn)信息丟失,造成數(shù)據(jù)的不可靠,在SSD陣列上增加一塊電池或者電容,在檢測(cè)到掉電時(shí),由電池或者電容向Pcache供電,將其中的校驗(yàn)信息寫(xiě)入SSD中。
為了評(píng)估PA-SSD控制器的性能,我們實(shí)現(xiàn)了支持校驗(yàn)標(biāo)志傳送的RAID5模擬器和包含PA-SSD控制器的SSD模擬器,分別用來(lái)模擬RAID5的功能和對(duì)SSD的操作,記錄SSD運(yùn)行的結(jié)果,并與傳統(tǒng)的RAID5模擬器和SSD模擬器的運(yùn)行結(jié)果相比較。
我們使用四個(gè)真實(shí)的磁盤(pán)IO trace作為測(cè)試用例,分別是prxy、usr、Exchange和Financial,這四個(gè)trace都是服務(wù)器trace,prxy和usr是Microsoft Research Cambridge在服務(wù)器上搜集的數(shù)據(jù)[8],是典型的企業(yè)數(shù)據(jù)中心的數(shù)據(jù);Exchange是從Microsoft Exchange Server上搜集的數(shù)據(jù)[8],包含61 000 000條請(qǐng)求,其中43%的請(qǐng)求是讀請(qǐng)求;Financial是一個(gè)OLTP應(yīng)用程序trace[9]。
我們比較了普通SSD控制器(regular SSD)和PA-SSD控制器的性能和壽命。普通SSD控制器沒(méi)有從RAID5控制器接收校驗(yàn)信息標(biāo)志,沒(méi)有使用Cache緩存校驗(yàn)信息,也沒(méi)有在SSD內(nèi)部將校驗(yàn)信息集中存放。Parity-aware SSD控制器使用不同大小的Cache測(cè)試其容量對(duì)性能的影響,Cache容量分別為SSD總?cè)萘康?.5/1000、1/1000、2/1000和4/1000。
圖2表示regular SSD和Cache為不同大小的PA-SSD執(zhí)行各個(gè)trace的擦除次數(shù),以regular SSD的擦除次數(shù)為1。從圖2中可以看出,PA-SSD相比regular SSD減少了擦除次數(shù),在不同Cache大小的情況下,擦除次數(shù)平均減少23%~28%,最高可減少40%。在PA-SSD中,Cache越大,校驗(yàn)信息在Cache中命中的幾率越高,從而寫(xiě)回SSD的校驗(yàn)信息越少,因此SSD的擦除次數(shù)越少。減少了SSD的擦除次數(shù),SSD的壽命就得到了提高。
Figure 2 Comparision of erase count(normalized to regular SSD)圖2 擦除次數(shù)比較(歸一化到regular SSD)
圖3表示regular SSD和Cache為不同大小的PA-SSD的垃圾回收時(shí)移動(dòng)的頁(yè)數(shù),以regular SSD的頁(yè)移動(dòng)次數(shù)為1。從圖3中可以看出,四個(gè)trace在PA-SSD下的頁(yè)移動(dòng)次數(shù)相比regular SSD都有所減少,平均減少19%~27%,最高可減少37%。由圖2可知,在PA-SSD控制器中,擦除次數(shù)減少,結(jié)合圖2所示結(jié)果, PA-SSD控制器相比regular SSD控制器,在性能上有所提升。
Figure 3 Comparision of page move count(normalized to regular SSD)圖3 頁(yè)移動(dòng)次數(shù)比較(歸一化到regular SSD)
綜合圖2和圖3的測(cè)試結(jié)果, PA-SSD控制器在減少擦除次數(shù)和降低垃圾回收時(shí)的頁(yè)移動(dòng)次數(shù)方面都有很好的表現(xiàn),在Cache容量為SSD總?cè)萘康?/1000的情況下,擦除次數(shù)平均減少28%,頁(yè)移動(dòng)次數(shù)平均降低27%。因此,相比普通的SSD控制器,采用PA-SSD控制器的RAID5系統(tǒng),延長(zhǎng)了SSD的使用壽命,提升了整體的性能。
本文針對(duì)基于SSD的RAID5系統(tǒng)中校驗(yàn)信息更新頻繁的特點(diǎn),提出了PA-SSD控制器。RAID5控制器向SSD控制器發(fā)送請(qǐng)求的同時(shí)發(fā)送校驗(yàn)標(biāo)志,使得SSD控制器可以識(shí)別校驗(yàn)信息。在SSD控制器內(nèi)部實(shí)現(xiàn)一個(gè)緩存Pcache,用于緩存更新的校驗(yàn)信息,并且在將校驗(yàn)信息寫(xiě)入SSD時(shí),與數(shù)據(jù)分開(kāi)存放。這種方法有效地減少了校驗(yàn)信息對(duì)SSD的寫(xiě)操作,減少了SSD的擦除次數(shù),提高了系統(tǒng)的性能,且其開(kāi)銷僅增加了一個(gè)小容量Cache。
[1] Gupta A, Kim Y, Urgaonkar B. DFTL:A flash translation layer employing demand-based selective caching of page-level address mappings[C]∥Proc of ASPLOS, 2009:229-240.
[2] You Byoung-sung,Park Jin-su,Lee Sang-don,et al. A high performance co-design of 26 nm 64 Gb MLC NAND flash memory using the dedicated NAND flash controller[J]. Journal of Semiconductor Technology and Science, 2011, 11(2):121-129.
[3] Goldman M, Pangal K, Naso G, et al. 25nm 64Gb 130mm23bpc NAND flash memory[C]∥Proc of the 3rd IEEE International Memory Workshop, 2011:1-4.
[4] Grupp L M, Davis J D, Swanson S. The bleak future of NAND flash memory[C]∥Proc of FAST’12,2012:2.
[5] Im S, Shin D. Flash-aware RAID techniques for dependable and high-performance flash memory SSD[J]. IEEE Transactions on Computers, 2011, 60(1):80-92.
[6] Lee Y, Jung S, Song Y Ho. FRA:A flash-aware redundancy array of flash storage devices[C]∥Proc of CODES+ISSS’09, 2009:163-172.
[7] Du Yi-mo, Xiao Nong, Liu Fang, et al. MuLe-RAID:Constructing large scale and high-performance SSD with multiple level RAID architecture[J]. Journal of Computer Research and Development, 2012,49(z1):111-117.(in Chinese)
[8] Narayanan D,Thereska E,Donnelly A,et al.Migrating server storage to SSDs:Analysis of tradeoffs[C]∥Proc of EuroSys’09, 2009:145-158.
[9] Laboratory for Advanced System Software. UMass Trace Repository[EB/OL].[2009-10-16].http://www.traces.cs.umass.edu/.
附中文參考文獻(xiàn):
[7] 杜溢墨,肖儂,劉芳,等. MuLe-RAID:面向大容量高性能SSD的層次化RAID[J].計(jì)算機(jī)研究與發(fā)展,2012,49(z1):111-117.