YAFFS文件系統(tǒng)在嵌入式Linux系統(tǒng)中的構建與改進
(2)當YAFFS系統(tǒng)進行寫操作且NandFlash中未分配空間小于預設的閾值時,啟動垃圾回收機制,選取最臟塊擦除。YAFFS文件系統(tǒng)的垃圾回收策略結合了隨機策略的平衡性和貪心策略的高效性,回收機制包括:回收不再使用的臟塊以及對存有有效數(shù)據(jù)的壞塊進行處理。但回收算法具有隨機性,系統(tǒng)有可能總是選中同一個塊,認定它是最臟的塊,并連續(xù)地擦除回收,造成惡性的使用,而NandFlash的擦除次數(shù)是有限的(大約在10次左右)。出現(xiàn)惡性的使用會造成閃存中的部分塊損壞,而其他塊使用次數(shù)卻極少,縮短了閃存的壽命。
(3)針對YAFFS的磨損平衡性差的情況,采用了擦除計數(shù)機制[7]:在yaffs.guts.h中定義了存儲在NandFlash的附加區(qū)中的數(shù)據(jù)結構yaffs_tags,用來標志每頁的狀態(tài);定義了chunkID、objectID和有效字數(shù)等。其中有2 bit的空間是沒有使用的,并從chunkID和objectID分配7 bit,將這9 bit的空間定義為erase_count,用于記錄該頁被擦除的次數(shù)。初始值為零,當被擦除時標記為“1”,表示擦除過一次可達到的最大計數(shù)值為511。系統(tǒng)垃圾回收的流程圖如圖6所示。當某一塊的擦除次數(shù)達到511時,該塊與被擦除數(shù)最小的塊交換各自存儲的數(shù)據(jù),使頻繁擦寫的塊存儲很少使用的數(shù)據(jù),而被擦除次數(shù)少的塊存儲頻繁地更新數(shù)據(jù)[8](如文件屬性信息數(shù)據(jù))。當擦除計數(shù)達到最大的塊超過70%以上時,將所有的擦除計數(shù)值歸零,循環(huán)以上的操作,從而實現(xiàn)NandFlash的損耗基本平衡、延長使用壽命、提高文件系統(tǒng)可靠性。
4 性能測試
按照以上介紹的策略修改YAFFS文件系統(tǒng)相關部分的源代碼,并且根據(jù)YAFFS根文件系統(tǒng)構建的基本步驟,將改進后的文件系統(tǒng)作為根文件系統(tǒng)燒寫入目標板。在實驗平臺上,分別對YAFFS和改進后的文件系統(tǒng)進行性能測試和研究。性能測試的主要內(nèi)容有:各塊的擦除次數(shù)和文件系統(tǒng)掛載的時間。在實驗平臺上大量地進行讀寫和刪除操作,在源代碼中也添加擦除計數(shù)(只用于計數(shù)),兩個文件系統(tǒng)經(jīng)過相同數(shù)量的讀寫和刪除操作后,讀取每塊的擦除次數(shù),分析數(shù)據(jù)得出:原YAFFS中存在擦除次數(shù)為零的塊,而改進后則沒有;原YAFFS的最大擦除次數(shù)與最小擦除次數(shù)的比值是無窮大,而改進后都在平均值附近波動,起伏不大。文件系統(tǒng)加載測試的主要方法是在內(nèi)核源碼和文件系統(tǒng)源碼中添加中斷機制和時鐘,安裝評估系統(tǒng)時間的工具PrintkTimes補丁,運用printk輸出所需數(shù)據(jù)。測試結果如表1所示。由表1可看出,由于第一次啟動時文件屬性信息還未寫入索引區(qū),系統(tǒng)啟動時間與改進前大致相同,但第二次啟動時索引區(qū)機制開始工作,直接從索引塊中讀取文件信息,修改后的YAFFS啟動時間已有明顯的改善,表明改進策略達到縮短加載時間的目的。
在以NandFlash為介質(zhì)的嵌入式Linux平臺上構建了YAFFS文件系統(tǒng),并在原有YAFFS文件系統(tǒng)的基礎上,對YAFFS的啟動時間和損耗平衡進行優(yōu)化。通過測試證明,啟動時間相比原文件系統(tǒng)縮短了一半以上,且實現(xiàn)了NandFlash的摩擦損耗基本保持平衡,優(yōu)于改進前的文件系統(tǒng)。
linux相關文章:linux教程
評論