带有数据压缩功能的闪存转换层及实现方法

文档序号:6607755阅读:268来源:国知局

专利名称::带有数据压缩功能的闪存转换层及实现方法
技术领域
:本发明涉及闪存固态盘中一种具有数据压缩功能的闪存转换层FTL(FlashTranslationLayer)的设计和实现方法。
背景技术
:闪存(FlashMemory)是近年来应用广泛的一种半导体存储器,闪存技术的发展引起了存储领域新的变革。闪存体积小、重量轻、无噪声、抗震动,其能耗只有传统硬盘的1/51/6,是一种理想的存储介质。闪存的一个重要特性就是修改数据时不能作覆盖写(over-write),也即当一页数据需要修改时,不能像磁盘那样直接在原地作修改,而需要将该页擦除后再重新写入数据。由于擦除操作延迟较大,一般将新的数据写到另一个空白页上,同时让原数据失效,这就是常说的非定点更新(out-placeupdate),这一特性使得传统磁盘上的文件系统不能直接应用到闪存设备上。为充分利用传统磁盘领域积累的技术和大量软件产品,各大厂商纷纷将一个或多个闪存芯片组合封装成类似磁盘的固态盘SSD(SolidStateDrive),为上层应用提供与磁盘一样的接口,而不需要修改应用和文件系统。闪存固态盘采用一个转换层FTL(FlashTranslationLayer)将闪存模拟成磁盘设备。FTL主要完成以下几项功能地址映射、损耗均衡、垃圾回收,其中地址映射实现了闪存地址空间到磁盘地址空间的转换,损耗均衡和垃圾回收在保证各闪存块擦除次数均衡的前提下对失效闪存块进行回收。在小量随机访问情况下,闪存的写性能是一个瓶颈。同时,闪存中每一块被擦除的次数有限,约为1万次10万次。当闪存芯片中某一块的被擦除次数临近闪存有限的擦除次数导致闪存固态盘的使用寿命远不能满足用户的需求。现有的FTL中的损耗均衡功能虽然可以均衡各个闪存块的擦写次数,但并不能减少对闪存的总擦写次数,而在FTL中采用数据压缩技术可以减少每次实际写入闪存的数据总量,从而提高其读写性能,同时由于减少对闪存的实际擦除次数,相应地延长了闪存固态盘的使用寿命。目前,数据压缩技术有部分直接应用于嵌入式闪存芯片中,而将数据压缩技术引入闪存固态盘的转换层(FTL)中,利用压缩技术对闪存固态盘的性能和寿命进行优化的方法在国内外尚无公开出版的技术资料。
发明内容本发明所要解决的技术问题是,针对闪存固态盘随机写性能较差和使用寿命有限的问题,将数据压缩技术引入闪存固态盘的设计中,实现一个带有数据压缩功能的闪存转换层。在保证正确的地址映射、损耗均衡和垃圾回收功能的情况下,利用数据压缩技术对读/写数据进行解/压缩,提高闪存固态盘的整体读写性能,并有效延长其使用寿命。本发明的技术方案是在实现地址映射、损耗均衡和垃圾回收功能的FTL中,加入压缩和解压缩模块。带有数据压缩功能的FTL主要由压缩器Compressor、解压器Decompressor、缓冲区Buffer、地址映射管理模块、垃圾回收模块和损耗均衡模块组成。Compressor将主机发出的待写数据进行压缩后写入Buffer;Decompressor将从Buffer或闪存中读出的数据解压缩后返回给主机;Buffer接收Compressor送来的压缩数据并拼接成若干完整的闪存数据页;地址映射管理模块负责整个读写过程中的地址映射关系的正确无误;垃圾回收模块负责对失效闪存块进行回收;损耗均衡模块负责均衡对各个闪存块的擦写次数。本发明中对写入数据的压缩和读出数据的解压缩采用了基于LZ77算法的单页压缩策略。单页压缩方案中对于要写入闪存的数据,以一页为单位进行压缩,主机发出一个写操作就进行一次压缩,将压缩后的数据放在缓存中,当缓存中剩余的空间不够再放入压缩数据时,将几次写操作的压缩数据在缓存中拼接成若干个完整的闪存数据页,写入闪存;读数据时,因为待读取数据对应的压缩数据在闪存中要么分布在一个物理页上,要么分布在两个物理页上,所以至多只需读出两个闪存物理页,提取相应压缩数据,进行解压缩操作,即得到要读取的数据。与多页压缩方案相比,单页压缩方案具有读延时较小、写更新处理流程简单、空间利用率高等优点,可以有效提高整个系统的性能。而针对单页压缩策略的压缩率稍低的缺点,本发明中采用了对小文件压缩性能较好的LZ77压缩算法来弥补。与普通的不带数据压缩功能的FTL相比,本发明的FTL中的地址映射管理模块不同之处在于,多个逻辑地址上的数据在经过数据压缩并进行拼接之后可能会被写入同一个闪存物理页上,也可能一个逻辑地址上的数据在压缩并和其他压缩数据进行拼接后被分两成部分写在两个物理页上,即多个逻辑地址可能对应一个物理地址,而一个逻辑地址也可能对应两个物理地址。本发明中提出了一种基于单页压缩策略的地址映射方案。主机逻辑地址和闪存物理地址之间的地址映射有两种基本方案块映射和页映射。在块映射中,逻辑地址由逻辑块地址和块内偏移组成,在进行地址映射时,只有逻辑块地址被转换成物理块地址,而块内偏移是不变的,这就要求逻辑地址上的数据在物理块中的块内偏移和逻辑块内偏移是相同的。相比之下,页映射方案可以提供更加灵活地数据管理,因为一个逻辑数据页可以被映射到任何一个闪存物理页,而没有块内偏移的限制。当有写操作时,只需将数据写在当前空闲的物理页上即可,如果是写更新,还需要将旧版本数据所在的物理页置为失效。当空闲块数目达到一定阈值时,根据损耗均衡策略,找到要被擦除的块,将其上的有效数据页写入到空闲物理页上,然后将该块擦除以供重新使用。在采用单页压缩策略时,采用页映射方案更为合适。对闪存而言,连续读写性能要大大优于随机读写性能,为了使启用的数据压缩的FTL仍能保持较高的性能,应充分利用闪存连续读写性能好的特性,块映射方案难以满足这一要求,因为它可能造成两个连续的数据页分别分布在某一物理块和它对应的替代块上,这破坏了读取数据的连续性,将带来额外的延时开销。而在加入了压缩功能之后,这种破坏会更加严重,因为一个数据页经过压缩并进行拼接之后可能分布在两个物理页上,此时若这两个物理页在两个物理块上,则除了连续读取不在同一物理块上的多页的延时外,又加大了读取单个数据页的延时。所以,本发明采用基于单页压缩策略的页映射方案,将主机发出的逻辑地址映射到闪存物理页地址、数据在物理页上的起始位置以及长度,即可以用元组物理页地址1,起始位置1,长度1,或物理页地址1,物理页地址2,起始位置1,起始位置2,长度1,长度2,来表示一条逻辑地址与物理地址的映射关系。在带有数据压缩功能的FTL中,使用了以下几个重要的数据结构Ubuffer_next指向Buffer中下一个空白位置;2,BoF下标为逻辑地址,表项值为O标识该逻辑地址对应的数据是在Buffer中,为1标识该逻辑地址对应的数据在闪存中,为-1表示该逻辑地址还未进行写入操作。表项个数为闪存的总页数。3、sltable每个表项有三个字段LogicAddress标识该表项指向的Buffer中一段压缩数据所对应的逻辑地址;startpos标识这一段压缩数据在Buffer中的起始位置;length这一段压缩数据的长度;表项个数为闪存的总页数。4、sltable_next指向sltable下一个可用的表项。5、Ittable下标为逻辑地址,每个表项有四个字段tag标识该表项逻辑地址对应的压缩数据在闪存物理页上的分布,值为1表示在一个物理页内,为2表示跨两个物理页;ρ[2]为闪存物理页地址结构体数组,标识该表项逻辑地址对应的压缩数据存储在闪存中的物理页地址,视tag的值为ρ有效或p和p[l]有效;offset[2]数组,视tag的值表示压缩数据在1个或2个闪存物理页上的起始位置;length[2]数组,视tag的值表示压缩数据在1个或2个闪存物理页上的长度;表项个数为闪存的总页数。6、isvalid因为一个闪存物理页上可能包含多段压缩数据,所以只有当这些压缩数据段全部失效时该物理页才能被置为失效,每一个表项代表一个闪存物理页上当前有效地压缩数据段数,当其减少到0时,该物理页可被置为无效。表项个数为闪存的总页数。本发明的带有数据压缩功能的FTL的具体实现和读写过程详见。使用本发明能达到以下有益效果1.针对闪存固态盘随机写性能较差的问题,利用数据压缩技术对读/写数据进行解/压缩,并在FTL中实现了一个软buffer,减少了每次实际写入和读出闪存固态盘的数据量,从而提高闪存固态盘的整体读写性能。2.针对闪存固态盘使用寿命有限的问题,将数据压缩技术引入闪存固态盘的设计中,由于减少了每次实际写入的数据量,相应地减少了对闪存的实际擦写次数,从而可以有效延长其使用寿命。图1是本发明实现的带有数据压缩功能的闪存转换层总体结构图;图2是本发明提出的一种基于单页压缩策略的页映射方案;图3是本发明在读取压缩数据时的示意图;图4是本发明在压缩要写入数据的示意图;图5是本发明在将压缩数据写入Buffer时的示意图;图6是本发明在将Buffer中数据写入闪存的示意图;图7是本发明带有数据压缩功能的FTL对不同类型文件的平均压缩率对比示意6图;图8是采用带有数据压缩功能的FTL和不带数据压缩功能的FTL相比,对于不同类型文件,闪存固态盘平均读/写延时降低比例的示意图。具体实施例方式以下结合附图对本发明做进一步详细说明。如图1所示,带有数据压缩功能的FTL主要由压缩器Compressor、解压器Decompressor、缓冲区Buffer、地址映射管理模块、垃圾回收模块和损耗均衡模块组成。Compressor将主机发出的待写数据进行压缩后写入Buffer;Decompressor将从Buffer或闪存中读出的数据解压缩后返回给主机;Buffer接收Compressor送来的压缩数据并拼接成若干完整的闪存数据页;地址映射管理模块负责整个读写过程中的地址映射关系的正确无误;垃圾回收模块负责对失效闪存块进行回收;损耗均衡模块负责均衡对各个闪存块的擦写次数。如图2所示,在本发明的单页压缩策略的页映射方案下,假设主机有4块数据A、B、C、D要写入闪存,这四块数据的逻辑地址分别为12、25、34、46,大小均为512Bytes,经过压缩以后得到A'、B'、C'、D',其中A'大小为308Bytes,B'大小为296Bytes,C'大小为300Bytes,D'大小为316Bytes,则Buffer中经过拼接之后形成3个数据页,将这三个数据页写入闪存中,其中则A'、C'分布在一个闪存物理页上,B'、D'分布在两个物理页上,用元组(6,0,308)表示数据A的地址映射关系,用元组(6,7,308,0,204,92)表示数据B的地址映射关系,用元组(7,92,300)表示数据C的地址映射关系,用元组(7,8,392,0,220,96)来表示数据D的地址映射关系,将这四个元组写入地址映射表的第12、25、34、46项。当主机要读出逻辑地址12上的数据A时,找到地址映射表的第12项(6,0,308),读出物理页地址为6的闪存页,从位置0开始,连续读出308个字节的数据(即A'),然后进行解压缩即得到主机要读取的数据A。图3是从闪存中读出压缩数据的示意图,包括五个主要步骤1)主机发出要读取的数据的逻辑地址LogicAddress=LAi;2)以该逻辑地址为下标,查询BoF表,即根据BoF[LAi]的值,确定要读取的数据是在Buffer中还是在闪存中;3)若要读取的数据在Buffer中,则顺序查找sltable表,找到相应的表项,该表项的LogicAddress字段等于主机发出的逻辑地址LAi;然后根据该表项的startpos和length字段,从Buffer的startpos位置开始,连续读取length字节的数据,这段数据即为主机要读取的数据所对应的压缩数据;4)若要读取的数据在闪存中,则以该逻辑地址为下标,查询Ittable表,若lttable[LAi]->tag=1,则主机要读取的数据对应的压缩数据在一个闪存物理页上,将地址为lttable[LAi]->p的物理页读出,根据lttable[LAi]->offset和lttable[LAi]->length的值,从读出的物理页中提取主机要读取的数据对应的压缩数据;若lttable[LAi]->tag=2,则按照前述方法读出两段压缩数据拼接起来即为主机要读取的数据对应的压缩数据;5)将读出的压缩数据解压,返回给主机。图4、图5和图6是将数据写入闪存的示意图(压缩待写入的数据、将压缩数据写入Buffer、将Buffer中数据写入闪存),主要包括六个步骤1)主机发出要写入的数据以及它的逻辑地址LogicAddress=LAi;2)将要写入的数据进行压缩,得到压缩后数据长度destlen;3)以该逻辑地址为下标,查询BoF表,即根据BoF[LAi]的值,确定逻辑地址LogicAddress是第一次被写入还是写更新。写更新分为两种情况要更新的数据在Buffer中和在闪存中;4)若是第一次被写入,若是Buffer中剩余的空间大于等于压缩后的数据大小,根据buffer_neXt的值,则将压缩后的数据写入Buffer,然后根据sltablejext找到sltable中下一个可用的表项,登记相应信息;若是Buffer中剩余的空间小于压缩后的数据大小,则先将Buffer中的数据全部写入闪存中,并在Ittable中登记相应信息,然后再将压缩数据写入Buffer中并在sltable中登记相应信息;5)若是写更新且要更新的数据在闪存中,则首先按照步骤4进行操作,最后更新isvalid表,将原来压缩数据对应的物理页上的有效压缩数据段数减1;6)若是写更新且要更新的数据在Buffer中,若是Buffer中剩余的空间大于等于压缩后的数据大小,根据buffer_next的值,先将压缩数据写入Buffer中,然后调整Buffer内容,将LAi原来对应的压缩数据覆盖,并调整sltable中的相应表项;若是Buffer中剩余的空间小于压缩后的数据大小,则先将Buffer中的数据写入闪存中,并在Ittable中登记相应信息,然后将压缩数据写入Buffer中并在sltable中登记相应信息,最后更新isvalid表,将原压缩数据对应的物理页上的有效压缩数据段数减1。图7是本发明带有数据压缩功能的FTL对不同类型文件的平均压缩率对比。可以看出,除FLV类型文件外,其它五种类型的文件的平均压缩率都在65%以下,其中Word文档的平均压缩率最高,达到了36%。而FLV文件则几乎无法进行压缩,这是因为FLV文件本身是一种压缩视频格式,再用LZ77算法进行压缩几乎没有效果。所以,在一些针对文本型数据存储的特定应用场合,本发明带有数据压缩功能的FTL,可以将一个待写入闪存固态盘的文件实际写入的数据量减少到其自身大小的60%左右,与不带数据压缩功能的闪存固态盘相当,增加了约40%的存储空间。图8是采用带有数据压缩功能的FTL和不带数据压缩功能的FTL相比,对于不同类型文件,闪存固态盘平均读/写延时降低比例的示意图。可以看出,使用本发明带数据压缩功能的FTL,对不同类型文件,闪存固态盘的读延时和写延时都有了显著降低读延时的降低比例可以达到48%59%,写延时的降低比例可以达到42%76%,尤其是对Word文档、C程序代码和网页文件的写延时降低比例都超过了60%。权利要求带有数据压缩功能的闪存转换层,其特征在于带有数据压缩功能的闪存转换层FTL主要由压缩器Compressor、解压器Decompressor、缓冲区Buffer、地址映射管理模块、垃圾回收模块和损耗均衡模块组成,Compressor将主机发出的待写数据进行压缩后写入Buffer;Decompressor将从Buffer或闪存中读出的数据解压缩后返回给主机;Buffer接收Compressor送来的压缩数据并拼接成若干完整的闪存数据页;地址映射管理模块负责整个读写过程中的地址映射关系的正确无误;垃圾回收模块负责对失效闪存块进行回收;损耗均衡模块负责均衡对各个闪存块的擦写次数。2.带有数据压缩功能的闪存转换层的实现方法,其特征在于对写入数据的压缩和读出数据的解压缩采用基于LZ77算法的单页压缩策略,对于要写入闪存的数据,以一页为单位进行压缩,主机发出一个写操作就进行一次压缩,将压缩后的数据放在缓存中,当缓存中剩余的空间不够再放入压缩数据时,将几次写操作的压缩数据在缓存中拼接成若干个完整的闪存数据页,写入闪存;读数据时,读出两个闪存物理页,提取相应压缩数据,进行解压缩操作,即得到要读取的数据;将主机发出的逻辑地址映射到闪存物理页地址、数据在物理页上的起始位置以及长度,用元组物理页地址1,起始位置1,长度1,或物理页地址1,物理页地址2,起始位置1,起始位置2,长度1,长度2,来表示一条逻辑地址与物理地址的映射关系。3.根据权利要求2所述的带有数据压缩功能的闪存转换层的实现方法,其特征在于在从闪存中读出压缩数据包括五个主要步骤1)主机发出要读取的数据的逻辑地址LogicAddress=LAi;2)以该逻辑地址为下标,查询BoF表,即根据BoF[LAi]的值,确定要读取的数据是在Buffer中还是在闪存中;3)若要读取的数据在Buffer中,则顺序查找sltable表,找到相应的表项,该表项的LogicAddress字段等于主机发出的逻辑地址LAi;然后根据该表项的startpos和length字段,从Buffer的startpos位置开始,连续读取length字节的数据,这段数据即为主机要读取的数据所对应的压缩数据;4)若要读取的数据在闪存中,则以该逻辑地址为下标,查询Ittable表,若lttable[LAi]->tag=1,则主机要读取的数据对应的压缩数据在一个闪存物理页上,将地址为lttable[LAi]->p的物理页读出,根据lttable[LAi]->offset和lttable[LAi]->length的值,从读出的物理页中提取主机要读取的数据对应的压缩数据;若lttable[LAi]->tag=2,则按照前述方法读出两段压缩数据拼接起来即为主机要读取的数据对应的压缩数据;5)将读出的压缩数据解压,返回给主机。4.根据权利要求2所述的带有数据压缩功能的闪存转换层的实现方法,其特征在压缩待写入的数据、将压缩数据写入BufferJfBuffer中数据写入闪存,主要包括六个步骤1)主机发出要写入的数据以及它的逻辑地址LogicAddress=LAi;2)将要写入的数据进行压缩,得到压缩后数据长度destlen;3)以该逻辑地址为下标,查询BoF表,即根据BoF[LAi]的值,确定逻辑地址LogicAddress是第一次被写入还是写更新;写更新分为两种情况要更新的数据在Buffer中和在闪存中;4)若是第一次被写入,若是Buffer中剩余的空间大于等于压缩后的数据大小,根据buffer_next的值,则将压缩后的数据写入Buffer,然后根据sltablejext找到sltable中下一个可用的表项,登记相应信息;若是Buffer中剩余的空间小于压缩后的数据大小,则先将Buffer中的数据全部写入闪存中,并在Ittable中登记相应信息,然后再将压缩数据写入Buffer中并在sltable中登记相应信息;5)若是写更新且要更新的数据在闪存中,则首先按照步骤4进行操作,最后更新isvalid表,将原来压缩数据对应的物理页上的有效压缩数据段数减1;6)若是写更新且要更新的数据在Buffer中,若是Buffer中剩余的空间大于等于压缩后的数据大小,根据buffer_next的值,先将压缩数据写入Buffer中,然后调整Buffer内容,将LAi原来对应的压缩数据覆盖,并调整sltable中的相应表项;若是Buffer中剩余的空间小于压缩后的数据大小,则先将Buffer中的数据写入闪存中,并在Ittable中登记相应信息,然后将压缩数据写入Buffer中并在sltable中登记相应信息,最后更新isvalid表,将原压缩数据对应的物理页上的有效压缩数据段数减1。全文摘要本发明公开了带有数据压缩功能的闪存转换层及实现方法。带有数据压缩功能的FTL主要由压缩器Compressor、解压器Decompressor、缓冲区Buffer、地址映射管理模块、垃圾回收模块和损耗均衡模块组成。对写入数据的压缩和读出数据的解压缩采用了基于LZ77算法的单页压缩策略。利用数据压缩技术对读/写数据进行解/压缩,并在FTL中实现了一个软buffer,减少了每次实际写入和读出闪存固态盘的数据量,从而提高闪存固态盘的整体读写性能。文档编号G06F12/02GK101916228SQ201010254409公开日2010年12月15日申请日期2010年8月17日优先权日2010年8月17日发明者刘志龙,刘芳,安龙飞,杜溢墨,肖侬,蔡志平,陈志广申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1