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


在以NandFlash為介質(zhì)的嵌入式Linux平臺上構建了YAFFS文件系統,并在原有YAFFS文件系統的基礎上,對YAFFS的啟動(dòng)時(shí)間和損耗平衡進(jìn)行優(yōu)化。通過(guò)測試證明,啟動(dòng)時(shí)間相比原文件系統縮短了一半以上,且實(shí)現了NandFlash的摩擦損耗基本保持平衡,優(yōu)于改進(jìn)前的文件系統。
linux相關(guān)文章:linux教程
評論