基于FLASH星載存儲(chǔ)器的高效管理研究
掃描二維碼
隨時(shí)隨地手機(jī)看文章
NAND FLASH開(kāi)始廣泛應(yīng)用于星載存儲(chǔ)器,針對(duì)FLASH的數(shù)據(jù)高效管理成為該類存儲(chǔ)器研究的重要組成部分。本文以商用文件系統(tǒng)YAFFS2為基礎(chǔ),結(jié)合空間應(yīng)用的數(shù)據(jù)存儲(chǔ)特點(diǎn),引入文件系統(tǒng)的概念對(duì)存儲(chǔ)器數(shù)據(jù)進(jìn)行管理,制定了針對(duì)星載存儲(chǔ)器的數(shù)據(jù)管理方案,搭建了一個(gè)實(shí)際的星載存儲(chǔ)器對(duì)相應(yīng)的管理方案進(jìn)行了驗(yàn)證。
1. 引言
在航天航空任務(wù)中,數(shù)據(jù)存儲(chǔ)占有重要的地位,高可靠的大容量數(shù)據(jù)存儲(chǔ)設(shè)備是衛(wèi)星上 的關(guān)鍵設(shè)備之一。由于半導(dǎo)體存儲(chǔ)芯片具有高集成度、高存儲(chǔ)密度、低功耗、防腐防震等突 出優(yōu)點(diǎn),因而使用半導(dǎo)體存儲(chǔ)芯片作為數(shù)據(jù)存儲(chǔ)介質(zhì)成為星載數(shù)據(jù)存儲(chǔ)設(shè)備的主流設(shè)計(jì)方案。NAND FLASH 作為一種優(yōu)秀的半導(dǎo)體存儲(chǔ)芯片,同時(shí)具有掉電非易失的特性,而且它強(qiáng)調(diào)降低每比特?cái)?shù)據(jù)的存儲(chǔ)成本,提供更高的存儲(chǔ)密度和更好的性能,是理想的數(shù)據(jù)存儲(chǔ)介 質(zhì)。但NAND FLASH 自身具有一些特性,使得它不能像普通磁盤那樣進(jìn)行操作[1],因而需 要設(shè)計(jì)專門的文件系統(tǒng)來(lái)進(jìn)行基于NAND FLASH 存儲(chǔ)器的管理,提高存儲(chǔ)器的可靠性和易 用性[2]。
本文的組織方式如下:第二節(jié)研究了空間應(yīng)用的數(shù)據(jù)存儲(chǔ)特點(diǎn),并提出了相應(yīng)的星載存儲(chǔ)器硬件設(shè)計(jì)結(jié)構(gòu)。第三節(jié)具體分析了YAFFS2[3]各個(gè)關(guān)鍵算法的優(yōu)缺點(diǎn),并針對(duì)空間應(yīng)用提出了相應(yīng)的修改方案。第四節(jié)實(shí)現(xiàn)了一個(gè)具體的空間存儲(chǔ)器系統(tǒng),對(duì)第三節(jié)中的算法進(jìn)行 了實(shí)驗(yàn)驗(yàn)證。最后第五節(jié)是對(duì)全文的總結(jié)。
2. 星載存儲(chǔ)器硬件結(jié)構(gòu)
2.1 空間任務(wù)的數(shù)據(jù)存儲(chǔ)特點(diǎn)
隨著對(duì)地觀測(cè)技術(shù)的發(fā)展,對(duì)地觀測(cè)設(shè)備對(duì)星載存儲(chǔ)設(shè)備的要求越來(lái)越高。首先,數(shù)據(jù)存儲(chǔ)容量的要求逐步提高,各種觀測(cè)設(shè)備精度不斷增加,工作壽命不斷延長(zhǎng),隨之產(chǎn)生的數(shù)據(jù)量急劇增加,需要更高容量的存儲(chǔ)設(shè)備才能滿足要求;其次,數(shù)據(jù)存儲(chǔ)速率的要求較高,且需滿足實(shí)時(shí)性數(shù)據(jù)存儲(chǔ)功能。空間飛行器往往需要同時(shí)執(zhí)行多種任務(wù),產(chǎn)生高速的實(shí)時(shí)數(shù)據(jù)流,因而實(shí)時(shí)高效的數(shù)據(jù)處理能力是存儲(chǔ)器管理的重要能力之一;最后,數(shù)據(jù)存儲(chǔ)應(yīng)具有很高的可靠性,由于空間環(huán)境的惡劣性,空間電磁波或者粒子輻射會(huì)造成存儲(chǔ)數(shù)據(jù)的損害,因而必須提供可靠的數(shù)據(jù)保護(hù)。
2.2 硬件結(jié)構(gòu)的設(shè)計(jì)
根據(jù)空間數(shù)據(jù)存儲(chǔ)的特點(diǎn),設(shè)計(jì)大容量存儲(chǔ)器硬件結(jié)構(gòu)如圖 1 所示。
圖 1 存儲(chǔ)器硬件結(jié)構(gòu)圖 由于單片F(xiàn)LASH 存儲(chǔ)容量有限,因而采用多片F(xiàn)LASH 組成存儲(chǔ)陣列,提升存儲(chǔ)器的總?cè)萘俊?/p>
為了提高存儲(chǔ)速率,引入并行擴(kuò)展和流水線操作的概念,將存儲(chǔ)陣列劃分為流水線組,每組多片芯片構(gòu)成并行結(jié)構(gòu)。并行擴(kuò)展的概念較為直接,由于單片F(xiàn)LASH 芯片的數(shù)據(jù)總線 位寬較小,因而將多片芯片的IO 端口進(jìn)行并行擴(kuò)展,而所有控制信號(hào)直接連接在一起,這 樣每組芯片可以看作一個(gè)整體進(jìn)行控制,實(shí)現(xiàn)了數(shù)據(jù)的并行操作。并行N 片的寬總線結(jié)構(gòu)數(shù)據(jù)處理能力可以達(dá)到單片芯片的N 倍。另外由于FLASH 芯片為串行操作接口,數(shù)據(jù)的寫入需要經(jīng)過(guò)數(shù)據(jù)加載、芯片自動(dòng)編程、狀態(tài)讀取的過(guò)程才能執(zhí)行下一次的寫入操作,因而寫入性能較差??紤]到芯片自動(dòng)編程過(guò)程的時(shí)間較長(zhǎng)且不需要外部干預(yù),可以借鑒流水線的設(shè)計(jì)思想,利用這段空閑時(shí)間對(duì)其他組芯片進(jìn)行控制,提高數(shù)據(jù)吞吐率。流水線操作示意圖如 圖2 所示。假設(shè)數(shù)據(jù)加載時(shí)間為Tload,芯片自動(dòng)編程時(shí)間為Tprog,狀態(tài)讀取時(shí)間為 Tcheck,采用M 級(jí)流水線完成一次流水操作的總時(shí)間不超過(guò)(Tload+Tcheck)*M+Tprog, 相比不采用流水線操作縮短了(M-1)*Tprog 時(shí)間,提高了數(shù)據(jù)吞吐率。具體的總線寬度以及 流水線級(jí)數(shù)設(shè)置可以根據(jù)具體應(yīng)用需求確定。
最后,為了提高數(shù)據(jù)的可靠性,在 FLASH 控制模塊中增加數(shù)據(jù)檢錯(cuò)糾錯(cuò)處理模塊。
圖 2 流水線操作示意圖
3. YAFFS2 分析與改進(jìn)
YAFFS2 具有優(yōu)良的文件管理特性,但是畢竟YAFFS2 是針對(duì)商用領(lǐng)域設(shè)計(jì)的文件系統(tǒng),對(duì)于空間應(yīng)用并沒(méi)有特殊考慮,直接應(yīng)用有其局限性。本節(jié)針對(duì)空間存儲(chǔ)器的特點(diǎn),對(duì) YAFFS2 不適合空間應(yīng)用的方面提出具體的修改方案,使得修改后的文件系統(tǒng)能夠滿足空間 數(shù)據(jù)存儲(chǔ)的需求。
3.1 硬件結(jié)構(gòu)適應(yīng)性
YAFFS2 文件系統(tǒng)只是針對(duì)單片F(xiàn)LASH 設(shè)計(jì)的系統(tǒng),對(duì)于FLASH 存儲(chǔ)陣列的結(jié)構(gòu)沒(méi)有 考慮,因而不適宜于直接在陣列結(jié)構(gòu)上面使用,需要進(jìn)行修改。
并行結(jié)構(gòu)的處理比較簡(jiǎn)單,將同組內(nèi)的所有芯片當(dāng)作整體統(tǒng)一進(jìn)行處理即可。這樣的設(shè)計(jì)簡(jiǎn)單,但也會(huì)帶來(lái)一些額外的問(wèn)題需要注意。比如當(dāng)某一片芯片出現(xiàn)壞塊的時(shí)候,組內(nèi)其他芯片相應(yīng)塊也需標(biāo)記為壞塊,造成一定的存儲(chǔ)空間浪費(fèi)。另外讀取該組狀態(tài)的時(shí)候需要同時(shí)兼顧并行多片的狀態(tài)。這些問(wèn)題需要在文件系統(tǒng)設(shè)計(jì)中進(jìn)行相應(yīng)的修改。 流水線的設(shè)計(jì)較為復(fù)雜。由于YAFFS2 的存儲(chǔ)區(qū)管理是基于單片芯片的,因而在多級(jí)流 水線結(jié)構(gòu)中,每級(jí)流水線需要單獨(dú)維護(hù)自己的存儲(chǔ)區(qū),比如存儲(chǔ)塊的分配、壞塊的標(biāo)記等。數(shù)據(jù)寫入的時(shí)候首先需要選擇流水線級(jí),在流水線級(jí)內(nèi)部再采用現(xiàn)有的存儲(chǔ)區(qū)管理方式。
3.2 壞塊管理策略
FLASH 壞塊的類型可以分為初始?jí)膲K和使用時(shí)產(chǎn)生壞塊兩類,不同芯片廠家采用不同 的方式標(biāo)示初始?jí)膲K,用戶可以根據(jù)具體的芯片手冊(cè)進(jìn)行壞塊識(shí)別。三星NAND FLASH 通 過(guò)在每塊的第一頁(yè)或第二頁(yè)的第2048 字節(jié)寫入非0xFF 來(lái)標(biāo)示初始?jí)膲K,新產(chǎn)生的壞塊則 需要用戶自己進(jìn)行記錄。
壞塊管理的首要任務(wù)就是對(duì)壞塊進(jìn)行識(shí)別和標(biāo)記,并且對(duì)于壞塊盡量不再進(jìn)行擦寫操 作。YAFFS2 文件系統(tǒng)要求底層FLASH 驅(qū)動(dòng)提供壞塊識(shí)別和標(biāo)記的函數(shù),文件系統(tǒng)對(duì)這部分 功能并沒(méi)有實(shí)現(xiàn),也沒(méi)有要求具體的實(shí)現(xiàn)方式??紤]到存儲(chǔ)區(qū)的并行結(jié)構(gòu)特點(diǎn),本方案對(duì)新產(chǎn)生的壞塊也采用在該塊第一頁(yè)的第2048 字節(jié)寫入非0xFF 的方法進(jìn)行標(biāo)記。由于寫入或者擦除是對(duì)組內(nèi)并行多片芯片同時(shí)進(jìn)行操作,而這些芯片同時(shí)發(fā)生壞塊的概率可以認(rèn)為接近于0,因而對(duì)于壞塊的標(biāo)記總能夠成功寫入某個(gè)芯片。該方法將新產(chǎn)生壞塊和原始?jí)膲K進(jìn)行了統(tǒng)一,設(shè)計(jì)簡(jiǎn)單并且不需要額外的存儲(chǔ)空間來(lái)存儲(chǔ)壞塊表,缺點(diǎn)是對(duì)于新產(chǎn)生的壞塊還有 一次寫入操作。
壞塊管理的另外一個(gè)任務(wù)就是決定何時(shí)對(duì)新產(chǎn)生的壞塊進(jìn)行標(biāo)記。YAFFS2 采用產(chǎn)生即標(biāo)記的策略,對(duì)于新產(chǎn)生的壞塊馬上進(jìn)行標(biāo)記處理。該方法可以保證壞塊表的實(shí)時(shí)更新,是采用額外存儲(chǔ)介質(zhì)保存壞塊表的比較理想的方案。但是本方案的壞塊標(biāo)記采用直接寫入 FLASH 的策略,實(shí)時(shí)標(biāo)記壞塊會(huì)降低系統(tǒng)的數(shù)據(jù)處理能力,有可能造成數(shù)據(jù)的丟失。因而本方案不對(duì)壞塊進(jìn)行實(shí)時(shí)標(biāo)記,而是首先在內(nèi)存中將新產(chǎn)生壞塊記錄下來(lái),等到系統(tǒng)空閑的 時(shí)候才進(jìn)行壞塊標(biāo)記。
3.3 垃圾回收策略
NAND FLASH 只能在空閑塊中寫入數(shù)據(jù),對(duì)于已經(jīng)使用過(guò)的塊必須進(jìn)行擦除使之成為空閑塊才能再次使用,這個(gè)過(guò)程稱為垃圾回收。垃圾回收涉及到對(duì)塊的擦除操作以及塊內(nèi)有效數(shù)據(jù)頁(yè)的重新寫入,對(duì)系統(tǒng)性能影響較大,因而合適的回收時(shí)機(jī)與策略是垃圾回收的關(guān)鍵。 YAFFS2 采用的垃圾回收策略為:每次在數(shù)據(jù)寫入之前判斷當(dāng)前可用的空閑塊,如果可用空閑塊數(shù)量較少,則馬上進(jìn)行垃圾回收;如果空閑塊較多,則采用松弛的回收算法,寫多次再 進(jìn)行一次垃圾回收。YAFFS2 垃圾回收以剩余空閑塊數(shù)目作為是否回收的依據(jù),而沒(méi)有考慮 數(shù)據(jù)流存儲(chǔ)的特點(diǎn),因而在數(shù)據(jù)寫入的時(shí)候經(jīng)常會(huì)碰到需要垃圾回收的情況,導(dǎo)致數(shù)據(jù)存儲(chǔ)速率的大幅下降。針對(duì)不同的應(yīng)用環(huán)境,還存在一些其它的垃圾回收算法[4]。這些算法的共同特點(diǎn)是盡量尋找合適的回收時(shí)機(jī)減小對(duì)數(shù)據(jù)寫入的影響,同時(shí)選擇合適的回收策略提高系 統(tǒng)性能,但這些算法策略過(guò)于復(fù)雜,不適合空間應(yīng)用。
考慮到星載存儲(chǔ)器運(yùn)行模式及衛(wèi)星對(duì)數(shù)據(jù)實(shí)時(shí)存儲(chǔ)要求苛刻的特點(diǎn),本方案不在寫入數(shù)據(jù)時(shí)進(jìn)行垃圾回收,而選擇在系統(tǒng)空閑時(shí)由用戶主動(dòng)進(jìn)行垃圾回收。當(dāng)容量不足的時(shí)候文件系統(tǒng)給出提示信息,告知用戶需要進(jìn)行垃圾回收,用戶也可以隨時(shí)查詢文件系統(tǒng)的狀態(tài)信息。該方案設(shè)計(jì)最為簡(jiǎn)單,對(duì)數(shù)據(jù)寫入的影響也最小,只是每當(dāng)系統(tǒng)容量不足的時(shí)候需要用戶主 動(dòng)進(jìn)行垃圾回收。
4. 系統(tǒng)實(shí)現(xiàn)與測(cè)試
以某星載存儲(chǔ)器項(xiàng)目為背景,本文實(shí)現(xiàn)了一個(gè)如圖 1 所示結(jié)構(gòu)的星載存儲(chǔ)器演示系統(tǒng)。 該系統(tǒng)采用Samsung K9F1G08U0A 芯片組成4*4 的存儲(chǔ)陣列作為存儲(chǔ)空間,采用Xilinx xc2vp40 FPGA 芯片作為控制芯片,同時(shí)選用FPGA 內(nèi)嵌軟核MicroBlaze 完成CPU 功能 [5]。FPGA 同時(shí)負(fù)責(zé)完成FLASH 驅(qū)動(dòng)層的功能,降低軟件的控制復(fù)雜度,提高FLASH 的訪 問(wèn)效率。對(duì)于輸入輸出數(shù)據(jù)流的控制也使用FPGA 邏輯完成。本系統(tǒng)利用FLASH 存儲(chǔ)芯片 和FPGA 控制芯片實(shí)現(xiàn)了一個(gè)SOPC 的存儲(chǔ)系統(tǒng),極大地簡(jiǎn)化了存儲(chǔ)器的硬件結(jié)構(gòu),并且 具有很大的靈活性。
演示系統(tǒng)采用 2 路SPI 實(shí)時(shí)視頻流模擬數(shù)據(jù)輸入,通過(guò)自定義協(xié)議傳輸存儲(chǔ)數(shù)據(jù)至地面 數(shù)據(jù)接收卡實(shí)現(xiàn)數(shù)據(jù)輸出。由于原始YAFFS2 文件系統(tǒng)只能對(duì)單片F(xiàn)LASH 進(jìn)行管理,因而 首先在單片F(xiàn)LASH 上對(duì)原始YAFFS2 進(jìn)行測(cè)試,然后修改FLASH 底層驅(qū)動(dòng)使得YAFFS2 能 夠管理4 片并行存儲(chǔ)結(jié)構(gòu),最后對(duì)實(shí)際的修改后方案進(jìn)行測(cè)試。測(cè)試結(jié)果顯示,采用原始 YAFFS2 文件系統(tǒng)的數(shù)據(jù)實(shí)時(shí)輸入速率小于12.5Mbps,改進(jìn)為并行結(jié)構(gòu)后數(shù)據(jù)輸入速率也不會(huì)超過(guò)50Mbps,否則會(huì)造成輸入數(shù)據(jù)的部分丟失。而采用本文改進(jìn)方案的設(shè)計(jì),實(shí)時(shí)數(shù) 據(jù)輸入速率達(dá)到200Mbps,數(shù)據(jù)存儲(chǔ)穩(wěn)定可靠。
上述測(cè)試結(jié)果表明,改進(jìn)后的方案不但很好地實(shí)現(xiàn)了數(shù)據(jù)的文件化管理,數(shù)據(jù)實(shí)時(shí)輸入 速率也比原始YAFFS2 系統(tǒng)至少提高了16 倍。該系統(tǒng)的數(shù)據(jù)指標(biāo)已經(jīng)能夠滿足部分星載存 儲(chǔ)器的要求,為了進(jìn)一步提高數(shù)據(jù)處理能力,可以考慮增加并行的芯片數(shù)目以及采用多級(jí)流 水線的設(shè)計(jì)結(jié)構(gòu)。
5. 結(jié)束語(yǔ)
以 NAND FLASH 為存儲(chǔ)介質(zhì)的大容量存儲(chǔ)器在空間應(yīng)用中得到越來(lái)越廣泛的重視,但 是由于FLASH 使用的特殊性,目前國(guó)內(nèi)的FLASH 星載存儲(chǔ)器普遍尚未采用文件系統(tǒng)進(jìn)行數(shù)據(jù)管理,而是采用直接訪問(wèn)存儲(chǔ)芯片的方式,數(shù)據(jù)管理復(fù)雜且使用缺乏靈活性。本文以商用 文件系統(tǒng)YAFFS2 為基礎(chǔ),針對(duì)空間應(yīng)用數(shù)據(jù)存儲(chǔ)的特點(diǎn),提出了YAFFS2 文件系統(tǒng)的改進(jìn)方案,并且實(shí)現(xiàn)了一個(gè)實(shí)際的星載存儲(chǔ)器系統(tǒng),對(duì)改進(jìn)后的方案進(jìn)行了驗(yàn)證。實(shí)驗(yàn)表明,改進(jìn)后的文件系統(tǒng)很好地完成了數(shù)據(jù)的文件化管理,并且滿足了空間應(yīng)用大容量、高實(shí)時(shí)數(shù)據(jù) 率存儲(chǔ)的要求。