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