一种提高nftl算法读写性能的方法

文档序号:8339530阅读:180来源:国知局
一种提高nftl算法读写性能的方法
【技术领域】
[0001]本发明涉及一种提高NFTL算法读写性能的方法,可以降低NFTL算法中额外的数据读取造成的时间消耗,提升NandF Iash读写效率,可广泛应用于片上系统的NandF I ash存储器的管理。
【背景技术】
[0002]半导体行业的蓬勃发展,出现了高性能的存储器NandFlash,NandFlash存储器使用半导体作为存储介质,具有高速,低能耗和防震等优点。NandFlash最典型的应用就是固态硬盘SSD (Solid State Disk),是一种基于NandFlash芯片阵列的新型硬盘。固态盘没有机械磁头所以它也不会因为机械式的寻找数据而花费时间,它存取速度是普通磁盘的30倍。另外,固态存储没有普通磁盘的机械装置而采用电子布线,所以在防震性、冲击能力上也明显好于普通磁盘,使它在恶劣环境下可以依然有很好的表现,因此军事、航天和通讯等行业都对NandFlash存储的研宄高度的重视。
[0003]NandFlash存储本身也存在一些不足。首先,它的存储块的擦除次数是有限的;其次,NandFlash必须要擦除之后才能重新写入,导致写入性能较低。因此,磨损均衡显得尤为重要,好的磨损均衡管理方法不但能够提高NandFlash性能和效率,还能够大大的延长NandFlash的使用寿命。基于此,出现了专门为NandFlash存储器所使用的文件系统,如JFFS,JFFS2,YAFFS, TrueFFS等,这些NandFlash专用的文件系统进行存储管理为NandFlash设备提供专门的驱动和更好的数据管理。但是对于一个小型的S0C,由于资源的限制,想采用以上的文件系统对NandFlash进行管理不太现实,所以亟需一个轻量级的管理方法,能够在有限资源的条件下,满足对NandFlash的磨损均衡控制。目前对于小型的系统,常采用的管理方法为FTL(Flash Translat1n Layer)及NFTL(NAND FlashTranslat1n Layer)两种管理机制。
[0004]如图1所示,FTL管理机制是采用以页为单位进行存储管理的方式,它采用的是物理页地址与逻辑页地址来进行一一对应。利用FTL管理机制,读写存取操作都是按页进行,数据存储时首先存储在空白的页面存储区中,不可以对已经写有数据的页上进行写操作。回收操作时需要更新地址映射表中的转换信息。这种管理算法比较直接,但是由于采用的页映射机制,对于容量小、页数少的存储器,是极为方便的一种方法。但是,对于大容量NandFlash来说,就显得比较吃力,例如,对于美光公司的MT29F32G08CBACA这个型号的NandFlash来说,共有4096个物理块,每块有256页,按页进行映射共需要4096*256*4=4MB的内存空间来保存当前的映射表,对于片上系统来说内存消耗过大。为了解决这个问题,提出了 NFTL算法,它是基于块及页的混合映射的机制。如图2所示,每当写入数据时,会查询该链表中所有页的状态,当找到页为空闲时就将数据写入该页,当遍历所有块之后,仍然没有找到可以写入页时,会重新分配一个新的块,加入链表,然后将数据写入其中。因为NFTL算法只需要记录块的状态,同样对于美光公司的MT29F32G08CBACA这个型号的NandFlash来说,只需要4096*4B = 16KB的空间,大大降低了内存消耗。但是对于NFTL算法来说,写入或者读取数据时,需要找到最近的数据则需要多次的查询。例如,对于块链长度为10的一个链表,最坏的情况下要获取最新的数据需要读取10页的数据,大大降低了读写性能。

【发明内容】

[0005]为了克服现有技术的上述缺点,本发明提供了一种提高NFTL算法读写性能的方法,只需要读取I次就能获取最新数据所在的块,从而降低了额外的数据读取消耗,提升读与性能。
[0006]本发明解决其技术问题所采用的技术方案是:一种提高NFTL算法读写性能的方法,将记录块中每一页最新数据所在块编号的自定义数据存储在NFTL块链表的首块中的每一页的OOB区中;数据写入时,在获得最新数据所在的块后,先判断该块是否为块链的最后一块:若否,则将需要写入的数据写入块链表中的下一个替换块中;若是,则重新分配一个新的块加入到块链中,将需要写入的数据写入新的块中;最后更新链表首块对应页的OOB区信息。
[0007]与现有技术相比,本发明的积极效果是:NFTL算法的读、写性能与块链表的长度成线性降低的关系,即链表越长,读写性能越低。应用本发明可以将需要L-1(L为块链表长度)次查询简化为I次查询,提升了 NFTL算法的读、写的性能,为NFTL算法在高速设备上的应用提供了很好的解决方法,可广泛应用于片上系统的NandFlash存储器的管理。
【附图说明】
[0008]本发明将通过例子并参照附图的方式说明,其中:
[0009]图1是FTL管理机制映射不意图;
[0010]图2是NFTL算法示意图;
[0011]图3是NandFlash结构不意图;
[0012]图4是本发明的OOB区数据结构示意图;
[0013]图5是本发明的数据读取/写入流程图。
【具体实施方式】
[0014]在本发明中利用了 NandFlash的冗余数据区,称OOB区。目前所有的NandFlash存储设备的存储区均由数据区和OOB区组成,OOB区可以存放校验信息等数据,也可以存放用户自定义的数据。本发明选用美光公司MT29F32G08CBACA型NandFlash作为试验对象,该NandFlash物理结构如图3所示。每一页除了 4096字节的数据区外,还有224字节的OOB区,在该区内可以存储数据。据此,本发明中设计了一种数据结构,存储在OOB区中,数据结构如图4所示。用16bit记录块中每一页最新数据所在块编号,存储在NFTL块链表的首块中的每一页的OOB区当中,假若块链长度为64,一共需要16*64/8 = 128字节。
[0015]在本发明中,数据读取流程如图5所示,首先根据NFTL算法获取块链表的首地址,根据此块地址和页内偏移量读取OOB区信息,然后根据OOB区信息获得最新数据所在的块,直接读取该块当中的数据,结束读流程。
[0016]在本发明中,数据写入流程如图5所示,包括如下步骤:
[0017]步骤一、首先根据NFTL算法获取块链表的首地址;
[0018]步骤二、根据首地址和页内偏移量读取OOB区信息;
[0019]步骤三、根据OOB区信息获得最新数据所在的块;
[0020]步骤四、判断该块是否为块链的最后一块:
[0021]若否,则将需要写入的数据写入块链表中的下一个替换块中,然后进入步骤五;
[0022]若是,则重新分配一个新的块加入到块链中,将需要写入的数据写入新的块中,然后进入步骤五;
[0023]步骤五、更新链表首块对应页的OOB信息。
[0024]在本发明中,数据读取/写入与块链长度无关,读取和写入效率稳定。设单页读取时间为R(单位ms),写入时间为W (单位ms)。对于NFTL算法,若块链长度为64,读取数据最坏的可能是需要经过63次读取,即需要耗时Rnftl= 63R。写入数据最坏的可能是需要经过63次读取再加上I次写入时间,即需耗时Wnftl= 63R+W。在本发明中,读取一次数据消耗时间为2R,写入一次数据的时间为2R+W,因此,本发明的性能远远优于NFTL算法,当块链长度越长时越性能提升越明显。
【主权项】
1.一种提高NFTL算法读写性能的方法,其特征在于:将记录块中每一页最新数据所在块编号的自定义数据存储在NFTL块链表的首块中的每一页的OOB区中;数据写入时,在获得最新数据所在的块后,先判断该块是否为块链的最后一块:若否,则将需要写入的数据写入块链表中的下一个替换块中;若是,则重新分配一个新的块加入到块链中,将需要写入的数据写入新的块中;最后更新链表首块对应页的OOB区信息。
2.根据权利要求1所述的一种提高NFTL算法读写性能的方法,其特征在于:所述最新数据的读取流程为:首先根据NFTL算法获取块链表的首地址,再根据此块地址和页内偏移量读取OOB区信息,然后根据OOB区信息获得最新数据所在的块,直接读取该块当中的数据,结束读流程。
3.根据权利要求1所述的一种提高NFTL算法读写性能的方法,其特征在于:所述获得最新数据所在的块的方法为:首先根据NFTL算法获取块链表的首地址;然后根据首地址和页内偏移量读取OOB区信息;最后根据OOB区信息获得最新数据所在的块。
4.根据权利要求1所述的一种提高NFTL算法读写性能的方法,其特征在于:所述自定义数据为16bit。
【专利摘要】本发明公开了一种提高NFTL算法读写性能的方法,将记录块中每一页最新数据所在块编号的自定义数据存储在NFTL块链表的首块中的每一页的OOB区中;数据写入时,在根据OOB区信息获得最新数据所在的块后,先判断该块是否为块链的最后一块:若否,则将需要写入的数据写入块链表中的下一个替换块中;若是,则重新分配一个新的块加入到块链中,将需要写入的数据写入新的块中;最后更新链表首块对应页的OOB信息。本发明方法将查询次数简化为1次,提升了NFTL算法的读、写的性能,为NFTL算法在高速设备上的应用提供了很好的解决方法,可广泛应用于片上系统的NandFlash存储器的管理。
【IPC分类】G06F12-06
【公开号】CN104657283
【申请号】CN201510056423
【发明人】王志奇, 章睿, 任仕玖, 龚冰青
【申请人】成都三零嘉微电子有限公司
【公开日】2015年5月27日
【申请日】2015年2月4日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1