基于FLASH星載存儲器的高效管理研究
壞塊管理的另外一個任務就是決定何時對新產生的壞塊進行標記。YAFFS2 采用產生即標記的策略,對于新產生的壞塊馬上進行標記處理。該方法可以保證壞塊表的實時更新,是采用額外存儲介質保存壞塊表的比較理想的方案。但是本方案的壞塊標記采用直接寫入 FLASH 的策略,實時標記壞塊會降低系統的數據處理能力,有可能造成數據的丟失。因而本方案不對壞塊進行實時標記,而是首先在內存中將新產生壞塊記錄下來,等到系統空閑的 時候才進行壞塊標記。
3.3 垃圾回收策略
NAND FLASH 只能在空閑塊中寫入數據,對于已經使用過的塊必須進行擦除使之成為空閑塊才能再次使用,這個過程稱為垃圾回收。垃圾回收涉及到對塊的擦除操作以及塊內有效數據頁的重新寫入,對系統性能影響較大,因而合適的回收時機與策略是垃圾回收的關鍵。 YAFFS2 采用的垃圾回收策略為:每次在數據寫入之前判斷當前可用的空閑塊,如果可用空閑塊數量較少,則馬上進行垃圾回收;如果空閑塊較多,則采用松弛的回收算法,寫多次再 進行一次垃圾回收。YAFFS2 垃圾回收以剩余空閑塊數目作為是否回收的依據,而沒有考慮 數據流存儲的特點,因而在數據寫入的時候經常會碰到需要垃圾回收的情況,導致數據存儲速率的大幅下降。針對不同的應用環境,還存在一些其它的垃圾回收算法[4]。這些算法的共同特點是盡量尋找合適的回收時機減小對數據寫入的影響,同時選擇合適的回收策略提高系 統性能,但這些算法策略過于復雜,不適合空間應用。
考慮到星載存儲器運行模式及衛星對數據實時存儲要求苛刻的特點,本方案不在寫入數據時進行垃圾回收,而選擇在系統空閑時由用戶主動進行垃圾回收。當容量不足的時候文件系統給出提示信息,告知用戶需要進行垃圾回收,用戶也可以隨時查詢文件系統的狀態信息。該方案設計最為簡單,對數據寫入的影響也最小,只是每當系統容量不足的時候需要用戶主 動進行垃圾回收。
4. 系統實現與測試
以某星載存儲器項目為背景,本文實現了一個如圖 1 所示結構的星載存儲器演示系統。 該系統采用Samsung K9F1G08U0A 芯片組成4*4 的存儲陣列作為存儲空間,采用Xilinx xc2vp40 FPGA 芯片作為控制芯片,同時選用FPGA 內嵌軟核MicroBlaze 完成CPU 功能 [5]。FPGA 同時負責完成FLASH 驅動層的功能,降低軟件的控制復雜度,提高FLASH 的訪 問效率。對于輸入輸出數據流的控制也使用FPGA 邏輯完成。本系統利用FLASH 存儲芯片 和FPGA 控制芯片實現了一個SOPC 的存儲系統,極大地簡化了存儲器的硬件結構,并且 具有很大的靈活性。
演示系統采用 2 路SPI 實時視頻流模擬數據輸入,通過自定義協議傳輸存儲數據至地面 數據接收卡實現數據輸出。由于原始YAFFS2 文件系統只能對單片FLASH 進行管理,因而 首先在單片FLASH 上對原始YAFFS2 進行測試,然后修改FLASH 底層驅動使得YAFFS2 能 夠管理4 片并行存儲結構,最后對實際的修改后方案進行測試。測試結果顯示,采用原始 YAFFS2 文件系統的數據實時輸入速率小于12.5Mbps,改進為并行結構后數據輸入速率也不會超過50Mbps,否則會造成輸入數據的部分丟失。而采用本文改進方案的設計,實時數 據輸入速率達到200Mbps,數據存儲穩定可靠。
上述測試結果表明,改進后的方案不但很好地實現了數據的文件化管理,數據實時輸入 速率也比原始YAFFS2 系統至少提高了16 倍。該系統的數據指標已經能夠滿足部分星載存 儲器的要求,為了進一步提高數據處理能力,可以考慮增加并行的芯片數目以及采用多級流 水線的設計結構。
5. 結束語
以 NAND FLASH 為存儲介質的大容量存儲器在空間應用中得到越來越廣泛的重視,但 是由于FLASH 使用的特殊性,目前國內的FLASH 星載存儲器普遍尚未采用文件系統進行數據管理,而是采用直接訪問存儲芯片的方式,數據管理復雜且使用缺乏靈活性。本文以商用 文件系統YAFFS2 為基礎,針對空間應用數據存儲的特點,提出了YAFFS2 文件系統的改進方案,并且實現了一個實際的星載存儲器系統,對改進后的方案進行了驗證。實驗表明,改進后的文件系統很好地完成了數據的文件化管理,并且滿足了空間應用大容量、高實時數據 率存儲的要求。
評論