发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种固态硬盘和其存取方法,在保证数据读写过程开销低的前提下,提高闪存的写操作的带宽,减少对闪存进行擦除操作的次数。
本发明的目的是通过以下技术方案实现的:
一方面,本发明提供了一种固态硬盘,该固态硬盘包括闪存转换层和闪存,所述闪存的物理页包括数据区和后备区,所述闪存转换层包括压缩器和解压器,所述压缩器用于将文件系统发送来的数据压缩后写入闪存,并且将与压缩数据相关的信息保存在所写入的闪存物理页的后备区中;所述解压器用于根据闪存物理页的后备区中所保存的与压缩数据相关的信息从闪存中读出的数据,并对其进行解压后返回给文件系统,所述与压缩数据相关的信息包括是否是压缩的数据、是否需要跨页存储、物理页内有效数据的长度以及跨页存储时下一物理页的页号。
上述固态硬盘中,所述闪存的物理页的数据区大小可以为256字节。
上述固态硬盘中,所述物理页的后备区可以保存下列与压缩数据相关的信息:
·FLAG:占用2个比特位,其中一个比特位代表压缩或未压缩,另一个比特位表示压缩数据使用1页或需要跨页;
·EPPN:若压缩数据需要跨页,则该字段EPPN用来指示下一物理页的页号;
·LEN:记录该物理页内有效数据的长度。
上述固态硬盘中,所述闪存转换层还包括映射表,所述映射表可以采用混合映射机制。
上述固态硬盘中,所述压缩器可以将小于一个物理页大小的压缩数据写入一个物理页中并将与该压缩数据相关的信息保存在该物理页的后备区中。
上述固态硬盘中,所述压缩器在压缩数据超过一个物理页大小时,可以将压缩数据中前面的相当于一个物理页大小的部分写入一个物理页中,并设置该物理页后备区中的FLAG、EPPN、LEN字段,所述EPPN字段指示下一物理页的页号,然后,将该压缩数据的剩余部分写入到所述EPPN指示的物理页中并设置该物理页后备区中的FLAG、EPPN、LEN字段。
上述固态硬盘中,压缩数据的剩余部分所写入的物理页可以是按照页级映射的方式进行管理的。
又一个方面,本发明提供一种对上述固态硬盘写入数据的方法,该方法包括:
步骤(1),接收来自上层文件系统的待写入数据并对其进行压缩以得到压缩数据;
步骤(2),当压缩数据的长度小于一个物理页大小时,直接将该压缩后数据写入该物理页,并将与压缩数据相关的信息保存在所写入的闪存物理页的后备区中;所述与压缩数据相关的信息包括是否是压缩的数据、是否需要跨页存储、物理页内有效数据的长度以及跨页存储时下一物理页的页号;
当压缩数据的长度大于一个物理页大小时,将该压缩数据前面的相当于物理页大小的部分写入一个物理页中,确定要保存压缩数据的剩余部分的另一个物理页的页号以及将与压缩数据相关的信息保存在所写入的物理页的后备区中;然后将压缩数据的剩余部分写入该另一个物理页中并将与该部分压缩数据相关的信息保存在该页的后备区中。
上述方法中,压缩数据的剩余部分所写入的物理页可以是按照页级映射的方式进行管理的。
又一方面,本发明提供了一种从上述固态硬盘读取数据的方法,该方法包括:
步骤(a)接收上层文件系统发出的读取数据请求;
步骤(b)根据映射表确定保存所要读取的数据的物理页,并获取物理页的后备区中与压缩数据相关的信息;
步骤(c)如果所要读取的数据是压缩的数据并且仅保存在该物理页中,则根据该物理页内有效数据长度读取该页内对应长度的数据,将读取的数据解压缩并传回上层文件系统;
如果所要读取的数据是压缩的数据并且需要跨页存储,则读取该物理页的数据,并根据该物理页后备区中保存的跨页存储时下一物理页的页号访问下一个物理页,以及根据所访问的下一个物理页的后备区中与压缩数据相关的信息读取该页内保存的数据,将该数据拼接在所读取的前一物理页的数据之后得到完整数据,最后将拼接后的数据解压缩后返回给文件系统。
与现有技术相比,本发明的优点在于:
通过闪存转换层对数据进行压缩以及将压缩数据的相关信息保存在物理页的后备区中,可以减少每次实际写入和读出闪存固态盘的数据量,同时减少了由于写操作所引起的擦除操作的次数,延长了固态盘的寿命。而且,数据的读写过程简单方便,没有增加复杂的数据结构,也没有增加缓冲区,无需对传统闪存转换层中的映射表进行任何修改,保证数据读写过程开销低。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示出了根据本发明实施例的固态硬盘的结构示意图。如图1所示,该固态硬盘包括闪存转换层和闪存(例如,NAND闪存)。所述闪存转换层FTL主要包括压缩器、解压器、映射表等。其中,如图1中斜线阴影部分所示,压缩器用于将文件系统发送来的数据压缩后写入闪存并将与该压缩数据相关的信息保存在所写入的闪存物理页的后备区中;解压器用于根据闪存物理页后备区中所保存的压缩数据相关的信息从闪存中读出的数据并对其进行解压后返回给文件系统。闪存的物理页通常包括数据区和后备区(Spare),在后备区中包括空闲的字节,这些空闲字节中的一部分可以用于存储与压缩数据相关的信息,所述与压缩数据相关的信息包括所写入的数据是否是压缩的数据、是否需要跨页存储、该物理页内有效数据的长度以及跨页存储时下一物理页的页号等。本领域普通技术人员应理解,为简明起见,在图1中并没有示出例如涉及闪存转换层中负责回收无效闪存的垃圾回收器的模块、负责均衡对各闪存块擦除次数的损耗均衡器等其他模块。
继续参考图1,在本发明的实施例中,该固态硬盘在FTL中采用了对上层文件系统透明的压缩技术,上层文件系统发来的待写入数据需要经压缩后再写入相应的闪存页(即物理页)中,而上层文件系统要读取的数据则需要经解压缩后才返回文件系统。这样,如果所选择的压缩算法有较大的压缩比(例如,50%),那么固态硬盘的效率将获得大幅度提高。
在本发明的优选实施例中,所选用的压缩算法应该具有较高的效率(例如,具有低解压延迟和高压缩带宽),并尽量将文件系统需写入的数据压缩至一个闪存页内。此外,对于可压缩性差的数据也可以进行跨页存储。对于读取频繁的数据,为了避免解压缩所带来的额外延迟,可以不进行压缩。当然,也可以将全部数据不加区分地进行压缩。例如,由于上层文件系统读写数据的基本单元(sector)为512字节。因此在一个优先实施例中,在固态硬盘中可以选择使用其物理页的数据区大小为256字节的闪存。这样,闪存页的大小至少为文件系统读写基本单元的一半,故每次压缩数据最多仅占据2个闪存页。例如,在该实施例中,可以使用X-Match算法完成对写入数据的压缩和读出数据的解压缩。本领域普通技术人员应理解,除了采用X-Match算法来完成压缩和解压缩,也可以采用其他压缩算法,例如LZ1、LZ77等。
压缩器在将压缩数据写入物理页中的同时,在该物理页的后备区中保存关于该压缩数据的相关信息,例如,是否是压缩的数据、物理页内有效数据的长度、是否需要跨页存储以及跨页存储时下一物理页的页号等。解压器参考在物理页的后备区中保存关于该压缩数据的相关信息,从闪存中读取完整的压缩数据。图2详细示出了根据本发明一个实施例的物理页的后备区与现有的物理页后备区的对比示意图。如图2所示,在根据本发明的实施例的后备区中增加了以下数据项的存储:
●FLAG(标记):压缩数据状态的标识。在该实施例中,其占用2个比特位,其中一个比特位代表:压缩/未压缩(0表示未压缩,1表示压缩),另一个比特为表示:压缩数据使用页数(0表示使用1页,1表示需要跨页)。应指出,在本实施例中是以物理页的大小至少为文件系统读写基本单元的一半为例进行说明的,因此,每次压缩数据最多仅占据2个闪存页。
●EPPN:若数据需要跨页存储,EPPN用来指示下一物理页的页号。
●LEN:表明该页内有效数据的长度。由于压缩后数据的长度不确定,所以通过LEN来记录页内有效数据的长度。
继续参考图1,映射表也是闪存转换层的一个重要组成部分,主要用于完成将来自于文件系统的逻辑地址转换为闪存的物理地址。但是,在本发明的实施例中,由于在物理页的后备区中已经存储了关于压缩数据的相关信息,因此无须对现有的映射表结构进行任何更改,可以利用现有的地址映射方案,例如页级映射、块级映射、混合映射等。其中,页级映射可以将逻辑页号映射为任意的物理页号,虽然可以实现对闪存设备的紧凑有效使用,但是会导致映射表规模过大。在块级映射中,逻辑块号被映射为相应的物理块号,而逻辑页号在块内的偏移量则是固定的。尽管这可以降低映射表的容量,但是由于给定的逻辑页只能映射到相应闪存块的某个特定物理页中,因此找到这一页的概率降低,导致垃圾回收的开销增加。而混合映射是将闪存块划分为数据块和更新块,其中占大多数的数据块使用块级映射,而更新块则使用页级映射,在数据块中的物理页都是按块级映射方式进行管理,而在更新块中的物理页都是按照页级映射进行管理。所有对数据块的覆盖写都重定位到更新块中,当没有空闲更新块可用时,垃圾回收器负责将更新块与数据块合并,因此可以在提高闪存空间利用率的同时保持映射表的容量适中。在混合映射机制中,映射表包括:块地址映射表(BMT),其以逻辑块地址为下标,索引得到其对应的物理块地址;以及页地址映射表(PMT),其以逻辑页地址为下标,索引得到其对应的物理页地址。
图3示出了根据本发明一个优选实施例的在混合映射机制下的数据存储示意图。当上层文件系统每发出一个写操作时,压缩器将待写入的数据进行压缩后并将其存入相应的物理页中。如果压缩后的数据小于物理页大小,压缩器直接将其写入一个物理页中,并将关于该压缩数据的相关信息保存到该物理页的后备区中(例如将FLAG置为10并设置LEN等等)。但是如果压缩后的数据超过一个物理页大小时,压缩器将压缩数据中前面的相当于一个物理页大小的部分写入一个物理页中,例如,将压缩数据的前256字节写入一个物理页。同时,确定要用于保存压缩数据的剩余部分的空闲(即处于擦除状态)的下一个物理页的页号,并在当前所写入的物理页的后备区中通过设置FLAG、EPPN、LEN字段来保存与该压缩数据相关的信息,例如,将FLAG置为11,EPPN字段保存所确定的下一个物理页的页号等。然后,将该压缩数据的剩余部分写入到所述EPPN字段所指示的物理页中并设置该物理页后备区中的FLAG、EPPN、LEN字段(例如将FLAG置为10并设置LEN等等)。
如图3所示,上层文件系统有A、B、C、D四个要写入数据,其逻辑地址分别为5、10、12和19。经压缩后数据大小分别变为251字节、510字节、320字节和128字节,先后被存储到A1、B11、B12、C11、C12、D1物理页中。其中,对于数据A和D,其经压缩后小于256字节,所以仅需一个物理页来存储。由于B和C经压缩后仍然大于256字节,故需要占用两个物理页,例如,第一页位于按照块映射的数据区,第二页则位于按照页映射的EData区。其中,数据区为如上所述的混合映射机制下数据块,而Edata区可以为如上所述的混合映射机制下的更新块,或者也可以是在闪存中划分出的按照页映射管理的存储区域,用于存储压缩数据的剩余部分。
在本发明的又一个实施例中,提供了对上述固态硬盘写入数据的方法,主要包括以下步骤:接收来自上层文件系统的待写入数据并对其进行压缩以得到压缩数据。当压缩数据的长度小于一个物理页大小时,直接将该压缩后数据写入该物理页,并将与压缩数据相关的信息保存在所写入的闪存物理页的后备区中;所述与压缩数据相关的信息包括是否是压缩的数据、是否需要跨页存储、物理页内有效数据的长度以及跨页存储时下一物理页的页号。当压缩数据的长度大于一个物理页大小时,将该压缩数据前面的相当于物理页大小的部分写入一个物理页中,确定要保存压缩数据的剩余部分的另一个物理页的页号以及将与压缩数据相关的信息保存在所写入的物理页的后备区中;然后将压缩数据的剩余部分写入该另一个物理页中并将与该部分压缩数据相关的信息保存在该页的后备区中。其中压缩数据的剩余部分所写入的物理页是按照页级映射的方式进行管理的。
在本发明的又一个实施例中,提供了从上述的固态硬盘读取数据的方法,主要包括以下步骤:接收上层文件系统发出的读取数据请求。根据映射表确定保存所要读取的数据的物理页,并读取该物理页的后备区中与压缩数据相关的信息,所述与压缩数据相关的信息包括是否是压缩的数据、是否需要跨页存储、物理页内有效数据的长度以及跨页存储时下一物理页的页号。如果所要读取的数据是压缩的数据并且仅保存在该物理页中,则根据物理页内有效数据长度读取该页内对应长度的数据,将读取的数据解压缩并传回上层文件系统。如果所要读取的数据是压缩的数据并且需要跨页存储,则读取该物理页的数据,并根据跨页存储时下一物理页的页号访问下一个物理页,以及根据所访问的下一个物理页的后备区中与压缩数据相关的信息读取该页内保存的数据,将该数据拼接在所读取的前一物理页的数据之后得到完整数据,最后将拼接后的数据解压缩后返回给文件系统。
更具体地,下面详细描述根据本发明优选实施例的固态硬盘的数据存取过程。其中读数据过程包括以下步骤:
(a)接收上层文件系统发出的包括要读取数据的逻辑地址LA的指令,并分别计算逻辑块号lbn和块内偏移量bo;
(b)以lbn为下标读取地址转换表BMT,以BMT[lbn]的值为物理块号,以bo为块内偏移得到数据首页的物理页号。读取该物理页的后备区的FLAG标志;
(c)若FLAG标志为10,则说明数据压缩后存储在唯一页中,根据后备区的LEN字段的值读取该页内对应长度的数据,将读取的数据解压缩并传回上层文件系统;
(d)若FLAG标志为11,则说明数据存储在两页中,读取第一页的数据,并根据后备区的EPPN字段访问第二页数据;
(e)根据第二页后备区的LEN字段的值读取该页内对应长度的数据,将该数据拼接在第一页的数据之后得到完整数据,最后将拼接后的数据解压缩后返回给上层文件系统。
(f)若FLAG标志为01则说明数据未经压缩且存储于两个闪存页中,这类似于传统的未引入压缩机制的闪存转换层,直接按原有流程进行数据的读写操作即可;而FLAG标志为00则是非法的,原因在于在本实施例中未压缩数据必然占据两个闪存页(文件系统的读写单位为512字节,而闪存的物理页的数据区约为256字节)。
图4示出了根据本发明优选实施例的固态硬盘的写数据流程示意图,下面参考图4,详细描述写数据过程,该写过程包括如下步骤:
(1)接收上层文件系统发出的包括待写入数据及其逻辑地址LA的指令,并分别计算逻辑块号lbn和块内偏移量bo;
(2)将要写入的数据进行压缩,得到压缩后数据长度CLEN;
(3)以lbn为下标读取块地址映射表BMT,以BMT[lbn]的值为物理块号pbn,以bo为块内偏移得到要写入数据的物理页号,并确定该逻辑地址是第一次写入还是写更新;
(4)若是第一次被写入,当CLEN<=256字节时,直接将压缩数据写入物理块pbn中bo所确定的页中,同时更新后备区的LEN及FLGA标记;
(5)当CLEN>256字节时,先将压缩数据的首256字节写入pbn和bo所确定的页中并设置该页的后备区的各个相关字段(LEN、FLGA以及EPPN字段),例如可以通过映射表PMT[LA]选择及确定EData区中某个空闲的(即处于擦除状态的)物理页的物理页号,将剩余部分写入EData区的该物理页中,同时更新该页后备区的FLAG,LEN字段。这里Edata区的管理采用页级映射,由PMT完成逻辑页号到物理页号的转换。
(6)若是写更新操作,则可采用与上述相类似的操作将新的压缩数据写入到处于擦除状态的更新块中,超出部分仍然写入Edata区中。
本领域普通技术人员可以理解,除了上面优选实施例所采用的混合映射机制,在其他实施例中也可以采用例如页级映射和块级映射等其他映射机制。本领域技术人员也应理解,在上述实施例的固态硬盘中选择使用闪存页的数据区大小为256字节的闪存仅是较佳的一种选择,在其他实施例中,也可以选择闪存页的数据区大小为128、64、32等字节的闪存。这样每次压缩数据分别例如最多占据4、8、16个闪存页等,但都适用于本发明的上述方法,同样不需要增加任何复杂的数据结构或缓存区,也不需要对映射表进行任何改变。
与现有技术相比,本发明实施例中通过闪存转换层对数据进行压缩以及将压缩数据的相关信息保存在物理页的后备区中,可以减少每次实际写入和读出闪存固态盘的数据量,同时减少了由于写操作所引起的擦除操作的次数,延长了固态盘的寿命。而且,数据的读写过程简单方便,没有增加复杂的数据结构,也没有增加缓冲区,无需对传统闪存转换层中的映射表进行任何修改,保证数据读写过程开销低。
虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所作出的各种改变以及变化。