,,,,
(1.上海航天電子技術(shù)研究所,上海 201109; 2.上海衛(wèi)星工程研究所,上海 200240)
存儲(chǔ)器是衛(wèi)星上的核心單機(jī)之一,其承載著載荷數(shù)據(jù)的記錄與回放功能?;贜AND Flash的固態(tài)存儲(chǔ)器由于沒有機(jī)械轉(zhuǎn)動(dòng)部件、存儲(chǔ)密度高、體積小、重量輕,并且具有抗震動(dòng)、抗沖擊、溫度適應(yīng)范圍寬等特性,已成為衛(wèi)星等各類宇航設(shè)備的主要數(shù)據(jù)存儲(chǔ)方式。商用固態(tài)存儲(chǔ)器主要是通過硬盤管理技術(shù)和閃存轉(zhuǎn)換層利用串行通信的方式實(shí)現(xiàn)對(duì)Flash的控制。由于管理復(fù)雜,接口速率存在瓶頸,不適合大容量高速率星載固態(tài)存儲(chǔ)器的使用。星載固態(tài)存儲(chǔ)器采用FPGA直接對(duì)Flash芯片進(jìn)行控制,提高了存儲(chǔ)器的讀寫速率,降低了管理的復(fù)雜度。
目前單片F(xiàn)lash存儲(chǔ)芯片的寫入速率為40 MB/s,遠(yuǎn)遠(yuǎn)滿足不了高速載荷的存儲(chǔ)速率要求,星載固態(tài)存儲(chǔ)器都是以分組并行存儲(chǔ)和多級(jí)流水的方式來提高存儲(chǔ)速率。由于NAND Flash存在壞塊,為了保證數(shù)據(jù)存儲(chǔ)的可靠性、完整性,當(dāng)前主要是通過跳過壞塊的方式進(jìn)行壞塊屏蔽。該方法簡單快捷,但是,并行存儲(chǔ)與多級(jí)流水操作會(huì)帶來壞塊疊加效應(yīng),使固態(tài)存儲(chǔ)器的初始容量損失較大,存儲(chǔ)容量的利用率較低。
Flash芯片的壞塊分為初始?jí)膲K和使用過程中產(chǎn)生的壞塊。圖1為3D PLUS公司提供的Flash芯片壞塊率曲線,由圖可知Flash芯片在使用壽命期限內(nèi)較為穩(wěn)定,產(chǎn)生壞塊的概率較低,因此影響固態(tài)存儲(chǔ)器容量損失的主要是Flash芯片的初始?jí)膲K[1]。
圖1 Flash芯片壞塊率曲線
正如前述,隨著存儲(chǔ)速率的提高,并行存儲(chǔ)的芯片數(shù)增多,以及壞塊的疊加效應(yīng)使固態(tài)存儲(chǔ)器的初始容量損失越來越嚴(yán)重。如何在存儲(chǔ)器存儲(chǔ)速率不斷提高的情況下,有效的控制固態(tài)存儲(chǔ)器的容量損失,提高初始存儲(chǔ)容量的使用率成為星載數(shù)據(jù)存儲(chǔ)的一個(gè)關(guān)鍵問題。
為了滿足高速載荷的數(shù)據(jù)存儲(chǔ)速率要求,并行存儲(chǔ)方案在固態(tài)存儲(chǔ)器中得到廣泛應(yīng)用。并行存儲(chǔ)通過拓寬數(shù)據(jù)位寬的方式來提高固態(tài)存儲(chǔ)器的吞吐率[2]。本文以某衛(wèi)星型號(hào)為例,介紹了星載固態(tài)存儲(chǔ)器的并行存儲(chǔ)架構(gòu)[3]。該固態(tài)存儲(chǔ)器的原理框圖如圖2所示,A、B機(jī)的中速數(shù)據(jù)控制板均可對(duì)公共存儲(chǔ)模塊進(jìn)行數(shù)據(jù)記錄和回放控制,中速數(shù)據(jù)控制板主要由高速緩存模塊、固態(tài)存儲(chǔ)控制器、FAT表/FCB表存儲(chǔ)器組成,cPCI存儲(chǔ)板主要由Flash存儲(chǔ)陣列組成。
圖2 存儲(chǔ)控制原理框圖
該衛(wèi)星型號(hào)的固態(tài)存儲(chǔ)器的Flash芯片組由9片64Gb的3Dplus公司三維封裝的Flash芯片并行級(jí)聯(lián)而成。組內(nèi)的9片F(xiàn)lash芯片共用F_wp、F_cle、F_ale、F_we、F_re、F_CE[7:0]、F_Rb[7:0]信號(hào),數(shù)據(jù)口進(jìn)行并行擴(kuò)展 F_dq[71:0]。因此Flash芯片組內(nèi)的9片芯片的讀寫和地址控制完全相同,其內(nèi)部結(jié)構(gòu)如圖3所示[4]。Flash芯片組之間相互獨(dú)立,可以根據(jù)具體任務(wù)速率要求,選擇1~4組Flash芯片組同時(shí)工作。
圖3 存儲(chǔ)陣列擴(kuò)展結(jié)構(gòu)圖
而芯片組內(nèi)的每一片F(xiàn)lash芯片是由8片三星公司的8Gbits的Flash基片K9F8G08U0M封裝而成,其內(nèi)部結(jié)構(gòu)如圖4所示。模塊內(nèi)部8片F(xiàn)lash基片共用I/O[7:0]口,其他信號(hào)各自獨(dú)立。
圖4 Flash芯片內(nèi)部結(jié)構(gòu)
因此,為了提高固態(tài)存儲(chǔ)器的寫入速率,在Flash芯片的8片基片之間進(jìn)行流水操作。Flash基片的寫過程主要分為一下幾步:
1)發(fā)送寫指令和寫地址;
2)發(fā)送4 096個(gè)字節(jié)的數(shù)據(jù);
3)發(fā)送寫結(jié)束指令。
實(shí)際上每一個(gè)基片都有一個(gè)與單個(gè)Page一樣大小的緩沖區(qū),當(dāng)Flash芯片收到寫結(jié)束指令后,F(xiàn)lash會(huì)將當(dāng)前緩沖區(qū)中的數(shù)據(jù)固化到對(duì)應(yīng)寫地址中。從3D plus公司提供的數(shù)據(jù)手冊(cè)可以知,一個(gè)page的數(shù)據(jù)從緩沖區(qū)固化到Flash中所需要時(shí)間為[300 μs-700 μs]。固化時(shí)間較長,影響固態(tài)存儲(chǔ)器的寫速率。因此在設(shè)計(jì)中,充分利用Flash芯片8片基片疊裝的特點(diǎn),采取流水的方式進(jìn)行編程操作。即通過對(duì)8片基片的片選信號(hào)ce[7:0]的控制來實(shí)現(xiàn)流水操作[5]。其實(shí)現(xiàn)過程如圖5所示。
圖5 Flash芯片流水操作示意圖
通過流水操作,使Flash芯片的IO口得到充分的利用,提高了單個(gè)Flash芯片的存儲(chǔ)速率。
由于NAND Flash的工藝原因,F(xiàn)lash芯片存在一定的壞塊是不可避免的,并且當(dāng)擦除次數(shù)達(dá)到一定數(shù)量之后也會(huì)產(chǎn)生新的壞塊。為了保證星上載荷數(shù)據(jù)的完整性,需要通過軟件對(duì)Flash芯片的壞塊進(jìn)行管理。首先通過讀取Flash的每個(gè)Block的第一個(gè)page的信息建立初始?jí)膲K表,在記錄、回放和擦除數(shù)據(jù)時(shí)通過對(duì)壞塊表的訪問,屏蔽掉對(duì)壞塊的操作。并在寫和擦除操作時(shí)通過讀取Flash狀態(tài)寄存器的信息對(duì)壞塊表進(jìn)行更新。
表1 待裝機(jī)Flash存儲(chǔ)芯片壞塊數(shù)量統(tǒng)計(jì)表
當(dāng)對(duì)固態(tài)存儲(chǔ)器進(jìn)行數(shù)據(jù)記錄,遇到壞塊時(shí)。傳統(tǒng)的壞塊管理方法直接對(duì)壞塊地址進(jìn)行跳過。但是,由上述并行存儲(chǔ)架構(gòu)可知,同芯片組,同芯片,同一級(jí)流水的基片地址與指令是統(tǒng)一的。即對(duì)同一工作內(nèi),同一級(jí)流水的塊寫、快讀和塊擦除僅需查詢和更新一次壞塊表。因此,當(dāng)發(fā)現(xiàn)芯片組內(nèi)任意一片基片有壞塊需要跳過時(shí),其余的71片基片相同地址的塊都要進(jìn)行舍棄,帶來了大量的存儲(chǔ)容量的損失[6]。
由圖3的存儲(chǔ)陣列擴(kuò)展示意圖可知,由于同一工作組的壞塊表是統(tǒng)一的,那么工作組內(nèi)的各芯片、各基片的壞塊將被疊加映射。對(duì)于該型號(hào)的固態(tài)存儲(chǔ)器,每9片F(xiàn)lash芯片組成一個(gè)芯片組,那么同一工作組的壞塊數(shù)量經(jīng)疊加映射后即為所有芯片的壞塊數(shù)總和。
以3D-plus公司提供的壞塊表為依據(jù),可知Flash芯片的平均出廠壞塊數(shù)約為50塊。且壞塊在Flash中是隨機(jī)分布的。因此Flash芯片中任意一個(gè)block為壞塊的概率為:Prandom=50/32768。對(duì)于該型號(hào)的固態(tài)存儲(chǔ)器,每9片F(xiàn)lash芯片組成一個(gè)芯片組。則在相同塊地址中多片F(xiàn)lash出現(xiàn)壞塊的概率:
由上述公式可得相同地址出現(xiàn)多個(gè)壞塊的概率約為0.0084%,因此工作組內(nèi)各個(gè)Flash的壞塊數(shù)量經(jīng)疊加映射后即為整個(gè)工作組的壞塊數(shù)總和。
當(dāng)前,為了減少固態(tài)存儲(chǔ)器的裝機(jī)容量損失,從232塊配料鎖定的Flash中挑選出壞塊數(shù)較少的108片的壞塊個(gè)數(shù)如表1所示(表格中的數(shù)量已進(jìn)行基片疊加)。按現(xiàn)有芯片的壞塊情況進(jìn)行壞塊率預(yù)估,該固態(tài)存儲(chǔ)器是A、B星兩臺(tái)單機(jī),分別裝機(jī)3T。3T×2的容量均從下表中的芯片中選擇裝配,共需9×12(工作組)=108片NAND Flash芯片。當(dāng)每個(gè)工作組的壞塊獨(dú)立疊加映射時(shí)(即每個(gè)工作組都有一個(gè)獨(dú)立的壞塊表),根據(jù)表1,取壞塊較少的108片進(jìn)行計(jì)算。A、B星兩臺(tái)存儲(chǔ)器的壞塊率約為4159(108片壞塊總和)/12(工作組)/4096=8.47%。而當(dāng)前XX型號(hào),兩個(gè)工作組共用一個(gè)壞塊表(即兩個(gè)工作組的壞塊相互疊加映射),A、B星兩臺(tái)存儲(chǔ)器的壞塊率約為4159(108片壞塊總和)/6(工作組)/4096=16.9%。最后經(jīng)裝機(jī)實(shí)測(cè)后,A、B星兩臺(tái)存儲(chǔ)器的壞塊數(shù)為4051,壞塊率為16.4%。即Flash壞塊的分布離散性較大。
從以上數(shù)據(jù)可知,即使從232片F(xiàn)lash中選擇壞塊數(shù)較少的108片F(xiàn)lash進(jìn)行裝配。6T的容量,當(dāng)兩組共用一個(gè)壞塊表時(shí),僅出廠壞塊就使固態(tài)存儲(chǔ)器損失約6T×16.4%=1T的容量。即使每組都有獨(dú)立的壞塊表,存儲(chǔ)器的容量損失仍然在6T×8.45%=0.5T左右。并且其余124片F(xiàn)lash芯片再進(jìn)行裝配時(shí),由于壞塊相對(duì)較多,容量損失將更為嚴(yán)重。
基于前述,針對(duì)目前壞塊剔除算法的弊端,本文提出了一種新的壞塊剔除算法,采用替補(bǔ)芯片對(duì)壞塊進(jìn)行映射補(bǔ)充的辦法,大幅降低目前并行存儲(chǔ)與多級(jí)流水操作帶來的壞塊疊加效應(yīng)。
本節(jié)首先介紹星載固態(tài)存儲(chǔ)器高效壞塊管理方法的架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)步驟,接著定義了固態(tài)存儲(chǔ)器容量損失度的評(píng)價(jià)指標(biāo)。該方法充分利用了Flash芯片壞塊分布的離散性,對(duì)Flash芯片的Block進(jìn)行一對(duì)多的映射備份,解決了一對(duì)一映射帶來的成本較高的問題,且能夠滿足星載固態(tài)存儲(chǔ)器并行存儲(chǔ)架構(gòu)同芯片組,同地址,同一級(jí)流水地址統(tǒng)一的需求。該方法通過邏輯地址與物理地址的映射與譯碼,將Flash芯片組的壞塊進(jìn)行地址映射和替換[7-8]。當(dāng)備份芯片數(shù)量恰當(dāng)時(shí),能夠顯著的提高固態(tài)存儲(chǔ)器Flash芯片的利用率,減少存儲(chǔ)器的有效容量損失,降低了單位存儲(chǔ)容量的成本。該算法實(shí)現(xiàn)的具體步驟如下:
Flash芯片裝機(jī)后,首先向存儲(chǔ)器發(fā)送初始化指令,通過讀取每個(gè)block第一個(gè)page的空閑區(qū)的第一個(gè)字節(jié),然后經(jīng)位拼接后,存儲(chǔ)在MRAM中,建立整個(gè)固態(tài)存儲(chǔ)器的壞塊表[9]。本文以裝機(jī)38片工作芯片為例進(jìn)行介紹,其中工作芯片36片,備份芯片2片,該表格格式如圖6所示。
圖6 固態(tài)存儲(chǔ)器初始?jí)膲K表
壞塊表從左到右和Flash_1--Flash_38一一對(duì)應(yīng),為1表示好塊,為0表示壞塊。從上倒下分別對(duì)應(yīng)Flash存儲(chǔ)芯片的塊地址。
由上述(3.1)可知,38片芯片中,有2組為備份芯片。其余36片芯片分為4個(gè)工作組,每組有9片芯片。2片芯片無法實(shí)現(xiàn)對(duì)單個(gè)芯片或單個(gè)工作組的一對(duì)一映射。因此,本設(shè)計(jì)充分利用Flash芯片的壞塊分布離散性較大的特點(diǎn),即多個(gè)連續(xù)地址區(qū)間內(nèi)有多個(gè)壞塊的可能性較小。對(duì)備份芯片進(jìn)行分區(qū)映射,如圖7所示:將備份芯片分為4個(gè)區(qū),分別對(duì)應(yīng)一個(gè)工作組。其中地址1-n/4為組1備份區(qū);地址n/4-2n/4為組2的備份區(qū);地址2n/4-3n/4為組3的備份區(qū);地址3n/4-n為組4的備份區(qū)。由備份區(qū)和工作組的地址長度可知,F(xiàn)lash芯片的備份關(guān)系為一對(duì)多。
圖7 Flash芯片分組備份示意圖
為了保持每個(gè)組之間的映射關(guān)系不相互影響,減少查找表的時(shí)間,將備份組也分為4個(gè)區(qū)間。每個(gè)備份組區(qū)間的地址深度變?yōu)楣ぷ鹘M地址深度的1/4。因此其映射關(guān)系為4對(duì)1,如上圖所示,工作組的4個(gè)地址區(qū)間對(duì)應(yīng)備份組的1個(gè)地址區(qū)間。當(dāng)這4個(gè)地址區(qū)間,即36個(gè)Block中有壞塊時(shí),將該壞塊地址映射到其對(duì)應(yīng)的地址空間中[10-11]。如上圖所示,對(duì)應(yīng)顏色的地址空間相互替換。當(dāng)同一族的4個(gè)地址空間中存在3個(gè)或3個(gè)以上的壞塊時(shí),如圖8族3所示,只對(duì)族3的第2個(gè)地址進(jìn)行替換,其他地址仍有壞塊時(shí),直接剔除。
圖8 Flash 芯片壞塊剔除示意圖
為了屏蔽存儲(chǔ)中壞塊的地址映射和替換問題,滿足并行存儲(chǔ)架構(gòu)的需求。(本文)建立了存儲(chǔ)邏輯地址與物理地址的映射表,映射表格式如圖9所示。
圖9 固態(tài)存儲(chǔ)器映射表
表中物理地址格式如下。
表1 物理地址格式
例如假設(shè)邏輯地址2對(duì)應(yīng)的物理地址為:34’b01111011111001110111111011 00001100則表示其對(duì)應(yīng)的Flash地址為第2組的1,2,3,5,6,7,8片芯片和備份組的第1片芯片。第2組的7片芯片的Block地址為16’0111011111101100;而備份組芯片的Block地址為:{組選信號(hào):Block地址的高14位},即16’b01011101111 11011;Page地址都為001100。即能夠通過對(duì)物理地址的譯碼得到Flash的讀寫地址[12]。
Flash芯片的裝機(jī)容量損失情況直接反應(yīng)了壞塊管理的有效性。為了評(píng)價(jià)星載固態(tài)存儲(chǔ)器高效壞塊管理方法的性能,需要量化Flash芯片的利用率。
η=(N-M)÷N
M=8192×Pm×n×4
N=(n×4+m)×32768
式中,M為整個(gè)固態(tài)存儲(chǔ)器因初始?jí)膲K需要剔除的壞塊數(shù);N為整個(gè)固態(tài)存儲(chǔ)器裝機(jī)的壞塊數(shù);n為每個(gè)工作組的Flash芯片數(shù);m為固態(tài)存儲(chǔ)器備份芯片數(shù);L為每個(gè)族的block數(shù),為n×4;Prandom為單個(gè)block是壞塊的概率。
本文以MATLAB為平臺(tái)建立模型,以表1中實(shí)際3D PLUS公司提供的壞塊表為初始數(shù)據(jù)。以每個(gè)單板裝4組Flash芯片為例,在不同的備份和每組Flash芯片數(shù)不同的情況下,對(duì)固態(tài)存儲(chǔ)器的壞塊率和容量損失情況進(jìn)行分析。首先,為了與傳統(tǒng)的存儲(chǔ)架構(gòu)進(jìn)行對(duì)比,對(duì)每組裝9片芯片的情況進(jìn)行分析。實(shí)驗(yàn)結(jié)果如圖10所示。
圖10 備份芯片數(shù)和Flash芯片利用率的關(guān)系圖
由圖可知,當(dāng)固態(tài)存儲(chǔ)器單板不進(jìn)行備份時(shí)(與傳統(tǒng)的存儲(chǔ)架構(gòu)相同),F(xiàn)lash芯片的利用率η約為0.9。當(dāng)備份1片F(xiàn)lash芯片時(shí),F(xiàn)lash芯片的利用率η達(dá)到峰值,約為0.97。并隨著備份數(shù)量的增多,F(xiàn)lash芯片的利用率逐漸降低。即通過本文提出的存儲(chǔ)架構(gòu)能夠顯著的提高Flash芯片的利用率,降低星載固態(tài)存儲(chǔ)器的成本。
在本文所提出的架構(gòu)下,對(duì)各種速率的固態(tài)盤的備份情況進(jìn)行建模分析。實(shí)驗(yàn)結(jié)果如圖11所示。
圖11 不同分組情況下Flash芯片利用率
由圖11可知,當(dāng)固態(tài)盤速率較低時(shí),由于每次并行工作的芯片數(shù)較少,其疊加映射效應(yīng)不明顯。通過備份不僅不能提高固態(tài)盤中Flash的使用效率,而且隨著備份芯片數(shù)的增多,其效率反而變低。從中可得當(dāng)并行工作的芯片數(shù)<5時(shí),沒有備份時(shí)效率較高;當(dāng)5≤工作芯片數(shù)≤19時(shí),備份1片F(xiàn)lash芯片工作效率較高;當(dāng)19<工作芯片數(shù)≤40時(shí),備份2片F(xiàn)lash芯片工作效率較高;隨著并行工作芯片數(shù)的增加,備份芯片也需要逐漸遞增才能保證Flash芯片具有較高的利用率。
本文提出的高效壞塊管理算法,相對(duì)于傳統(tǒng)的星載固態(tài)存儲(chǔ)器并行存儲(chǔ)方案,在硬件設(shè)計(jì)上主要增加了2片MR4A16B來存儲(chǔ)地址映射關(guān)系。且MR4A16B價(jià)格較低,并具有100萬次以上的擦寫次數(shù),且掉電數(shù)據(jù)不丟失,具有較高的可靠性。因此該算法能夠在不增加硬件成本的情況下,使固態(tài)存儲(chǔ)器Flash芯片的利用率提高到97%左右。
表2 傳統(tǒng)架構(gòu)下各型號(hào)固態(tài)存儲(chǔ)器Flash芯片的利用率統(tǒng)計(jì)表
綜上所述,采用替補(bǔ)芯片對(duì)壞塊地址進(jìn)行映射補(bǔ)充的辦法,可大幅降低目前并行存儲(chǔ)與多級(jí)流水操作帶來壞塊疊加效應(yīng),能夠有效的降低固態(tài)存儲(chǔ)器裝機(jī)容量損失,提高了(去掉)存儲(chǔ)容量的利用率,降低固態(tài)存儲(chǔ)器單位存儲(chǔ)容量的成本,且維持了原有的硬件需求,對(duì)工程上有較高的參考價(jià)值,為后續(xù)星載超高速率固態(tài)存儲(chǔ)器的設(shè)計(jì)奠定了基礎(chǔ)。
[1] 王文思, 林寶軍. 長壽命星載NAND Flas自適應(yīng)壞塊管理策略[J].計(jì)算機(jī)科學(xué),2016,43(10):193-195.
[2] 焦亞濤,李娜娜,王雪松. 一種高速固態(tài)存儲(chǔ)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電測(cè)與儀表,2011,48(551):76-79.
[3] Xiao Nong,Chen Zhiguang,Liu Fang,et al.P3Stor:A parallel,durable Flash-based SSD for enterprise-scale storage systems[J].Science China Information Sciences.2011,54(6):1129-1141.
[4] 賈源泉,肖 儂,賴明澈. 基于NAND Flash的多路并行存儲(chǔ)系統(tǒng)中壞塊策略的研究[J].計(jì)算機(jī)研究與發(fā)展,2012,49(增刊):68-72.
[5] 閆夢(mèng)婷,安軍社,江源源. 實(shí)現(xiàn)流水存儲(chǔ)及壞塊處理的Flash 控制器設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016,24(16):50-53.
[6] 徐瑞瑞,劉 攀,賴曉敏. 宇航固態(tài)存儲(chǔ)器可靠性設(shè)計(jì)[J]. 科學(xué)技術(shù)與工程,2015,15(13):144-148.
[7] Nguyen Q, Yuknis W, Pursley S,et al. A high performance command and data handling system for NASA’s Lunar Reconnaissance Orbiter[C]. AIAA Space 2008 Conference &Exposition.Washington: AIAA 2008.
[8] Takeuchi K. Novel co-design of NAND Flash memory and High-speed solid-state drives [J]. VLSI circuit,2009,44(4):1224-1227.
[9] 王 靜,馬婷婷,杜 科. 基于Flash陣列的高速存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].制導(dǎo)與引信,2014,35(2):28-33.
[10] Hua Yan, Qian Yao . An Efficient File-aware Garbage Collection Algorithm for NAND Flash-based Consumer Electronics[R]. IEEE Transactions on Consumer Electronics, 2014, 60(4) :623-627.
[11] Han Yong-hao, Wang Shao-yun . Design and implementation of a NAND Flash dynamic bad block management algorithm[J]. Informatization Research,2011,37(3):23-26.
[12] Gyorgy Dan, Heidecker Sandberg, Mathias Ekstedt, et al. challenges in power system information security[J].IEEE Security and Privacy,2011,24(12):62-70.