一种垃圾回收方法及装置与流程

文档序号:11458558阅读:220来源:国知局
一种垃圾回收方法及装置与流程

本申请涉及数据处理技术领域,尤其涉及一种垃圾回收方法及装置。



背景技术:

ssd(solidstatedrives,固态硬盘)是使用固态电子存储芯片阵列制成的硬盘,ssd采用nand(与非)flash(闪存)作为存储介质。



技术实现要素:

本申请提供一种垃圾回收方法及装置,以减少ssd的p/e次数,提高ssd的使用寿命。

根据本申请实施例的第一方面,提供一种垃圾回收方法,应用于ssd,该方法包括:

当所述ssd中目标扇区的数据需要修改时,将所述目标扇区标识为无效扇区;其中,所述目标扇区所属页中未标识为无效扇区的扇区为有效扇区,有效扇区的数据可读取;

当所述ssd需要进行垃圾回收时,按照所述ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收。

根据本申请实施例的第二方面,提供一种垃圾回收装置,应用于ssd,该装置包括:

标识单元,用于当所述ssd中目标扇区的数据需要修改时,将所述目标扇区标识为无效扇区;其中,所述目标扇区所属页中未标识为无效扇区的扇区为有效扇区,有效扇区的数据可读取;

垃圾回收单元,用于当所述ssd需要进行垃圾回收时,按照所述ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收。

应用本申请实施例,当ssd中目标扇区的数据需要修改时,将目标扇区标识为无效扇区;当ssd需要进行垃圾回收时,按照ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收,从而减少了垃圾回收带来的写入放大,提升了通过垃圾回收增加的可用空间,进而,可以减少ssd的p/e次数,提高ssd的使用寿命。

附图说明

图1是本申请实施例提供的一种垃圾回收方法的流程示意图;

图2是本申请实施例提供的一种垃圾回收装置的结构示意图;

图3是本申请实施例提供的另一种垃圾回收装置的结构示意图;

图4是本申请实施例提供的另一种垃圾回收装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。

nandflash写入的最小单位是页,通过凑够4个扇区组成一个页,一起写入;nandflash擦除的最小单位是块,一个块可以包括多个页。

当nandflash中任一页中有数据需要修改时,该页会被标识为无效页(该页内的数据均成为无效数据),并在其它块上申请页空间大小进行数据写入。其中,未被标记为无效且已使用的页可以称为有效页。

例如,假设块1中的页1包括扇区a~d,若块1中的页1中的扇区a的数据需要修改,则需要将块1中的页1标记为无效页,并将修改后的扇区a的数据,以及块1中的页1中的扇区b~d中存储的数据一起写入到其它块的一个页中。

gc(garbagecollection,垃圾回收)是将nandflash中一个块里的有效页数据复制到另一个空闲块(未被使用的块)里,然后把这个块完全擦除。其中,ssd的p/e(program/erasecycles,编程/擦除次数)次数决定ssd的寿命。

例如,当需要对块1进行gc时,需要先将块1中有效页的数据复制到另一个空闲块(假设为块2)里,然后将块1完全擦除。

请参见图1,为本申请实施例提供的一种垃圾回收方法的流程示意图,其中,该垃圾回收方法可以应用于ssd,如ssd硬盘或ssd芯片等,如图1所示,该垃圾回收方法可以包括以下步骤:

步骤101、当ssd中目标扇区的数据需要修改时,将目标扇区标识为无效扇区;其中,该目标扇区所属页中未标识为无效扇区的扇区为有效扇区,有效扇区的数据可读取。

本申请实施例中,目标扇区并不特指某一固定扇区,而是可以指代ssd中任一块包括的任一页中的任一扇区,本申请实施例后续不再复述。

本申请实施例中,当ssd中目标扇区的数据需要修改时,ssd不会直接将该目标扇区所属页标识为无效页,而仅会将该目标扇区标识为无效扇区,该目标扇区所属页中的其它扇区仍然作为有效扇区,该有效扇区的数据可读取。

例如,假设块1中的页1包括扇区a~d,若块1中的页1的扇区a的数据需要修改,则ssd可以将该扇区a标识为无效扇区(无效扇区中的数据为无效数据),而块1中的页1的扇区b~d仍为有效扇区,扇区b~d中的数据可正常读取。

本申请实施例中,对于目标扇区修改后的数据,可以先将其缓存至ssd的内存中,如ddr(doubledatarate)内存,并当ssd的内存中缓存的数据凑够一个页空间大小时,将ssd的内存缓存的数据写入到新的页中。

仍以上述示例为例,假设块1中的页1的扇区a的数据aaaa需要修改为a1a2,则ssd可以将该扇区a标识为无效扇区,并将a1a2缓存到内存中,并当内存中的数据凑够一个页空间大小时,将内存中的数据写入到新的块的页中,如写入块2的页1。

可见,在本申请实施例中,通过将数据管理最小单位由页细化为扇区,当需要进行数据修改时,每n(n为一个页中包括的扇区的数量)个扇区的数据需要修改时才需要写入一个页的数据,与每个扇区的数据需要修改均需要写入一个页的数据的实现方式相比,减少了写入放大。

步骤102、当需要对ssd进行垃圾回收时,按照ssd中各块中包含的有效扇区的数量从少到多的顺序。

本申请实施例中,当ssd中的可用空间达到预设可用空间阈值时,ssd可以通过对已使用的块进行垃圾回收的方式提升ssd的可用空间。

而考虑到当需要进行垃圾回收的块中有效扇区较多时,通过对该块进行垃圾回收增加的可用空间会较少。

举例来说,假设块1总共包括100个扇区,且该100个扇区包括80个有效扇区,则当需要对块1进行垃圾回收时,需要将块1中的有效数据读出,并写入到一个新的空闲块中(假设为块2),然后将块1中的数据擦除。其中,由于块1中包括80个有效扇区(假设每个页包括4个扇区),因此,块2中会有80个扇区(即20个页)被写入数据,进而,此次垃圾回收增加新的可用空间20个扇区(即5个页)。

举例来说,假设块1总共包括100个扇区,且该100个扇区均为有效扇区,则当需要对块1进行垃圾回收时,需要将块1中的有效数据读出,并写入到一个新的空闲块中(假设为块2),然后将块1中的数据擦除。其中,由于块1中所有扇区均为有效扇区,因此,块2会被写满,进而,此次垃圾回收不会增加新的可用空间。

因而,在本申请实施例中,当ssd需要进行垃圾回收时,ssd可以按照各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收,以最大化垃圾回收的收益,尽可能提升通过垃圾回收增加的可用空间量,进而,可以减少ssd的p/e次数,提高ssd的使用寿命。

在本申请其中一个实施例中,ssd可以包括一个或多个颗粒(一个nandflash为一个颗粒),各颗粒被划分为多个lun(logicunit,逻辑单元);

在该实施例中,对于任一lun,当该lun中的目标块写满数据时,根据目标块中有效扇区的数量将目标块加入到对应的使用链表中;其中,该lun挂载有多个使用链表,不同使用链表中的块中有效扇区的数量属于不同的有效扇区数量区间,不同使用链表对应的有效扇区数量区间互不重叠;

相应地,在该实施例中,上述按照ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收,可以包括:

对于任一lun,根据各使用链表对应的有效扇区数量区间,按照有效扇区的数量从少到多的顺序依次对各使用链表中的块进行垃圾回收。

在该实施例中,目标块并不特指某一固定的块,而是可以指代ssd中任一lun中的任一块,本申请实施例后续不再复述。

在该实施例中,为了提高ssd中数据管理效率,将按lun对ssd进行数据管理。

在该实施例中,对于任一lun,可以为该lun挂载多个使用链表,当该lun中的目标块写满数据时,ssd可以根据该目标块中有效扇区数量所属的有效扇区数量区间,将该目标块加入到对应的使用链表中;其中,不同使用链表中的块中有效扇区的数量属于不同的有效扇区数量区间,不同使用链表对应的有效扇区数量区间互不重叠。

在该实施例的一种实施方式中,根据目标块中有效扇区的数量将目标块加入到对应的使用链表中,包括:

当目标块中的有效扇区数量大于等于阈值threshold[i],且小于阈值threshold[i+1]时,将目标块加入到使用链表pusedlist[i];

其中,i≥0,阈值threshold[0]等于0,阈值threshold[i+1]>阈值threshold[i]

举例来说,假设lun1挂载有4个使用链表(使用链表0~3),其中,使用链表0对应的有效扇区数量区间为[0,20),使用链表1对应的有效扇区数量区间为[20,50),使用链表3对应的有效扇区数量区间为[50,90),使用链表4对应的有效扇区数量区间为[90,201)(假设lun1中的一个块共包括200个扇区),即阈值threshold[0]为0,阈值threshold[1]为20,阈值threshold[2]为50,阈值threshold[3]为90,阈值threshold[4]为201,当目标块写满数据时,若目标块中有效扇区的数量小于20,则ssd可以将目标块加入到使用链表1中;若目标块中有效扇区数量大于等于20,且小于50,则ssd可以将目标块加入到使用链表2中;若目标块中有效扇区数量大于等于50,且小于90,则ssd可以将目标块加入到使用链表3中;若目标块中有效扇区数量大于等于90,则ssd可以将目标块加入到使用链表4中。

在该实施例中,对于任一lun,当需要进行垃圾回收时,可以根据各使用链表对应的有效扇区数量区间,按照有效扇区从少到多的顺序依次对各使用链表中的块进行垃圾回收。

仍以上述示例为例,当ssd需要对lun1进行垃圾回收时,ssd可以按照使用链表0、使用链表1、使用链表2、使用链表3的顺序依次对各使用链表中的块进行垃圾回收,即先对使用链表0中的块进行垃圾回收,并当使用链表0中的块均完成垃圾回收之后,再对使用链表1中的块进行垃圾回收…以此类推,最后对使用链表3中的块进行垃圾回收。

进一步地,在该实施例中,考虑到目标块加入到使用链表中之后,目标块中的有效扇区数量可能会发生变化,例如,当目标块中有新的扇区的数据需要修改时,该目标块中会增加新的无效扇区,相应地,无效扇区的数量会减少,此时,ssd需要调整该目标块所在使用链表。

相应地,在该实施例中,上述根据目标块中有效扇区的数量将目标块加入对应的使用链表中之后,还可以包括:

当目标块中有效扇区的数量减少并低于当前所在使用链表对应的有效扇区数量区间时,根据目标块减少后的有效扇区的数量所属的有效扇区数量区间将目标块转移到对应的使用链表。

举例来说,仍以上述示例为例,假设lun1中的目标块刚写满数据时,有效扇区的数量为100,则ssd可以将该目标块加入到使用链表3中;假设某一时刻,目标块由于数据修改导致有效扇区数量减少为80,则ssd需要将该目标块从使用链表3中删除,并加入到使用链表2中;假设之后另一时刻,目标块中有效扇区数量减少为40,则ssd需要将该目标块从使用链表2中删除,并加入到使用链表1中。

进一步地,在该实施例中,上述任一lun挂载的多个使用链表可以为多个不同等级的使用链表,且使用链表等级越高,使用链表中的块的有效扇区数量越多。

考虑到块中有效扇区越少,对该块进行垃圾回收时增加的可用空间越多,进而能更有效地减少ssd的p/e次数,提高ssd的使用寿命,因此,当需要进行垃圾回收时,在保证ssd有足够可用空间的情况下,可以尽量不对有效扇区数量较多的块进行垃圾回收。

相应地,在该实施例的一种实施方式中,对于任一lun,当需要对该lun进行垃圾回收时,可以根据该lun中空闲块的数量确定该lun的垃圾回收等级;其中,lun中空闲块的数量与lun的垃圾回收等级负相关。

相应地,在该实施方式中,上述根据各使用链表对应的有效扇区数量区间,按照有效扇区的数量从少到多的顺序依次对各使用链表中的块进行垃圾回收,包括:

根据该lun的垃圾回收等级确定目标使用链表等级;其中,垃圾回收等级越高,所确定的目标使用链表等级越高;

将等级低于或等于目标使用链表等级的使用链表确定为需要进行垃圾回收的目标使用链表;

根据各目标使用链表对应的有效扇区数量区间,按照有效扇区的数量从少到多的顺序依次对各目标使用链表中的块进行垃圾回收。

在该实施方式中,当任一lun需要进行垃圾回收时,该lun中空闲块数量越多,其实际进行垃圾回收的块的数量可以相对越少,因此,ssd可以根据需要进行垃圾回收的lun中空闲块的数量确定该lun对应的垃圾回收等级(gc_level);其中,lun中空闲块的数量越多,其对应的垃圾回收等级可以越低。

举例来说,对于lun1,假设当该lun中空闲块的数量低于20时,需要对该lun进行垃圾回收,则当lun1中空闲块的数量低于20时,ssd可以根据lun1中空闲块的实际数量确定lun1的垃圾回收等级,例如,当lun1中空闲块的数量为[15,20)时,确定lun1的垃圾回收等级为等级0;当lun1中空闲块的数量为[10,15)时,确定lun1的垃圾回收等级为等级1;当lun1中空闲块的数量为[5,10)时,确定lun1的垃圾回收等级为等级2;当lun1中空闲块的数量为[0,5)时,确定lun1的垃圾回收等级为等级3。

在该实施方式中,ssd确定了lun的垃圾回收等级之后,可以根据该lun的垃圾回收等级确定目标使用链表等级,并将等级低于或等于目标使用链表等级的使用链表确定为需要进行垃圾回收的目标使用链表。其中,垃圾回收等级越高,目标使用链表等级越高;使用链表等级越高,使用链表中的块的有效扇区数量越多。

举例来说,假设使用链表0~3中块的有效扇区数量递增(即使用链表1中块的有效扇区数量高于使用链表0中块的有效扇区数量,且低于使用链表2中块的有效扇区数量,而使用链表2中块的有效扇区数量低于使用链表3中有效扇区的数量),使用链表0~3的使用链表等级依次为0~3,lun的垃圾回收等级也为0~3;则当lun的垃圾回收等级为0时,可以确定目标使用链表等级为0,即仅需要对使用链表0中的块进行垃圾回收(即目标使用链表为使用链表0);当lun的垃圾回收等级为1时,可以确定目标使用链表等级为1,即需要对使用链表1和使用链表0中块进行垃圾回收(即目标使用链表为使用链表0~1);…;当lun的垃圾回收等级为3时,可以确定目标使用链表等级为3,即需要对使用链表3、使用链表2、使用链表1以及使用链表0(即目标使用链表为使用链表0~3)中块进行垃圾回收。

在该实施方式中,ssd确定了需要进行垃圾回收的目标使用链表之后,可以根据各目标使用链表对应的有效扇区数量区间,按照有效扇区的数量从少到多的顺序依次对各目标使用链表中的块进行垃圾回收。

例如,假设目标使用链表包括使用链表0~2,其中,使用链表0~2的使用链表等级分别为0~2(即使用链表0~2中的块的有效扇区数量依次递增),则ssd可以先对使用链表0中的块进行垃圾回收,并当使用链表0中的块均完成垃圾回收后,再对使用链表1中的块进行垃圾回收。

可见,通过上述实施方式,可以保证进行垃圾回收的块基本上都是有效扇区比较少的块,对这样的块进行垃圾回收时,仅需搬移较少的有效扇区内的数据,从而可以降低垃圾回收带来的写入放大;同时,通过使用链表的形式对块按照有效扇区的数量进行排序,避免了垃圾回收时大规模的查找,提高了处理效率。

值得说明的是,在本申请实施例中,使用链表中块的顺序可以按照各块加入到该使用链表中的时间从先到后的顺序进行排序,当有新的块加入到该使用链表时,会直接加入到使用链表的尾部;或者,使用链表中块的顺序也可以按照各块中有效扇区数量从少到多的顺序进行排序,当有新的块加入到该使用链表时,根据该块中有效扇区的数量将该块插入相应的位置。

相应地,当ssd对使用链表中的块进行垃圾回收时,可以按照使用链表中各块加入该使用链表的顺序从先到后的顺序依次进行垃圾回收,也可以按照使用链表中各块中有效扇区的数量从少到多的顺序依次进行垃圾回收。

此外,在本申请实施例中,为了提高数据处理的灵活性,上述使用链表可以为双向链表(或称为双链表)。

进一步地,在本申请实施例中,当系统正常运行时,上述使用链表保存在ssd的内存(如ddr内存)中;当需要读取、更新或修改使用链表时仅需对ddr内存进行操作。

当系统掉电时,可以将上述使用链表保存至nandflash的slc(single-levelcell,单层单元)空间,并当所述使用链表均保存至上述slc空间后,才进行掉电操作。

其中,为了实现上述目的,在系统中增加一个大电容,用以维持系统掉电时,上述使用链表的写入,当系统异常掉电时,通过该大电容进行供电,以保证能够及时将上述使用链表写入到slc空间。

当系统重新上电时,重新将使用链表从上述slc空间中读出到ddr内存。

应该认识到,上述通过对ssd各颗粒进行lun划分,以及通过使用链表的形式进行垃圾回收的实现仅仅是本申请实施例中实现垃圾回收的一种具体示例,而不是对本申请保护范围的限定,在本申请实施例中,也可以直接根据ssd中各块的有效扇区的数量对ssd中各块进行排序,并按照有效扇区数量从少到多的顺序进行垃圾回收,或者,可以对ssd各颗粒进行lun划分,但是对于各lun,可以将该lun中所有的块按照有效扇区的数量进行排序,并按照有效扇区数量从少到多的顺序进行垃圾回收,其具体实现在此不做赘述。

通过以上描述可以看出,在本申请实施例提供的技术方案中,当ssd中目标扇区的数据需要修改时,将目标扇区标识为无效扇区;当ssd需要进行垃圾回收时,按照ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收,从而减少了垃圾回收带来的写入放大,提升了通过垃圾回收增加的可用空间,进而,可以减少ssd的p/e次数,提高ssd的使用寿命。

请参见图2,为本申请实施例提供的一种垃圾回收装置的结构示意图,其中,该垃圾回收装置可以应用于上述方法实施例中的ssd,如图2所示,该垃圾回收装置可以包括:

标识单元210,用于当所述ssd中目标扇区的数据需要修改时,将所述目标扇区标识为无效扇区;其中,所述目标扇区所属页中未标识为无效扇区的扇区为有效扇区,有效扇区的数据可读取;

垃圾回收单元220,用于当所述ssd需要进行垃圾回收时,按照所述ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收。

在可选实施例中,所述ssd包括一个或多个颗粒;各颗粒被划分为多个lun;

相应地,请一并参见图3,为本申请实施例提供的另一种垃圾回收装置的结构示意图,如图3所示,在图2所示垃圾回收装置的基础上,图3所示垃圾回收装置还包括:

链表管理单元230,用于对于任一lun,当该lun中的目标块写满数据时,根据所述目标块中有效扇区的数量将所述目标块加入到对应的使用链表中;其中,该lun挂载有多个使用链表,不同使用链表中的块中有效扇区的数量属于不同的有效扇区数量区间,不同使用链表对应的有效扇区数量区间互不重叠;

所述垃圾回收单元220,具体用于对于任一lun,根据各使用链表对应的有效扇区数量区间,按照有效扇区的数量从少到多的顺序依次对各使用链表中的块进行垃圾回收。

在可选实施例中,所述链表管理单元230,具体用于当所述目标块中的有效扇区数量大于等于阈值threshold[i],且小于阈值threshold[i+1]时,将所述目标块加入到使用链表pusedlist[i];

其中,i≥0,阈值threshold[0]等于0,阈值threshold[i+1]>阈值threshold[i]。

在可选实施例中,所述链表管理单元230,还用于当所述目标块中有效扇区的数量减少并低于当前所在使用链表对应的有效扇区数量区间时,根据所述目标块减少后的有效扇区的数量所属的有效扇区数量区间将所述目标块转移到对应的使用链表。

在可选实施例中,任一lun挂载有多个不同等级的使用链表,使用链表等级越高,使用链表中的块的有效扇区数量越多;

相应地,请一并参见图4,为本申请实施例提供的另一种垃圾回收装置的结构示意图,如图4所示,在图3所示垃圾回收装置的基础上,图4所示垃圾回收装置还包括:

确定单元240,用于对于任一lun,当需要对该lun进行垃圾回收时,根据该lun中空闲块的数量确定该lun的垃圾回收等级;其中,lun中空闲块的数量与lun的垃圾回收等级负相关;

所述垃圾回收单元220,具体用于根据该lun的垃圾回收等级确定目标使用链表等级,并将等级低于或等于所述目标使用链表等级的使用链表确定为需要进行垃圾回收的目标使用链表;其中,垃圾回收等级越高,所确定的目标使用链表等级越高;根据各目标使用链表对应的有效扇区数量区间,按照有效扇区的数量从少到多的顺序依次对各目标使用链表中的块进行垃圾回收。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

由上述实施例可见,当ssd中目标扇区的数据需要修改时,将目标扇区标识为无效扇区;当ssd需要进行垃圾回收时,按照ssd中各块中包含的有效扇区的数量从少到多的顺序对各块进行垃圾回收,从而减少了垃圾回收带来的写入放大,提升了通过垃圾回收增加的可用空间,进而,可以减少ssd的p/e次数,提高ssd的使用寿命。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1