全 蕾 江珊珊
[摘要]通過對NAND閃存使用的文件系統(tǒng)YAFFS實現(xiàn)原理的分析與研究,針對其兩點不足:加載時間隨著存儲容量的增大而增大;對靜態(tài)數(shù)據(jù)沒有很好的實現(xiàn)損耗均衡,提出一種快速加載的文件系統(tǒng)FMNFS (Fast-Mounting NAND File-System)。
[關(guān)鍵詞]NAND閃存 YAFFS 加載時間 損耗均衡
中圖分類號:TP2文獻標識碼:A文章編號:1671-7597(2009)0510041-01
一、引言
閃存作為目前嵌入式系統(tǒng)中應用最為廣泛的存儲器,按照存儲矩陣結(jié)構(gòu)的不同分為NOR型和NAND型兩種。NAND Flash強調(diào)降低每比特的成本,更高的性能并且像磁盤一樣可以通過接口輕松升級,是高密度數(shù)據(jù)存儲的理想解決方案,被大量應用于移動存儲設備、移動媒體設備和嵌入式設備中[1]。
目前可用于NAND型閃存的文件系統(tǒng)包括集中索引的文件系統(tǒng)和專門為NAND閃存設計的文件系統(tǒng)。到目前為止,YAFFS系列是唯一專門針對NAND閃存而設計的文件系統(tǒng),YAFFS解決了集中索引文件系統(tǒng)中,數(shù)據(jù)易丟失及損耗均衡等問題。但隨著NAND閃存存儲容量的快速增加,YAFFS也日益暴露其缺點,在大容量的NAND閃存上設計專門的文件系統(tǒng)成為了目前的一個研究熱點。
二、FMNFS的設計思想
YAFFS的啟動過程雖然不需要像JFFS系列一樣掃描每一個Flash的存儲單元。但是要掃描 NAND Flash上每一頁的附加存儲區(qū),根據(jù)其中的控制信息來建立文件系統(tǒng)的結(jié)構(gòu)。所以YAFFS的啟動加載時間是同F(xiàn)lash的存儲容量成正比的[2]。目前,NAND Flash的存儲容量越來越大,所以其加載時間是比較長的。
YAFFS采用一種多策略混合的算法來進行垃圾回收,將貪心策略和隨機選擇策略分別用在不同的情況下。雖然就更新頻繁的數(shù)據(jù)而言,YAFFS實現(xiàn)了損耗均衡[3],但是YAFFS沒有對占用大部分存儲空間的靜態(tài)數(shù)據(jù)實現(xiàn)損耗均衡。因此YAFFS不能實現(xiàn)整個閃存器件的損耗均衡。
針對上面這兩點,本文提出了一種新的文件系統(tǒng):快速加載的閃存文件系統(tǒng)FMNS(Fast -Mounting NAND File-system)。
在YAFFS中,文件的控制信息和數(shù)據(jù)信息混合存儲在同一個塊中,所以在加載時需要掃描所有的塊,這大大延長了文件系統(tǒng)的加載時間。為了能更快的加載文件系統(tǒng),F(xiàn)MNFS采用了一種新的方法,它將集中索引的文件系統(tǒng)和日志文件系統(tǒng)兩者的優(yōu)點結(jié)合起來。在FMNS中,不再將文件的控制信息和數(shù)據(jù)信息混合在一起存儲,而是將文件的控制信息和數(shù)據(jù)信息分離,分開存儲,一個擦除塊或完全用于存儲文件信息節(jié)點,或者用于存放純數(shù)據(jù)節(jié)點。其中文件信息節(jié)點中包括對數(shù)據(jù)節(jié)點的索引。除此之外,F(xiàn)MNFS還將所有存儲文件信息節(jié)點的擦除塊的地址存儲在特定的位置。這樣,在加載的時候只要掃描文件信息節(jié)點塊中各個節(jié)點便可以建立文件系統(tǒng)的整體結(jié)構(gòu),而不用掃描整個的NAND Flash,從而大大減少了文件系統(tǒng)的加載的時間。
為了實現(xiàn)損耗均衡,使每個物理塊的使用壽命趨向于平均,延長閃存的壽命,F(xiàn)MNFS在垃圾回收和空閑塊的分配過程中使用了冷熱數(shù)據(jù)[4]的概念。所謂熱數(shù)據(jù)即需要被頻繁更新的數(shù)據(jù),冷數(shù)據(jù)則是相對來說較少訪問、更新的數(shù)據(jù)。下面詳細介紹FMNFS中損耗均衡算法的設計。
三、FMNFS中損耗均衡算法的設計
為了讓NAND閃存上每個擦除塊的壽命趨于平均,根據(jù)上述的冷熱數(shù)據(jù)的概念,針對冷數(shù)據(jù)和熱數(shù)據(jù)采用了不同的算法,以延長NAND閃存的使用壽命。
FMNFS中,為了更好的實現(xiàn)擦除均衡,其所采用的算法為:
1.通過在附加區(qū)設置 Erase_Num字段來記錄每個擦除塊的擦除次數(shù);
2.針對更新頻繁的索引信息 (熱數(shù)據(jù)),在分配擦除塊的時候每次都將擦除塊次數(shù)最小的擦寫塊分配給它;
3.對于不經(jīng)常更新的只讀靜態(tài)數(shù)據(jù) (冷數(shù)據(jù)),則在經(jīng)過“一段時間”后,需要對其進行拷貝移動。這個“一段時間”是擦除次數(shù)的差值來決定的,即當所有塊中擦除次數(shù)最多的塊與擦除次數(shù)最小的塊的差值大于某個閾值時,則按下列步驟進行:(1)找到擦除次數(shù)最大的塊,將其上面的數(shù)據(jù)復制到一個空白塊上面;(2)對擦除次數(shù)最大的塊進行擦除操作;(3)將靜態(tài)數(shù)據(jù)從擦除次數(shù)最小的塊復制到之前剛剛擦除好的塊;(4)將靜態(tài)數(shù)據(jù)所在的塊作為垃圾塊進行回收并在分配過程中將其分配給更新頻繁的數(shù)據(jù)。
改進的垃圾回收算法的設計思想是:不再預先設置一個閾值,當空閑塊鏈表中的擦除塊小于這個數(shù)目時才啟動垃圾回收操作。而是在空閑鏈表中的所有擦除塊被用完后,才啟動垃圾回收。
具體方法:預先設置一個空閑塊鏈表中單元塊數(shù)的最小值Min,Min需要盡量滿足下次更新操作所需的空閑塊數(shù)。Min的值不可以過大,這樣空閑塊數(shù)過多,從而減少閃存中的可用空間。Min的值也不能過小,這樣便起不到改進的作用。由于垃圾回收時不存在空閑塊,臟塊上面的有效數(shù)據(jù)便沒有辦法保存,所以在回收臟塊的時候采用基于閾值的貪心策略對垃圾塊進行回收,即開始時每次選擇塊內(nèi)無效頁數(shù)量最多的臟塊進行回收,當空閑塊上的擦除塊數(shù)量到達一定值時,便從臟塊鏈表的開始處對垃圾塊進行回收。
四、FMNFS損耗平衡測試結(jié)果及分析
測試使用的目標板是Blackfin531,NAND閃存的大小是512M,每頁的大小是2048+64字節(jié),RAM的大小是64M。
按照冷熱數(shù)據(jù)的思想,文件系統(tǒng)中存放占據(jù)閃存大部分空間的只讀靜態(tài)數(shù)據(jù)文件3個,大小分別為:1M、10M、16M;存放300個小文件,其容量不超過10K。其中冷數(shù)據(jù)文件被訪問的概率為20%,熱數(shù)據(jù)被訪問的概率為80%。
對YAFFS2和FMNFS中擦除塊擦除的平均程度比較得:
1.在YAFFS2中存在一部分擦除次數(shù)接近于零的擦除塊;而在FMNFS中不存在這樣的塊。
2.FMNFS的擦除塊的擦除次數(shù)更加平均,且擦除次數(shù)的值比較低,從而可以延長閃存壽命;而YAFFS2中擦除塊的擦除次數(shù)較FMNFS普遍偏高。
參考文獻:
[1]潘玉華、孫濤,NAND FLASH的數(shù)據(jù)管理方法[J].蘇南科技開發(fā),Sunan Sci-Tech,Devel,2006(12):1-3.
[2]龍瑞,YAFFS嵌入式文件系統(tǒng)原理分析[J].電腦編程技巧與維護,2006(10):76-79.
[3]王同洋、董永帥、吳俊軍,基于闌值控制的損耗均衡算法設計[J].計算機工程與科學,2008(3):72-74.
[4]楊春林、雷航,基于NAND Flash的嵌入式文件系統(tǒng)的改進與優(yōu)化[J].計算機應用,2007(12):3102-3104.
作者簡介:
全蕾,女,江西臨川人,講師,研究方向:嵌入式系統(tǒng)及核儀器;江珊珊,講師。