专利名称:管理固态存储器中垃圾收集的系统和方法
管理固态存储器中垃圾收集的系统和方法
背景技术:
固态存储器子系统在其正常操作中执行多个命令。例如,对可能包含有效和无效数据的存储器块频繁执行垃圾收集。当这种存储器块被选择进行垃圾收集时,垃圾收集操作将存储器块内的有效数据复制到存储器中的新位置接着擦除整个存储器块,使整个块可用于将来的数据写入。因此,通过垃圾收集处理释放的存储器的量取决于被选择进行垃圾收集的存储器块内的无效页面的量。
下面将参照附图描述体现本发明的各个特征的系统和方法,其中图1是例示根据一个实施例的固态存储子系统的框图。图2是例示根据一个实施例的维护固态存储子系统内的存储器块上的无效页面信息的方法的流程图。图3是例示根据一个实施例的选择存储器块进行垃圾收集的方法的流程图。图4例示根据一个实施例的使用无效块和自由块池以跟踪进行垃圾收集的存储器块的示例。
具体实施例方式尽管描述了本发明的特定实施例,这些实施例仅仅通过示例呈现,而不意在限制本发明的范围。实际上,此处描述的新颖方法和系统可以以各种其它形式实现。此外,可以对此处描述的方法和系统的形式进行各种省略、替换和改变而不背离本发明的精神。所附的权利要求和其等效体意在覆盖将落入本发明的精神和范围内的这类形式或者修改。fiM本发明的实施例涉及优化进行垃圾收集的存储器块的选择以使垃圾收集操作释放的存储器的量最大化。此处公开的系统和方法提供最优或者接近最优垃圾收集候选块的高效率选择,最优选择定义为具有最多无效页面的块。在一个实施例中,控制器按照每个块包含的无效页面的量将存储器块分类到各个无效块池。当进行垃圾收集时,控制器从具有最大的无效页面最小量的块的非空池里选择块。这些池有助于以有效的方式最优或者接近最优选择垃圾收集候选块,并且池的数据结构能够用位掩码实现,其在存储器中占用最小空间。尽管本公开描述了可应用于块的各个实施例,但实施例不被限制并且可应用于存储器的其它单元,诸如超块。系统概括图1是例示存储子系统实施例的框图。如图所示,存储子系统140包括控制器150, 所述控制器继而包括主机命令队列142、垃圾收集命令队列144以及垃圾收集模块148。在一个实施例中,主机命令队列142从驻留在主机系统130中的驱动器132接收存储器命令, 并且垃圾收集命令队列144从管理垃圾收集的垃圾收集模块148接收命令。在其它实施例中,来自驱动器132和垃圾收集模块148的命令被接收到单个队列以便执行。来自驱动器132的存储器命令可以包括由主机系统130发出的写入和读出命令,而来自垃圾收集模块 148的存储器命令可以包括用于垃圾收集的命令。如图1进一步示出,在一个实施例中,控制器150对一个或多个非易失性固态存储器阵列160执行主机命令队列142和垃圾收集命令队列144中的命令。控制器150还维护若干数据结构,在一个实施例中,所述数据结构包括无效页面表152和映射表154。在一个实施例中,无效页面表152保持跟踪整个非易失性固态存储器阵列160中位于物理页面地址处的数据的有效性,而映射表巧4保持跟踪非易失性存储器阵列160中的逻辑块地址(LBA)和物理页面地址之间的对应关系。在一个实施例中,其他数据结构包括无效页面计数器156、无效块池162和自由池164。在一个实施例中,针对存储器阵列160中的至少一些存储器块维护无效页面计数器156。在一个实施例中,针对每个块维护无效页面计数器156并且该无效页面计数器跟踪关联的块内的无效页面的数量。在一个实施例中,无效页面计数器156和/或无效页面表152被存储在动态随机存取存储器 (DRAM)中。在一个实施例中块被分配到各个无效块池162。例如,使用中的块可以被分类到具有至少25%无效页面的块的池、具有至少50%无效页面的块的池、具有至少75%无效页面的块的池、或者具有100%无效页面的块的池。可用于新写入的块被分类到自由池164。 在一个实施例中,涉及池分配的数据结构被存储在静态随机存取存储器(SRAM)中。下面将进一步描述这些用于垃圾收集的数据结构的使用和维护。维护存储器块的无效页面数据图2是例示根据一个实施例的用于维护存储器块上的无效页面信息的方法200的流程图。在框202,控制器150开始接收写入命令(操作)以便执行。写入操作可以由主机系统130发出。在框204,控制器更新映射表IM作为执行写入操作的一部分。在一个实施例中,控制器通过以下来更新映射表,首先在映射表中定位写入命令中的LBA的条目以确定对应于LBA的物理页面地址,接着用新数据被写入的新物理页面地址更新定位的条目。例如,写入可以指向LBA 10,其在写入操作之前被映射到块5,页面2。在实际写入到存储器以前,控制器更新映射表使LBA 10的条目对应于数据将被写入的新位置(例如块12, 页面4)。替换地,控制器可以在向存储器实际写入之后更新映射表。在框206,控制器确定是否需要对无效页面表更新。在大多数情形下这是需要的,除非与写入操作关联的特定LBA 条目先前没有被分配到任何物理地址。在以上示例中,由于块5,页面2现在是无效的,无效页面表1 覆盖块5的部分需要被更新。如果需要更新,则方法进行到框208,其中控制器使针对有改变的块的无效页面计数器156递增。接着在框210中,无效页面表152被更新。在框212,控制器进行另一检查以确定针对有改变的块的页面计数器是否跨过无效页面阈值。如果已经跨过阈值,则在框214,块被重分配到新的池。遵循以上示例,如果无效页面计数器指示块5中的无效页面的数量已经在总共2048中增加到1024,则块5从25% 无效池被重分配到50%无效池。在一个实施例中,处理来自主机的写入操作的控制器处理在进行以上更新任务的同时获得无效页面计数器、无效页面表和无效块池数据结构或者这些数据结构的子集的锁定(lock)。由于垃圾收集处理在操作中参照一些相同数据结构,因此锁定这些数据结构防止垃圾收集处理和其它内部系统处理读取过期的数据和执行命令, 其将造成数据一致性问题。例如,在一个实施例中,当使用无效页面表来阻止即将发生的垃圾收集命令在被指示为包含无效信息的物理页面地址上执行时,在进行更新时将表锁定确保正确地阻止尝试写入无效数据的垃圾收集命令根据更新信息执行。在其它实施例中,各个更新步骤可以不同于图2所示的顺序执行。使用无效页面数据来诜择讲行垃圾收集的存储器块图3是例示根据一个实施例的选择进行垃圾收集的存储器块的方法的流程图。在一个实施例中,方法300由控制器150执行以选择最优或者接近最优的候选块以便垃圾收集。如以上讨论的,最优选择包括选择具有最大数目的无效页面的块以使由垃圾收集操作释放的存储器的量最大化。在图3中,与各个池关联的阈值百分比仅仅作为示例提供并且可以使用其它百分比。另外,在一个实施例中,根据非易失性存储器阵列中提供的过度供给 (over-povisioning)(超过声明容量的额外存储)设定最低阈值百分比。例如,最低阈值百分比可以等于或者大于过度供给量,因为过度供给量与当自由块被耗尽时块中的无效页面的最小量相关。在例示的示例中,25%无效页面的最低阈值对应于示例存储子系统中提供的25%过度供给。在其它实施例中,池的数目可以被设定为其它数目,并且最低阈值百分比可以高于或者低于过度供给百分比。在一个实施例中,至少一个池的阈值被设定为100%或者接近100%无效,以捕捉将在垃圾收集之后产生最大量的空间的块。方法300开始于框302,这里控制器确定自由池中是否保留有足够的块以容纳即将发生的写入操作。如果确定自由池中没有足够的块,则触发垃圾收集,并且方法进入框 304,这里控制器确定在100%无效池中是否存在任何块。如果是,则在框312中选择来自该池的存储器块。如果不是,则在框306中控制器确定75%无效池中是否存在任何块。如果是,则在框312中选择来自该池的存储器块。如果在75%池中没有发现,则在框308中针对 50%无效池重复相同的过程。最终,如果在100^^75%或者50%池中没有块,则在框310 中从25%池中选择块。在本示例中25%池是默认池,并且期望包含至少一个块,因为只有在框302中自由池被确定为耗尽时,才达到框310。这是因为当没有更多的自由块时,25% 的过度供给确保至少一个具有至少25%无效页面的块。在框310或者312中所选择的候选块接着用在框314中的垃圾收集操作中。最终,尽管图3示出选择单个块,其它实施例可以从一个或者多个池中一并选择多个块以便垃圾收集。例如,如果控制器确定垃圾收集需要 45个块,并且在100%池中仅有10个块并且在75%池中有41个块,则控制器可以从100% 池中选择10个并且从75%池中选择其需要的剩余35个。多池数据结构图4例示根据一个实施例的无效块池402的示例设定。如图所示,示例块0-7根据每个块包含的无效页面的数目分布在4个池402A-D中。如先前在图3中所示,如果确定在自由池404中没有足够的块,则控制器触发垃圾收集。如果并且当其发生时,块7将被首先选择进行垃圾收集,因为其属于100%无效池。如果仍需要更多个块进行垃圾收集,则在下一循环中控制器将从池402B (块0、块2或者块幻中选择任何块,因为池402A现在为空并且池402B现在是具有最大的最小无效页面阈值(至少75% )的非空池。在一个实施例中,为了实现速度优化,被分配到具有多个块的池的块的选择不取决于块的无效页面的实际百分比并且可以基于选择处理的当前位置选择池中的候选块或者可以随机选择块。选择处理可以以连续方式遍历块以定位分配到最大的非空池的下一可用块。例如,如果选择处理最后在块1结束对候选块的搜索,则将选择块2,因为在100%池中没有更多的块(块7已经被采用)并且块2是该选择处理中碰到的75%池中的第一个块。由此,即使其具有比块0或者块5更低的百分比,从池402B中也选择块2。在下一循环中,随着选择处理从块3提取,移动到块4,并且找到块5,块5将被选择,其为属于75%池的下一个块。在其它实施例中,可以进行额外的检查和/或比较,使得可以选择同一池中具有更大或者最大百分比的块。在各个实施例中,一次选择若干块并且可以跨越不同的池(例如块7可以与块0、2、和5 —起选择)。然而,在一些实施例中,选择处理保持从具有最大的无效页面最小量的块的池到具有最小的无效页面最小量的块的池。尽管选择处理从池中去除块,其它存储器操作可以使块重分配到具有更大的无效页面最小量的池或者如果块先前没有达到任何阈值,块可以被新分配到池。在一个实施例中,池结构用位掩码实现,并且块可以与指示其分配到池的一个或者多个位关联。例如,4池结构可以包括针对块的4个对应的位掩码,每个位掩码指示各个块是否属于特定池。在一个实施例中,额外的检查位可以分配到一组块以加速选择处理。 例如,可以使用检查位来指示32个块的状态,使得当检查位被设定为“0”时,选择处理能够跳过32个块,知道这些块都不具有指示分配到所考虑的特定池的“1”位。如果检查位被设定为“ 1 ”,则选择处理将检查32个块的各个位,因为“ 1”指示至少一个块被分配到特定池。 在另一实施例中,额外的检查位可以被以层级顺序分配到检查位组。例如,额外的检查位可以被分配到一组检查位,使得如果检查位的任何一个被设定为“ 1 ”,则额外的检查位将也被设定为“1”。检查位方法减少定位被分配到具有最大的最小量无效页面的池的块所需要的时间。在另一实施例中,池分配被维护在表中。多池数据结构提供选择最优或者接近最优的候选块以便垃圾收集的有效方法。在一个实施例中,使用分类链接的列表结构来组织有资格垃圾收集的块。在一个实施例中,块在链接表中被按照块中的无效页面的量分类,使得可以通过从链接表的前或者后(取决于分类的方向)选择块定位垃圾收集的最优候选者。在一个实施例中,以上描述的池以分类链接表结构实现,其中具有到对应于各个池的最小无效页面阈值的条目的指针,使得能够迅速定位分配到各个池的块。在另一实施例中,一个或者多个链接表被用于每个池,并且如以上描述块被分配到池并且插入到对应的池的一个或者多个链接表中。在一些实施例中, 相比于链接表实现,用位掩码实现的池数据结构需要显著更少的开销存储器。这个差异在存储子系统中是显著的,其中潜在地存在百万计的块或者数万超块,其可以是任意给定时间用于垃圾收集的候选。Mrk以上公开的具体实施例的特征和属性可以以不同方式组合以形成其他的实施例, 所有其他的实施例将落入本公开的范围之内。尽管本公开提供特定优选实施例和应用,对本领域技术人员明显的其它实施例,包括没有提供此处阐述的全部特征和优点的实施例, 也在本公开的范围之内。因此,本公开的范围意在仅仅参照所附的权利要求限定。
权利要求
1.一种存储子系统,包括非易失性固态存储器阵列;以及控制器,其包括垃圾收集模块,所述控制器被配置为接收和执行来自主机系统和所述垃圾收集模块的存储器命令,所述控制器还被配置为针对所述存储器阵列中的第一存储器块,维护无效页面计数器,所述无效页面计数器用于存储与所述第一存储器块内的无效页面的数目有关的数据,所述第一存储器块按照无效页面的数目被分配到第一池,其中所述垃圾收集模块被配置为基于无效页面的数目从多个池中选择存储器块;在执行来自所述主机系统的、引起所述第一存储器块内的页面的有效性改变的存储器命令之后,更新与所述第一存储器块关联的无效页面计数器;以及当更新后的无效页面计数器超过阈值时,将所述第一存储器块重分配到第二池。
2.根据权利要求1所述的存储子系统,其中所述控制器还被配置为在所述第一存储器块进行垃圾收集之后,将所述第一存储器块分配到用于自由存储器块的池。
3.根据权利要求1所述的存储子系统,其中所述多个池中的每一个被分配有具有不同的无效页面最小数目的块,并且所述垃圾收集模块被配置为针对垃圾收集选择被分配到第三池的第二存储器块,所述第三池具有最大的无效页面最小数目。
4.根据权利要求3所述的存储子系统,其中所述多个池包括所述第一池、所述第二池、 所述第三池和第四池,所述第一池被初始配置用于具有至少25%无效页面的存储器块,所述第二池被初始配置用于具有至少50%无效页面的存储器块,所述第三池被初始配置用于具有至少75%无效页面的存储器块,所述第四池被初始配置用于具有100%无效页面的存储器块。
5.根据权利要求1所述的存储子系统,其中数据结构被用来存储与存储器块的池分配有关的数据。
6.根据权利要求5所述的存储子系统,其中所述数据结构被存储在静态随机存取存储器中。
7.根据权利要求5所述的存储子系统,其中所述数据结构是树形结构。
8.根据权利要求5所述的存储子系统,其中所述控制器还被配置为在将所述第一存储器块重分配到不同的池中之前,获得对所述数据结构的锁定。
9.根据权利要求1所述的存储子系统,其中所述控制器还被配置为在更新所述页面计数器之前,获得对所述无效页面计数器的锁定。
10.根据权利要求1所述的存储子系统,其中所述无效页面计数器被存储在动态随机存取存储器中。
11.一种管理非易失性固态存储器中的存储器操作的方法,所述方法包括针对所述非易失性固态存储器中的第一存储器块,维护无效页面计数器,所述无效页面计数器用于储存与所述第一存储器块内的无效页面的数目有关的数据,所述第一存储器块按照无效页面的数目被分类到第一池;在从主机系统接收引起所述第一存储器块内的页面的有效性改变的写入命令之后,更新用于所述第一存储器块的无效页面计数器;以及当所述第一存储器块的无效页面计数器指示所述第一存储器块内的无效页面的数目超过阈值时,将所述第一存储器块重分类到第二池。
12.根据权利要求11所述的方法,还包括针对垃圾收集选择被分类到具有最大的无效页面最小阈值的第三池中的第二存储器块。
13.根据权利要求11所述的方法,其中所述多个池包括所述第一池、所述第二池、所述第三池和第四池,所述第一池被初始配置用于具有至少25%无效页面的存储器块,所述第二池被初始配置用于具有至少50%无效页面的存储器块,所述第三池被初始配置用于具有至少75%无效页面的存储器块,所述第四池被初始配置用于具有100%无效页面的存储器块。
14.根据权利要求11所述的方法,还包括在映射表中针对所述写入命令中的逻辑地址定位条目以确定对应于所述逻辑地址的物理页面地址;用阻止即将发生的垃圾收集命令在所述物理页面地址处执行的信息更新无效页面表;执行所述写入命令;以及用新物理地址更新所述映射表中定位的条目,所述数据通过所述写入命令的执行被写入所述新物理地址。
15.根据权利要求14所述的方法,其中更新所述无效页面表还包括更新所述无效页面表中的条目以指示在所述物理页面地址的数据是无效的。
16.根据权利要求14所述的方法,其中所述无效页面表被实现为位掩码,其中使用位来代表页面地址处的数据的有效性。
17.根据权利要求14所述的方法,其中所述无效页面表存储在动态随机存取存储器中。
18.根据权利要求11所述的方法,其中数据结构被用来存储与所述存储器块的池分类有关的数据。
19.根据权利要求18所述的方法,其中所述数据结构存储在静态随机存取存储器中。
20.根据权利要求18所述的方法,其中所述数据结构是树形结构。
21.根据权利要求11所述的方法,其中所述无效页面计数器存储在动态随机存取存储器中。
22.—种针对垃圾收集存储器命令在存储子系统的非易失性存储器阵列中选择存储器块的方法,所述方法包括维护与所述存储器块内的无效页面的数目有关的数据;将所述存储器块分配到多个池中,每个池被配置为在分配到该池的各个存储器块中具有不同的无效页面最小阈值;以及选择被分配到具有最大的最小阈值的池的存储器块以便垃圾收集。
23.根据权利要求22所述的方法,其中所述选择还包括 用至少一个存储器块条目识别具有最大的最小阈值的池。
24.根据权利要求22所述的方法,还包括当从主机系统接收的存储器命令引起所述存储器块内的页面的有效性改变时,更新所述数据;以及基于更新后的数据将包含该页面的存储器块重分配到具有更高的无效页面最小阈值的新池。
25. —种针对垃圾收集存储器命令在存储子系统的非易失性存储器阵列中选择存储器块的方法,所述方法包括维护关于所述存储器块内有多少个页面是无效的统计数据; 基于无效页面的数目使用所述统计数据来维护多个存储器块的池;以及从第一池选择第一存储器块以便垃圾收集。
全文摘要
本发明实施例涉及选择存储器块以便垃圾收集以使垃圾收集操作释放的存储器的量最大化。此处公开的系统和方法提供有效选择最优或者接近最优的垃圾收集候选块,最优选择定义为最无效页面的块。在一个实施例中,控制器将存储器块按照每个块包含的无效页面的量分类到各个无效块池。当进行垃圾收集时,控制器从具有最大的无效页面最小量的块的非空池选择块。池以高效方式帮助垃圾收集候选的最优或者接近最优选择并且池的数据结构能够用在存储器中占用最小空间的位掩码实现。
文档编号G06F12/02GK102243613SQ201110126948
公开日2011年11月16日 申请日期2011年5月12日 优先权日2010年5月12日
发明者A·C·坎, H-F·康 申请人:西部数据技术公司