《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > Yaffs2文件系統(tǒng)中對(duì)NAND Flash磨損均衡的改進(jìn)
Yaffs2文件系統(tǒng)中對(duì)NAND Flash磨損均衡的改進(jìn)
2015年電子技術(shù)應(yīng)用第6期
溫朝建,嚴(yán) 華
四川大學(xué) 電子信息學(xué)院,四川 成都610065
摘要: 針對(duì)以NAND Flash為存儲(chǔ)介質(zhì)時(shí)Yaffs2文件系統(tǒng)存在磨損均衡的缺陷,通過(guò)改進(jìn)回收塊選擇機(jī)制,并在數(shù)據(jù)更新中引入冷熱數(shù)據(jù)分離策略,從而改善NAND Flash的磨損均衡性能。實(shí)驗(yàn)借助Qemu軟件建立Linux嵌入式仿真平臺(tái),從總擦除次數(shù)、最大最小擦除次數(shù)差值和塊擦除次數(shù)標(biāo)準(zhǔn)差等方面進(jìn)行對(duì)比。實(shí)驗(yàn)結(jié)果表明,在改進(jìn)后的Yaffs2文件系統(tǒng)下NAND Flash的磨損均衡效果有明顯提升,這有益于延長(zhǎng)NAND Flash的使用壽命。
中圖分類號(hào): TP316
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)06-0016-04
Improvements on wear leveling of NAND Flash in the Yaffs2 file system
Wen Chaojian,Yan Hua
College of Electronics and Information Engineering, Sichuan University,Chengdu 610065,China
Abstract: To solve the problem of Yaffs2 file system in wear leveling when NAND Flash is used as storage device,two key strategies are realized to implement the Yaffs2 file system. One is the use of block age parameter to improve the victim block selection mechanism,and the other is the valid data are divided into “hot” data and “cold” data,which are respectively written back to the block with minimum or maximum erase cycle. The Qemu software and embedded Linux are used as the simulation platform. The degree of wear leveling can be shown by three parameters,which are the total erase cycles of block,the maximum difference and the standard deviation of block erase cycles.The experiment results show that the degree of wear leveling in the new storage system is improved greatly.
Key words : Yaffs2 file system;NAND Flash;garbage collection;cold and hot data

     

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所示。

qrs2-t1.gif

    最上層用戶應(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)期不更新的塊選中更新。

    qrs2-gs1.gif

其中,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á)到磨損均衡的目的。

    qrs2-gs2.gif

    (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ù)清零。

    qrs2-gs3-4.gif

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)銷可以接受。

qrs2-t2.gif

    改進(jìn)前后最大、最小擦除次數(shù)差值對(duì)比圖如圖3所示,可以看到改進(jìn)后的磨損均衡情況更好。

qrs2-t3.gif

    改進(jìn)前后塊擦除次數(shù)標(biāo)準(zhǔn)差對(duì)比圖如圖4所示,可以看到隨著擦除次數(shù)的增加,改進(jìn)后塊擦除次數(shù)標(biāo)準(zhǔn)差增長(zhǎng)的速度遠(yuǎn)小于改進(jìn)前。

qrs2-t4.gif

    在改進(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è)備的使用壽命:

    qrs2-gs5.gif

    在改進(jìn)后的Yaffs2文件系統(tǒng)下,NAND Flash有20%的塊輪流更新,而磨損均衡需要付出額外4.05%的擦除代價(jià),那么可以得到閃存設(shè)備的使用壽命:

    qrs2-gs6.gif

    由式(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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。