文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)06-0016-04
0 引言
NAND Flash存儲(chǔ)設(shè)備與傳統(tǒng)機(jī)械磁盤相比,,具有體積小,、存儲(chǔ)密度高、隨機(jī)存儲(chǔ)和讀寫能力強(qiáng)、抗震抗摔,、功耗低等特點(diǎn)[1],。它被廣泛用于智能手機(jī)、車載智能中心,、平板電腦等智能終端中,。近年來(lái),以NAND Flash為存儲(chǔ)介質(zhì)的固態(tài)硬盤也得到越來(lái)越多的應(yīng)用,。目前Yaffs2文件系統(tǒng)(Yet Another Flash File System Two,,Yaffs2)[1]是使用最多、可移植性最好的專用文件系統(tǒng),,在安卓,、阿里云OS、Linux等嵌入式系統(tǒng)中都有使用,。在Yaffs2文件系統(tǒng)下以NAND Flash為存儲(chǔ)介質(zhì)時(shí)存在磨損均衡的缺陷,,可通過(guò)對(duì)回收塊選擇機(jī)制作改進(jìn)和引入冷熱數(shù)據(jù)分離策略來(lái)提高磨損均衡的效果。
1 Yaffs2和Nand Flash關(guān)系
這里以使用最多的Linux操作系統(tǒng)為實(shí)踐,,將Yaffs2文件系統(tǒng)移植到Linux操作系統(tǒng)中,。Linux系統(tǒng)通常可以分為3層:應(yīng)用層,、內(nèi)核層和設(shè)備層,,其中支持NAND Flash設(shè)備的Yaffs2文件系統(tǒng)屬于內(nèi)核層,如圖1所示,。
最上層用戶應(yīng)用程序通過(guò)VFS(Virtual File System)提供的統(tǒng)一接口,,將數(shù)據(jù)更新等文件操作傳遞給Yaffs2。VFS代表虛擬文件系統(tǒng),,它為上層應(yīng)用提供統(tǒng)一的接口,。有了這些接口,應(yīng)用程序只用遵循抽象后的訪問(wèn)規(guī)則,,而不必理會(huì)底層文件系統(tǒng)和物理構(gòu)成上的差異,。然后Yaffs2通過(guò)MTD(Memory Technology Device)提供的統(tǒng)一訪問(wèn)接口對(duì)NAND Flash進(jìn)行讀、寫和擦除操作,,從而完成數(shù)據(jù)的更新或者存儲(chǔ)操作,。MTD代表內(nèi)存技術(shù)設(shè)備,它為存儲(chǔ)設(shè)備提供統(tǒng)一訪問(wèn)的接口,。最終,,在NAND Flash上以怎樣的格式組織和存儲(chǔ)數(shù)據(jù)由Yaffs2文件系統(tǒng)決定。
NAND Flash由若干塊(block)組成,,每個(gè)塊又是由若干頁(yè)(page)組成,,頁(yè)中含有數(shù)據(jù)區(qū)和附加區(qū),。NAND Flash的頁(yè)根據(jù)狀態(tài)不同,可以分為有效頁(yè),、臟頁(yè),、空閑頁(yè)。有效頁(yè)中存放有效數(shù)據(jù),,臟頁(yè)中存放無(wú)效數(shù)據(jù),,空閑頁(yè)是經(jīng)過(guò)擦除后可以直接用于寫入數(shù)據(jù)的頁(yè)。NAND Flash在寫入數(shù)據(jù)前需要執(zhí)行擦除操作,,因此數(shù)據(jù)不能直接在相同的位置更新,。當(dāng)一個(gè)頁(yè)中數(shù)據(jù)需要更新時(shí),必須將該頁(yè)中有效數(shù)據(jù)拷貝到其他空閑頁(yè)上再更新,,并將原來(lái)頁(yè)上的數(shù)據(jù)置為無(wú)效,。隨著時(shí)間的推移,許多無(wú)效頁(yè)累積在存儲(chǔ)器中使得空閑頁(yè)逐漸減少,。當(dāng)存儲(chǔ)器中的空閑空間不足時(shí),啟動(dòng)垃圾回收操作,,利用回收塊選擇機(jī)制從待回收塊中選取滿足要求的塊來(lái)擦除,,從而得到足夠的空閑空間。NAND Flash中塊的擦除次數(shù)有限,,通常為10 000次~100 000次[2],。當(dāng)某個(gè)塊的擦除次數(shù)超過(guò)使用壽命時(shí),該塊將無(wú)法正常用于數(shù)據(jù)存儲(chǔ),。因此,,垃圾回收應(yīng)利用合理的回收塊選擇機(jī)制,從待回收塊中找到回收后能產(chǎn)生良好磨損均衡效果且付出較少額外代價(jià)的塊來(lái)回收,,從而獲得足夠的空閑空間用于數(shù)據(jù)更新操作,。
2 Yaffs2在磨損均衡方面的缺陷
Yaffs2中回收塊的選擇機(jī)制[3]是從待回收塊中找到有效數(shù)據(jù)最少的塊來(lái)回收?;厥者^(guò)程中,,Yaffs2能夠減少有效數(shù)據(jù)的額外讀和寫操作。當(dāng)數(shù)據(jù)更新處于均勻分布的情況下,,Yaffs2表現(xiàn)出較好的磨損均衡效果,。
但是,通常情況下數(shù)據(jù)的更新頻率不同,,有些數(shù)據(jù)經(jīng)常更新,,而有些數(shù)據(jù)很少更新。經(jīng)常更新的數(shù)據(jù)稱為熱數(shù)據(jù),,很少更新的數(shù)據(jù)稱為冷數(shù)據(jù)[1]。如果某個(gè)塊上總有熱數(shù)據(jù)不斷更新,那么該塊上有效數(shù)據(jù)會(huì)變少,,Yaffs2容易選中這樣的塊來(lái)更新,。而當(dāng)某個(gè)塊中含大量有效冷數(shù)據(jù)時(shí),冷數(shù)據(jù)少更新的特點(diǎn)使得Yaffs2難以選中這類塊來(lái)更新,。更新后的塊會(huì)用于存放新寫入的數(shù)據(jù),,而新寫入的數(shù)據(jù)通常是熱數(shù)據(jù),由此可知熱數(shù)所在塊會(huì)經(jīng)常被更新,。最終熱數(shù)據(jù)所在的塊成為擦除次數(shù)多的塊,,冷數(shù)據(jù)所在的塊成為擦除次數(shù)少的塊。因此Yaffs2的回收塊選擇機(jī)制會(huì)造成NAND Flash設(shè)備中塊的擦除次數(shù)呈兩級(jí)分化,,即塊的最大,、最小擦除次數(shù)差值不斷變大,。所以Yaffs2中不應(yīng)只考慮數(shù)據(jù)更新所產(chǎn)生的額外讀寫代價(jià),,還應(yīng)考慮塊的存在年齡對(duì)磨損均衡效果的影響,這才能解決磨損均衡中兩級(jí)分化的問(wèn)題,。
Yaffs2文件系統(tǒng)中更新某個(gè)塊時(shí),,需將該塊上的剩余有效數(shù)據(jù)拷貝到其他空閑塊上,。而剩余有效數(shù)據(jù)不能占滿整個(gè)塊,系統(tǒng)會(huì)將新寫入的數(shù)據(jù)繼續(xù)存放到該塊上,,直到它的存儲(chǔ)空間用完為止,。更新過(guò)程中保留下來(lái)的數(shù)據(jù)通常是冷數(shù)據(jù),而新寫入的數(shù)據(jù)通常是熱數(shù)據(jù),,因此Yaffs2的更新策略會(huì)造成冷數(shù)據(jù)和熱數(shù)據(jù)同時(shí)存儲(chǔ)在一個(gè)塊中,。由于熱數(shù)據(jù)的更新速度快,當(dāng)熱數(shù)據(jù)更新時(shí)會(huì)導(dǎo)致冷數(shù)據(jù)被迫更新,。但更新后剩下的數(shù)據(jù)同樣不能占滿一個(gè)整塊,,系統(tǒng)會(huì)再次將冷數(shù)據(jù)和熱數(shù)據(jù)存放到同一個(gè)塊中。隨著以上的更新方式不斷進(jìn)行,,將導(dǎo)致一系列不必要的數(shù)據(jù)讀,、寫以及塊的擦除操作。因此Yaffs2的更新策略會(huì)使冷熱數(shù)據(jù)共存的塊易被多次更新,,而冷數(shù)據(jù)占據(jù)的塊很少更新,最終使得塊擦除次數(shù)標(biāo)準(zhǔn)差過(guò)大,,導(dǎo)致磨損不均衡,。由于Yaffs2的更新策略中沒(méi)有做冷熱數(shù)分離,這使得磨損不均衡問(wèn)題難以解決,。
3 Yaffs2的改進(jìn)方法
3.1 回收塊選擇機(jī)制的改進(jìn)
對(duì)于Yaffs2回收塊選擇機(jī)制的缺陷,,可以通過(guò)加入塊的年齡(age)參數(shù)[4]解決,。增加age參數(shù)后的回收塊選擇機(jī)制遵循式(1),這可以將一些長(zhǎng)期不更新的塊選中更新,。
其中,,age指塊從分配開(kāi)始到當(dāng)前垃圾回收時(shí)刻為止的年齡,u表示單個(gè)塊中有效數(shù)據(jù)的占有比率,。新的回收塊選擇機(jī)制選取當(dāng)前時(shí)刻年齡最大且有效數(shù)據(jù)占有最少(即benefit/cost比值最大)的塊作為回收對(duì)象,。當(dāng)一個(gè)塊上存儲(chǔ)的是冷數(shù)據(jù)時(shí),一定時(shí)間后該塊沒(méi)有被更新,,那么它的age參數(shù)會(huì)變得很大,。盡管該塊上有效數(shù)據(jù)很多(即(1-u)/2u的比值較小),但age參數(shù)很大使得benefit/cost的比值足夠大,,最終會(huì)選中被冷數(shù)據(jù)占據(jù)的塊來(lái)更新,。由此可知引入age參數(shù)后,能解決Yaffs2文件系統(tǒng)下NAND Flash中最大,、最小擦除次數(shù)差值過(guò)大的磨損均衡問(wèn)題,。
3.2 增加冷熱數(shù)據(jù)分離策略
對(duì)于Yaffs2中數(shù)據(jù)更新的缺陷,可以引入冷熱數(shù)據(jù)分離策略[5]來(lái)解決,。冷熱數(shù)據(jù)分離策略能夠收集冷數(shù)據(jù),,解決同一個(gè)塊中存放不同溫度數(shù)據(jù)時(shí),由于熱數(shù)據(jù)更新而強(qiáng)制更新冷數(shù)據(jù)的問(wèn)題,。在系統(tǒng)運(yùn)行過(guò)程中檢測(cè)到塊的最大,、最小擦除次數(shù)差值過(guò)大時(shí),將收集到的冷數(shù)據(jù)用數(shù)據(jù)交換操作放置到擦除次數(shù)多的塊上,。當(dāng)冷池中塊被熱數(shù)據(jù)占據(jù)或者熱池中塊被冷數(shù)據(jù)占據(jù)時(shí),,冷熱數(shù)據(jù)分離策略也能處理這類塊反轉(zhuǎn)問(wèn)題。數(shù)據(jù)的冷熱程度對(duì)塊的擦除次數(shù)會(huì)產(chǎn)生直接影響,,因此冷熱數(shù)據(jù)分離策略通過(guò)塊擦除次數(shù)來(lái)判斷數(shù)據(jù)溫度,。改進(jìn)步驟如下:
(1)初始化:將NAND Flash中的所有塊平均分為兩個(gè)部分,一部分塊放到熱池中,,另一部分塊放到冷池中。
(2)數(shù)據(jù)交換:找出熱池中擦除次數(shù)最多(Hottesthp)的塊,,冷池中擦除次數(shù)最少(Coldestcp)的塊,。當(dāng)Hottesthp減去Coldestcp之差大于一個(gè)閾值時(shí)(如式(2)),則需要做數(shù)據(jù)交換操作,。數(shù)據(jù)交換操作是將擦除次數(shù)為Coldestcp的塊中收集的冷數(shù)據(jù)拷貝到擦除次數(shù)為Hottesthp的塊中,,將擦除次數(shù)為Hottesthp的塊上原來(lái)的熱數(shù)據(jù)存放到任意其他空閑塊上。數(shù)據(jù)交換操作的目的是將冷數(shù)據(jù)放到擦除次數(shù)最多的塊上,,利用冷數(shù)據(jù)不易更新的特點(diǎn)來(lái)減少塊的繼續(xù)擦除,;而將新寫入的數(shù)據(jù)存放到擦除次數(shù)少的塊上,,最終達(dá)到磨損均衡的目的。
(3)塊反轉(zhuǎn):當(dāng)熱池中某個(gè)塊被冷數(shù)據(jù)突然占據(jù)時(shí),,導(dǎo)致該塊中的冷數(shù)據(jù)無(wú)法用于數(shù)據(jù)交換操作,。這需要找到熱池中擦除次數(shù)最多(Hottesthp)的塊和熱池中擦除最少(Coldesthp)的塊,二者擦除次數(shù)之差小于一個(gè)閾值時(shí)(如式(3))則進(jìn)行熱塊反轉(zhuǎn)操作,。熱塊反轉(zhuǎn)操作,,將熱池中擦除次數(shù)最少的塊放到冷池中去,。另外當(dāng)冷池中的某個(gè)塊數(shù)據(jù)突然變熱時(shí),導(dǎo)致該塊不能被數(shù)據(jù)交換操作降溫,。這需要用該塊的eec參數(shù)來(lái)判別,eec表示有效擦除周期(塊改變所屬池后的擦除次數(shù)),。因此滿足式(4)時(shí),,進(jìn)行冷塊反轉(zhuǎn)操作。冷塊反轉(zhuǎn)操作是將冷池中擦除次數(shù)為Hottesteec的塊放到熱池中,,并把該塊的eec參數(shù)清零。
4 仿真實(shí)驗(yàn)
4.1 實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)環(huán)境是通過(guò)Vmware工具安裝Linux虛擬機(jī),,然后在Linux下安裝Qemu工具來(lái)搭建仿真實(shí)驗(yàn)開(kāi)發(fā)板,,并移植Yaffs2文件系統(tǒng)。為了公平測(cè)試,,關(guān)閉Yaffs2自帶的緩存功能,。用于測(cè)試的文件大小是從16 KB~1 024 KB隨機(jī)生成,測(cè)試數(shù)據(jù)占據(jù)整個(gè)Flash設(shè)備容量的90%,,其中僅有15%的數(shù)據(jù)更新,這樣的更新操作滿足齊夫分布(Zif)[6],。
實(shí)驗(yàn)中NAND Flash總?cè)萘渴?4 MB,,共有512個(gè)塊,每個(gè)塊含64個(gè)頁(yè),,每個(gè)頁(yè)大小是2 048 B,。試驗(yàn)中Th閾值選定為8。
4.2 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)對(duì)比數(shù)據(jù)包含:總擦除次數(shù),、最大與最小擦除次數(shù)差值和塊擦除次數(shù)標(biāo)準(zhǔn)差,。總擦除次數(shù)的差異表示額外付出的擦除代價(jià),,最大與最小擦除次數(shù)差值的差異表示磨損均衡中兩級(jí)分化情況,。塊擦除次數(shù)標(biāo)準(zhǔn)差隨擦除次數(shù)增長(zhǎng)越快,,則表示閃存設(shè)備中的數(shù)據(jù)更新是在少部分塊中完成(表示磨損均衡效果差);塊擦除次數(shù)標(biāo)準(zhǔn)差隨擦除次數(shù)增長(zhǎng)緩慢,,則表示數(shù)據(jù)更新是在大部分塊間交替完成(表示磨損均衡效果好),。因此,塊擦除次數(shù)標(biāo)準(zhǔn)差隨擦除次數(shù)的變化情況能直接反應(yīng)磨損均衡的效果,。
改進(jìn)前后總的擦除次數(shù)對(duì)比圖如圖2所示,,可以看到改進(jìn)后相較于改進(jìn)前額外付出了4.05%的擦除代價(jià)。額外增加擦除代價(jià)足夠小,,這樣的開(kāi)銷可以接受,。
改進(jìn)前后最大、最小擦除次數(shù)差值對(duì)比圖如圖3所示,,可以看到改進(jìn)后的磨損均衡情況更好,。
改進(jìn)前后塊擦除次數(shù)標(biāo)準(zhǔn)差對(duì)比圖如圖4所示,可以看到隨著擦除次數(shù)的增加,,改進(jìn)后塊擦除次數(shù)標(biāo)準(zhǔn)差增長(zhǎng)的速度遠(yuǎn)小于改進(jìn)前,。
在改進(jìn)后的Yaffs2文件系統(tǒng)下,塊的最大,、最小擦除次數(shù)差值減少為改進(jìn)前的1/4,,如圖3所示。這表明在回收塊選擇機(jī)制中加入塊的年齡參數(shù)后,,被冷數(shù)據(jù)占據(jù)的塊能夠及時(shí)得到更新,,使得NAND Flash設(shè)備中的塊可以更加均勻地參與擦除操作。另外引入冷熱數(shù)據(jù)分離策略后,,隨著擦除次數(shù)增加,,塊擦除次數(shù)標(biāo)準(zhǔn)差增加得更緩慢,如圖4所示,。這說(shuō)明將冷數(shù)據(jù)拷貝到擦除次數(shù)多的塊上,,這樣的數(shù)據(jù)交換方法能有效阻止塊繼續(xù)擦除。并且冷熱數(shù)據(jù)分離策略中冷數(shù)據(jù)的收集方式有效解決了冷熱數(shù)據(jù)共存時(shí)的更新問(wèn)題,。
當(dāng)NAND Flash設(shè)備中出現(xiàn)一個(gè)壞塊后,,該壞塊不僅不能繼續(xù)用于存儲(chǔ)數(shù)據(jù),而且會(huì)引起別的塊迅速壞掉,。為了保障數(shù)據(jù)的穩(wěn)定,,通常情況下NAND Flash設(shè)備中出現(xiàn)一個(gè)壞塊后不會(huì)繼續(xù)使用[7]。試驗(yàn)中塊的擦除壽命是100 000次,,若每天需要做400次擦除操作,,在未做改進(jìn)的Yaffs2文件系統(tǒng)下,NAND Flash僅有5%的塊輪流更新,那么可以得到閃存設(shè)備的使用壽命:
在改進(jìn)后的Yaffs2文件系統(tǒng)下,,NAND Flash有20%的塊輪流更新,,而磨損均衡需要付出額外4.05%的擦除代價(jià),那么可以得到閃存設(shè)備的使用壽命:
由式(5)和式(6)可知,,改進(jìn)后的Yaffs2文件系統(tǒng)可以延長(zhǎng)NAND Flash設(shè)備的使用壽命,。
5 結(jié)論
本文從兩方面對(duì)Yaffs2文件系統(tǒng)作改進(jìn):一方面對(duì)回收塊選擇機(jī)制作改進(jìn),另一方面引入冷熱數(shù)據(jù)分離策略,。NAND Flash設(shè)備在改進(jìn)后的文件系統(tǒng)中,,磨損均衡效果得到明顯提升。良好的磨損均衡表現(xiàn)可以增加NAND Flash的使用壽命,,仿真實(shí)驗(yàn)?zāi)M了真實(shí)的設(shè)備運(yùn)行情況,,實(shí)驗(yàn)成果適用于以NAND Flash為存儲(chǔ)介質(zhì)的智能消費(fèi)電子產(chǎn)品或者計(jì)算機(jī)領(lǐng)域中。
參考文獻(xiàn)
[1] Yan Hua,,Yao Qian.An efficient file-aware garbage collection algorithm for NAND Flash-based consumer[J].IEEE Transactions on Consumer Electronics,,November 2014,,60(4):623-627.
[2] 姚乾,嚴(yán)華.基于冷熱數(shù)據(jù)識(shí)別的NAND Flash數(shù)據(jù)存儲(chǔ)管理研究[D].成都:四川大學(xué),,2013.
[3] WU M,,ZWAENEPOE W.eNvy:A non-volatile main memory storage system[C].CA,USA:AMC,,In Proceedings of 6th International Conference on Architecture Support for Programming Language and Operating Systems,,1994:86-97.
[4] KAWAGUCHI A,NISHIOKA S,,MOTODA H.A flash memory based file system[C].LA,,USA:In Proceedings of 1995 USENIX Technical Conference,1995:155-164.
[5] Chang Lipin.On efficient wear leveling for large-scale flash memory storage systems[C].Proceedings of the 2007 ACM Symposium on Applied Computing,,SAC′07,,2007:1126-1130.
[6] Lin Mingwei,Chen Shuyu.Efficient and intelligent garbage collection policy for NAND Flash-based consumer electronics[J].IEEE Transactions on Consumer Electronics,,2013,,59(3):538-543.
[7] 楊習(xí)偉,賀云健.車載娛樂(lè)系統(tǒng)的Nand Flash管理模式研究[J].Microcontrollers & Embedded Systems,,2008(3):19-22.