吳燦強(qiáng),芮曄,潘東梅
(上海航天電子技術(shù)研究所上海201100)
如今我國航天技術(shù)不斷提高,衛(wèi)星應(yīng)用需求也隨之?dāng)U大,其存儲(chǔ)的載荷數(shù)據(jù)種類、數(shù)據(jù)量逐漸增加,數(shù)據(jù)存儲(chǔ)管理難度日益加大[1]。雖然星載數(shù)據(jù)存儲(chǔ)器經(jīng)傳統(tǒng)的基于FPGA的方式設(shè)計(jì)后將讀寫方式由最初以字節(jié)為單位線性編址的流讀寫方式發(fā)展為基于文件分配表的文件讀寫方式[2],但是為了解決Flash存儲(chǔ)器應(yīng)用存在的不覆蓋寫、磨損均衡問題并實(shí)現(xiàn)文件系統(tǒng)的完整功能,使用嵌入式文件系統(tǒng)管理星載數(shù)據(jù)存儲(chǔ)器在未來星載數(shù)據(jù)存儲(chǔ)技術(shù)的發(fā)展上顯得尤為必要。
目前常用的嵌入式文件系統(tǒng)主要有兩種:一種是JFFS/JFFS2文件系統(tǒng)[3-4],其專門針對(duì)NOR FLASH存儲(chǔ)介質(zhì)設(shè)計(jì),因此用于NAND FLASH存儲(chǔ)介質(zhì)上效果不佳;另外一種則是YAFFS/YAFFS2文件系統(tǒng)[5-6],其專門針對(duì)NAND FLASH存儲(chǔ)介質(zhì)的特性設(shè)計(jì),具有崩潰恢復(fù)、壞塊管理、損耗均衡、垃圾回收及錯(cuò)誤探測/錯(cuò)誤更正(EDC/ECC)的FLASH文件系統(tǒng)必須具備的功能。同時(shí)YAFFS/YAFFS2文件系統(tǒng)比JFFS/JFFS2文件系統(tǒng)加載和執(zhí)行速度更快且占用內(nèi)存更少[7-8]。此外,YAFFS/YAFFS2文件系統(tǒng)自帶NAND FLASH存儲(chǔ)芯片驅(qū)動(dòng)程序[9],為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,支持多種CPU架構(gòu),因此YAFFS/YAFFS2文件系統(tǒng)更便于在嵌入式系統(tǒng)中移植開發(fā)。
但YAFFS版本只支持512 B的小頁NAND FLASH存儲(chǔ)芯片[10]。而YAFFS2版本在YAFFS版本的基礎(chǔ)上進(jìn)行升級(jí),不僅能向下兼容小頁NAND FLASH,而且能更好地支持2 KB以上的大頁NAND FLASH,同時(shí)在性能上也有很大提高[11]。綜上,本文選用了YAFFS2文件系統(tǒng)作為研究基礎(chǔ)。
在星載環(huán)境中,載荷數(shù)據(jù)種類多且數(shù)據(jù)量多,同時(shí)對(duì)于數(shù)據(jù)的查找方式一般既要區(qū)分載荷又得區(qū)分時(shí)間段等多重信息。通過對(duì)YAFFS2文件系統(tǒng)的深入研究和分析,本文發(fā)現(xiàn)如果將YAFFS2文件系統(tǒng)直接應(yīng)用于星載環(huán)境下,會(huì)因?yàn)閅AFFS2文件系統(tǒng)的類日志型結(jié)構(gòu)而帶來對(duì)多載荷/多任務(wù)數(shù)據(jù)管理難和數(shù)據(jù)存儲(chǔ)效率較低等問題。
目前,針對(duì)Flash文件系統(tǒng)的研究途徑主要有兩個(gè)方向:一是對(duì)現(xiàn)有的Flash文件系統(tǒng)進(jìn)行優(yōu)化設(shè)計(jì)[12-13],例如JFFS3文件系統(tǒng)的設(shè)計(jì)方案的提出則是為了迎合閃存容量不斷增加的發(fā)展趨勢(shì),利用B+樹算法將原來在內(nèi)存中的索引信息存儲(chǔ)到閃存上,即在閃存上存儲(chǔ)和維護(hù)索引[14];二是開發(fā)新的適用于Flash的文件系統(tǒng)[15-16]。
考慮到新研發(fā)文件系統(tǒng)研制周期長、可靠性以及功能完整性需要一定時(shí)間驗(yàn)證等缺點(diǎn),本文基于第一種研究途徑,針對(duì)YAFFS2文件系統(tǒng)在設(shè)計(jì)性能上的不足和在特定應(yīng)用環(huán)境下的需求問題,對(duì)其進(jìn)行部分優(yōu)化設(shè)計(jì),引入分區(qū)管理功能,使其在多任務(wù)環(huán)境下對(duì)復(fù)雜的大數(shù)據(jù)檢索效率得到一定提高。
文件系統(tǒng)實(shí)現(xiàn)對(duì)數(shù)據(jù)存儲(chǔ)與檢索的有效管理主要是依賴于其內(nèi)部數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)流關(guān)系的巧妙設(shè)計(jì)。在YAFFS2文件系統(tǒng)中的主要數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如下:
1)文件。在YAFFS2文件系統(tǒng)中,無論是正常文件、目錄,還是鏈接或設(shè)備文件等一切可記錄或可被描述的內(nèi)容都被統(tǒng)一當(dāng)作文件來處理。
2)對(duì)象。在YAFFS2文件系統(tǒng)掛載時(shí),YAFFS2文件系統(tǒng)會(huì)在內(nèi)存中為每個(gè)文件建立一個(gè)對(duì)應(yīng)的yaffs_obj對(duì)象。yaffs_obj數(shù)據(jù)結(jié)構(gòu)主要包含3種內(nèi)容:一是用戶ID、修改時(shí)間等文件屬性;二是用于實(shí)現(xiàn)對(duì)YAFFS2文件系統(tǒng)存儲(chǔ)信息作更新和維護(hù)的各種標(biāo)記位,例如刪除標(biāo)記等;三是用于表示YAFFS2文件系統(tǒng)中各存儲(chǔ)數(shù)據(jù)之間的組織結(jié)構(gòu)關(guān)系的,如指向?qū)ο笏鶎俑改夸浀腜arent指針等;此外,針對(duì)不同類型的對(duì)象實(shí)例,yaffs_obj中有與之對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,例如普通文件類型對(duì)應(yīng)的數(shù)據(jù)內(nèi)容中主要包括用于快速查找文件數(shù)據(jù)塊的yaffs_tnode樹的指針等。
3)tag信息。在YAFFS2文件系統(tǒng)中,數(shù)據(jù)結(jié)構(gòu)yaffs_ext_tags定義了NAND FLASH存儲(chǔ)介質(zhì)物理頁上空閑區(qū)(OOB)的數(shù)據(jù)存儲(chǔ)格式。為了節(jié)省占用OOB區(qū)的空間,YAFFS2對(duì)yaffs_ext_tags信息進(jìn)行了打包處理,最后以yaffs_packed_tags2結(jié)構(gòu)存入OOB區(qū)。但為了規(guī)避在文件系統(tǒng)加載時(shí)掃描所有物理頁OOB區(qū)獲取yaffs_obj相關(guān)信息以建立文件結(jié)構(gòu),YAFFS2文件系統(tǒng)在每個(gè)物理塊的最后一個(gè)或多個(gè)物理頁以yaffs_summary_tags數(shù)據(jù)結(jié)構(gòu)集中保存yaffs_obj濃縮版信息。
4)設(shè)備信息。在YAFFS2文件系統(tǒng)中,數(shù)據(jù)結(jié)構(gòu)yaffs_dev等同于Linux系統(tǒng)中VFS的超級(jí)塊結(jié)構(gòu),為整個(gè)文件系統(tǒng)建立層次結(jié)構(gòu),記錄著與NAND Flash器件相關(guān)的屬性值和系統(tǒng)運(yùn)行過程中的一些統(tǒng)計(jì)值,維護(hù)著一組NAND Flash存儲(chǔ)介質(zhì)讀寫刪除有關(guān)的操作函數(shù)指針,是YAFFS2文件系統(tǒng)最核心的數(shù)據(jù)結(jié)構(gòu)。
除了以上列舉的幾種數(shù)據(jù)結(jié)構(gòu)之外,YAFFS2文件系統(tǒng)中還有許多復(fù)雜的數(shù)據(jù)結(jié)構(gòu),導(dǎo)致在YAFFS2文件系統(tǒng)上實(shí)現(xiàn)分區(qū)策略的設(shè)計(jì)存在著以下3個(gè)問題:
1)需要對(duì)YAFFS2文件系統(tǒng)的部分?jǐn)?shù)據(jù)結(jié)構(gòu)進(jìn)行改進(jìn),而不是簡單引進(jìn)新的數(shù)據(jù)結(jié)構(gòu)即可;
2)需要將數(shù)據(jù)結(jié)構(gòu)的改進(jìn)落實(shí)到Y(jié)AFFS2文件系統(tǒng)中與之相關(guān)的訪問機(jī)制里面,否則易造成數(shù)據(jù)的不可控;
3)需要考慮YAFFS2文件系統(tǒng)在啟動(dòng)和退出時(shí)保存至NAND Flash中的快照信息的同步更新,以及原數(shù)據(jù)結(jié)構(gòu)在保存至Flash塊上的位對(duì)齊與位數(shù)設(shè)計(jì)上是否有預(yù)留區(qū),否則直接加入新的數(shù)據(jù)信息可能會(huì)造成位溢出,例如OOB區(qū)對(duì)Flash塊來說是固定的,無法保存過多信息,因此在分區(qū)策略的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)上應(yīng)當(dāng)盡可能的簡練。
為解決在星載環(huán)境中YAFFS2文件系統(tǒng)對(duì)多載荷/多任務(wù)數(shù)據(jù)數(shù)據(jù)管理難和數(shù)據(jù)存儲(chǔ)效率較低等問題,本文在YAFFS2文件系統(tǒng)原有數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上提出了分區(qū)策略架構(gòu)設(shè)計(jì),如圖1所示。
圖1 基于YAFFS2文件系統(tǒng)的分區(qū)策略架構(gòu)設(shè)計(jì)
針對(duì)上文中對(duì)YAFFS2文件系統(tǒng)的研究和分析,本文提出的基于YAFFS2文件系統(tǒng)的分區(qū)策略架構(gòu)設(shè)計(jì)主要分為以下3個(gè)部分:
1)數(shù)據(jù)結(jié)構(gòu)的改進(jìn)
該部分主要針對(duì)YAFFS2文件系統(tǒng)原有部分?jǐn)?shù)據(jù)結(jié)構(gòu)無法滿足分區(qū)策略需求的問題,通過對(duì)YAFFS2文件系統(tǒng)中的一些數(shù)據(jù)結(jié)構(gòu)進(jìn)行成員變量增刪改移以及引入一些新的數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)分區(qū)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)。
在YAFFS2文件系統(tǒng)的“超級(jí)塊”結(jié)構(gòu)yaffs_dev中加入分區(qū)的劃分屬性,參考FAT文件映射表的設(shè)計(jì)方式,分區(qū)的劃分屬性以鏈表的方式實(shí)現(xiàn),稱為分區(qū)屬性表(sector_table),其描述信息包括分區(qū)名稱、分區(qū)ID、分區(qū)信息結(jié)構(gòu)入口等,目的在于可通過yaffs_dev實(shí)現(xiàn)對(duì)分區(qū)的訪問。
引入分區(qū)數(shù)據(jù)結(jié)構(gòu)yaffs_sector用以保存各個(gè)分區(qū)相應(yīng)信息,主要包括分區(qū)核心信息、分區(qū)下屬數(shù)據(jù)結(jié)構(gòu)指針、分區(qū)管理函數(shù)入口指針等。其中分區(qū)核心信息包括分區(qū)ID、分區(qū)名稱等能表述分區(qū)身份的基本信息,以及分區(qū)大小、分區(qū)起始?jí)K、分區(qū)結(jié)束塊、分區(qū)預(yù)留塊大小等限制屬性信息,分區(qū)鎖、分區(qū)垃圾回收閾值等操作控制信息;分區(qū)下屬數(shù)據(jù)結(jié)構(gòu)指針包括Handle分區(qū)池、FileDes分區(qū)池、Inode分區(qū)池、塊信息數(shù)組block_info、分區(qū)位圖chunk_bits數(shù)據(jù)、分區(qū)訪問控制列表等數(shù)據(jù)結(jié)構(gòu)入口指針;分區(qū)管理函數(shù)入口指針包括分區(qū)塊分配、分區(qū)塊回收、分區(qū)越界檢查等一些區(qū)內(nèi)管理機(jī)制中的功能函數(shù)入口,以及分區(qū)文件查找、分區(qū)創(chuàng)建文件、分區(qū)刪除文件等文件操作函數(shù)入口。
在塊信息相關(guān)結(jié)構(gòu)、tag信息相關(guān)結(jié)構(gòu)、OOB信息相關(guān)結(jié)構(gòu)中,均需引入結(jié)構(gòu)所屬哪個(gè)分區(qū)的標(biāo)識(shí),以便在加載和訪問的時(shí)候能夠直接區(qū)分?jǐn)?shù)據(jù)所屬不同分區(qū)。
2)分區(qū)內(nèi)管理機(jī)制的設(shè)計(jì)
該部分主要解決如何通過改進(jìn)后的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)對(duì)分區(qū)內(nèi)數(shù)據(jù)的訪問以及對(duì)分區(qū)存儲(chǔ)空間管理的問題,將原先YAFFS2文件系統(tǒng)中管理整個(gè)NAND Flash存儲(chǔ)區(qū)的函數(shù)改造成只對(duì)分區(qū)內(nèi)存儲(chǔ)區(qū)域操作的函數(shù),其中一些功能仍沿用原先YAFFS2文件系統(tǒng)的設(shè)計(jì),只是對(duì)其中的操作范圍添加限制。例如yaffs2_scan_chunk掃描函數(shù),其掃描原理不變,只修改其掃描范圍,并將掃描結(jié)果反映至分區(qū)信息數(shù)據(jù)結(jié)構(gòu)中,而不再反映至設(shè)備信息結(jié)構(gòu)yaffs_dev中。
其中,分區(qū)塊分配管理機(jī)制主要解決分區(qū)內(nèi)部Flash塊分配的問題,防止沿用原有YAFFS2文件系統(tǒng)中的分配函數(shù)時(shí)不對(duì)所分配的塊進(jìn)行分區(qū)越界檢查,導(dǎo)致出現(xiàn)分區(qū)A的數(shù)據(jù)存儲(chǔ)至分區(qū)B所屬區(qū)域等分區(qū)間數(shù)據(jù)混亂現(xiàn)象。
分區(qū)垃圾回收管理機(jī)制同樣一改原有YAFFS2文件系統(tǒng)中垃圾回收的掃描范圍,僅對(duì)分區(qū)內(nèi)部的臟塊進(jìn)行判斷和回收。
區(qū)內(nèi)磨損均衡管理機(jī)制主要解決讓分區(qū)內(nèi)部各Flash塊擦除次數(shù)盡可能均勻的問題,沿用原YAFFS2文件系統(tǒng)中的設(shè)計(jì),即塊分配策略和垃圾回收策略相結(jié)合。
分區(qū)訪問控制管理機(jī)制通過分區(qū)信息結(jié)構(gòu)yaffs_sector中訪問控制列表實(shí)現(xiàn),訪問控制列表記錄著不同載荷/任務(wù)ID以及對(duì)應(yīng)的訪問權(quán)限。
分區(qū)快照機(jī)制將分區(qū)對(duì)應(yīng)的checkpoint數(shù)據(jù)信息存儲(chǔ)至本分區(qū)存儲(chǔ)區(qū)域,實(shí)現(xiàn)在掉電重啟時(shí)只需遍歷掃描掉電時(shí)存在有數(shù)據(jù)修改且未保存的分區(qū)Flash塊的功能,而其它快照信息正常的分區(qū)通過YAFFS2 checkpoint機(jī)制啟動(dòng)。
3)分區(qū)間管理機(jī)制的設(shè)計(jì)
該部分主要實(shí)現(xiàn)YAFFS2文件系統(tǒng)對(duì)各分區(qū)之間的協(xié)調(diào)管理以追求最大化發(fā)揮整個(gè)NAND Flash的利用效率,以及實(shí)現(xiàn)對(duì)各分區(qū)的統(tǒng)一管理,來解決分區(qū)內(nèi)管理機(jī)制在實(shí)現(xiàn)上帶來的分區(qū)數(shù)據(jù)分化失衡、分區(qū)大小初始配置不合理等問題。
其中,分區(qū)動(dòng)態(tài)劃分機(jī)制主要解決某個(gè)載荷/任務(wù)分區(qū)實(shí)際存儲(chǔ)空間遠(yuǎn)小于初始分配大小而造成存儲(chǔ)空間浪費(fèi)的分區(qū)大小初始配置不合理問題,以及解決某個(gè)載荷/任務(wù)產(chǎn)生數(shù)據(jù)量較大,以致其對(duì)應(yīng)的載荷/任務(wù)分區(qū)大小在后期無法滿足存儲(chǔ)需要,而存在另一個(gè)載荷/任務(wù)分區(qū)數(shù)據(jù)存儲(chǔ)需求較小,空閑Flash塊較多的數(shù)據(jù)分化失衡問題。
分區(qū)數(shù)據(jù)動(dòng)態(tài)遷移管理機(jī)制實(shí)現(xiàn)將分區(qū)Flash塊的數(shù)據(jù)移動(dòng)到另一空閑Flash塊的功能,目的在于將某一分區(qū)的已分配塊緊湊或已分配的數(shù)據(jù)往后移,從而為前后分區(qū)空出多余的空閑區(qū),以實(shí)現(xiàn)分區(qū)動(dòng)態(tài)劃分功能。
分區(qū)數(shù)據(jù)映射機(jī)制實(shí)現(xiàn)對(duì)區(qū)間管理機(jī)制與分區(qū)內(nèi)管理機(jī)制之間的數(shù)據(jù)對(duì)接功能,保證數(shù)據(jù)能分配到正確對(duì)應(yīng)的分區(qū)操作中。
區(qū)間磨損均衡機(jī)制實(shí)現(xiàn)將冷熱分區(qū)數(shù)據(jù)對(duì)換的功能,以此延長NAND Flash芯片的平均使用壽命。
分區(qū)緩存機(jī)制作為實(shí)現(xiàn)區(qū)間磨損均衡的基礎(chǔ),通過擴(kuò)充文件緩存數(shù)目至3個(gè),同時(shí)減少每一個(gè)文件緩存的cache數(shù)目,以減少總的文件緩存占用的內(nèi)存空間,實(shí)現(xiàn)數(shù)據(jù)暫存的功能。
分區(qū)管理實(shí)現(xiàn)與文件系統(tǒng)間的對(duì)接機(jī)制主要實(shí)現(xiàn)文件系統(tǒng)對(duì)各個(gè)分區(qū)的統(tǒng)一管理以及初始分區(qū)的劃分等功能。
分區(qū)策略架構(gòu)的實(shí)現(xiàn)主要包括兩個(gè)方面:數(shù)據(jù)結(jié)構(gòu)的改進(jìn)以及對(duì)YAFFS2文件系統(tǒng)原先各種功能實(shí)現(xiàn)機(jī)制的修改。
其中對(duì)YAFFS2文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的改進(jìn)部分區(qū)別于原文件系統(tǒng)的關(guān)鍵之處在于新增了sector_table、yaffs_sector等數(shù)據(jù)結(jié)構(gòu),而對(duì)于原有的YAFFS2文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)通過成員變量增刪改移的方式實(shí)現(xiàn),由于篇幅限制,不作詳述。
1)sector_table
分區(qū)屬性表sector_table通過YAFFS2文件系統(tǒng)系統(tǒng)中封裝的鏈表管理list_head數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
鏈表節(jié)點(diǎn)具體內(nèi)容通過數(shù)據(jù)結(jié)構(gòu)sector_info表示。每一個(gè)分區(qū)對(duì)應(yīng)一個(gè)sector_info實(shí)例對(duì)象,并在分區(qū)屬性表sector_table中注冊(cè),其結(jié)構(gòu)設(shè)計(jì)如圖2所示。
圖2 sector_info數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
其中,分區(qū)ID用以實(shí)現(xiàn)文件系統(tǒng)后臺(tái)程序?qū)Ψ謪^(qū)的快速訪問,分區(qū)名稱實(shí)現(xiàn)通過路徑名對(duì)分區(qū)的訪問。分區(qū)信息結(jié)構(gòu)入口保存了對(duì)應(yīng)的分區(qū)實(shí)際管理結(jié)構(gòu)指針。
2)yaffs_sector
yaffs_sector數(shù)據(jù)結(jié)構(gòu)是分區(qū)YAFFS2文件系統(tǒng)實(shí)現(xiàn)分區(qū)管理的核心數(shù)據(jù)結(jié)構(gòu),其分擔(dān)了原先由yaffs_dev管理的部分功能,實(shí)現(xiàn)對(duì)分區(qū)界限、分區(qū)對(duì)象分配、分區(qū)垃圾回收過程信息等的管理。其具體實(shí)現(xiàn)如圖3所示。
圖3 yaffs_sector數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
其中成員變量主要包括分區(qū)核心信息、分區(qū)下屬數(shù)據(jù)結(jié)構(gòu)實(shí)例、分區(qū)管理函數(shù)入口指針等。其中分區(qū)管理函數(shù)由結(jié)構(gòu)體sector_behaviors統(tǒng)一管理,其實(shí)現(xiàn)過程如圖4所示。
圖4 sector_behaviors數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
而對(duì)于其他YAFFS2文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)在原來的基礎(chǔ)上進(jìn)行成員變量增刪改移。yaffs_dev數(shù)據(jù)結(jié)構(gòu)中將yaffs_obj對(duì)象實(shí)例桶結(jié)構(gòu)信息、塊信息數(shù)組和chunk位圖等block與chunk統(tǒng)計(jì)信息、tnode分配器信息、垃圾回收相關(guān)過程信息、tag數(shù)組信息等移至分區(qū)結(jié)構(gòu)yaffs_sector中,經(jīng)由各分區(qū)各自統(tǒng)計(jì),不再統(tǒng)一管理以避免分區(qū)數(shù)據(jù)混亂。yaffs_file、yaffs_obj、yaffs_ext_tags、yaffs_summary_tags、yaffs_packed_tags2_tags_only等數(shù)據(jù)結(jié)構(gòu)中引入新的整型成員變量sector_id,表示分區(qū)ID以區(qū)分?jǐn)?shù)據(jù)結(jié)構(gòu)對(duì)象實(shí)例所屬分區(qū)。
對(duì)YAFFS2文件系統(tǒng)原先各種功能實(shí)現(xiàn)機(jī)制的修改包括對(duì)YAFFS2文件系統(tǒng)垃圾回收機(jī)制、checkpoint機(jī)制、文件系統(tǒng)加載機(jī)制等的改進(jìn),由于篇幅限制,下面只進(jìn)行部分介紹。
3)垃圾回收機(jī)制
分區(qū)YAFFS2文件系統(tǒng)的垃圾回收過程改為在yaffs_bg_start函數(shù)啟動(dòng)的線程當(dāng)中通過循環(huán)分別掃描每個(gè)分區(qū)的塊頁分配情況,并根據(jù)各分區(qū)的分配情況只針對(duì)有垃圾回收需求的分區(qū)啟動(dòng)緊急回收策略或者非緊急回收策略,對(duì)于存儲(chǔ)空間不緊張的分區(qū)不采取垃圾回收行動(dòng)。也就是在分區(qū)YAFFS2文件系統(tǒng)中,垃圾回收過程針對(duì)每個(gè)分區(qū)來說是獨(dú)立進(jìn)行的,互不干擾。
4)checkpoint機(jī)制
checkpoint信息不再在整個(gè)NAND Flash存儲(chǔ)介質(zhì)上任意存儲(chǔ),而是每個(gè)分區(qū)獨(dú)立保存各自對(duì)應(yīng)的checkpoint信息,防止在加載分區(qū)文件系統(tǒng)時(shí)造成跨分區(qū)數(shù)據(jù)訪問。
其中,yaffs_calc_checkpt_blocks_required(dev)原本是計(jì)算整個(gè)NAND Flash存儲(chǔ)介質(zhì)上是否有足夠空間來保存整個(gè)YAFFS2文件系統(tǒng)的checkpoint信息,已修改為計(jì)算分區(qū)內(nèi)的剩余空間能否滿足分區(qū)checkpoint需求。
5)文件系統(tǒng)加載機(jī)制
分區(qū)的加載是獨(dú)立的,如果通過checkpoint加載失敗則轉(zhuǎn)而通過掃描整個(gè)分區(qū)區(qū)域加載,而通過checkpoint加載成功的分區(qū)則無需再通過掃描進(jìn)行加載。
本文使用的實(shí)驗(yàn)環(huán)境軟件平臺(tái)為Ubuntu 12.04,操作系統(tǒng)內(nèi)核版本號(hào)為3.11.0-15-generic;實(shí)驗(yàn)硬件平臺(tái)基礎(chǔ)采用的CPU處理器型號(hào)為Intel Core i7 CPU 2.74 GHz,內(nèi)存大小和型號(hào)為4G DDR3 1 600 MHz,并使用Linux操作系統(tǒng)自帶的NANDSIM模塊在內(nèi)存中模擬NAND Flash存儲(chǔ)器作為分區(qū)YAFFS2文件系統(tǒng)的測試載體。模擬生成的NAND Flash存儲(chǔ)芯片其總?cè)萘繛?G,其物理塊數(shù)為8 192塊,每塊頁數(shù)為62頁,每個(gè)物理頁大小為2 kb。
本文借助IOzone測試工具實(shí)現(xiàn)對(duì)分區(qū)YAFFS2文件系統(tǒng)的讀寫性能測試和評(píng)估。由于本文針對(duì)載荷數(shù)據(jù)研究YAFFS2文件系統(tǒng)分區(qū)管理對(duì)存儲(chǔ)效率的影響,因此本文選擇IOzone工具的多線程測試模式,相當(dāng)于每個(gè)載荷各自對(duì)應(yīng)于一個(gè)線程,測試命令為:iozone-s 4m-i 0-i 1-r 2m-l 1-u 4-I-o-Rb/home/wucanqiang/test/4m-2m-1-4.xls
其中,配置項(xiàng)-s表示文件大小,-r表示記錄塊大小(在測試過程中手動(dòng)配置,測試范圍為2K~4M),-l表示最小線程數(shù)為1個(gè),-u表示最大線程數(shù)為4個(gè)。
為保證實(shí)驗(yàn)數(shù)據(jù)可信度,本文將底層文件訪問粒度(文件大小)設(shè)置為4 M,緩存大小設(shè)置為1 M,并通過IOzone對(duì)物理存儲(chǔ)設(shè)備直接寫入讀出的方式(配置項(xiàng)-I-o)進(jìn)行100次讀寫操作,計(jì)算其平均讀寫速度值,規(guī)避緩存對(duì)讀寫速度產(chǎn)生的影響。根據(jù)IOzone測試工具生成的報(bào)表數(shù)據(jù),文中為了便于實(shí)驗(yàn)數(shù)據(jù)分析,將其轉(zhuǎn)化為圖5和圖6的折線圖。
圖5 分區(qū)前后YAFFS2文件系統(tǒng)讀速度變化情況
如圖5所示,其橫坐標(biāo)表示記錄塊大小,即從4 M的文件大小下所讀取數(shù)據(jù)大小,縱坐標(biāo)表示分區(qū)前后YAFFS2文件系統(tǒng)的讀速率,圖中淺色曲線表示分區(qū)YAFFS2文件系統(tǒng)的讀速度變化情況,深色曲線表示原YAFFS2文件系統(tǒng)的讀速度變化情況。從圖中數(shù)據(jù)可以明顯看出,分區(qū)YAFFS2文件系統(tǒng)相對(duì)了原YAFFS2文件系統(tǒng)在實(shí)現(xiàn)對(duì)文件數(shù)據(jù)大小記錄塊的讀操作時(shí),其讀速度穩(wěn)定優(yōu)于原YAFFS2文件系統(tǒng)。
圖6 分區(qū)前后YAFFS2文件系統(tǒng)寫速度變化情況
如圖6所示,其橫坐標(biāo)表示寫入文件數(shù)據(jù)大小,縱坐標(biāo)表示分區(qū)前后YAFFS2文件系統(tǒng)的寫速率,圖中淺色曲線表示分區(qū)YAFFS2文件系統(tǒng)的寫速度變化情況,深色曲線表示原YAFFS2文件系統(tǒng)的寫速度變化情況。從圖中數(shù)據(jù)可以看出,YAFFS2文件系統(tǒng)引入分區(qū)管理功能之后并沒有對(duì)原YAFFS2文件系統(tǒng)的寫速度造成影響,同時(shí)又能保證在多任務(wù)環(huán)境下對(duì)復(fù)雜的大數(shù)據(jù)檢索效率得到一定提高,并使得載荷數(shù)據(jù)能分類獨(dú)立存儲(chǔ),提高載荷數(shù)據(jù)的可靠性。
在星載環(huán)境中,載荷/任務(wù)數(shù)據(jù)種類和數(shù)據(jù)量多,對(duì)于數(shù)據(jù)的查找方式一般既要區(qū)分載荷類型又得區(qū)分時(shí)間段等多重信息。通過對(duì)YAFFS2文件系統(tǒng)優(yōu)缺點(diǎn)的深入研究和分析,本文提出在YAFFS2文件系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)分區(qū)策略架構(gòu),通過引入分區(qū)管理功能,實(shí)現(xiàn)對(duì)多種載荷/任務(wù)數(shù)據(jù)的隔離管理和對(duì)分區(qū)的訪問控制。使得對(duì)于上層用戶來說,底層存儲(chǔ)介質(zhì)存放的數(shù)據(jù)是安全獨(dú)立的,不會(huì)摻雜其它無關(guān)數(shù)據(jù)內(nèi)容和其它載荷/任務(wù)數(shù)據(jù),以此增加多載荷/任務(wù)數(shù)據(jù)的可靠性以及提高對(duì)復(fù)雜數(shù)據(jù)的檢索效率。實(shí)驗(yàn)結(jié)果表明,分區(qū)YAFFS2文件系統(tǒng)分區(qū)管理功能正常,同時(shí)分區(qū)YAFFS2文件系統(tǒng)讀寫速度均穩(wěn)定優(yōu)于原YAFFS2文件系統(tǒng)。但在實(shí)驗(yàn)過程中發(fā)現(xiàn),因?yàn)閅AFFS2文件系統(tǒng)在數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)上的復(fù)雜性,使得YAFFS2文件系統(tǒng)只能管理幾十GB的數(shù)據(jù)量,無法滿足未來星載數(shù)據(jù)存儲(chǔ)管理要求,因此提出針對(duì)YAFFS2文件系統(tǒng)管理空間的優(yōu)化設(shè)計(jì)將是本文下一步的研究重點(diǎn)方向。