Ssd及ssd垃圾回收方法和装置的制作方法

文档序号:6434626阅读:271来源:国知局
专利名称:Ssd及ssd垃圾回收方法和装置的制作方法
技术领域
本发明涉及存储技术,尤其涉及一种SSD及SSD垃圾回收方法和装置。
背景技术
固态硬盘(Solid State Drive, SSD)是由控制单元和固态存储单元(NANDFlash) 组成的硬盘。固态硬盘采用NAND Flash芯片存储数据,数据写入之前需要对NAND Flash 芯片进行擦除操作,擦除操作的基本单位为块(Block),每个Block包含若干个页O^age), Page是数据读写操作的基本单元。以写操作对应的数据在写操作前后均保存在SSD中为例,完成一次写操作分两步首先将数据写入已经擦除过的即空白I^age),再将原先存放该数据的I^age标记为无效。被标记为无效的I^age未经擦除前不能再次被写入,这样的I^age称为垃圾I^age。通常,SSD初始时会预留一部分空白I^age供新的写入操作,在这些空白I^ge耗尽前必须及时启动回收,回收那些被标记为无效的垃圾I^age,这个过程被称为垃圾回收。由于擦除的基本单位是Block,且实际操作中Block中不可能全是无效I^age, 为达到回收无效I^age的目的,需要先将Block中的有效I^age中的数据搬移走,然后再将该 Block擦除。由于搬移有效I^age也会消耗一部分空白Page,因此回收一个Block得到的有效可用空间仅等于原来的无效I^age数。相比于来自主机的数据写,回收操作本身带来了额外的后台数据搬移,这就是通常所说的写放大。写放大越小,整个SSD的性能就越好,同时磨损也会越小,这就要求回收效率尽可能高,即每次挑选出包含最少有效I^age的Block进行回收。但是,挑选出最优的 Block,即包含最少有效I^ge的Block,并不是一件容易的事情。现有技术中通常是采用局部或全部遍历比较的方式,这样可以一次选取出局部或全部最优的一个或若干个Block,但这个过程需要的时间较长。

发明内容
本发明实施例是提供一种SSD及SSD垃圾回收方法和装置,用以解决现有技术中存在的查询最优Block所需时间较长的问题。本发明实施例提供了一种SSD垃圾回收方法,包括根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同,其中,所述有效读写单元是指数据块内除空白读写单元和被标记为无效的读写单元之外的读写单元,所述被标记为无效的读写单元是指回收前不能再次被写入的读写单元;当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收,其中,所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。
4
本发明实施例提供一种SSD垃圾回收装置,包括等级管理模块,用于根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同,其中,所述有效读写单元是指数据块内除空白读写单元和被标记为无效的读写单元之外的读写单元,所述被标记为无效的读写单元是指回收前不能再次被写入的读写单元;当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;回收模块,用于当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收, 其中,所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。本发明实施例提供一种SSD,包括上述的SSD垃圾回收装置,还包括存储单元,用于存储数据,所述数据被划分为多个数据块,每个数据块包括多个读写单元;缓存单元,用于将所述SSD垃圾回收装置管理的每个等级中的数据块的信息进行存储。由上述技术方案可知,本发明实施例通过对数据块划分等级,并根据等级回收数据块,可以降低查找最优Block所需的时间,进而加速垃圾回收速度。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中写操作的流程示意图;图2为本发明第一实施例的方法流程示意图;图3为本发明实施例中块的组织示意图;图4为本发明实施例中数据更新过程中的示意图;图5为本发明实施例中数据更新完毕的示意图;图6为本发明实施例中进行垃圾回收的示意图;图7为本发明第二实施例的方法流程示意图;图8为本发明实施例中等级链表的保存示意图;图9为本发明第三实施例的装置的结构示意图;图10为本发明第四实施例的SSD的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了更好地理解本发明实施例,首先对数据的写操作进行描述。图1为本发明实施例中写操作的流程示意图,参见图1,主机可以采用如下方式更新数据1,更新数据ζ。假设,Block A的第一个I^age中保存有待更新的数据z,用Data ζ (old)表示,Block A的最后一个I^age未使用(即该I^age为空白I^age)。此时,新数据直接写入Block A的最后一个I^age,用Data ζ (new) 0在写入新数据ζ后,将最后一个I^age 标记为有效,将第一个I^age标记为无效。此时更新在同一个Block内部完成。2,更新数据y。假设,旧的数据y保存在Block A的第二个I^age中,用Data y(old) 表示,且Block A中所有I^age全部使用完,需要获取一个新的空白Block B。此时,将新数据写入Block B的第一个I^age,用Data y(new)表示。在写入新数据y后,将Block B的第一个I^age标记为有效,将Block A的第二个I^age标记为无效。此时更新在两个Block内完成。对于需要新写入Block B中的Block A中的其他数据,可以参照上述对y的更新过程进行更新处理。3,垃圾回收,搬移数据χ。假设Block C为挑选出来正在回收的Block,其大部分都是无效(invalid)的I^age,需要将Block C的第二个I^age中的数据χ搬移到Block B 的空白Page (第三个I^age)中。此时,将Block C中的数据χ读出并写入Block B中,两个 Block中的数据χ均用Data χ (same)表示。并且,将Block C的第二个I^age标记为无效, 将Block B的第三个I^age标记为有效。当Block C中的有效数据全部搬走后,可以将其擦除作为新的空白Block供写操作使用。回收搬移的数据和主机的新数据均写入同一个空白Block中。在擦除一个Block (如Block C)作为新的空白Block之前,首先需要确定一个用于擦除的Block,如首先需要确定出上述的Block C。现有技术中可以采用遍历的方式,而本发明实施例采用如下方式。图2为本发明第一实施例的方法流程示意图,包括步骤21 根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同,其中,所述有效读写单元是指数据块内除空白读写单元和被标记为无效的读写单元之外的读写单元,所述被标记为无效的读写单元是指回收前不能再次被写入的读写单元;当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;进一步地,如果更新前的数据所在的数据块和更新后的数据所在的数据块相同, 则保持所述更新前的数据以及所述更新后的数据所在的数据块的等级;步骤22 当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收,其中, 所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。本实施例通过对数据块划分等级,并根据等级回收数据块,可以降低查找最优 Block所需的时间,进而加速垃圾回收速度。进一步地,上述的读写单元可以具有不同的粒度,例如,一个读写单元为一个I^age、多个I^age或者小于一个I^age等。本发明实施例中将以I^age为例。另外,以读写单元为I^age为例,有效I^age是指除被标记为无效的I^ge和空白 Page之外的Page,以上述读写数据为例,新数据写入的I^age就是有效I^age,也是标记为有效的Page。为了在垃圾回收时挑选出最优的Block,即包含最少有效I^age的Block进行回收, 本发明实施例根据有效读写单元的个数进行等级划分,以便确定出最优的Block。假设一个块(Block)内包含64个I^age,则一个Block可能具有65种状态中的一种。该65种状态分别对应有0个有效I^ge (即全是被标记为无效的I^age或者仅包括被标记为无效的I^age和空白Page)、有1个有效I^age、有2个有效I^age,...全是有效I^age。之后可以将具有同一个状态的Block组织成同一个等级。例如,Blockl和Block2 均是有1个有效I^age,则将Blockl和Block2组织成同一个等级。例如,图3为本发明实施例中块的组织示意图,参见图3,Level η包括的块分别为 Block a,Block b,Block c 等,Level n+1 包括的块分别为 Block χ,Block y,Block ζ 等。可以理解的是,上述划分的等级的个数与每一个Block对应的状态的个数是相同的。例如,上述的Block对应65种状态,则上述划分的等级为65种。另外,参见图3,为了更新方便,本发明实施例以双向链表方式组织同一个等级内的Block。有多少个等级则对应多少个双向链表。需要说明的是,上述的等级的数值可以具体是根据包含的有效的读写单元的个数依次排列。例如,将包含O个有效Page的Block划分到Level 0,将包含1个有效Page的 Block划分到Level 1,将包含2个有效I^age的Block划分到Level 2,依次类推,直至包含全是有效Page的Block划分到Level 64。每当数据更新时,可能需要更新源Block(即更新前的数据所在的Block)和目的 Block(即更新后的数据所在的Block)所在的有效等级。此时,源Block中的有效I^age减小1,目的Block中的有效I^age增加1。对应地,源Block将降级,目的Block将升级。需要说明的是,Block可以在使用完成后一次更新,不用每个I^age都操作一次。另外,若源Block与目的Block重叠则该Block的等级不用更新。图4为本发明实施例中数据更新过程中的示意图,参见图4,假设Blocky需要更新,即Block y为源Block,则将Block y从Level n+1删除,并添加到Level η。图5为本发明实施例中数据更新完毕的示意图,参见图5,Level η中增加了 Block y,而 Level n+1 中删除了 Block y。其中,该垃圾回收操作可以由剩余的空白Block数触发,当剩余空白Block低于某阈值时启动回收以便空白Block(Page)消耗与回收达到平衡。启动回收时,是回收包含有效读写单元的个数最少的Block。例如,上述描述中 Level O是包含有效I^age最少的等级,则从Level O (也就是上述的第一等级)中进行 Block回收。进一步地,若包含有效读写单元最少的等级为空则再往下一等级获取直至获得到回收的块。图6为本发明实施例中进行垃圾回收的示意图,如图6所示,Level O Level n-1均为空,则从Level η中进行回收。其中,在回收时可以按照顺序回收,例如,顺序去除链表的第一个Block a进行回收即可。此时的Block a必然是包含有效I^age最少的Block。
7
上述按I^age粒度划分Block只是一种实现特例,在实际应用中,可以根据需要进行Block等级划分,等级划分的粒度可大于I^age、也可以小于I^age。如以4个I^age为粒度进行等级划分,甚至不同的等级可包含不同的I^age数,这可根据实际业务以及SSD初始预留的空白空间多少灵活调整。等级划分粒度越小,回收效率就越高,这样就有能减少额外I^age的搬移、写放大比较小,性能比较高。另一方面,划分粒度增大可大大减小数据更新过程中Block有效等级的维护开销。实际上,对大多数应用来说并不需要太精细的划分即可满足需求。进一步地,本实施例通过双向链表管理同一个等级的Block,可以使得等级更新时更方便。本实施例数据更新过程相比全局遍历筛选最优Block或回收非最优Block将降低不必要的数据搬移,对性能提升和稳定的效果是非常明显的。本实施例回收的总是有效 Page最少的Block、搬移的数据量总是最少的、写放大总是最小的,当然性能也是最高的。 本实施例的等级链表维护伴随平常的写操作进行,开销分摊到每个或每几个写10,不会因为回收挑选Block耗时长带来性能波动,一旦空白Block的回收和使用达到平衡,整个SSD 的性能将达到稳定值。图7为本发明第二实施例的方法流程示意图,本实施例中,每组Block等级链表管理一定物理空间内的所有Block,存储数据的物理空间可以是NAND Flash芯片的一部分或组合,如每颗NAND Flash或每个Channel为一个独立的物理空间。链表的维护由SSD控制单元负责,软硬件实现均可。步骤71 =NAND Flash进行数据保存。例如,主机将数据保存到NAND Flash中,该NAND Flash中可以划分出多个Block, 每个Block包括多个Page,数据读写的基本单位可以为I^age。控制单元可以对该NAND Flash内保存的数据进行读、写、擦等操作。步骤72 =SSD控制单元根据其管理的NAND Flash内的所有的Block包含的有效 Page的个数建立等级链表,并根据数据更新情况对等级链表进行更新。其中,控制单元通常位于SSD控制芯片内部。可以负责解析主机命令;分配缓存单元;实现逻辑地址与物理地址的映射;协调垃圾回收与主机业务等。步骤73 缓存单元保存控制单元维护的等级链表。其中,缓存单元可以暂存数据(如主机读写数据、垃圾回收过程中的中间数据等)、以及各种表项信息(如逻辑地址与物理地址的映射关系、Block磨损及使用信息、 Block等级链表等)。通常缓存单元由SSD控制芯片外挂高速存储器(如SDRAM、DDR...) 实现,在高性能企业级SSD中缓存容量可达到数百MB。Block等级链表存放在缓存单元中,业务运行过程中更新等级等操作体现为控制单元对缓存单元进行读写。为节约存储单元空间,构建Block链表时可用存储单元地址隐含表示Block号,存储单元内则存放于该Block相关的前后Block号。每个物理空间占用一段独立的缓存空间,建立独立的Block等级链表组,每组包含若干等级的Block链表。图8为本发明实施例中等级链表的保存示意图,参见图8,以一块物理空间内的一条链表为例说明Block 0 Block η均在一条链表的情况。本实施例中,参见图8中的表格,用存储单元地址代表Block号,存储单元存放与该Block相邻的前后Block号,从而组成双向链表。例如,Block 1的地址为Offset 1,Block 1的前后Block分别为Block 0 (表格中为0)和Block2 (表格中为2)。根据Block 号和缓存单元基地址Base Address可实现快速寻址。除各级链表外,需各级链表对应的头尾Block号存放在缓存单元另一个固定位置,便于Block获取和添加操作快速寻址。即,图 8中上半部分示意的链表存储情况对应的链表结构示意可以如图8的下半部分所示。本实施例在上一实施例的基础上,通过存储单元地址隐含表示Block号,存储单元内存储该Block相关的前后Block号,可以节省存储单元空间。图9为本发明第三实施例的装置的结构示意图,该装置可以具体为执行上述方法的装置,该装置可以位于SSD控制单元中,该装置包括等级管理模块91和回收模块92;等级管理模块91用于根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同,其中,所述有效读写单元是指数据块内除空白读写单元和被标记为无效的读写单元之外的读写单元,所述被标记为无效的读写单元是指回收前不能再次被写入的读写单元;当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;回收模块92用于当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收,其中,所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。可以是,所述等级管理模块具体用于每个读写单元内的数据更新时则更新一次等级,或者,每个数据块内的数据更新完毕时更新一次等级。可以是,所述回收模块具体用于当剩余空白数据块的个数低于设定的阈值时,按照第一等级内的数据块的排列顺序,依次对所述第一等级内的数据块进行回收。上述的读写单元的粒度等于页、小于页,或者大于页。本实施例通过对数据块划分等级并根据等级回收,可以降低查找最优Block所需的时间,进而加速垃圾回收速度。图10为本发明第四实施例的SSD的结构示意图,包括存储单元101、SSD垃圾回收装置102和缓存单元103 ;存储单元101用于存储数据,所述数据被划分为多个数据块,每个数据块包括多个读写单元;SSD垃圾回收装置102可以如图9所示;缓存单元103用于将所述SSD控制单元管理的每个等级中包括的数据块的信息进行存储。该缓存单元可以具体用于将所述SSD控制单元管理的每个等级中的数据块的信息采用双向链表形式进行存储。进一步地,所述缓存单元具体用于对应每个等级,将该等级中的每个数据块存储在与该数据块的编号对应的存储单元中,且所述存储单元中保存双向链表中与该数据块相邻的两个数据块的编号。该存储单元可以是NAND Flash或每个Channel。本实施例通过对数据块划分等级并根据等级回收,可以降低查找最优Block所需的时间,进而加速垃圾回收速度。可以理解的是,上述方法及设备中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。 最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1.一种SSD垃圾回收方法,其特征在于,包括根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同,其中,所述有效读写单元是指数据块内除空白读写单元和被标记为无效的读写单元之外的读写单元,所述被标记为无效的读写单元是指回收前不能再次被写入的读写单元;当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收,其中,所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。
2.根据权利要求1所述的方法,其特征在于,还包括将每个等级中的数据块的信息进行存储,且位于相同等级的数据块的信息采用双向链表形式组织。
3.根据权利要求2所述的方法,其特征在于,所述将每个等级中的数据块的信息进行存储包括对应每个等级,将该等级中的每个数据块的信息存储在与该数据块的编号对应的存储单元中,且所述存储单元中保存双向链表中与该数据块相邻的两个数据块的编号。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述需要垃圾回收,包括当剩余空白数据块的个数低于设定的阈值时,则需要垃圾回收。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述对更新后的位于第一等级的数据块进行回收,包括按照第一等级内的数据块的排列顺序,依次对所述第一等级内的数据块进行回收。
6.一种SSD垃圾回收装置,其特征在于,包括等级管理模块,用于根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD 中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同,其中,所述有效读写单元是指数据块内除空白读写单元和被标记为无效的读写单元之外的读写单元,所述被标记为无效的读写单元是指回收前不能再次被写入的读写单元; 当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;回收模块,用于当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收,其中,所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。
7.根据权利要求6所述的装置,其特征在于,所述回收模块具体用于当剩余空白数据块的个数低于设定的阈值时,按照第一等级内的数据块的排列顺序,依次对所述第一等级内的数据块进行回收。
8.一种SSD,其特征在于,包括如权利要求6或7所述的SSD垃圾回收装置;还包括存储单元,用于存储数据,所述数据被划分为多个数据块,每个数据块包括多个读写单元;缓存单元,用于将所述SSD垃圾回收装置管理的每个等级中的数据块的信息进行存储。
9.根据权利要求8所述的SSD,其特征在于,所述缓存单元具体用于将所述SSD控制单元管理的每个等级中的数据块的信息采用双向链表形式进行存储。
10.根据权利要求9所述的SSD,其特征在于,所述缓存单元具体用于对应每个等级,将该等级中的每个数据块存储在与该数据块的编号对应的存储单元中,且所述存储单元中保存双向链表中与该数据块相邻的两个数据块的编号。
全文摘要
本发明提供一种SSD及SSD垃圾回收方法和装置。该方法包括根据SSD中每个数据块内包含的有效读写单元的个数,将所述SSD中的数据块划分为至少一个等级,使得位于相同等级的数据块包含的有效读写单元的个数相同;当对SSD中的数据块内的数据进行更新时,如果更新前的数据所在的数据块和更新后的数据所在的数据块不同,则对更新前的数据所在的数据块的等级以及更新后的数据所在的数据块的等级均进行更新;当需要垃圾回收时,对更新后的位于第一等级的数据块进行回收,其中,所述第一等级中的数据块是包含有效读写单元的个数最少的数据块。本发明实施例可以提高SSD垃圾回收速度。
文档编号G06F12/04GK102508788SQ20111029786
公开日2012年6月20日 申请日期2011年9月28日 优先权日2011年9月28日
发明者周伟台, 张琴, 李欣, 杨继涛, 柯乔 申请人:成都市华为赛门铁克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1