存储管理方法及设备与流程

文档序号:13317711阅读:217来源:国知局

本公开的实施例总体上涉及数据存储技术领域,并且具体地,涉及一种存储管理方法及设备。



背景技术:

为了满足对存储设备例如各种用于存储的物理存储设备如盘进行优化和管理的需求,各存储设备供应者提供一些针对物理存储设备的操作指令。然而,对于实现同样功能的操作指令,不同的存储设备供应者通常所采用的操作行为各不相同,这就导致客户对不同的存储设备供应者所提供的产品并不具有一致性的操作视角,有时甚至带来预想不到的对数据的错误处理,严重影响了客户的应用体验以及对数据处理的准确性要求。



技术实现要素:

总体上,本公开的实施例通过改进存储设备的数据存储架构而提供一种优化存储管理的解决方案。

根据本公开的第一方面,提供一种存储管理方法,包括:在存储管理设备处接收对存储管理设备所管理的存储空间的配置请求,配置请求指示存储空间的容量和待划分的块的目标大小;以及基于容量和目标大小,将存储空间划分为元数据区和数据区,数据区由具有目标大小的块组成,并且元数据区存储有指示块是否被分配的块状态指示符。

在某些实施例中,该方法还包括:将预定数目的块划分为多个簇;基于块的块状态指示符,确定指示多个簇是否被分配的簇状态指示符;以及将簇状态指示符存储到存储管理设备的易失性存储器中。

在某些实施例中,该方法还包括:在存储管理设备处接收读请求,读请求涉及多个簇中的至少一个簇;以及基于读请求所涉及的至少一个簇的簇状态指示符来处理读请求。

在某些实施例中,该处理读请求包括:获取读请求所涉及的第一簇的簇状态指示符;以及响应于第一簇的簇状态指示符指示第一簇已分配,返回第一簇中存储的与读请求有关的数据。

在某些实施例中,该处理读请求包括:获取读请求所涉及的第二簇的簇状态指示符;以及响应于第二簇的簇状态指示符指示第二簇未分配,返回针对读请求的预定响应。

在某些实施例中,该处理读请求包括:获取读请求所涉及的第三簇的簇状态指示符;响应于第三簇的簇状态指示符指示第三簇的分配状态未知,获取第三簇中的块的块状态指示符;以及基于获取的块状态指示符来处理读请求。

在某些实施例中,该基于获取的块状态指示符来处理读请求包括:响应于第三簇中的第一块的块状态指示符指示第一块已分配,返回第一块中与读请求有关的数据;以及响应于第三簇中的第二块的块状态指示符至少第二块未分配,返回针对读请求的预定响应。

在某些实施例中,该方法还包括:在存储管理设备处接收写请求,写请求涉及多个簇中的至少一个簇;以及基于写请求所涉及的至少一个簇的簇状态指示符来处理写请求。

在某些实施例中,该处理写请求包括:获取写请求所涉及的第四簇的簇状态指示符;以及响应于第四簇的簇状态指示符指示第四簇已分配,向第四簇写入数据。

在某些实施例中,该处理写请求包括:获取写请求所涉及的第五簇的簇状态指示符;响应于第五簇的簇状态指示符指示第五簇未分配,向第五簇中的至少一个块写入数据;以及更新第五簇的簇状态指示符以及第五簇中的至少一个块的块状态指示符。

在某些实施例中,该向第五簇中的至少一个块写入数据包括:响应于确定至少一个块中包括部分使用的块,向部分使用的块中未被写请求使用的部分写入预定填充数据。

在某些实施例中,该处理写请求包括:获取写请求所涉及的第六簇的簇状态指示符;以及响应于第六簇的簇状态指示符指示第六簇的分配状态未知,获取第六簇中的块的块状态指示符;以及基于第六簇中的块的块状态指示符来处理写请求。

在某些实施例中,该基于第六簇中的块的块状态指示符来处理写请求包括:响应于第六簇的第三块的块状态指示符指示第三块为已分配,向第三块写入数据;以及响应于第六簇中的第四块的块状态指示符第四块未分配,向第四块写入数据;以及更新第四块的块状态指示符和第六簇的簇状态指示符。

在某些实施例中,该向第四块写入数据包括:响应于确定第四块仅被写请求部分地使用,向第四块中未被写请求使用的部分写入预定填充数据。

在某些实施例中,该方法还包括:在存储管理设备处接收存储释放请求;响应于确定存储释放请求将仅释放多个块中的第五块的一部分,利用预定填充数据来覆盖第五块中与释放请求有关的数据。

在某些实施例中,该方法还包括:在存储管理设备处接收存储释放请求;响应于存储释放请求将仅释放簇中的第七簇中的部分块,获取第七簇的簇状态指示符;响应于第七簇的簇状态指示符指示第七簇为已分配,更新第七簇的簇状态指示符。

根据本公开的第二方面,提供一种电子设备,包括:处理单元;存储器,包含存储于其中的计算机程序指令,所述指令在被所述处理单元执行时使得所述电子设备至少执行动作,所述动作包括:接收对存储管理设备所管理的存储空间的配置请求,配置请求指示存储空间的容量和待划分的块的目标大小;以及基于容量和目标大小,将存储空间划分为元数据区和数据区,数据区由具有目标大小的块组成,并且元数据区存储有指示块是否被分配的块状态指示符。

根据本公开的第三方面,提供一种存储管理系统,包括:接收单元,被配置成接收对存储管理设备所管理的存储空间的配置请求,配置请求指示存储空间的容量和待划分的块的目标大小;配置单元,被配置成基于容量和目标大小,将存储空间划分为元数据区和数据区,数据区由具有目标大小的块组成,并且元数据区存储有指示块是否被分配的块状态指示符。

根据本公开的第四方面,提供一种存储管理系统,包括根据本公开的第二方面提供的存储管理设备以及至少一个用于存储数据并形成存储空间的物理存储设备。

根据本公开的第五方面,提供一种计算机可读存储介质,具有存储在其上的计算机可读程序指令,计算机可读程序指令用于执行根据本公开的第一方面提供的方法。

附图说明

结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:

图1图示本公开的实施例可应用于其中的存储环境示意图;

图2示出根据本公开的实施例的存储管理方法的流程图;

图3图示配置物理存储设备的示意图;

图4示出根据本公开的另一实施例的存储管理方法的流程图;

图5图示配置物理存储设备的另一示意图;

图6示出根据本公开的实施例的读操作的流程图;

图7示出根据本公开的另一实施例的读操作的流程图;

图8示出根据本公开的实施例的写操作的流程图;

图9示出根据本公开的另一实施例的写操作的流程图;

图10示出根据本公开的实施例的存储释放操作的流程图;

图11示出根据本公开的另一实施例的存储释放操作的流程图;

图12示出根据本公开的实施例的初始化操作的流程图;

图13图示根据本公开的实施例的存储管理装置示意图;以及

图14图示根据本公开的实施例的存储管理设备示意图。

具体实施方式

现将结合附图对本公开的实施例进行具体的描述。应当注意的是,附图中对相似的部件或者功能组件可能使用同样的数字标示。所附附图仅仅旨在说明本公开的实施例。本领域的技术人员可以在不偏离本公开精神和保护范围的基础上从下述描述得到替代的实施方式。

如本文中所述,术语“包括”及其各种变体可以被理解为开放式术语,其意味着“包括但不限于”。术语“基于”可以被理解为“至少部分地基于”。术语“一个实施例”可以被理解为“至少一个实施例”。术语“另一实施例”可以被理解为“至少一个其它实施例”。

图1图示了本公开的实施例可应用于其中的存储环境100。如图所示,存储环境100包括存储管理设备102、一个或多个主机104、和存储设备106。主机104可以是任何适当的电子设备,其可以通过存储管理设备102实现对数据在存储设备106上的存储、获取和处理等操作。存储设备106可以包括一个或多个物理存储设备112。物理存储设备112的示例包括但不限于:固态盘(ssd)、光纤通道(fc)盘、串行高级技术附件(sata)盘、串行连接小型计算机系统接口(sas)盘等。在某些实施例中,存储设备106可以被配置为独立磁盘冗余阵列(raid)。

存储管理设备102对存储环境100进行管理,并且可以包括一个或多个存储器108、一个或多个控制器110和/或其他组件。在某些实施例中,存储器108包括易失性存储器以及非易失性存储器。存储管理设备104可以实现对存储设备106中的物理存储设备112的配置和管理,并根据主机104的需求实现其对数据的各种处理和应用。

如前所述,各物理存储设备112的供应者提供对其生产的物理存储设备112优化和管理的操作,例如通过高级技术附件(ata)指令集或小型计算机系统接口(scsi)指令集而实现。然而,对于实现同样功能的指令,存储管理设备102向物理存储设备112发布指令后,不同设备供应者所提供的对指令的操作行为是各异的。作为示例,取消映射(unmap)指令(在ata指令集中为“trim”指令,在scsi指令集中为“unmap”指令)用于使得存储管理设备102能够通知物理存储设备112哪些存储区域中不再包含有效数据,这可以是由主机104或者存储管理设备102自身确定的某些数据已经不再需要,例如响应于对数据的删除操作。存储管理设备102将这些数据的存储区域标记为已分配给新数据可用并且发送unmap指令到物理存储设备112以通知这些存储区域不再包含有效数据,可以将这些存储区域释放。但是,不同设备供应者所提供的对unmap指令的实现并不相同,下面将结合一个具体示例进行说明。

假设多个盘组成常见的独立磁盘冗余阵列(raid)5的raid组,该raid组被划分为多个条带,每个条带中都分布有相应条带的校验数据。当某个盘(例如,盘4)的一些存储区域被执行了unmap操作后,其相应条带上的数据即被认为是无效的。在某些情况下需要再读取该条带上包括盘4中该条带的数据,例如,假设raid组中的盘2出现故障,此时需要读取其他盘该条带中的数据以重构盘2中的数据。当读取盘4中该条带上的数据时,希望返回被填充以零或者某种预定的数据,而盘4的设备供应者针对unmap操作后的存储区域,可能返回填充零的数据,也可能返回垃圾数据(脏数据)或者报告错误等等。由此,导致不期望的数据处理错误。

为了解决上述以及其他潜在的问题,本公开的实施例通过改进存储设备的数据存储架构而提供一种优化存储管理的解决方案。图2图示根据本公开的实施例的存储管理方法200的流程图。图2中所示的方法200例如可由图1中所示的存储管理设备102来执行。

在步骤202,在存储管理设备处接收对存储管理设备所管理的存储空间的配置请求。该配置请求指示存储空间的容量和待划分的块的目标大小。换言之,根据存储应用的需求,管理用户可以确定希望将存储空间划分为块的期望大小(也即目标大小),存储管理设备102接收到的配置请求指示了存储空间的容量和待划分的块的目标大小。

接下来,在步骤204,基于存储空间的容量和待划分的块的目标大小,将存储空间划分为元数据区和数据区,数据区由具有目标大小的块组成,并且元数据区存储有指示块是否被分配的块状态指示符。也就是说,在步骤204,物理存储设备112的存储空间分为两部分,即数据区和元数据区,数据区用于存储各种数据信息,其以目标大小的块组成,而元数据区存储每个块的状态指示符,指示该块的存储空间是否被分配给有效数据使用。

为了更清晰地描述上述存储管理方法200的过程,参考图3进行进一步的说明。假设ssd盘的物理存储设备112的容量为1t字节,存储管理设备102将物理存储设备112的存储空间划分为数据区302和元数据区304,如图所示。将数据区划分为多个块306,块306的大小根据存储应用需要而定,例如可以为4k字节到1m字节或者其他适合的目标大小,甚至所有块可以不是相同大小的。元数据区可以设置在物理存储设备112的一端,例如存储地址最大端。在元数据区存储有针对数据区中每个块的状态指示符,可以使用例如以308所示意的位图(bitmap)的形式存储。

在本公开的一个实施例中,在块位图中每个块都具有相应的比特位,该比特位指示相应的块是否是被分配,例如其中:

·块状态指示符1,表明该块中的存储区域是未被分配的,该块中的内容不再有效。如果需要读取该块中的内容,应该返回预定的响应,例如全零的数据。

·块状态指示符0,表明该块中的存储区域是被分配的,该块中包含有效的内容。如果需要读取该块中的内容,应该访问并读取物理存储区域中的数据。

以这种方式,例如,物理存储设备112的容量为1t字节,块的目标大小为1m字节,则块位图的大小即为128k字节。

将会理解,使用位图来表示块状态仅仅示例性的。块状态指示符可以是任何其他备选的或者附加的结构。例如,在一些实施例中,块状态指示符可以是布尔变量,其中“真”表示一个块已被分配,而“假”表示块未被分配。本公开的范围不限于块状态指示符的任何具体实现方式。

按照图2和图3所示的方式对物理存储设备112进行配置,即可根据块状态指示符执行对数据的读写等操作,而不受存储设备供应者提供不同的操作行为的影响。

特别地,可以理解,每次i/o操作将访问存储设备至少一次以便获取块状态指示符,从而获知存储设备中相应存储区域的数据是否有效。为了避免每次都需要访问存储设备,在某些实施例中,可以在存储管理设备102的易失性存储器中存储块状态指示符。但是,在如今日益增长的大数据存储的应用环境中,存储管理设备102通常需要对大量的物理存储设备112进行管理,在易失性存储器中保存每个物理存储设备112的块状态指示符(即块位图)有可能带来较高的代价。有鉴于此,根据本公开的一些实施例,可以将存储块进一步聚合为“簇”(cluster),以便进一步提高存储管理效率。

在步骤402,将预定数目的块划分为多个簇。也即,在这样的实施例中,将物理存储设备112的块进行“聚合”,形成多个簇,每个簇中包括多个块。

接下来,在步骤404,基于块状态指示符,确定指示多个簇是否被分配的簇状态指示符。该簇状态指示符指示了该簇所涵盖的存储区域的状态。在某些实施例中,一个簇的簇状态指示符可以指示该簇已被分配、未被分配或者分配状态未知。这方面的实施例还将在下文详细描述。当然这仅仅是示例性的,其他备选的或者附加的状态也是可能。

在步骤406,将簇状态指示符存储到存储管理设备的易失性存储器中。由此,对于每个i/o请求,可以通过簇状态指示符来确定是否需要访问物理存储设备以及需要访问哪些区域。

为了更清晰地描述上述存储管理方法400的过程,参考图5进行进一步的说明。在图5所示的示例中,物理存储设备112的多个块被划分到一个簇,由此可以获得多个簇。每个簇的大小可以根据存储应用需要而定,例如可以为256个块大小或者任何其他适合的大小。簇的大小可以相同或者不同。在存储管理设备的易失性存储器中,存储有针对每个簇的簇状态指示符。在一个实施例中,类似于块状态指示符,簇状态指示符同样可以使用例如位图的形式存储。

在本公开的一个实施例中,在簇位图中每个簇都具有相应的比特位指示,其指示相应的簇是否是被分配,例如采用2比特位来指示,可以使用其中的三种状态:

·簇状态指示符0,表明该簇中的所有块已被分配,该簇中存有有效的内容。在这种情况下,如果需要读取该簇中的内容,不需要去检查块位图中的块指示符,将正常读取数据。在图5中,已被分配的簇由图案502表示。

·簇状态指示符1,表明该簇中的所有块未被分配,该簇中没有有效的内容,对于读请求,应该返回预定的响应,例如全零的数据,不需要去检查块位图中的块指示符。在图5中,未被分配的簇由图案504表示。

·簇状态指示符2,表明该簇的状态是未知的,该簇中既有被分配的块也有未被分配的块,也即部分存储有有效的内容、部分存储有无效的内容。在这种情况下,对于i/o请求,需要检查块位图中的块指示符以确定特定的块的状态。在图5中,分配状态未知的簇由图案506表示。

如图5所示,多个块被聚合到簇,根据块状态指示符可以确定相应的簇的簇状态指示符。例如,块508、块510以及其他块组成簇1,块508的状态为已分配,块510状态为未分配,在块位图中相应的位置例如504中保存这些块的块状态符。不管簇1中其他块的状态如何,簇1的状态为未知,也即在簇位图中簇状态指示符512指示簇1的分配状态未知。块514和块516的状态均未已分配,且对应的簇n中的其他块状态均为已分配,则簇n的状态为已分配,也即在簇位图中簇状态指示符518指示簇n已被分配。由于簇2中所有块的状态为未分配,则簇2的状态为未分配;等等。以这种方式,例如,物理存储设备112的容量为1t字节,块的大小为1m字节,则簇位图的大小即为1k字节。并且,进一步优化了数据读写性能,减少了访问物理存储设备的频率,提高了存储设备的使用寿命。

需要指出的是,簇位图可以以写穿(write-through)方式操作,从而簇位图(即簇状态指示符)并不必须的存储在非易失性存储器中,并且在簇位图和块位图之间不会产生非一致性问题。

下面结合图6描述根据本公开的一个实施例的对读请求的操作600的过程。图6中示意了针对读请求所涉及的一个簇的操作,该操作可以在存储管理设备102处执行。也即,在一个实施例中,可以对于读请求所涉及的每个簇执行方法600,以处理该读请求。

在步骤602,获取当前所考虑的簇的状态。在该步骤中,可以通过获取存储于存储管理设备102的易失性存储器中的簇状态指示符,来确定该簇的状态。如上所述,簇状态指示符可以指示该簇已被分配、未被分配还是分配状态未知。

接下来,在步骤604,确定该簇的簇状态指示符是否指示该簇已被分配。如果在步骤604确定指示该簇已被分配,方法600进行到步骤612。在步骤612,存储管理设备102可以向物理存储设备112下发读命令,使得物理存储设备112进行读取操作,并返回针对该簇中与读请求相关的数据。

另一方面,如果在步骤604中确定该簇的状态不是已分配,则方法进行到步骤606,在此确定该簇的状态是否是未分配。如果该簇的状态为未分配,即该簇相应的存储区域中没有有效的内容,在步骤616返回针对读请求的预定的响应,例如全零数据。

如果在步骤606确定该簇的状态不是未分配,则意味着该簇的分配状态未知。此时,方法600进行到步骤608,在此获取该簇中块的块状态指示符,以进一步确定该簇中读请求所涉及的存储区域的分配状态。为了描述方便,此处仍然针对该簇中的一个块的操作进行说明。如果在步骤610确定该簇中的块为已分配,存储管理设备102可以向物理存储设备112下发读命令,使得物理存储设备112进行读取操作,并返回针对块中与读请求有关的数据。另一方面,如果在步骤610确定该簇中的块为未分配,即块中没有有效的内容,在步骤616返回针对读请求预定的响应,例如全零数据。

可以理解,以上各步骤中所返回的数据或者预定响应都是针对读请求所涉及的数据存储区域而进行。另外,可以理解,读请求可以涉及包括一个或多个块以及一个或多个簇的存储区域的数据操作,存储管理设备102向物理存储设备112下发读命令可以针对多个簇或块的状态的确定来进行。

图7示出了根据本公开的另一实施例的对读请求的操作700的过程。图7中示意了针对读请求所涉及的多个簇的操作,该操作可以在存储管理设备102处执行。对于每个具体的簇,例如可以参照上文描述的方法600来描述读请求。

在步骤702,接收读请求。该读请求至少指示了读取数据的存储区域。在步骤704,获取读请求涉及的所有簇的状态。在该步骤中,可以通过获取存储于存储管理设备102的易失性存储器中的簇位图,以确定读请求涉及的所有簇的状态。如上所述,簇状态指示符可以指示该簇已被分配、未被分配还是分配状态未知。

接下来,基于读请求涉及的所有簇的簇状态指示符来处理读请求。在步骤706,如果确定读请求涉及的所有簇的状态为未分配,则进行到步骤714。此时,由于所有簇相应的存储区域中没有有效的内容,因而不需要下发i/o命令以去读取物理存储设备112,而是可以填充以预定数据,返回针对读请求的预定的响应,例如全零数据。另一方面,如果在步骤706确定并非读请求涉及的所有簇的状态为未分配,则方法700进行到步骤708,在此确定读请求涉及的所有簇的状态是否为已分配。

在步骤708,如果确定读请求涉及的所有簇的状态为已分配,则方法700进行到步骤714,此时向物理存储设备112下发读命令,使得物理存储设备112进行读取操作,并返回针对该簇中与读请求相关的数据。如果在步骤708确定并非读请求涉及的所有簇的状态为未分配,则意味着读请求涉及的簇可能是未分配和已分配兼有,或者至少有一个簇的状态为未知。由此,方法700将进一步在步骤710确定是这两种情况中的哪种,以继续处理该读请求。

如果在步骤710确定读请求不涉及分配状态未知的簇,也即要么是已被分配的簇,要么是未被分配的簇,此时方法700进行到步骤722和步骤744。在步骤722,向物理存储设备112下发读命令,使得物理存储设备112针对读请求涉及的已分配状态的数据区域进行读取操作,并返回与读请求相关的数据;并且针对读请求涉及的未分配状态的数据区域填充以预定数据,返回预定的响应,例如全零数据。

另一方面,如果在步骤710确定读请求涉及分配状态未知的簇,则方法进行到712,此时获取读请求涉及的所有块的状态。在该步骤中,可以获取物理存储设备元数据区中存储的块位图,以确定读请求涉及的所有块的状态。接下来,基于读请求涉及的所有块的块状态指示符来处理读请求。方法700进行到步骤716和步骤718,分别类似于步骤706和步骤708中对簇的操作,以针对所有块进行操作。即,如果在步骤716确定读请求涉及的所有块的状态为已分配,操作进行到步骤714,向物理存储设备112下发读命令,使得物理存储设备112进行读取操作,并返回与读请求相关的数据;如果在步骤716确定并非读请求涉及的所有块的状态为已分配,则方法700进行到步骤718,在此确定所有块的状态是否为未分配。

如果在步骤718确定所有块的状态为未分配,则在步骤720,返回针对读请求的预定的响应,例如全零数据。另一方面,如果在步骤718确定并非所有块都是未被分配,这意味着该读请求涉及状态为未分配的块以及状态为已分配的块,方法700进行到步骤722和步骤724,针对读请求涉及的已分配状态的数据区域进行读取操作,并返回与读请求相关的数据;并且针对读请求涉及的未分配状态的数据区域填充以预定数据,返回预定的响应。

可以理解,以上过程仅是根据本公开的一个实施例的读请求处理过程,本领域普通技术人员在不背离其构思的情况下,可以对其进行各种变形。例如,可以省略如步骤710或其他决策步骤,而相应的对读请求进行处理。又例如,可以在步骤712中仅处理分配状态未知的簇,而对已被分配和/或未被分配的簇分别类似步骤714和步骤720的操作,以响应读请求而返回数据。

由以上过程可见,基于簇状态指示符和块状态指示符,存储管理设备102对读请求进行处理,对处于未分配状态的存储区域针对读请求返回预定响应的数据,对处于已分配状态的存储区域针对读请求返回请求读取的数据,从而消除了不同存储设备供应者所提供存储设备操作的差异性。同时,可以尽可能少地对物理存储设备进行i/o操作,以更高效地进行数据处理。

下面结合图8描述根据本公开的一个实施例的对写请求的操作800的过程。图8中示意了针对写请求所涉及的一个簇的操作,该操作可以在存储管理设备102处执行。也即,在一个实施例中,可以对于写请求所涉及的每个簇执行方法800,以处理该写请求。

在步骤802,获取当前所考虑的簇的状态。在该步骤中,可以通过获取存储于存储管理设备102的易失性存储器中的簇状态指示符,来确定该簇的状态。如上所述,簇状态指示符可以指示该簇已被分配、未被分配还是分配状态未知。

接下来,在步骤804确定该簇的簇状态指示符是否指示该簇已被分配。如果在步骤804确定指示该簇已被分配,方法800进行到步骤812。在步骤812,存储管理设备102可以向物理存储设备112下发写命令,使得物理存储设备112进行写入操作,将针对该簇中与写请求相关的数据写入该簇中相应的存储区域。

另一方面,如果在步骤804中确定该簇的状态不是已分配,则方法800进行到步骤806,在此确定该簇的状态是否是未分配。如果该簇的状态为未分配,即该簇相应的存储区域中没有有效的内容,则方法800进行到步骤814。在步骤814,确定该簇中是否涉及块被写请求部分地使用,如果是,则在步骤816,扩展写请求,向部分使用的块中未被写请求使用的部分写入预定填充数据,例如写入全零数据,并在步骤818,可以向物理存储设备112下发写命令,根据写请求写入数据。然后方法800进行到步骤820,在此更新该簇中块的块状态指示符为已分配,更新该簇的簇状态指示符为未知状态。如果在步骤814确定该簇中涉及块没有被写请求部分地使用,则可以跳过步骤816,直接进行到步骤818和820,进行写入和更新的操作。

如果在步骤806确定该簇的状态不是未分配,则意味着该簇的分配状态未知,此时方法800进行到步骤808,在此获取该簇中块的块状态指示符,以进一步确定该簇中写请求所涉及的存储区域的分配状态。为了描述方便,此处仍然针对该簇中的一个块的操作进行说明。如果在步骤810确定该簇中的块为已分配,存储管理设备102可以向物理存储设备112下发写命令,使得物理存储设备112进行写入操作,将针对该簇中与写请求相关的数据写入该簇中相应的存储区域。另一方面,如果在步骤810确定该簇中的块为未分配,即块中没有有效的内容,则方法800进行到步骤814,在此根据块是否被写请求部分地使用,继续后续步骤,以完成写入和更新操作。

可以理解,以上各步骤中写入的写请求数据是针对写请求所涉及的数据存储区域而进行。另外,可以理解,写请求可以涉及包括一个或多个块以及一个或多个簇的存储区域的数据操作,存储管理设备102向物理存储设备112下发写命令可以针对多个簇或块的状态的确定来进行。图9示出了根据本公开的另一实施例的对写请求的操作900的过程。图9中示意了针对写请求所涉及的多个簇的操作,该操作可以在存储管理设备102处执行。对于每个具体的簇,例如可以参照上文描述的方法800来描述写请求。

在步骤902,接收写请求。该写请求至少指示了写入数据的存储区域。在步骤904,获取请求涉及的所有簇的状态。在该步骤中,可以通过获取易失性存储器中存储的簇位图,以确定写请求涉及的所有簇的状态。在步骤906,基于写请求涉及的所有簇的簇状态指示符来处理写请求。如上所述,簇状态指示符可以指示该簇已被分配、未被分配还是分配状态未知。

接下来,基于写请求涉及的所有簇的簇状态指示符来处理写请求。在步骤906,如果确定写请求涉及的所有簇的状态为已分配,则进行到步骤916,向物理存储设备112下发写命令,使得物理存储设备112进行写入操作,将针对该簇中与写请求相关的数据写入该簇中相应的存储区域。另一方面,如果在步骤906确定并非写请求涉及的所有簇的状态为已分配,则方法900进行到步骤908,在此确定写请求涉及的所有簇的状态是否为未分配。

如果在步骤908确定写请求涉及的所有簇的状态为未分配,即所有簇相应的存储区域中没有有效的内容,则进行到步骤918,基于是否涉及块被写请求部分地使用来对写请求处理,并在后续步骤920、步骤924、步骤926中,类似于方法800中步骤816到步骤820的操作,即:如果涉及块被写请求部分地使用,则扩展写请求,向部分使用的块中未被写请求使用的部分写入预定填充数据,例如写入全零数据;然后可以向物理存储设备112下发写命令,根据写请求写入数据;之后更新簇中块的块状态指示符为已分配,更新该簇的簇状态指示符为未知状态。如果没有被写请求部分地使用的块,则无需扩展写请求,可以执行写入和更新的操作。

如果在步骤908确定并非写请求涉及的所有簇的状态为未分配,则意味着写请求涉及的簇可能是未分配和已分配兼有,或者至少有一个簇的状态为未知。由此,方法900将进一步在步骤910确定是这两种情况中的哪种,以继续处理该写请求。

如果在步骤910确定写请求不涉及分配状态未知的簇,也即要么是已被分配的簇,要么是未被分配的簇,此时方法900进行到步骤918,基于是否涉及块被写请求部分地使用来对写请求处理;并且进行后续的写入和更新块状态指示符和簇状态指示符的操作。

另一方面,如果在步骤910确定写请求涉及分配状态未知的簇,则方法进行到912,此时获取写请求涉及的所有块的状态。在该步骤中,可以获取物理存储设备元数据区中存储的块位图,以确定写请求涉及的所有块的状态。接下来,基于写请求涉及的所有块的块状态指示符来处理写请求,在步骤914确定是否所有块的状态为已分配。如果在步骤914确定所有块的状态为已分配,操作进行到步骤916,向物理存储设备112下发写命令,使得物理存储设备112进行写入操作;如果在步骤914确定所有块的状态不是已分配,即至少有一个块处于未分配状态,操作进行到步骤918继续处理写请求,最终完成写入和更新操作。

备选地,在步骤910确定出写请求涉及的簇仅是未分配和已分配兼有而不存在分配状态未知的簇时,也可以如步骤916和步骤918类似操作,针对写请求涉及的已分配状态的簇进行直接写入操作;并且针对写请求涉及的未分配状态的簇根据簇中是否涉及块被写请求部分地使用,进行后续写入和更新的操作。

可以理解,以上过程仅是根据本公开的一个实施例的写请求处理过程,本领域普通技术人员在不背离其构思的情况下,可以对其进行各种变形。例如,可以省略如步骤910或其他决策步骤,而相应的对写请求进行处理,等等。

由以上过程可见,基于簇状态指示符和块状态指示符,存储管理设备102对写请求进行处理,写入请求写入的数据和预定的填充数据,并更新块位图和簇位图,以保证存储管理设备102和存储设备106之间的数据以及存储区域的状态的一致性,为主机102提供正确的存储数据处理。

本公开还向应用上层提供对存储设备的控制操作的支持,例如一些存储协议命令。在本公开的一个实施例中,例如当主机在进行删除数据操作时,提供对于例如unmap的存储释放指令的支持。下面结合图10描述根据本公开的一个实施例的对存储释放请求的操作方法1000的过程。

由于每个存储释放请求所指示的存储空间的大小不同,例如可能涉及一个或多个块,同时对每个块而言,可能只需要释放其的部分。图10中示意了针对存储释放请求所涉及的一个块的操作,该操作可以在存储管理设备102处执行。也即,在一个实施例中,可以对于存储释放请求所涉及的每个块执行方法1000,以处理该存储释放请求。

根据在步骤1002接收的存储释放请求,在步骤1004确定存储释放请求是否导致块被部分使用,也即,是否只需要释放块中的部分存储区域。如果块需要被部分释放,则在步骤1006,存储管理设备102可以向物理存储设备112下发写命令,使得物理存储设备112进行写入预定数据的操作,例如对块中需要释放的部分进行全零写入。也就是说,在该步骤中,利用预定填充数据来覆盖块中与释放请求有关的数据。

另一方面,如果在步骤1004确定块不需要被部分释放,即整块将被释放,则方法1000进行到步骤1008,存储管理设备102可以向物理存储设备112下发释放存储命令,使得物理存储设备112进行释放存储的操作。之后,在步骤1010,将该块的块状态指示符设置为或者更新为未分配。

可以根据接收到的存储释放请求,按照方法1000的过程针对释放存储请求涉及的每个块进行类似的操作,从而完成对该请求所涉及的块的处理以及对这些块的状态进行更新。至此,针对存储释放请求,已完成物理存储设备层级的动作。然后,可以更新簇位图,使得释放存储的操作反映到簇状态的更新。图11示出了根据本公开的实施例的针对存储释放请求的簇状态指示符更新的操作方法1100。

图11中示意了针对存储释放请求所涉及的一个簇的操作,该操作可以在存储管理设备102处执行。也即,在一个实施例中,可以对于存储释放请求所涉及的每个簇执行方法1100,以处理该存储释放请求。

根据在步骤1102接收的存储释放请求,在步骤1104确定存储释放请求是否导致簇被部分使用,也即,是否只需要释放簇中的部分存储区域。如果该簇不需要被部分释放,即需要整簇被释放,则在步骤1106将该簇的状态更新为未分配。另一方面,如果在步骤1104确定簇需要被部分释放,则方法1100进行到步骤1108,在此获取簇的簇状态指示符,并在步骤1110确定该簇的状态为已分配时,将该簇的状态更新为未知。

可以按照操作1100的过程针对释放存储请求涉及的每个簇进行类似的操作,从而完成对该请求所涉及的簇的状态进行更新。可以理解,可以在完成物理存储设备层级的动作之后进行簇状态(即簇位图)的更新,也可以基于存储释放请求如图11所示的操作1100先更新簇状态指示符,或者两者可以并行地进行。

由以上过程可见,通过采用如上所述的存储释放操作,实现了对存储区域在不同层级的一致性管理,并提供对不同存储设备供应者的产品的相同操作行为的支持。

此外,存储系统在应用过程中,可能需要新加入物理存储设备,或者在系统断电后,都需要重新更新存储管理设备102的易失性存储器中的簇位图。可以理解,“上线”到存储系统例如存储环境100中的物理存储设备是经配置为数据区和元数据区的物理存储设备。图12示出了这种情况下的初始化方法1200。

在步骤1202,检测到新加入的物理存储设备,之后在步骤1204确定其是否是使用过的还是全新的,如果确定其是未使用过的,在步骤1206将该物理存储设备的所有块和簇的状态均设备为未分配。如果在步骤1204确定其是使用过的,则方法1200在步骤1208从该设备的元数据区加载块状态指示符,并针对每个簇进行后续步骤。

在步骤1210,确定簇中的块是否均未被分配,如果是,则在步骤1212,将该簇状态设备为未分配。如果在步骤1210确定并非簇中的所有块都是未被分配的,则在步骤1214确定簇中的块是不是均被分配,如果是,则将该簇设备为已分配,否则,将该簇设备为未知。由此,完成对新上线的物理存储设备的初始化过程。

图13图示了存储管理设备102的一个实现的示意性框图,存储管理设备102包括:接收单元1302,被配置成接收对存储管理设备所管理的存储空间的配置请求,配置请求指示存储空间的容量和待划分的块的目标大小;配置单元1304,基于容量和目标大小,将存储空间划分为元数据区和数据区,数据区由具有目标大小的块组成,并且元数据区存储有指示块是否被分配的块状态指示符。

根据本公开的一个实施例,存储管理设备102还包括状态指示存储单元1306,配置单元1304还被配置成:将预定数目的块划分为多个簇;基于块的块状态指示符,确定指示多个簇是否被分配的簇状态指示符;以及将所述簇状态指示符存储到状态指示存储单元1306中。

根据本公开的一个实施例,存储管理设备102的接收单元1302还被配置成:接收读请求、接收写请求以及接收存储释放请求等,以对其管理的物理存储设备进行操作。

根据本公开的一个实施例,存储管理设备102还包括读请求处理单元1308,其被配置成:基于接收的读请求所涉及的至少一个簇的簇状态指示符来处理读请求。

根据本公开的一个实施例,读处理单元1308还被配置成:获取读请求所涉及的第一簇的簇状态指示符;以及响应于第一簇的簇状态指示符指示第一簇已分配,返回第一簇中存储的与读请求有关的数据。

根据本公开的一个实施例,读处理单元1308还被配置成:获取读请求所涉及的第二簇的簇状态指示符;以及响应于第二簇的簇状态指示符指示第二簇未分配,返回针对读请求的预定响应。

根据本公开的一个实施例,读处理单元1308还被配置成:获取读请求所涉及的第三簇的簇状态指示符;响应于第三簇的簇状态指示符指示第三簇的分配状态未知,获取第三簇中的块的块状态指示符;以及基于获取的块状态指示符来处理读请求。

根据本公开的一个实施例,读处理单元1308还被配置成:响应于第三簇中的第一块的块状态指示符指示第一块已分配,返回第一块中与读请求有关的数据;以及响应于第三簇中的第二块的块状态指示符至少第二块未分配,返回针对读请求的预定响应。

根据本公开的一个实施例,存储管理设备102还包括写请求处理单元1310,其被配置成:基于写请求所涉及的至少一个簇的簇状态指示符来处理写请求。

根据本公开的一个实施例,写处理单元1310还被配置成:获取写请求所涉及的第四簇的簇状态指示符;以及响应于第四簇的簇状态指示符指示第四簇已分配,向第四簇写入数据。

根据本公开的一个实施例,写处理单元1310还被配置成:获取写请求所涉及的第五簇的簇状态指示符;响应于第五簇的簇状态指示符指示第五簇未分配,向第五簇中的至少一个块写入数据;以及更新第五簇的簇状态指示符以及第五簇中的至少一个块的块状态指示符。

根据本公开的一个实施例,写处理单元1310还被配置成:响应于确定至少一个块中包括部分使用的块,向部分使用的块中未被写请求使用的部分写入预定填充数据。

根据本公开的一个实施例,写处理单元1310还被配置成:获取写请求所涉及的第六簇的簇状态指示符;以及响应于第六簇的簇状态指示符指示第六簇的分配状态未知,获取第六簇中的块的块状态指示符;以及基于第六簇中的块的块状态指示符来处理写请求。

根据本公开的一个实施例,写处理单元1310还被配置成:响应于第六簇的第三块的块状态指示符指示第三块为已分配,向第三块写入数据;以及响应于第六簇中的第四块的块状态指示符第四块未分配,向第四块写入数据;以及更新第四块的块状态指示符和第六簇的簇状态指示符。

根据本公开的一个实施例,写处理单元1310还被配置成:响应于确定第四块仅被写请求部分地使用,向第四块中未被写请求使用的部分写入预定填充数据。

根据本公开的一个实施例,存储管理设备102还包括释放请求处理单元1312,其被配置成:响应于确定存储释放请求将仅释放多个块中的第五块的一部分,利用预定填充数据来覆盖第五块中与释放请求有关的数据。

根据本公开的一个实施例,释放请求处理单元1312还被配置成:在存储管理设备处接收存储释放请求;响应于存储释放请求将仅释放簇中的第七簇中的部分块,获取第七簇的簇状态指示符;响应于第七簇的簇状态指示符指示第七簇为已分配,更新第七簇的簇状态指示符。

在本公开的一个实施例中,图13中所示的存储管理设备102各个单元中的至少一部分可被实现为软件模块。备选地,在存储管理设备104由硬件实现的实施例中,上述单元中的的一个或多个可以实现为硬件模块,包括但不限于:集成电路(ic)芯片、专用集成电路(asic)芯片、片上系统(soc)、现场可编程门阵列(fpga)等。

图14示出了一个可以用来实施本公开的实施例的设备1400的示意性框图。设备1400可以用来实现一种存储管理设备,其例如包括上文描述的存储管理设备102。如图所示,设备1400包括中央处理单元(cpu)1401,其可以根据存储在只读存储器(rom)1402中的计算机程序指令或者从存储单元1408加载到随机访问存储器(ram)1403中的计算机程序指令,来执行各种适当的动作和处理。在ram1403中,还可存储设备1400操作所需的各种程序和数据。cpu1401、rom1402以及ram1403通过总线1404彼此相连。输入/输出(i/o)接口1405也连接至总线1404。

设备1400中的多个部件连接至i/o接口1405,包括:输入单元1406,例如键盘、鼠标等;输出单元1407,例如各种类型的显示器、扬声器等;存储单元1408,例如磁盘、光盘等;以及通信单元1409,例如网卡、调制解调器、无线通信收发机等。通信单元1409允许设备1400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

在某些实施例中,处理单元1401可被配置为执行上文所描述的各个过程和处理,例如方法200、400、600、700、800、900、1000、1100以及1200。例如,在一些实施例中,方法200、400、600、700、800、900、1000、1100以及1200可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1408。在一些实施例中,计算机程序的部分或者全部可以经由rom1402和/或通信单元1409而被载入和/或安装到设备1400上。当计算机程序被加载到ram1403并由cpu1401执行时,可以执行上文描述的方法200、400、600、700、800、900、1000、1100以及1200的一个或多个步骤。

根据本公开的一个实施例,还提供一种存储管理系统,包括根据本公开的如上所提供的存储管理设备以及至少一个用于存储数据并形成存储空间的物理存储设备。

根据本公开的一个实施例,提供一种计算机可读存储介质,具有存储在其上的计算机可读程序指令,计算机可读程序指令用于执行根据本公开的方法200、400、600、700、800、900、1000、1100以及1200。

通过以上描述和相关附图中所给出的教导,这里所给出的本公开的许多修改形式和其它实施方式将被本公开相关领域的技术人员所意识到。因此,所要理解的是,本公开的实施方式并不局限于所公开的具体实施方式,并且修改形式和其它实施方式意在包括在本公开的范围之内。此外,虽然以上描述和相关附图在部件和/或功能的某些示例组合形式的背景下对示例实施方式进行了描述,但是应当意识到的是,可以由备选实施方式提供部件和/或功能的不同组合形式而并不背离本公开的范围。就这点而言,例如,与以上明确描述的有所不同的部件和/或功能的其它组合形式也被预期处于本公开的范围之内。虽然这里采用了具体术语,但是它们仅以一般且描述性的含义所使用而并非意在进行限制。

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