《电子技术应用》

星载高速大容量存储器文件化坏块管理设计

2017年电子技术应用第6期 作者:杨志勇1,2,董振兴1,2,朱 岩1,2,董文涛1
2017/6/29 15:25:00

杨志勇1,2,董振兴1,2,朱  岩1,2,董文涛1

(1.中国科学院国家空间科学中心,北京100190;2.中国科学院大学,北京100190)


    摘  要: 为保证星载高速大容量存储器高速稳定的存储速率,需对NAND Flash存储芯片中因单粒子翻转或超过擦除极限而在写入时出现的坏块进行管理。文件化坏块管理采用链表的方式将坏块、分流水级未使用块和分有效载荷数据存储块分别链接成不同的文件,并采用四级流水乒乓缓冲机制快速替换写入失败块。运行于型号任务中的文件化坏块管理,解决了因数据写入出现坏块时的存储速率抖动问题,实现了四倍于单流水级的写入速率对多有效载荷数据分文件进行稳定存储,从而保证了载荷数据的正确性和完整性。

    关键词: 星载高速大容量存储器;多有效载荷;流水线操作;文件化坏块管理

    中图分类号: TN919.5

    文献标识码: A

    DOI:10.16157/j.issn.0258-7998.2017.06.003


    中文引用格式: 杨志勇,董振兴,朱岩,等. 星载高速大容量存储器文件化坏块管理设计[J].电子技术应用,2017,43(6):11-14.

    英文引用格式: Yang Zhiyong,Dong Zhenxing,Zhu Yan,et al. Design of file-based bad block management of high-speed large-capacity space-borne storage[J].Application of Electronic Technique,2017,43(6):11-14.

0 引言

    星载高速大容量存储器是卫星及其他航天器进行信息获取、信息处理及信息传输的关键设备之一。NAND Flash芯片具有存储密度大、接口速率高、非易失性、低功耗、抗震性强、工作温度宽等特点,是星载高速大容量存储器的理想存储介质[1-3]。但NAND Flash在空间高能粒子辐射、极高低温环境下,极易出现位翻转错误[4-5],采用错误检测纠正(Error Correcting Code,ECC)技术对其纠错可一定程度上保证数据的正确性[6-8]。然而,NAND Flash受制造工艺限制,出厂时存在一定数量随机分布的坏块[5,9-10],并且随着时间的推移,Flash达到擦除极限,坏块数量将会不断增多。坏块的产生将影响存储器的存储速率和存储信息数据的正确性、完整性,甚至决定航天探测任务的成败。因此,高效、可靠的坏块管理对星载高速大容量存储器具有重大意义。

1 星载存储器背景

    随着空间探测任务的发展,有效载荷产生的数据带宽急剧增大,存储速率同样需要提高,然而NAND Flash固有写操作特性降低了有效吞吐率。Flash写入数据分为两个过程,首先将命令、地址及数据以字节方式写入芯片内部缓存(即“加载”过程);其次芯片需要一个内部编程过程,才可确定编程是否成功[11-12]。编程过程中,芯片不响应外部命令。星载高速大容量存储器针对Flash写操作特点,采用四级流水[9,11]存储技术,充分利用芯片编程时间加载其他芯片,实现存储区全速无间断数据写入。图1为四级流水线写操作过程。

htdz3-t1.gif

    空间探测有效载荷不断增多,各个有效载荷所产生的数据量参差不齐。传统单分区环形队列顺序写入的存储管理方式(从前往后存储,待至存储空间尾部,擦除存储空间首部已写入块,使其变为未使用块,以便尾部空间存满后,再次从存储空间首部继续存储)不能适应新的需求。若存在两种不同速率的有效载荷同时产生数据:高速设备产生的数据存储满存储空间尾部后,环形队列顺序写入的存储方式将擦除首部空间;低速设备所存储的数据很少,并且由于回放数据优先级的原因,存在低速设备的数据未及时回放,却被擦除以得到高速设备存储新数据所需要的未使用块。

    因此,传统的环形队列顺序写入的存储管理方式,不能适用于多载荷。本文所提到的星载高速大容量存储器,采用的是四级流水存储技术,每一个有效载荷分一个文件的方式进行链式存储管理。

2 传统坏块管理

2.1 坏块替换

    存储器初始化时,读取相应的块状态信息,构建坏块表。数据存储时,根据坏块表中信息,跳过已有的坏块。若在存储块中写入数据的过程中第n页失败则获得一块未使用块,替换正在写入块,并将失败块的前n-1页复制到有效未使用块,并将第n页及之后的数据写入新块[7,10,12-15]。如图2所示。

htdz3-t2.gif

    传统的坏块替换方法是将存储出错块中的有效数据复制到新的替代块中,以增加额外的存储时间开销来保证数据存储的正确性。若在存储块的尾部出错,那么将复制出错块近一块的数据到替代块中,这大大降低了存储的速率。在整个存储过程中,由于出错块出错所在的页数不同,将会出现存储速率抖动。星载高速存储器不允许存储速率的抖动,否则将可能出现数据的丢失。

2.2 动态坏块管理

    动态坏块管理[2,4-5,13]将存储空间分为4个区:数据存储区、交换块区、替换(保留)块区[10,15-16]和坏块区。其思想是在存储器使用过程中出现坏块,采用动态方式标记坏块,将坏块加入坏块映射区,从替换(保留)块区选择有效未使用块对坏块进行替换,并更新逻辑-物理块地址映射表。若对已写入数据块修改,需将整个存储块的数据读到存储控制器,对其数据进行修改,然后将修改后的数据写入到交换块区的存储块,最后更新逻辑-物理块地址映射表[10,13]

    动态坏块管理对已写入数据的修改方式,比直接在原存储块中写入速率高。星载高速大容量存储器只对有效载荷数据存储,不对数据进行修改。同时,存储器采用四级流水存储技术,并对不同的有效载荷分文件进行链式存储。因此,动态坏块管理的方法不适合星载高速大容量存储管理。

2.3 异步坏块管理

    异步坏块管理[6]是基于嵌入式文件系统实现读、写、擦除等请求的坏块管理缓冲层。文件系统发出读、写、擦除等请求,独立运行的异步坏块管理进程将这些请求缓冲到队列,并直接向文件系统返回请求执行成功状态。异步坏块管理进程在响应写请求时,将其他读、写、擦除请求阻塞,直到此次写请求完成为止。当执行写请求出现坏块时,异步坏块管理进程将复制已写入坏块的数据到替代块中,并将请求缓冲队列中相应写请求的数据写入到未使用块,从而保证数据的完整性和正确性。

    异步坏块管理中不能同时执行读、写、擦除三种类型的请求,这将降低星载存储器的数据存储管理性能;写入数据出现坏块,读取已写入坏块数据将增加星载CPU运行内存资源消耗;异步坏块管理是一种基于嵌入式文件系统的管理算法,星载存储器不宜采用不成熟的星载文件系统技术。因此,星载高速大容量存储器不能采用异步坏块管理方法。

3 文件化坏块管理

3.1 块状态信息存储

    星载高速大容量存储器,FPGA和CPU协调配合共同控制管理数据存储。存储器块状态信息存储在每个块的空余区,当系统第一次启动时,FPGA扫描存储器中所有块空余区,获取所有块状态信息,并由FPGA组建OBAT(Original Block Allocate Table)存储到掉电非易失型存储器MRAM,再由CPU将OBAT从MRAM中读到CPU运行内存,最后由CPU组建成IBAT(Index Block Allocate Table),并将组建好的IBAT写回MRAM。系统正常运行过程中,存储块状态发生改变,FGPA修改相应块空余区,并实时维护MRAM中的IBAT表。这样的存储机制,能够保证大容量存储管理系统快速可靠的启动。系统正常断电,将CPU运行内存中的IBAT写回MRAM,系统重启时,CPU直接从MRAM快速读取IBAT即可。当系统异常断电启动,FPGA校验MRAM中的数据,若校验成功,CPU直接从MRAM中快速读取IBAT表即可;若校验失败,系统的启动过程和第一次启动过程一样。 因此,系统只是第一次启动和系统异常断电校验失败时的启动时间较长。OBAT表和IBAT表分别如表1、表2所示。

htdz3-b1.gif

htdz3-b2.gif

    表1、表2中:(1)块状态表示正常写入块、正常替代块、正常失败块、替代失败块、未使用块和无效块。(2)块尾页地址,表示块的正常写入页地址。(3)文件号,表示不同有效载荷。(4)本文件内块计数,表示该文件已经写入的块数。(5)本文件下一流水级指针,即下一流水级的块序号。

3.2 文件化组织结构

    星载高速大容量存储器,为解决低速写入单块速率的限制,采用四级流水并行写入的方式,以提高系统的存储速率。同时,为了对多有效载荷的管理,存储系统采用文件化的管理方式。所谓文件化管理,即根据不同的有效载荷分不同的文件对其进行存储,将未使用块根据四个流水级分为四个文件进行管理,以及无效块作为一个文件进行管理。

    存储器系统第一次启动,FPGA从块的空余区扫描块状态组织成OBAT结构存放于MRAM中,CPU从MRAM读取OBAT到内存的一块连续存储空间,并由OBAT组建成IBAT,也是一个文件化的过程。其OBAT变为IBAT,文件化的过程为:(1)根据块状态、流水级和文件号分为不同的块组;(2)针对各个有效载荷文件,根据OBAT中的本文件内块计数按照从小到大进行排序;(3)各有效载荷文件根据排序结果,将OBAT中的块计数的存储位置修改为指向下一流水级的指针,即块序号。分流水级的未使用块和无效块无需排序,直接将其修改为后续的块序号。

    OBAT组建成IBAT,得到文件化链式存储结构(如图3所示)后,原存放OBAT的连续内存空间大小不改变,相应块状态信息物理位置及序号不变,只是在内存中增加了相应文件的头信息(文件ID、文件大小、指向第一块块序号指针等)。分流水级的未使用块文件中指针指向本流水级块序号,无效块文件中指针不分流水级,直接指向无效块序号。

htdz3-t3.gif

3.3 文件化坏块替换

    星载高速大容量存储器,CPU向FPGA提供有效的未使用块,FPGA采用四级流水存储技术向未使用块中写入数据,二者协同配合,共同实现对有效载荷数据高速有效稳定的存储。FPGA内部为每个有效载荷文件创建四级流水乒乓缓冲块空间,即存放8个块序号。CPU和FPGA一致,创建同样类似的缓冲块空间。以某一有效载荷向Flash中写入数据为例:

    (1)系统启动初始化,CPU为相应文件分配四个流水级的未使用块序号ABCD,并发送给FPGA。如表3所示。

htdz3-b3.gif

    (2)FPGA将ABCD移入正在写入块缓冲空间,并向CPU申请第0流水级的未使用块。CPU收到FPGA的申请后,首先将ABCD添加到文件链表,其次将ABCD移入正在写入块缓冲,最后分别从四个流水级未使用块文件中快速获得未使用块EFGH发送给FPGA。FPGA将获得的未使用块添加到相应缓冲空间,并开始对A块写入数据。如表4所示。

htdz3-b4.gif

    (3)当FGPA再次向CPU正常申请第0水级流未使用块时,和上一步骤操作类似。如表5所示。

htdz3-b5.gif

    (4)若FPGA向第1流水级块F写入出错,FGPA将J直接作为其替代块,将J放入到正在写入块缓冲。FGPA向CPU申请替代块,并告知出错块的有效尾页地址。CPU收到申请后,首先设置块F正常失败状态和有效尾页地址,其次将J作为F的替代块,并将J添加到文件链表之后,设置J的块状态为正常替代块,最后从第1流水级未使用块文件中快速申请块M,如表6所示。

htdz3-b6.gif

    (5)当后续正常申请时,与步骤(2)和(3)的操作相同。

    当出现出错块时,保持出错块中已写入数据不变,从出错块的出错页地址开始向替代块中写入数据,避免了数据存储过程中的数据抖动,保持一定的速率写入数据。对于任何一个流水级的块出错,都能够得到快速高效的响应。星载存储器采用与写入数据时相对应的算法,对存储块中的数据进行回放。

4 结论

    传统坏块管理方法是将已写入的数据复制到缓冲空间中,增大了缓冲空间资源占用;将已写入坏块数据重新写入未使用块的方式,造成数据存储速率抖动;只针对单流水级存储块实施坏块管理。

    文件化坏块管理采用四倍于单块写入速率的四级流水存储技术,能够同时对多个有效载荷产生的数据分文件进行管理。文件化坏块管理将已写入数据的坏块保留在有效载荷文件存储块链表中,从相应流水级未使用块文件快速获取新块作为其替代块,避免了数据存储速率抖动,保证了星载高速大容量存储器高效稳定运行。此方案已在某型号任务中得到验证和应用。

参考文献

[1] 徐永刚,任国强,吴钦章,等.NAND Flash图像记录系统坏块管理关键技术[J].红外与激光工程,2012,41(4):1101-1106.

[2] 乔立岩,张鹏,魏德宝,等.一种新型NAND Flash坏块管理算法的研究与实现[J].电子测量技术,2015,38(11):37-41.

[3] ASHRAF M N,DASTUR J.Software based nand flash management techniques[C].2009 International Conference on Computing, Engineering and Information,2009:168-171.

[4] 张小萌.NAND Flash存储管理的设计与实现[D].广州:广东工业大学,2014.

[5] 张鹏.NAND Flash坏块管理算法研究与实现[D].哈尔滨:哈尔滨工业大学,2015.

[6] MAHESH S,SAUGATA D P.Asynchronous bad block management in nand flash memory[P/OL]:United States,US 2013/0205072 A1.(2013-8-8)[2017-4-5].http://kns.cnki.net/kns/detail/detail.aspx?FileName=US9483395(B2)&DbName=SOPD2016.

[7] PELEATO B,TABRIZI H,AGARWAL R,et al.Ber-based wear leveling and bad block management for nand flash[C].2015 IEEE International Conference on Communications(icc),2015:295-300.

[8] MA Y,DU H,YANG S.Independent bad block management for mass storage flash memory arrays[C].2015 6th IEEE International Conference on Software Engineering and Service Science(icsess),2015:388-391.

[9] 赵亚慧,金龙旭,陶宏江,等.基于NAND Flash的高速大容量存储系统的设计[J].电光与控制,2016,23(5):71-75,79.

[10] SUPRIYA K P.Study of bad block management and wear leveling in nand flash memories[J].International Journal of Research in Engineering and Technology,2013,2(10):284-288.

[11] 闫梦婷,安军社,江源源.实现流水存储及坏块处理的Flash控制器设计[J].电子设计工程,2016,24(16):50-53.

[12] Samsungelectronics.1Gx8bit-2Gx8bit Nand flash memory_K9F8G08UXM[EB/OL].Samsung Corporation.2006-9-26(2007-3-31)[2017-4-6].https://wenku.baidu.com/view/96a00d00bed5b9f3f90f1cbe.html.

[13] 邢旺,郁聪冲.数据记录器中NAND Flash的坏块管理方法[J].舰船电子工程,2016,36(8):132-134,160.

[14] 舒文丽,吴云峰,赵启义,等.NAND Flash存储的坏块管理方法[J].电子器件,2011,34(5):580-583.

[15] 宁飞.大容量存储中NAND Flash坏块的管理方法[J].电子测试,2010,38(12):64-68.

[16] 汤瑞.一种基于NAND Flash固态硬盘的坏块管理方法[J].电子科技,2014,27(8):40-42.

继续阅读>>