CN103514098A - 用于回收存储空间的方法和系统 - Google Patents
用于回收存储空间的方法和系统 Download PDFInfo
- Publication number
- CN103514098A CN103514098A CN201210236447.XA CN201210236447A CN103514098A CN 103514098 A CN103514098 A CN 103514098A CN 201210236447 A CN201210236447 A CN 201210236447A CN 103514098 A CN103514098 A CN 103514098A
- Authority
- CN
- China
- Prior art keywords
- storage space
- target area
- address
- section
- described target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明的实施例涉及用于回收存储空间的方法和系统。特别地,公开了一种用于回收存储空间的方法,该存储空间包含多个段。该方法包括:基于预定的回收需求而确定存储空间中的目标区域以使得满足该回收需求的数据移动开销最小;回收该目标区域包含的段;以及更新与该存储空间相关联的地址映射以保持存储空间的地址连续性。还公开了相应的系统。根据本发明的实施例,允许根据待回收的存储空间的当前使用状况来灵活确定回收其中的哪些段。以此方式,可以显著降低回收操作所导致的数据移动开销,提高存储空间回收的灵活性和效率。
Description
技术领域
本发明的实施例总体上涉及存储管理,更具体地,涉及用于回收存储空间的方法和系统。
背景技术
存储管理是现代计算技术中的重要问题。在现代计算机系统中,存储系统通常以层级式架构实现。用户数据与物理的存储设备(例如,磁盘)之间存在一个或多个逻辑和/或物理的层。在层级式存储架构中,卷(volume)是一个重要概念。在此使用的术语“卷”是指在物理存储盘上创建的连续存储空间。每个物理存储设备可以被划分为多个卷,一个卷也可以跨越多个物理存储设备。此外,卷通常被划分为若干大小相等的单元,称为“段”(chunk)。
卷之类的存储空间的回收是存储管理中的重要问题之一,它旨在将卷中目前未被使用或者说处于“空闲”状态的段回收到系统存储池中以供再次分配和使用,从而以较为有效的方式来使用存储空间。以卷为例,在已知的存储空间回收方案中,总是尝试从卷的结尾处回收连续的段。这种方案可能导致不必要的数据移动操作。例如,假设需要回收卷中包含N个段的一段连续空间。然而,可以理解,在卷的结尾处未必具有N个连续的空闲段。此时,常规的处理方法是将最后N个段中非空闲的段所存储的数据移动到卷中的其他空闲段,而后回收卷中的这最后N个段。
本领域技术人员能够理解,上述方案在灵活性和性能方面都存在缺陷。例如,这种方法只能从卷尾部处回收空间,没有实际考虑卷当时的使用情况特别是空闲段的分布情况,这种局限性往往会导致过多的数据移动。例如,可能在卷的前部或中部存在连续的N个空闲段。此时,如果回收这N个空闲段,则根本无需进行数据移动。另外,过多的数据搬移势必带来更大的磁盘I/O压力,所以已知的方法通常是离线运行,无法满足在线存储系统的需求,而且也降低了系统可用性。
实际上,上文结合卷描述的情况不仅仅出现在卷的空间回收中,在很多其他逻辑存储空间的管理和回收中也存在类似问题。因此,本领域中需要一种更为有效的存储空间回收方案。
发明内容
鉴于本领域中目前存在的上述问题,本发明提出一种用于回收存储空间的方法和系统。
在本发明的第一方面,提供一种用于回收存储空间的方法,其中所述存储空间包含多个段。所述方法包括:基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小;回收所述目标区域包含的段;以及更新与所述存储空间相关联的地址映射以保持所述存储空间的地址连续性。
在本发明的第二方面,提供一种用于回收存储空间的系统,其中所述存储空间包含多个段。所述系统包括:确定装置,配置为用于基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小;回收装置,配置为用于回收所述目标区域包含的段;以及更新装置,配置为用于更新与所述存储空间相关联的地址映射以保持所述存储空间的地址连续性。
根据本发明的实施例,对于任何给定的存储空间回收需求,允许根据待回收的存储空间(例如,卷)的当前使用状况来灵活确定回收其中的哪些段。具体而言,本发明的实施例可以确保对存储空间进行回收所导致的数据移动开销最小,从而显著提高存储空间回收的灵活性和效率。特别地,本发明的实施例可以利用地址映射机制确保回收之后的存储空间的逻辑地址是连续的。
附图说明
通过参考附图阅读下文的详细描述,本发明实施例的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施例,其中:
图1示出了根据本发明示例性实施例的用于回收存储空间的方法100的流程图;
图2A和图2B示出了根据本发明示例性实施例的确定目标区域的示意图;
图3示出了根据本发明示例性实施例的用于移动目标区域中的非空闲段中数据的方法300的流程图;
图4示出了根据本发明示例性实施例的在回收目标区域之后的存储空间的示意图;
图5示出了根据本发明示例性实施例的用于扩充存储空间容量的方法500的流程图;
图6示出了根据本发明示例性实施例的扩充存储空间容量的示意图;
图7示出了根据本发明示例性实施例的用于回收存储空间的系统700的框图;以及
图8示出了可用来实现本发明实施例的计算机系统800的框图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考附图中示出的若干示例性实施例来描述本发明的原理和精神。给出这些实施例仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
首先参考图1,其示出了根据本发明示例性实施例的用于回收存储空间的方法100的流程图。根据本发明的实施例,方法100的实例可以由负责管理存储空间的一方来执行,例如,存储管理器或者存储管理线程,等等。
方法100开始之后,在步骤S101,基于预定的回收需求而确定要回收的存储空间中的一个目标区域,使得满足该回收需求的数据移动开销最小。
根据本发明的实施例,要回收的存储空间可以是卷,或者是任何其他在物理存储设备上创建的逻辑存储区域。特别地,卷的地址一般而言是连续的。根据本发明的实施例,在回收过程中允许卷的物理地址是不连续的,但是通过地址映射可以保证其逻辑上的地址连续性,这还将在下文详述。
根据本发明的实施例,存储空间在逻辑上被进一步划分为单元,其大小通常是相等的(在某些情况下这可以不是必须的)。存储空间所包含的这些单元称为“段”。每个段在存储空间中都具有一个起始地址和一个结尾地址。可以理解,在段的大小相等的情况下,只需要段的起始地址便可以在存储空间中唯一地标识一个段。
注意,在下文描述中将主要参考“卷”来阐释本发明的思想。然而应当理解,这仅仅是示例性的而非限制性的。可以在物理存储设备上创建的逻辑存储结构均适用于本发明的实施例。
根据本发明的实施例,“回收需求”可以指示回收的目标,即,要从存储空间中回收的存储量。例如,回收需求可以直接指示要回收的段的数目。备选地,回收需求也可以指示要回收的存储容量,该存储容量既可以是数值,也可以是占整个存储空间存储量的比例。此外,根据本发明的实施例,回收需求可以由应用或者用户以交互的方式生成,也可以定期生成。本发明的范围在这些方面不受限制。
本文中使用的术语“目标区域”是存储空间中所包含的一个子空间,由一个或多个段组成。可以理解,在步骤S101处确定的目标区域中所包含的空闲段(即,当前未被分配和使用的段)的总存储容量应当大于或者等于回收需求中指示的将要回收的存储容量。如果存储空间中所有空闲段的存储容量总和小于回收需求中指示的回收容量,方法100可以返回错误指示并且结束。
此外,在步骤S101处确定的目标区域还应当使满足回收需求的数据移动开销最小。这里所说的“数据移动开销”主要是指移动目标区域中的非空闲段(如果存在的话)中存储的数据所产生的时间和资源上的开销。根据本发明的实施例,对于一个确定的待回收目标区域,数据移动开销与诸多因素相关联。一个示例性影响因素是目标区域中包含的空闲段的数目。具体而言,一个区域中包含的空闲段越多,回收该区域的数据移动开销可能越小。特别地,假设回收需求指示回收N个段(N是自然数),如果目标区域由多于N个连续空闲段组成,则满足回收需求的数据移动开销为零。
备选地或附加地,影响数据移动开销的另一个因素是目标区域中包含的非空闲段在该目标区域中的分布状况。例如,本领域技术人员知道,移动连续段中存储的数据的开销通常小于移动不连续段中存储的数据。因此,如果两个候选区域中包含的空闲段数目相同,则可以选择非空闲段分布比较连续或者集中的那个候选区域作为目标区域。
应当理解,上文列举的仅仅是与数据移动开销相关的几个示例性因素。任何其他因素均可以被纳入考虑并且与本发明的实施例结合使用。本发明的范围在此方面不受限制。
此外,根据本发明的某些实施例,可以通过对卷进行实际的物理访问来确定目标区域。备选地,根据另一些实施例,可以通过访问段位图(chunk bitmap)来确定目标区域。在这样的实施例中,存储空间(例如,卷)所包含的多个段的使用状况可以由一个段位图记录。例如,段位图中可以包含用于每个段的字段,用于指示对应的段处于使用状态(例如,标记为逻辑“1”)还是空闲状态(例如,标记为逻辑“0”)。本领域技术人员知道,段位图可以存储在磁盘上,并且可以在运行时被调入存储器以保存在存储空间中的特定位置。例如,如果存储空间是卷,则卷位图可以保存在卷头部中。术语“卷头部”表示卷中用于存储元数据的固定区域,它通常是位于卷首的固定区域。上层应用通常不直接访问或者分配卷头部,而且卷头部不会被回收。
此时,在步骤S102处,可以访问段位图以获得存储空间的空闲段分布状况;并且基于回收需求和空闲段分布状况来确定使数据移动开销最小化的目标区域。参考图2A讨论一个具体示例。在图2A所示的示例中,假设要回收的卷总计包含20个段(编号1-20,其中“H”表示卷头部,不用于存储数据),并且空闲段为13个(位图中相应的位被设置为“0”)。当回收需求只是要回收卷容量的25%(即,5个段)时,通过从卷的尾部开始访问位图,以确定至少包括5个段的目标区域。首先扫描的候选区域可以是段16至20组成的区域,该区域的数据移动开销为1。继续扫描发现:段14至18组成的区域的数据移动开销最小(都是空闲段,无需移动数据)。由此,可以将这个区域确定为目标区域,如图2A中的框所示。
可以想到,一种可能出现的情况是:存储空间(例如,卷)中可能具有多个候选区域使满足回收需求的数据移动开销最小化。在这种情况下,根据本发明的某些实施例,可以选择结尾地址最接近存储空间的结尾地址的那个候选区域作为要回收的目标区域。可以理解,这里所说的存储空间的结尾地址是指该存储空间中包含的最后一段的结尾地址。
考虑图2B所示的示例,类似于图2A,仍然假设要回收的卷总计包含20个段,其中空闲段为13个。当回收需求中指示的回收目标是卷容量的50%(即,10个段)时,至少存在两个候选区间同时满足最小数据移动开销,即,由段10至19构成的区域1以及由段11至20构成的区域2。此时,因为区域2更接近整个存储空间(卷)的结尾,因此选择区域2作为目标区域。
选择尽量“靠后”的区域作为目标区域是有益的。首先,如下文所述,为了保持回收后的存储空间的地址连续性,需要对段的地址映射进行更新,而这种更新通常只涉及目标区域之后的段。因此,目标区域越接近整个存储空间的结尾,受到影响的段就越少。另一方面,这种选择目标区域的策略对于卷的容量扩充也是有利的,这还将在下文详述。
应当理解,当具有使数据移动开销最小化的不止一个候选区域时,可以备选地或附加地采用任何其他策略从中选择一个作为目标区域。例如,随机选择是一种可行的策略。本发明的范围在此方面不受限制。
接下来,方法100进行到步骤S102,在此回收在步骤S101处选定的目标区域中包含的段。如上所述,目标区域中可能只包含空闲段。在这种情况下,直接回收该目标区域中包含的所有段即可。此时,与回收相关联的数据移动开销为零。在此使用的术语“回收”可以包括将空闲段返回给系统存储池以便再次分配和使用。
另一方面,如果目标区域中包含任何非空闲段,则在步骤S102,将目标区域中的每个非空闲段中存储的数据移动到存储空间中位于目标区域之外的空闲段中。特别地,根据某些实施例,可以首先尝试将目标区域中的非空闲段中存储的数据移动到存储空间中的、起始地址小于目标区域的起始地址的空闲段,即,目标区域“之前”的空闲段。当这种尝试失败,说明目标区域之前的空闲段已经被填满。响应于此,可以将目标区域中的剩余非空闲段中存储的数据移动到目标区域之后的空闲段中,即,起始地址大于目标区域结尾地址的那些空闲段。
参考图3,其具体描述了根据此类实施例的用于移动目标区域的非空闲段的方法300的框图。可以理解,方法300可以被认为是方法100中的步骤S102的一种特定实现。
方法300开始之后,在步骤S301,根据访问索引访问目标区域中的一个段。在方法300的初始迭代中,访问索引可以指向目标区域中的第一个段。
接下来,方法300进行到步骤S302,判断访问的段是否为空闲段。如果是,则方法300进行到步骤S303,在此判断当前段是否为目标区域中的最后一个段。如果是,则方法300结束。否则,方法300进行到步骤S304,在此递增访问索引以指向当前段的下一段。方法300接下来返回到步骤S301以迭代执行。
另一方面,如果在步骤S302判断当前访问的段为非空闲段,则方法300进行到步骤S305以确定在目标区域之前是否存在空闲段。如果存在,则在步骤S306处,将目标区域中当前访问的段中的数据移动到目标区域之前的一个空闲段,并且方法300继而进行到步骤S303。反之,如果在步骤S305确定目标区域之前已经不存在空闲段,则方法300进行到步骤S307,在此将目标区域中当前访问的段中的数据移动到目标区域之后的一个空闲段。方法300继而进行到步骤S303。
在迭代执行以遍历了目标区域中包含的所有段之后,方法300结束。
方法300所示的实施例是有益的,因为目标区域“之后”的段需要在回收之后变更地址映射。通过将目标区域中的非空闲段中存储的数据尽量移动到目标区域之前的空闲段,可以简化后续地址映射变更的操作。当然,应当注意,这并不是必须的。也可以首先向目标区域之后的空闲段移动数据,或者随机选择空闲段。本发明的范围在此方面不受限制。
返回图1,在执行步骤S102之后,目标区域中包含的所有段被回收,不再属于当前存储空间(例如,卷)。相应地,存储空间的容量被缩减。如图4所示,在回收先前由段8-17构成的目标区域之后,该目标区域先前所对应的地址空间成为“空洞”。
注意,在步骤S102回收目标区域之后,通常还需要更新与目标区域中的段相对应的元数据。例如,可以更新段的地址映射关系(例如由存储管理进程维护),以便及时反映出该数据块的变化,从而保持数据一致性。此外,还可以在日志中记录重要数据的改变历史,以便系统故障时恢复。而且,在步骤S102执行过程中,可能需要暂时屏蔽或者挂起针对有关段的输入/输出(I/O)请求。这些都是本领域技术人员知道的,在此不再赘述。
接下来,方法100进行到步骤S103,在此更新与存储空间相关联的地址映射,以保持存储空间的地址连续性。对于卷之类的存储空间,其物理地址通常是连续的。然而如上所述,根据本发明的实施例,当回收目标区域所导致的地址空间空洞不在存储空间结尾处时,存储空间的物理地址会变得不再连续。
在步骤S103处,采用地址映射更新机制对地址空间的空洞进行补偿。根据本发明的某些实施例,在步骤S103处,通过以下方式来实现地址映射更新。一方面,保持起始地址小于目标区域起始地址的段的地址映射不变。可以理解,这里所说的目标区域的起始地址等于该目标区域中的第一个段的起始地址。另一方面,对于那些起始地址大于目标区域的结尾地址的段,则为其设置适当的地址映射偏移量。
特别地,根据这样的实施例,存储空间可以与一个段映射表(Chunk Map Table,CMT)相关联,映射表的每个条目对应于一个段,用于支持段的逻辑地址与物理地址之间的转换。通过利用CMT,可以确保目标区域回收所导致的地址空间空洞对于上层应用是透明的。换言之,尽管存储空间的物理地址不再连续,但是从上层应用的角度看,其逻辑地址仍然是连续的,从而确保上层应用对存储空间的使用不受影响。
参考表1示出的示例性CMT描述一个具体示例。CMT的每个条目具有“段编号”字段,用于表示段。特别地,卷首的段不用于存储用户数据,因而编号特殊(例如,“H”)。CMT的每个条目还包括“偏移量”字段,用于指示相应的段由于目标区域回收操作的影响在寻址时所需的地址映射偏移。每个段的初始偏移量被设置为零。
段编号 | 偏移量 |
H | 0 |
1 | 0 |
... | 0 |
13 | 0 |
14 | 0xFFFFFFF |
... | 0xFFFFFFF |
18 | 0xFFFFFFF |
19 | 5 |
20 | 5 |
表1
假设在包含段1-20的卷中,回收了段14-18构成的目标区域,并且由此形成了地址空间的空洞。如表1所示,可以将与段14-18相关联的偏移量设置为一个预定的特殊值(例如,“0XFFFFFFF”);将“空洞”之前的段的偏移量保持为初始值0;并且将在“空洞”之后的偏移量递增目标区域(即,“空洞”)的大小,在本例中是5。以此方式,当上层应用产生I/O请求时,可以常规地确定该I/O请求所指向的段的物理地址。继而,不是利用该地址直接访问该段,而是首先查询CMT。如果与该段对应的偏移量是预定的特殊值(例如,“0XFFFFFFF”),则表明该段目前已经不是该卷的一部分,可以向上层应用返回错误信息。另一方面,如果偏移量不是特殊值,则可以基于上层应用输入的逻辑地址和CMT中设置的偏移量来确定该段的当前实际物理地址。例如,如果上层应用输入的I/O地址为X,对应段的偏移量在CMT中为A,存储空间中每个段的大小为M,则该I/O请求目前的实际物理地址Y可以如下计算:
Y=X-A*M (1)
应当注意,上表所示的CMT仅仅是示例性的。根据需要,表中的每个条目还可以包含其他字段。例如,为了随后的容量扩展,每个条目还可以具有“子卷编号”和“子卷内偏移”字段,这将在下文详述。
还应注意,CMT可以单独使用,和/或与存储空间管理的其他地址映射机制结合使用。例如,上层应用产生的I/O请求可以指示一个逻辑地址。该逻辑地址首先通过目前已知或者将来开发的任何适当手段被转换为物理地址,而后再通过CMT调整该物理地址以补偿卷中的地址空间“空洞”所造成的影响。
至此,方法100已经完成了对存储空间(例如,卷)中的目标区域的回收,并且能够保证上层应用不受这种回收的影响。与现有技术不同,存储空间回收不再必须在卷的尾部实现,而是可以根据卷的当前使用情况灵活确定回收哪段区域。以此方式,存储空间回收所导致的数据移动开销得以显著降低。
在某些可选实施例中,方法100可以进行到可选的步骤S104,在此通过向存储空间分配附加段来扩展该存储空间的容量。可以理解,在使用过程中,可能根据需要扩展存储空间的容量。根据本发明的某些实施例,扩容可以像现有技术中那样,直接将附加的段直接附加在当前存储空间之后。根据另一些实施例,则可以首先尝试将附加段填充由于先前回收而导致的地址空间“空洞”中,而后再将剩余的附加段附加到该存储空间之后的地址空间。图5示出了一个这样的示例。
参考图5,其示出了根据本发明示例性实施例的用于扩充存储空间的方法500的流程图。方法500开始之后,在步骤S501,将附加段中的第一部分分配到先前回收的目标区域所对应的地址空间,即,空洞中。注意,“第一部分”所包括的段的数目由空洞的大小决定。如果空洞中的段数大于或等于要增加的附加段的数目,则第一部分包括要附加的全部附加段。反之,第一部分包括的段的数目等于空洞的大小。
根据本发明的实施例,附加段向地址空间空洞的分配可以如下实现。首先,可以对存储空间的地址映射结构(例如,CMT)进行扫描,确定与每个段相关联的偏移量是否为特殊值(例如,0xFFFFFFFF)。当找到第一个这样的特殊偏移值时,认为找到了空洞的开始位置。接下来,把新分配的附加段依次填入空洞(即,回收前的目标区域)所对应的地址空间,直到空洞被填满或者所有附加段已经被分配。
接下来,方法500进行到步骤S502,在此确定是否还有剩余的附加段未被分配。如果已经分配了所有的附加段,则方法500进行到步骤S504(下文详述)。另一方面,如果还有剩余的附加段,则方法500进行到步骤S503,在此将剩余附加段分配到原存储空间的结尾地址之后的地址空间。步骤S503可以通过利用已知的常规技术手段实现,这是本领域技术人员能够想到的,在此不再赘述。在步骤S503之后,方法500进行到步骤S504。
在步骤S504,响应于对存储空间的扩充,更新与存储空间相关联的地址映射(例如,CMT)。根据本发明的实施例,这里所说的更新地址映射例如可以包括:将CMT中相关的条目的偏移量设置为适当的值,从而清除空洞标志并且反映正确的地址映射关系。
特别地,在某些情况下,可以将新扩充的所有附加段作为一个整体加以维护,尽管它们在物理地址上可能是不连续的。换言之,新添加的所有附加段在逻辑上构成单个存储子空间。例如,在存储空间是卷的情况下,这种子空间通常称为“子卷”。此时,地址映射表CMT的每个条目可以包括“子卷编号”和“子卷内偏移”字段。在这样的实施例中,在步骤S504可以相应地执行如下操作:设置CMT条目的“子卷编号”,使属于同一子卷的所有段具有相同的子卷编号,而属于不同子卷的段具有不同编号。而且,可以设置“子卷内偏移”字段,从而支持在子卷内对段进行寻址。
例如参考图6,新分配的段被分为两个部分,第一部分(新段1’到5’)被填入原卷的空洞,第二部分(新段6’和7’)被附加在原存储空间之后的地址空间。这两个部分可以通过作为一个子卷来维护。为此,如上所述,卷的CMT包括“子卷编号”和“子卷内偏移”字段。下面的表2示出了在完成容量扩充之后的CMT。可以看到,新增加的段(段14-18以及21-22)具有相同的子卷编号,并且其在子卷内的偏移由“子卷内偏移”字段记录。还可以看到,所有段的“偏移量”都被归零,以表明目前存储空间中不存在地址空间空洞。
段编号 | 偏移量 | 子卷编号 | 子卷内偏移 |
H | 0 | 0 | 0 |
1 | 0 | 0 | 0 |
... | 0 | 0 | 0 |
13 | 0 | 0 | 0 |
14 | 0 | 1 | 1 |
15 | 0 | 1 | 2 |
16 | 0 | 1 | 3 |
17 | 0 | 1 | 4 |
18 | 0 | 1 | 5 |
19 | 0 | 0 | 0 |
20 | 0 | 0 | 0 |
21 | 0 | 1 | 6 |
22 | 0 | 1 | 7 |
表2
此外,可以理解,当对原存储空间进行容量扩充之后,可能需要相应地调整地址转换方式。具体而言,当进行I/O访问时,如前所述同样需要进行地址转换,根据CMT中记录的子卷编号,可以通过已知的方法(例如,子卷的元数据信息)确定该子卷的起始物理地址S。这样,对于给定的输入地址X,其物理地址Y可以如下计算:
Y=S+O+(X-H)%M (2)
其中H表示卷头部的长度,M表示段的大小,O表示子卷内偏移量。
方法500在步骤S504之后结束。
利用方法500,可以在扩充卷容量时首优先填充由于先前的存储空间回收而造成的空洞。这允许尽可能地保证存储空间的物理连续性,避免碎片出现。
返回图1,方法100在步骤S104之后结束。
下面参考图7,其示出了根据本发明示例性实施例的用于回收存储空间的系统700的框图。
如上所述,存储空间可以是卷,并且包含多个段。如图7所示,系统700包括:确定装置701,配置为用于基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小;回收装置702,配置为用于回收所述目标区域包含的段;以及更新装置703,配置为用于更新与所述存储空间相关联的地址映射以保持所述存储空间的地址连续性。
根据本发明的某些实施例,所述数据移动开销与以下至少一个相关联:所述目标区域中包含的空闲段的数目;以及所述目标区域中包含的非空闲段在所述目标区域中的分布状况。
根据本发明的某些实施例,其中所述存储空间中的所述多个段的使用状况由段位图记录,并且其中确定装置701可以包括:位图访问装置,配置为用于访问所述段位图以获得所述存储空间的空闲段分布状况;以及第一确定装置,配置为用于基于所述回收需求和所述空闲段分布状况来确定所述目标区域。
根据本发明的某些实施例,确定装置701可以包括:第二确定装置,配置为用于在所述存储空间中具有多个候选区域使得所述数据移动开销最小的情况下,选择结尾地址最接近所述存储空间的结尾地址的候选区域作为所述目标区域。
根据本发明的某些实施例,回收装置702可以包括:数据移动装置,配置为用于在所述目标区域中包含非空闲段的情况下,将所述目标区域中的每个非空闲段中存储的数据移动到所述存储空间中位于所述目标区域之外的空闲段。根据本发明的某些实施例,所述数据移动装置包括:第一移动装置,配置为用于尝试将所述目标区域中的非空闲段中存储的数据移动到所述存储空间中的、起始地址小于所述目标区域的起始地址的空闲段;以及第二移动装置,配置为用于在所述目标区域中还存在剩余非空闲段的情况下,将所述剩余非空闲段中存储的数据移动到所述存储空间中的、起始地址大于所述目标区域的结尾地址的空闲段。
根据本发明的某些实施例,更新装置703可以包括:第一更新装置,配置为用于保持起始地址小于所述目标区域的起始地址的段的地址映射不变;以及第二更新装置,配置为用于为起始地址大于所述目标区域的结尾地址的段的设置地址映射偏移量。
根据本发明的某些实施例,系统700还可以包括可选的扩充装置(未示出),配置为用于通过向所述存储空间分配附加段来扩充所述存储空间的容量。所述扩充装置可以包括:第一分配装置,配置为用于将所述附加段分配到所述存储空间中与先前回收的所述目标区域相对应的地址空间;以及第二分配装置,配置为用于在存在未分配的剩余附加段的情况下,将所述剩余附加段分配到所述存储空间的结尾地址之后的地址空间。在这样的实施例中,更新装置703可以配置为用于响应于所述扩充而更新与所述存储空间相关联的所述地址映射。特别地,根据本发明的某些实施例,为了扩充容量而添加的所述附加段可以被作为单个存储子空间(例如,子卷)而被维护。
为清晰起见,图7中没有示出可选的装置以及各个装置所包含的子装置。然而,应当理解,系统700中包含的各个装置分别对应于上文参考图1-图5描述的方法步骤。由此,上文结合图1-图5描述的所有特征同样适用于系统700,在此不再赘述。
应当理解,系统700可以利用各种方式实现。例如,在某些实施例中,系统700可以利用软件和/或固件来实现。备选地或附加地,系统700可以部分地或者完全地基于硬件来实现。例如,系统700可以实现为集成电路(IC)芯片或专用集成电路(ASIC)。系统700也可以实现为片上系统(SOC)。现在已知或者将来开发的其他方式也是可行的,本发明的范围在此方面不受限制。
下面参考图8,其示出了可用来实现本发明实施例的计算机系统800的框图。
如图所示,计算机系统800可以包括:CPU(中央处理单元)801、RAM(随机存取存储器)802、ROM(只读存储器)803、系统总线804、硬盘控制器805、键盘控制器806、串行接口控制器807、并行接口控制器808、显示控制器809、硬盘810、键盘811、串行外部设备812、并行外部设备813和显示器814。在这些设备中,与系统总线804耦合的有CPU 801、RAM 802、ROM 803、硬盘控制器805、键盘控制器806、串行控制器807、并行控制器808和显示控制器809。硬盘810与硬盘控制器805耦合,键盘811与键盘控制器806耦合,串行外部设备812与串行接口控制器807耦合,并行外部设备813与并行接口控制器808耦合,以及显示器814与显示控制器809耦合。应当理解,图8所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。
如上所述,系统700可以通过硬件实现,例如芯片、ASIC、SOC等。这些硬件可以集成在计算机系统800中。此外,本发明的实施例也可以通过计算机程序产品的形式实现。例如,本发明的方法均可通过计算机程序产品来实现。该计算机程序产品可以存储在例如图8所示的RAM 804、ROM 804、硬盘810和/或任何适当的存储介质中,或者通过网络从适当的位置下载到计算机系统800上。计算机程序产品可以包括计算机代码部分,其包括可由适当的处理设备(例如,图8中示出的CPU 801)执行的程序指令。所述程序指令至少可以包括用于实现本发明方法的步骤的指令。
本发明的实施例可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明系统可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。
应当注意,尽管在上文详细描述中提及了系统的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施例,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施例描述了本发明,但是应该理解,本发明并不限于所公开的具体实施例。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
Claims (20)
1.一种用于回收存储空间的方法,所述存储空间包含多个段,所述方法包括:
基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小;
回收所述目标区域包含的段;以及
更新与所述存储空间相关联的地址映射以保持所述存储空间的地址连续性。
2.根据权利要求1所述的方法,其中所述数据移动开销与以下至少一个相关联:
所述目标区域中包含的空闲段的数目;以及
所述目标区域中包含的非空闲段在所述目标区域中的分布状况。
3.根据权利要求1所述的方法,其中所述存储空间中的所述多个段的使用状况由段位图记录,并且其中基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小包括:
访问所述段位图以获得所述存储空间的空闲段分布状况;以及
基于所述回收需求和所述空闲段分布状况来确定所述目标区域。
4.根据权利要求1所述的方法,其中基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小包括:
如果所述存储空间中具有多个候选区域使得所述数据移动开销最小,选择结尾地址最接近所述存储空间的结尾地址的候选区域作为所述目标区域。
5.根据权利要求1所述的方法,其中回收所述目标区域包含的段包括:
如果所述目标区域中包含非空闲段,将所述目标区域中的每个非空闲段中存储的数据移动到所述存储空间中位于所述目标区域之外的空闲段。
6.根据权利要求5所述的方法,其中将所述目标区域中的每个非空闲段中存储的数据移动到所述存储空间中位于所述目标区域之外的空闲段包括:
将所述目标区域中的非空闲段中存储的数据移动到所述存储空间中的、起始地址小于所述目标区域的起始地址的空闲段;以及
如果所述目标区域中存在剩余非空闲段,将所述剩余非空闲段中存储的数据移动到所述存储空间中的、起始地址大于所述目标区域的结尾地址的空闲段。
7.根据权利要求1所述的方法,其中更新与所述存储空间相关联的地址映射以保持所述存储空间的地址连续性包括:
保持起始地址小于所述目标区域的起始地址的段的地址映射不变;以及
为起始地址大于所述目标区域的结尾地址的段的设置地址映射偏移量。
8.根据权利要求1所述的方法,还包括通过向所述存储空间分配附加段来扩充所述存储空间的容量,所述扩充包括:
将所述附加段分配到所述存储空间中与先前回收的所述目标区域相对应的地址空间;以及
如果存在未分配的剩余附加段,将所述剩余附加段分配到所述存储空间的结尾地址之后的地址空间;
其中与所述存储空间相关联的所述地址映射响应于所述扩充而被更新。
9.根据权利要求8所述的方法,其中所述附加段作为单个存储子空间而被维护。
10.根据权利要求1-9任一项所述的方法,其中所述存储空间是卷。
11.一种用于回收存储空间的系统,所述存储空间包含多个段,所述系统包括:
确定装置,配置为用于基于预定的回收需求而确定所述存储空间中的目标区域以使得满足所述回收需求的数据移动开销最小;
回收装置,配置为用于回收所述目标区域包含的段;以及
更新装置,配置为用于更新与所述存储空间相关联的地址映射以保持所述存储空间的地址连续性。
12.根据权利要求11所述的系统,其中所述数据移动开销与以下至少一个相关联:
所述目标区域中包含的空闲段的数目;以及
所述目标区域中包含的非空闲段在所述目标区域中的分布状况。
13.根据权利要求11所述的系统,其中所述存储空间中的所述多个段的使用状况由段位图记录,并且其中所述确定装置包括:
位图访问装置,配置为用于访问所述段位图以获得所述存储空间的空闲段分布状况;以及
第一确定装置,配置为用于基于所述回收需求和所述空闲段分布状况来确定所述目标区域。
14.根据权利要求11所述的系统,其中所述确定装置包括:
第二确定装置,配置为用于在所述存储空间中具有多个候选区域使得所述数据移动开销最小的情况下,选择结尾地址最接近所述存储空间的结尾地址的候选区域作为所述目标区域。
15.根据权利要求11所述的系统,其中所述回收装置包括:
数据移动装置,配置为用于在所述目标区域中包含非空闲段的情况下,将所述目标区域中的每个非空闲段中存储的数据移动到所述存储空间中位于所述目标区域之外的空闲段。
16.根据权利要求15所述的系统,其中所述数据移动装置包括:
第一移动装置,配置为用于尝试将所述目标区域中的非空闲段中存储的数据移动到所述存储空间中的、起始地址小于所述目标区域的起始地址的空闲段;以及
第二移动装置,配置为用于在所述目标区域中还存在剩余非空闲段的情况下,将所述剩余非空闲段中存储的数据移动到所述存储空间中的、起始地址大于所述目标区域的结尾地址的空闲段。
17.根据权利要求11所述的系统,其中所述更新装置包括:
第一更新装置,配置为用于保持起始地址小于所述目标区域的起始地址的段的地址映射不变;以及
第二更新装置,配置为用于为起始地址大于所述目标区域的结尾地址的段的设置地址映射偏移量。
18.根据权利要求11所述的系统,还包括扩充装置,配置为用于通过向所述存储空间分配附加段来扩充所述存储空间的容量,所述扩充装置包括:
第一分配装置,配置为用于将所述附加段分配到所述存储空间中与先前回收的所述目标区域相对应的地址空间;以及
第二分配装置,配置为用于在存在未分配的剩余附加段的情况下,将所述剩余附加段分配到所述存储空间的结尾地址之后的地址空间;
并且其中所述更新装置配置为用于响应于所述扩充而更新与所述存储空间相关联的所述地址映射。
19.根据权利要求18所述的系统,其中所述附加段作为单个存储子空间而被维护。
20.根据权利要求11-19任一项所述的系统,其中所述存储空间是卷。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210236447.XA CN103514098B (zh) | 2012-06-29 | 2012-06-29 | 用于回收存储空间的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210236447.XA CN103514098B (zh) | 2012-06-29 | 2012-06-29 | 用于回收存储空间的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103514098A true CN103514098A (zh) | 2014-01-15 |
CN103514098B CN103514098B (zh) | 2018-03-27 |
Family
ID=49896856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210236447.XA Active CN103514098B (zh) | 2012-06-29 | 2012-06-29 | 用于回收存储空间的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103514098B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017206436A1 (zh) * | 2016-06-03 | 2017-12-07 | 杭州海康威视数字技术股份有限公司 | 网络硬盘空间的回收方法、装置和系统 |
CN110162483A (zh) * | 2018-02-12 | 2019-08-23 | 上海寒武纪信息科技有限公司 | 静态内存碎片整理方法、装置、计算机设备及存储介质 |
WO2020093227A1 (zh) * | 2018-11-06 | 2020-05-14 | 华为技术有限公司 | 一种异构计算系统及内存管理方法 |
CN112131140A (zh) * | 2020-09-24 | 2020-12-25 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5561785A (en) * | 1992-10-29 | 1996-10-01 | International Business Machines Corporation | System for allocating and returning storage and collecting garbage using subpool of available blocks |
US5933840A (en) * | 1997-05-19 | 1999-08-03 | International Business Machines Corporation | Garbage collection in log-structured information storage systems using age threshold selection of segments |
CN101923448A (zh) * | 2010-02-08 | 2010-12-22 | 安凯(广州)微电子技术有限公司 | 一种nand闪存的转换层读写方法 |
CN102004697A (zh) * | 2010-10-21 | 2011-04-06 | 北京握奇数据系统有限公司 | 一种Flash的回收方法和装置 |
-
2012
- 2012-06-29 CN CN201210236447.XA patent/CN103514098B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5561785A (en) * | 1992-10-29 | 1996-10-01 | International Business Machines Corporation | System for allocating and returning storage and collecting garbage using subpool of available blocks |
US5933840A (en) * | 1997-05-19 | 1999-08-03 | International Business Machines Corporation | Garbage collection in log-structured information storage systems using age threshold selection of segments |
CN101923448A (zh) * | 2010-02-08 | 2010-12-22 | 安凯(广州)微电子技术有限公司 | 一种nand闪存的转换层读写方法 |
CN102004697A (zh) * | 2010-10-21 | 2011-04-06 | 北京握奇数据系统有限公司 | 一种Flash的回收方法和装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017206436A1 (zh) * | 2016-06-03 | 2017-12-07 | 杭州海康威视数字技术股份有限公司 | 网络硬盘空间的回收方法、装置和系统 |
CN107463333A (zh) * | 2016-06-03 | 2017-12-12 | 杭州海康威视数字技术股份有限公司 | 网络硬盘空间的回收方法、装置和系统 |
CN107463333B (zh) * | 2016-06-03 | 2019-12-20 | 杭州海康威视数字技术股份有限公司 | 网络硬盘空间的回收方法、装置和系统 |
CN110162483A (zh) * | 2018-02-12 | 2019-08-23 | 上海寒武纪信息科技有限公司 | 静态内存碎片整理方法、装置、计算机设备及存储介质 |
CN110162483B (zh) * | 2018-02-12 | 2020-10-20 | 上海寒武纪信息科技有限公司 | 静态内存碎片整理方法、装置、计算机设备及存储介质 |
WO2020093227A1 (zh) * | 2018-11-06 | 2020-05-14 | 华为技术有限公司 | 一种异构计算系统及内存管理方法 |
CN112368686A (zh) * | 2018-11-06 | 2021-02-12 | 华为技术有限公司 | 一种异构计算系统及内存管理方法 |
CN112368686B (zh) * | 2018-11-06 | 2024-06-25 | 华为技术有限公司 | 一种异构计算系统及内存管理方法 |
CN112131140A (zh) * | 2020-09-24 | 2020-12-25 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103514098B (zh) | 2018-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6505283B1 (en) | Efficient memory allocator utilizing a dual free-list structure | |
CN101606130B (zh) | 在处理器系统的指令级使能资源分配标识的方法和装置 | |
JP5295286B2 (ja) | 記憶装置およびそれを搭載した計算機 | |
US7716448B2 (en) | Page oriented memory management | |
JP2008225693A (ja) | データベース管理方法、装置およびプログラム | |
EP1435576A2 (en) | Method and apparatus for block-oriented memory management provided in smart card controllers | |
CN101681314A (zh) | 存储器系统 | |
CN101387987A (zh) | 存储器装置、存储器控制方法和程序 | |
CN103514098A (zh) | 用于回收存储空间的方法和系统 | |
CN104272277A (zh) | 用于快速缓存断电的设备和方法 | |
EP4254306A1 (en) | Control stream stitching for multicore 3-d graphics rendering | |
CN109960471A (zh) | 数据存储方法、装置、设备以及存储介质 | |
CN103793332B (zh) | 基于内存的数据存储方法、装置、处理器和电子设备 | |
CN103365784A (zh) | 内存回收与分配的方法及装置 | |
CN105204783A (zh) | 一种基于数据生存期的固态盘垃圾回收方法 | |
CN112416860B (zh) | 数据回滚更新方法、装置、计算机设备和存储介质 | |
CN104361009A (zh) | 一种基于倒排索引的实时索引方法 | |
CN102203737B (zh) | 多线程访问多副本的方法和装置 | |
CN118245207A (zh) | 基于张量版本控制的内存优化方法及装置 | |
CN110019130B (zh) | 一种数据库更新的方法及装置 | |
CN102880553A (zh) | 一种基于mcu的片外flash文件系统的读写方法 | |
CN103703449A (zh) | 存储器合并的计算机实现方法、系统以及装置 | |
CN102023845A (zh) | 一种基于状态机的Cache并发访问管理方法 | |
CN102541743B (zh) | 用于存储管理的方法、设备和系统 | |
CN102486757B (zh) | 存储器储存装置及其存储器控制器与回应主机指令的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200409 Address after: Massachusetts, USA Patentee after: EMC IP Holding Company LLC Address before: Massachusetts, USA Patentee before: EMC Corp. |