首页 / 卷区域的重复数据删除

卷区域的重复数据删除失效专利 发明

技术领域

[0001] 本发明涉及在存储系统中执行卷区域的重复数据删除(deduplication)。

相关背景技术

[0002] 随着计算机存储器存储和数据带宽增大,企业日常管理的数据的量和复杂度也增大。大规模分布式存储系统(诸如数据中心)通常运行许多业务操作。数据中心(也可以被称为服务器机房)是用于存储、管理和分发关于一个或多个业务的数据的集中式储存库(物理的或者虚拟的)。分布式存储系统可以耦合至通过一个或多个网络互连的客户端计算机。如果分布式存储系统中的任何部分具有差的性能,则可能损害公司操作。因此,分布式存储系统维持用于数据可用性和高性能功能性的高标准。
[0003] 软件应用(诸如逻辑卷管理器或者磁盘阵列管理器)提供分配大容量存储阵列上的空间的方法。另外,该软件允许系统管理员创建包括逻辑卷的存储组的单元。存储虚拟化提供从物理存储到逻辑存储的抽象,以便在不需要终端用户标识物理存储的情况下访问逻辑存储。
[0004] 为了支持存储虚拟化,卷管理器通过将来自终端用户的使用逻辑地址的进入I/O请求转换成使用与存储设备中的物理位置相关联的地址的新请求来执行输入/输出(I/O)重定向。由于一些存储设备可以包括附加的地址转换机构(诸如可以在固态存储设备中使用的地址转换层),因此从逻辑地址到上面提到的另一个地址的转换可能不表示仅有的或者最终的地址转换。
[0005] 对于许多存储系统,单独逻辑卷的大区域经常包括相同的数据,或者在多个卷当中重复使用。例如,系统可以包括从相同的最终版本(gold master)生成的大量的虚拟机器,其中预加载的系统软件占据了卷的第一千兆字节(GB)。该系统软件对于多个卷可以是相同的,从而导致多个卷中的数据的大区域的复制。需要努力减少存储在存储系统中的相同数据量,以提高存储系统的效率和操作能力。
[0006] 鉴于以上所述内容,期望用于执行卷区域的重复数据删除的系统和方法。

具体实施方式

[0019] 在下列描述中,阐述了许多具体细节以提供对本发明的全面理解。然而,本领域普通技术人员应当认识到,可以在没有这些具体细节的情况下实施本发明。在一些情况下,没有详细地示出公知的电路、结构、信号、计算机程序指令和技术,以避免使本发明模糊。
[0020] 现在参考图1,示出了存储系统100的一个实施例的概括性框图。存储系统100可以包括存储控制器110以及存储设备组130和140,该存储设备组130和140表示任何数量的存储设备组(或者数据存储阵列)。如图所示,存储设备组130包括存储设备135A-N,其表示任何数量和类型的存储设备(例如,固态驱动器(SSD))。存储控制器110可以直接耦合至客户端计算机系统125,以及存储控制器110可以通过网络120远程地耦合至客户端计算机系统115。客户端115和125表示可以利用存储控制器110在系统100中存储和访问数据的任何数量的客户端。注意,一些系统可以仅包括单个客户端,直接或者远程地连接至存储控制器110。
[0021] 存储控制器110可以包括被配置为提供对存储设备135A-N的访问的软件和/或硬件。尽管存储控制器110被显示为与存储设备组130和140分离,但是在一些实施例中,存储控制器110可以位于存储设备组130和140中的一个或每一个内。存储控制器110可以包括或者耦合至基本操作系统(OS)、卷管理器以及用于实现本文中公开的各种技术的附加控制逻辑。
[0022] 根据实施例,存储控制器110可以包括任何数量的处理器和/或在任何数量的处理器上执行,以及可以包括单个主机计算设备和/或在单个主机计算设备上执行,或者遍布于多个主机计算设备。在一些实施例中,存储控制器110通常可以包括一个或多个文件服务器和/或块服务器,或者在一个或多个文件服务器和/或块服务器上执行。存储控制器110可以使用各种技术中的任何一个跨越设备135A-N复制数据,以防止由于设备故障或者设备内的存储位置故障导致的数据损失。存储控制器110还可以利用各种细粒度的重复数据删除技术中的任何一个,以通过对公共数据段进行重复数据删除来减少存储在设备135A-N中的数据量。
[0023] 存储控制器110还可以被配置为创建和管理系统100中的快照。相应地,可以由存储控制器110记录和维护一组介质。除了一个或多个选择的介质(诸如,由特定卷最近使用的介质)以外,介质中的大部分可以是只读的。只读介质可以表示先前拍摄的快照。每个介质在逻辑上包括介质中的所有块。然而,仅保存从创建介质的时间到关闭介质的时间发生变化的块,以及到这些块的映射也可以与介质一起维护。
[0024] 在各种实施例中,多个映射表可以由存储控制器110维护。这些映射表可以包括介质映射表、卷到介质映射表、地址转换表、重复数据删除表、覆盖(overlay)表和/或其它表。在一些实施例中,存储在这些表中的两个或多个中的信息可以合并成单个表。介质映射表可以用于记录和维护介质与下层介质之间的映射,以及卷到介质映射表可以用于记录和维护卷与介质之间的映射。
[0025] 地址转换表可以包括多个条目,其中每个条目保持用于对应数据分量的虚拟到物理映射。该映射表可以用于将来自客户端计算机系统115和125中的每一个的逻辑读取/写入请求映射到存储设备135A-N中的物理位置。可以在与接收到的读取/写入请求相对应的查找操作期间,从与给定介质相关联的映射中读取“物理”指针值。该物理指针值随后可以用于定位存储设备135A-N内的物理位置。注意,物理指针值可以用于访问在存储设备135A-N的给定存储设备内的另一个映射表。因此,物理指针值与目标存储位置之间可以存在一个或多个间接级。
[0026] 在各种实施例中,可以使用包括介质ID、逻辑或虚拟地址、扇区编号等等的键来访问地址转换表。所接收到的读取/写入存储访问请求可以标识特定卷、扇区和长度。可以使用卷到介质映射表将卷ID映射到介质ID。扇区可以是存储在介质中的数据的逻辑块。扇区可以在不同介质上具有不同大小。地址转换表可以以扇区大小为单位来映射介质。在一个实施例中,用于访问地址转换表的键值可以是介质ID和所接收到的扇区编号的组合。
键是映射表中使一行数据区别于另一行数据的实体。在其它实施例中,可以采用其它类型的地址转换表。
[0027] 在一个实施例中,地址转换表可以将介质和块偏移映射到物理指针值。根据实施例,物理指针值可以是由存储设备映射到设备内的物理位置的物理地址或者逻辑地址。在一个实施例中,可以利用索引来访问地址转换表。索引可以标识地址转换表内的映射的位置。可以利用由介质ID和扇区编号生成的键值来查询索引,以及可以针对与键值匹配或者以其它方式相对应的一个或多个条目来搜索索引。来自匹配条目的信息随后可以用于定位和检索标识存储位置的映射,该存储位置是所接收到的读取或者写入请求的目标。在一个实施例中,索引中的命中提供标识存储系统的存储设备内的页面的对应的虚拟页面ID,其中该页面存储键值和对应的物理指针值两者。随后可以利用键值搜索该页面以找到物理指针值。
[0028] 重复数据删除表可以包括用于以细粒度水平对数据进行重复数据删除的信息。存储在重复数据删除表中的信息可以包括给定数据分量的一个或多个计算的哈希值与保持该给定数据分量的存储设备135A-N之一中的物理位置的物理指针之间的映射。另外,对应条目的状态信息和给定数据分量的长度可以存储在重复数据删除表中。注意,在一些实施例中,物理指针值与对应的物理存储位置之间可以存在一个或多个间接级。相应地,在这些实施例中,物理指针值可以用于访问存储设备135A-N的给定存储设备内的另一个映射表。
[0029] 注意,在替代实施例中,客户端计算机、存储控制器、网络、存储设备组和数据存储设备的数量和类型不限于图1所示的那些。在各种时间,一个或多个客户端可以离线操作。另外,在操作期间,各个客户端计算机连接类型可以随着用户与系统100连接、断开连接和重新连接而改变。此外,本文中描述的系统和方法可以应用于直接附接的存储系统或者网络附接的存储系统,并且可以包括被配置为执行所描述方法的一个或多个方面的主机操作系统。许多这样的替代方案是可能的,并且是可预期的。
[0030] 网络120可以利用各种技术,包括无线连接、直接局域网(LAN)连接、广域网(WAN)连接(诸如因特网)、路由器、存储区域网络、以太网和其它。网络120可以包括也可以是无线的一个或多个LAN。网络120还可以包括远程直接存储器访问(RDMA)硬件和/或软件、传输控制协议/因特网协议(TCP/IP)硬件和/或软件、路由器、中继器、交换机、网格和/或其它。可以在网络120中使用诸如光纤通道、通过以太网的光纤通道(FCoE)、iSCSI等等的协议。网络120可以提供与用于因特网的一组通信协议(诸如传输控制协议(TCP)和因特网协议(IP)或者TCP/IP)的接口。
[0031] 客户端计算机系统115和125表示任何数量的固定计算机或者移动计算机,诸如台式个人计算机(PC)、服务器、服务器群、工作站、膝上型计算机、手持式计算机、服务器、个人数字助理(PDA)、智能电话等等。一般而言,客户端计算机系统115和125包括一个或多个处理器,该一个或多个处理器包括一个或多个处理器内核。每个处理器内核包括用于根据预定义的通用指令集来执行指令的电路。例如,可以选择x86指令集架构。替代地,可以选择 或者任何其它通用指令集架构。处理器内核可以针对数据和计算机程序指令访问高速缓存子系统。高速缓存子系统可以耦合至存储器分层体系,该存储器分层体系包括随机存访问储器(RAM)和存储设备。
[0032] 现在参考图2,示出了图示介质的有向非循环图(DAG)200的框图。还示出了卷到介质映射表205,其针对由存储系统使用的每个卷示出了将卷映射至哪个介质。卷可以被认为是到图表200中的指针。
[0033] 本文中使用的术语“介质”被定义为数据的逻辑分组。介质可以具有用以标识数据的逻辑分组的对应标识符。每个介质还可以包括逻辑块编号到内容位置的映射、重复数据删除条目以及其它信息,或者与逻辑块编号到内容位置的映射、重复数据删除条目以及其它信息相关联。在一个实施例中,尽管介质标识符可以被存储控制器使用,但是介质标识符可能不是用户可见的。用户(或者客户端)可以发送伴随有卷ID的数据请求以指定请求将哪个数据作为目标,以及存储控制器可以将卷ID映射到介质ID,并且随后在处理请求时使用介质ID。
[0034] 不可将术语“介质”与术语“存储介质”或者“计算机可读存储介质”混淆。存储介质被定义为用于存储数据的实际物理设备(例如,SSD、HDD)。计算机可读存储介质(或者非暂态计算机可读存储介质)被定义为被配置为存储可由处理器或者其它硬件设备执行的程序指令的物理存储介质。实现本文中描述的方法和/或机制的各种类型的程序指令可以在计算机可读介质上传送,或者存储在计算机可读介质上。被配置为存储程序指令的许多类型的介质是可获得的,并且包括硬盘、软盘、CD-ROM、DVD、闪速存储器、可编程ROM(PROM)、随机访问存储器(RAM)以及各种其它形式的易失性或者非易失性存储设备。
[0035] 还应当注意,术语“卷到介质映射表”可以指代多个表而不是仅单个表。类似地,术语“介质映射表”也可以指代多个表而不是仅单个表。还应当注意,卷到介质映射表205仅是卷到介质映射表的一个示例。其它卷到介质映射表可以具有用于其它数量的卷的其它数量的条目。
[0036] 在图表200中将每个介质描绘为三个连结的框,其中最左边的框示出了介质ID,中间的框示出了下层介质,以及最右边的框显示介质的状态:(RO-只读)或者(RW-读写)。读-写介质可以被称为活动介质,而只读介质可以表示先前拍摄的快照。在图表200内,介质指向其下层介质。例如,介质20指向介质12,以描绘介质12是介质20的下层介质。介质12还指向介质10,该介质10又指向介质5,该介质5又指向介质1。一些介质是多于一个较高级别介质的下层介质。例如,三个单独介质(12、17、11)指向介质10,两个单独介质(18、10)指向介质5,以及两个单独介质(6、5)指向介质1。作为至少一个较高级别介质的下层介质的介质中的每一个具有只读状态。
[0037] 图表200左下角上的一组介质是线性组的示例。如图表200中描绘的,首先创建介质3并且随后拍摄快照,从而使得介质3变得稳定(即,在该点之后,在介质3中查找给定块的结果将一直返回相同值)。以介质3作为介质7的下层介质创建介质7。在介质3变得稳定之后写入的任何块被标记为在介质7中。如果在介质7中找到块,则对介质7的查找返回来自介质7的值,但是如果没有在介质7中找到块,则将在介质3中寻找。在稍后的时间,拍摄介质7的快照,介质7变得稳定,以及创建介质14。对介质14中的块的查找将检查介质7并且随后检查介质3,以找到目标逻辑块。最终,拍摄介质14的快照并且在创建介质15的同时介质14变得稳定。此时,在图表200中,随着对卷102的写入转到介质15,介质14是稳定的。
[0038] 卷到介质映射表205将用户可见的卷映射到介质。每个卷可以被映射到单个介质,也被称为锚介质。如同所有其它介质一样,该锚介质可以应付它自己的查找。多个卷所依赖的介质(诸如介质10)独立于依赖于该介质的卷跟踪该介质自己的块。每个介质还可以被分解为块的范围,并且可以在介质DAG 200中单独地处理每个范围。
[0039] 现在参考图3,示出了介质映射表300的一个实施例。介质映射表300的任何部分或者整体可以存储在存储控制器110中和/或存储设备135A-N中的一个或多个中。卷标识符(ID)可以用于访问卷到介质映射表205,以确定与卷ID相对应的介质ID。该介质ID随后可以用于访问介质映射表300。注意,表300仅仅是介质映射表的一个示例,以及在其它实施例中,可以采用具有其它数量的条目的其它介质映射表。另外,在其它实施例中,介质映射表可以包括其它属性,并且以与图3所示的方式不同的方式进行组织。还应注意,可以使用任何合适的数据结构来存储映射表信息以便提供高效搜索(例如,B树、二叉树、哈希表等等)。可预期所有这样的数据结构。
[0040] 如表300的最左列所示,每个介质可以由介质ID标识。范围属性还可以包括在表300的每个条目中,并且范围可以是依据数据块的。数据块的大小(例如,4KB、8KB)可以根据实施例而变化。介质可以被分解为多个范围,并且可以处理介质的每个范围,如同介质的每个范围是具有它自己的属性和映射的独立介质一样。例如,介质ID 2具有两个单独的范围。在表300中,介质ID 2的范围0-99具有与介质ID 2的范围100-299的条目不同的条目。
[0041] 尽管介质ID 2的这两个范围都映射到下层介质ID 1,但是相同源介质的单独范围可以映射到不同的下层介质。例如,来自介质ID 35的单独范围映射到单独的下层介质。例如,介质ID 35的范围0-299以400的偏移映射到下层介质ID 18。这指示介质ID 35的块0-299映射到介质ID 18的块400-699。另外,介质ID 35的范围300-499以-300的偏移映射到下层介质ID 33,以及介质ID 35的范围500-899以-400的偏移映射到下层介质ID 5。这些条目指示介质ID 35的块300-499映射到介质ID 33的块0-199,而介质ID 35的块500-899映射到介质ID 5的块100-499。注意,在其它实施例中,介质可以被分解为多于三个范围。
[0042] 表300的状态列记录允许更高效地执行块的查找的信息。状态“Q”指示介质是静止的,“R”指示介质是注册的,以及“U”指示介质是未屏蔽的。在静止状态中,在表300中准确地指定的一个或两个介质上执行查找。在注册的状态中,递归地执行查找。未屏蔽状态确定是否应当在基础介质中执行查找,或者是否应当仅在下层介质中执行查找。尽管没有在表300中针对条目中的任何一个示出,但是另一个状态“X”可以用于指定源介质是未映射的。未映射状态指示源介质包括不可达数据并且可以被丢弃。该未映射状态可以应用于源介质的范围。如果整个介质是未映射的,则介质ID可被输入到序列无效表中并且最终被丢弃。
[0043] 在一个实施例中,当创建介质时,如果该介质具有下层介质,则该介质处于注册的状态中,或者如果该介质是没有先前存在的状态的全新卷,则该介质处于静止状态中。当介质被写入时,介质的部分可以变成未屏蔽的,其中映射存在于介质本身和下层介质两者中。这可以通过将单个范围分成多个范围条目来完成,多个范围条目中的一些保持原始屏蔽状态,而多个范围条目中的其它条目被标记为未屏蔽的。
[0044] 另外,表300中的每个条目可以包括基础属性,该基础属性指示介质的基础,该介质的基础在该情况下指向源介质本身。每个条目还可以包括偏移字段,该偏移字段指定当将源介质映射到下层介质时应当应用于块地址的偏移。这允许介质映射到下层介质内的其它位置,而不是仅构建在从下层介质的起始块开始的下层介质的顶部上。如表中300所示,介质8具有500的偏移,该偏移指示介质8的块0将映射到其下层介质(介质1)的块500。因此,经由介质8对介质1的查找将500的偏移添加至请求的原始块编号。偏移列允许介质包括多个介质。例如,在一个实施例中,介质可以包括“最终版本(gold master)”操作系统映像和每个VM(虚拟机)暂存空间。其它灵活的映射也是可能的,并且是可预期的。
[0045] 每个条目还包括下层介质属性,该下层介质属性指示源介质的下层介质。如果下层介质指向源介质(如同介质1一样),则这指示源介质没有下层介质,并且所有查找将仅在源介质中执行。每个条目还可以包括稳定属性,其中“Y”(是)指示介质是稳定的(或者只读的),以及“N”(否)指示介质是读-写的。在稳定介质中,与介质中的给定块相对应的数据从不改变,然而产生该数据的映射可以改变。例如,尽管介质2是稳定的,但是介质2中的块50可以记录在介质2或者介质1中,该介质2或者介质1在逻辑上以该顺序被搜索,然而如果需要,搜索可以并行进行。在一个实施例中,如果介质被除本身以外的任何介质用作下层介质,则介质将是稳定的。
[0046] 现在转至图4,示出了表400的一个实施例的框图。在各种实施例中,表400可以是地址转换表、重复数据删除表、覆盖表(overlay table)或者被存储控制器采用的任何其它类型的表。在将表400用作地址转换表的实施例中,由存储控制器接收到的给定接收到的读取/写入请求可以标识特定卷、扇区(或者块编号)和长度。可以使用卷到介质映射表将卷转换为介质ID。随后可以使用介质ID和块编号访问索引410,以定位与特定介质ID和块编号相对应的索引条目。索引条目可以存储包括键的至少一个元组。每个索引条目还可以包括映射表420中的对应条目的级ID和页ID。
[0047] 使用级ID、页ID和由介质ID和块编号生成的键值,可以定位对应的映射表条目,并且可以从该条目返回存储位置的指针。指针可以用于标识或者定位存储在存储系统的存储设备中的数据。除指针值以外,还可以在映射表420的级N中所示的字段0至字段N中存储状态信息,诸如有效指示符、数据有效期(data age)、数据大小等等。注意,在各种实施例中,存储系统可以包括具有内部映射机构的存储设备(例如,SSD)。在这样的实施例中,映射表条目中的指针可以不是实际物理地址本身。相反地,指针可以是由存储设备映射到设备内的物理位置的逻辑地址。
[0048] 为了该讨论的目的,用于访问索引410中的条目的键值是与数据请求相对应的介质ID和块编号。然而,在其它实施例中,可以采用其它类型的键值。在这些实施例中,键生成器可以从介质ID、块编号和/或一个或多个其它请求者数据输入来生成键,并且键可以用于访问索引410和定位对应的条目。
[0049] 在一个实施例中,索引410可以被分成分区,诸如分区412a-412b。在一个实施例中,分区的大小的范围可以为从4千字节(KB)的页到256KB,然而其它大小是可能的并且是可预期的。索引410的每个条目可以存储键值,并且键值可以基于介质ID、块编号以及其它值。为了该讨论的目的,每个条目中的键值由介质ID和块编号表示。这被示出为仅仅帮助讨论索引410中的条目与介质之间的映射。在其它实施例中,索引410中的条目的键值可以在它们如何生成方面不同。
[0050] 在各种实施例中,索引410的部分可以被高速缓存,或者以其它方式存储在相对快速的访问存储器中。在各种实施例中,可以高速缓存整个索引410。在一些实施例中,其中主索引已经变得太大以至于不能被整体地高速缓存,或者以其它方式大于所期望的大小,则可以在高速缓存中使用二级索引部分、三级索引部分或者其它索引部分以减小其大小。除上述内容以外,在各种实施例中,可以将与最近的命中相对应的映射页高速缓存至少某个时间段。以这种方式,可以更迅速地为呈现具有时间局部性(temporal locality)的访问的过程提供服务(即,最近访问的位置将使它们的映射被高速缓存并且使它们的映射可容易获得)。
[0051] 在一些实施例中,索引410可以是二级索引,该二级索引可以用来找到用于访问主索引的键值。主索引随后可以用于定位地址转换表400中的对应条目。应当理解,在各种实施例中可以采用任何数量的索引级。另外,根据实施例,可以采用任何数量的重定向级,以执行所接收到的数据请求的地址转换。在一些实施例中,对应索引可以包括在映射表420的每个级中,以用于作为级的一部分的映射。这样的索引可以包括对映射表条目的标识以及映射表条目被存储在级内的什么地方(例如,页的标识)。在其它实施例中,与映射表条目相关联的索引可以是独立的实体、或者其本身在逻辑上不是级的一部分的实体。注意,在其它实施例中,可以采用其它类型的索引和映射表将介质ID和块编号映射到物理存储位置。
[0052] 映射表420可以包括一个或多个级。例如,在各种实施例中,表420可以包括16到64个级,然而映射表内支持的其它数量的级是可能的并且是可预期的。为了便于图示,示出了被标记为级“N”、级“N-1”和级“N-2”的三个级。表420内的每个级可以包括一个或多个分区。在一个实施例中,每个分区是4千字节(KB)的页。在一个实施例中,对应索引410可以包括在映射表420的每个级中。在该实施例中,每个级和每个对应索引410可以以随机访问方式物理地存储在存储设备中。
[0053] 在另一个实施例中,表400可以是重复数据删除表。重复数据删除表可以采用包括哈希值的键,其中哈希值是从与存储访问请求相关联的数据分量确定的。重复数据删除操作的初始步骤可以与其它操作(诸如读取/写入请求、垃圾收集操作、修整(trim)操作等等)同时执行。对于给定的写入请求,从客户端计算机系统中的一个发送的数据可以是数据流(诸如字节流)。如本领域技术人员所知晓的,数据流可以分成固定长度或者可变长度区块(chunk)的序列。分块算法(chunking algorithm)可以执行数据流到离散数据分量(其可以被称为“区块”)的划分。区块可以是子文件内容可寻址数据单元。在各种实施例中,表或者其它结构可以用于确定特定分块算法,以用于给定文件类型或者给定类型的数据。可以通过参照其文件名扩展、单独的标识信息、数据本身的内容或者以其它方式确定文件的类型。作为结果的区块随后可以存储在存储设备中的一个中,以允许区块的共享。这种区块可以以各种方式单独地存储或者被分组在一起。
[0054] 在各种实施例中,区块可以由允许从其区块重建较大数据分量的数据结构来表示(例如,可以基于所存储的数据的一个或多个较小区块来重建特定文件)。对应数据结构可以记录其对应的区块(包括关联的计算的哈希值)、其在存储设备之一中的位置的指针(物理的和/或逻辑的)和其长度。对于每个数据分量,重复数据删除应用可以用于计算对应的哈希值。例如,哈希函数(诸如消息摘要算法5(MD5)、安全哈希算法(SHA)或者以其它方式)可以用于计算对应的哈希值。为了知道与所接收到的写入请求相对应的给定数据分量是否已经存储在存储设备之一中,可以将针对给定数据分量计算的哈希值的位(或者哈希值的位的子集)与存储在存储设备中的一个或多个中的数据分量的哈希值中的位相比较。
[0055] 在另外的实施例中,表400可以是覆盖表。一个或多个覆盖表可以用于修改或者省略与下层映射表中的并且响应于查询由其它表提供的键值相对应的元组。一个或多个覆盖表可被用来应用过滤条件,以响应于对映射表的访问或者在创建新级时的平坦化操作期间使用。覆盖表的键不需要与下层映射表的键匹配。例如,覆盖表可以包括单个条目,该单个条目说明:数据的特定范围已经删除或者以其它方式不可访问,以及对与参考该范围的元组相对应的查询的响应无效。在另一个示例中,覆盖表中的条目可以指示存储位置已经被释放,以及参考该存储位置的任何元组无效,从而使查找的结果无效,而不是使由映射表使用的键无效。在一些实施例中,覆盖表可以响应于对下层映射表的查询而修改字段。在一些实施例中,键值的范围可以用于高效地标识应用了相同操作的多个值。以这种方式,可以通过在覆盖表中创建“省略”条目并且在不修改映射表的情况下,从映射表有效地“删除”元组。覆盖表可以用于标识可以以相对高效的方式从映射表中除去的元组。
[0056] 现在转至图5,示出了粗粒度的重复数据删除操作的一个实施例的框图。在一个实施例中,存储控制器可以搜索存储在多个介质中的相同数据的区域。当存储控制器定位存储在多个介质中的相同数据的区域时,存储控制器可以执行粗粒度的重复数据删除操作。介质映射表505A表示执行粗粒度的重复数据删除操作之前整个介质映射表的一部分。表
505A包括用于介质43和45的条目,介质43和45两者都具有用于整个介质的单个条目,将它们自己记录为它们的下层介质,并且具有只读状态(即,稳定状态)
[0057] 为了该讨论的目的,可以假定存储控制器已经检测到介质43的第一范围(块300-499)中的数据与介质45的第二范围(块100-299)中的数据相同。根据实施例,存储控制器可以使用各种技术中的任何一个来检测大区域中的相同数据。在一个实施例中,存储控制器可以执行区域的逐字节比较以检测相同数据。在一些情况下,如果区域包括模式块或者未映射(零)块,则逐字节比较可以不包括实际读取数据。在另一个实施例中,存储控制器可以执行区域的逐哈希比较以检测相同数据。在另外的实施例中,存储控制器可以验证单独介质区域的映射指向相同块。例如,存储控制器可以检测介质43的块300与介质
45的块100指向相同的物理位置。因此,存储控制器可以确定这些块指代相同的数据。在一个实施例中,存储控制器可以使用所有这三个技术的组合,以检测大的卷区域中的相同数据。如果三个条件中的任何一个(基于这三个技术中的任何一个)对于两个单独区域中的所有块保持真,则存储控制器可以推断出这些区域是相同的。
[0058] 由于检测到存储在两个介质中的相同数据,因此存储控制器可以发起粗粒度的重复数据删除操作以合并相同区域的映射。注意,作为被存储控制器采用的正常细粒度的重复数据删除处理的一部分,可能已经以细粒度水平对介质43的第一范围和介质45的第二范围中的数据进行了重复数据删除。
[0059] 响应于检测到相同数据,可以将介质43的第一范围记录为介质45的第二范围的下层介质。这在表505B中示出,该表505B包括用于介质45的第二范围的新条目。还可以为该条目记录200的偏移,并且当将介质45的第二范围中的块映射到介质43时,可以应用200的偏移,以使得这些块与介质43的第一范围适当地对准。还存在用于与第二范围以外的地址空间的其它区域相对应的介质45的两个新条目。可以将来自表505A中的用于介质45的先前条目的属性复制到表505B中的用于介质45的第一范围和第三范围的新条目。
用于介质45的第一范围(0-99)和第三范围(300-N)的条目可以将介质45记录为下层介质。代替将现有地址转换表条目用于对介质45的第二范围的未来查找,查找可以参考与介质43的第一范围相关联的地址转换表条目。
[0060] 在一些实施例中,除了改变介质映射表的条目以外,还可以存储使与介质45的第二范围相关联的现有地址转换表条目无效的指示。稍后,当执行映射的垃圾收集时,可以丢弃被标记为无效的这些地址转换表条目。
[0061] 在一个实施例中,在执行粗粒度的重复数据删除操作之后,对介质45的第二范围的未来查找将使得存储控制器通过查询介质映射表505B来确定介质45的第二范围的下层介质。然后,在将介质43的第一范围标识为介质45的第二范围的下层介质之后,存储控制器将执行对分配给介质43的地址转换表条目的查找。
[0062] 现在参考图6,示出了用于对卷区域进行重复数据删除的方法600的一个实施例。上面描述的在系统100中实施的组件(例如,存储控制器110)通常可以根据方法600进行操作。另外,以顺序次序示出了该实施例中的步骤。然而,一些步骤可以以与所示的次序不同的次序发生,一些步骤可以同时执行,一些步骤可以与其它步骤结合,以及在另一个实施例中可以缺少一些步骤。
[0063] 存储控制器可以检测两个单独的卷区域是相同的(块605)。为了该讨论的目的,这两个相同的区域可以被称为第一卷区域和第二卷区域。存储控制器可以使用先前描述的技术中的任何一个来检测这些相同的区域。在一个实施例中,第一卷区域可以在第一卷中,而第二卷区域可以在第二卷中。然而,在另一个实施例中,第一卷区域和第二卷区域可以是相同卷的部分。
[0064] 接下来,存储控制器可以确定第一卷区域和第二卷区域的锚介质区域(块610)。这些锚介质区域可以分别被称为第一介质的第一区域和第二介质的第二区域。例如,在一个实施例中,第一介质可以具有多个单独区域,以及第一卷区域可以仅指向第一介质的单个区域。为了该讨论的目的,可以假定介质的第一区域和第二介质的第二区域是稳定的。如果第一介质的第一区域或者第二介质的第二区域是活动区域,则存储控制器可以在确定它们包括相同数据之前使它们稳定。
[0065] 接下来,存储控制器可以存储第一介质的第一范围在第二介质的第二范围下层的指示(块615)。在一个实施例中,可能需要在介质映射表中为第二介质的第二范围创建新条目,并且在该新条目中记录第一介质的第一范围在第二介质的第二范围下层。如介质映射表中的用于第二介质的现有条目(或者多个条目)所指示的,第二介质的所有其它范围(除第二范围以外)可以保留它们当前的介质到介质映射。
[0066] 如果第一范围位于第一介质的地址空间内的第一偏移处,以及如果第二范围位于第二介质的地址空间内的第二偏移处,则第三偏移可以存储在该新条目中,其中第三偏移等于第一偏移与第二偏移之间的差。注意,如果第二偏移大于第一偏移,则第三偏移将具有负值。在块615之后,存储控制器可以收回第二介质的第二范围的地址转换(AT)映射和/或使其无效(块620)。根据实施例,存储控制器可以立即或者在稍后的时间点丢弃地址转换映射。例如,当在稍后的时间点执行合并操作时,可以丢弃这些地址转换映射。合并操作包括对不再能够到达的地址转换映射执行垃圾收集。可以保留用于第二介质的其它范围的地址转换映射的剩余部分。在块620之后,方法600可以结束。
[0067] 注意,上面描述的实施例可以包括软件。在这样的实施例中,实现方法和/或机制的程序指令可以在计算机可读介质上传送,或者存储在计算机可读介质上。被配置为存储程序指令的许多类型的介质是可获得的,并且包括硬盘、软盘、CD-ROM、DVD、闪速存储器、可编程ROM(PROM)、随机访问存储器(RAM)以及各种其它形式的易失性或者非易失性存储设备。
[0068] 在各种实施例中,本文中描述的方法和机制的一个或多个部分可以形成云计算环境的部分。在这样的实施例中,可以根据一个或多个各种模型通过因特网将资源提供为服务。这样的模型可以包括基础设施即服务(IaaS)、平台即服务(PaaS)以及软件即服务(SaaS)。在IaaS中,计算机基础设施作为服务递送。在这种情况下,计算装置通常由服务供应商拥有和操作。在PaaS模型中,由开发者使用以开发软件解决方案的软件工具和底层装置可以被提供为服务,并且由服务供应商托管。SaaS通常包括根据需要将软件许可为服务的服务供应商。服务供应商可以托管软件,或者可以将软件部署给客户达给定时间段。上面模型的许多组合是可能的,并且是可预期的。
[0069] 尽管已经非常详细地描述了上面的实施例,但是一旦完全理解了上面的公开内容,则对本领域技术人员来说,许多变型和修改将变得明显。下列权利要求旨在被解释为包括所有这样的变型和修改。

当前第1页 第1页 第2页 第3页
相关技术
数据删除相关技术
重复数据相关技术
J·科尔格洛夫发明人的其他相关专利技术