CN105094688A - 存储系统中的去重 - Google Patents
存储系统中的去重 Download PDFInfo
- Publication number
- CN105094688A CN105094688A CN201410202882.XA CN201410202882A CN105094688A CN 105094688 A CN105094688 A CN 105094688A CN 201410202882 A CN201410202882 A CN 201410202882A CN 105094688 A CN105094688 A CN 105094688A
- Authority
- CN
- China
- Prior art keywords
- virtual address
- address entry
- write data
- entry
- data
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
存储系统中的去重。IO处理器接收包括与LBA关联的写入数据的写入命令。IO处理器根据写入数据所关联的LBA保留去重ID,在每个LBA的范围内,每个去重ID是唯一的。IO处理器针对写入数据计算哈希值。在去重数据库不包括与该哈希值关联的条目的情况下,IO处理器:提供作为LBA和去重ID的组合的援引键;向去重数据库添加唯一地与该哈希值关联并且援引该援引键的条目;以及向虚拟地址数据库添加条目,该条目包括:该援引键;援引指示符,其指示是否存在与当前条目关联的条目;以及指针,其指向存储写入数据的位置。
Description
技术领域
本发明涉及存储系统领域并且涉及在实施去重的存储系统中管理数据。
背景技术
当前公开的主题的功能组件中的一些可实现为各种形式,例如,实现为包括定制VLSI电路或门阵列等等的硬件电路,实现为诸如FPGA等的可编程硬件装置,或者实现为存储在无形的计算机可读介质上并且可由各种处理器执行的软件程序代码,以及其任意组合。当前公开的主题的特定组件可由软件代码的一个特定片段来形成,或者由可根据这里公开的用于各组件的限制结合在一起并且一起动作或操作的多个片段来形成。例如,组件可分发在诸如对象、过程和功能的若干代码片段上,并且可源自结合地操作以提供当前公开的组件的若干程序或程序文件。
以类似的方式,当前公开的组件可实现为操作数据或者操作数据可由当前公开的组件来使用。例如,这样的操作数据可存储在有形计算机可读介质上。操作数据可以是单个数据组,或者其可以是存储在不同位置处,不同网络节点上或者不同存储装置上的数据的聚集。
发明内容
根据当前公开的主题的一方面,提供了一种系统,其包括:去重数据库、虚拟地址数据库和IO处理器。IO处理器可用于在存储系统处接收包括与第一逻辑块地址关联的第一写入数据的第一写入命令。关于第一写入数据,IO处理器可被构造成根据与所述第一写入数据关联的逻辑块地址来保留用于第一写入数据的去重ID,其中,去重ID被指派为使得在每个逻辑块地址的范围内,每个去重ID是唯一的。IO处理器可被构造成基于第一写入数据计算第一哈希值。在去重数据库不包括与第一哈希值关联的条目的情况下,IO处理器可进一步构造成:提供作为第一逻辑块地址与第一去重ID的组合的第一虚拟地址援引键;向去重数据库添加与第一哈希值唯一地关联并且援引第一虚拟地址援引键的条目;向虚拟地址数据库添加第一虚拟地址条目,第一虚拟地址条目包括:第一虚拟地址援引键;援引指示符,其指示是否存在与第一虚拟地址条目关联的至少一个虚拟地址条目;以及指针,其指向存储第一写入数据的存储位置。
除了上述特征之外,根据本公开的主题的该方面的方法可以任何想要的组合或排列可选地包括下述特征(i)至(xiii)中的一个或多个。
(i)其中,在确定第一哈希值不与已有虚拟地址条目关联之后实施提供用于第一写入数据的第一虚拟地址条目的步骤。
(ii)该方法进一步包括,关于第一虚拟地址条目,提供指示第一写入数据是否是被写入到第一逻辑块地址的最新数据的有效性指示符。
(iii)其中,援引指示符是计数与第一虚拟地址条目关联的虚拟地址的数目的计数器。
(iv)其中,与第一虚拟地址条目关联的虚拟地址的数目包括第一虚拟地址条目自身和援引第一虚拟地址条目的任何虚拟地址条目。
(v)该方法进一步包括以下步骤:
在存储系统接收包括与第二逻辑块地址关联的第二写入数据的第二写入命令;
关于第二写入数据:
基于第二写入数据计算第二哈希值;
确定第二哈希值是否已经与已有虚拟地址条目关联,并且如果是,则提供用于第二写入数据的第二虚拟地址条目,该第二虚拟地址条目包括:
第二虚拟地址援引键,其包括第二逻辑块地址;
第二指针,其指向与和第二写入数据相同的写入数据关联的已有虚拟地址条目。
(vi)该方法进一步包括以下步骤:确定第二写入数据和与已有虚拟地址条目关联的写入数据是否相同,并且如果是,则提供包括第二虚拟地址援引键和指向已有虚拟地址条目的指针在内的第二虚拟地址条目。
(vii)其中,确定第二哈希值是否与已有虚拟地址条目关联的步骤包括,如果确定第二哈希值与已有虚拟地址条目关联,则假定第二写入数据和与已有虚拟地址条目关联的写入数据相同,并且从而实施提供第二虚拟地址条目的步骤。
(viii)该方法进一步包括以下步骤:更新已有虚拟地址条目的援引指示符,以指示第二虚拟地址条目现在与已有虚拟地址条目关联。
(ix)其中,第二虚拟地址援引键不包括去重ID或包括空去重ID。
(x)该方法进一步包括以下步骤:
在存储系统处接收第三写入命令,其包括与第三逻辑块地址关联的第三写入数据;
关于第三写入数据:
基于第三写入数据计算第三哈希值;
确定第三哈希值是否与已有虚拟地址条目关联,并且如果是,则确定第三写入数据和与已有虚拟地址条目关联的写入数据是否相同,并且如果不同,则指示存在涉及第三写入数据的去重冲突。
(xii)该方法进一步包括以下步骤:
响应于检测到去重冲突,提供用于第三写入数据的第三虚拟地址条目,所述第三虚拟地址条目包括:
第三虚拟地址援引键,其包括第三逻辑块地址和无效去重指示;
第三指针,其指向存储第三写入数据的存储位置。
(xiii)该方法进一步包括以下步骤:
在存储系统处接收包括与第一逻辑块地址关联的第四写入数据的第四写入命令;
提供用于第四写入数据的第四虚拟地址;以及
更新第一虚拟地址条目的有效性指示符以指示第一写入数据不是被写入第一逻辑块地址的最新数据。
(xiv)该方法进一步包括,其中提供第四虚拟地址条目包括第四虚拟地址援引键,其是第一逻辑块地址和第四去重ID的组合,其中,第四去重ID不同于第一去重ID。
根据本公开的主题的又一方面,提供了一种方法,其包括:在存储系统处接收包括与第一逻辑块地址关联的第一写入数据的第一写入命令;关于第一写入数据:基于第一写入数据计算第一哈希值;提供用于第一写入数据的第一虚拟地址条目,第一虚拟地址条目包括:第一虚拟地址援引键,第一虚拟地址援引键是第一逻辑块地址与第一去重ID的组合,其中,去重ID被指派为使得在每个逻辑块地址的范围内,每个去重ID都是唯一的;援引指示符,其指示是否存在与第一虚拟地址条目关联的至少一个虚拟地址条目;第一指针,其指向存储第一写入数据的存储位置。
根据本公开的主题的又一方面,提供了一种可由机器读取的程序存储装置,其可由机器读取,该装置以有形的方式实现可由机器执行以执行下述方法的指令程序,该方法包括:在存储系统处接收第一写入命令,其包括与第一逻辑块地址关联的第一写入数据;在第一写入数据方面:基于第一写入数据计算第一哈希值;提供用于第一写入数据的第一虚拟地址条目,包括:第一虚拟地址援引键,其是第一逻辑块地址与第一去重ID的组合,其中,去重ID被指派为使得在每个逻辑块地址的范围内,每个去重ID都是唯一的;援引指示符,其指示是否存在与第一虚拟地址条目关联的至少一个虚拟地址条目;第一指针,其指向存储第一写入数据的存储位置。
除了上述特征之外,根据本公开的主题的各方面的系统和程序存储装置可以任何想要的组合或排列包括上述特征(i)至(xiv)中的一个或多个(可进行适当改变)。
附图说明
为了理解本发明并且查看其实际可以是如何实施的,现在将参考附图借助于仅非限制性的示例来描述优选实施方式,在附图中:
图1是示出根据本公开的主题的示例的存储系统的框图;
图2是根据本公开的主题的示例的IO处理器的扩展图;
图3是根据本公开的主题的示例的支持去重的分布式存储系统的分布实施的高级别框图;
图4是示出根据本公开的主题的示例的方法的流程图;
图5是示出根据本公开的主题的示例的在某些情况下的方法的实现方式。
图6是示出根据本公开的主题的示例的在特定环境下方法的实现方式的流程图;
图7是示出根据本公开的主题的示例的在某些情况下方法的的实现方式的流程图;
图8是示出根据本公开的主题的示例的在某些情况下方法的的实现方式的流程图;
图9是示出根据本公开的主题的示例在四个不同写入请求的处理之后的虚拟地址数据库的状态和去重数据库的状态的图;
图10是示出被实现为本公开的主题的一些示例的一部分的读取流程的流程图;以及
图11是示出被实现为本公开的一些示例的一部分的垃圾站收集处理的流程图。
将理解的是,为了示出的简化和清楚,在附图中示出的元素不必被按比例绘制。例如,一些元件的尺寸可以相对于其它元件进行放大以清楚。此外,在视为适合的情况下,附图标记可以在图之间重复以指示对应或类似的元件。
具体实施方式
在下面的详细描述,阐述多个具体细节,以便于提供本公开的主题的完整理解。然而,本领域技术人员将理解的是,本公开的主题可以在没有这些具体细节的情况下实施。在其它情况下,没有详细地描述公知的方法、过程和组件,以便于没有模糊本公开的主题。
除非另有所述,否则,如下面的讨论中明显地看出的,理解的是,在本申请的讨论中,各种功能词语表示将计算装置的寄存器和/或存储器中的表示为物理的(例如,电子的)量的数据操作和/或转换为类似地表示为计算装置的存储器、寄存器或其它这样的有形信息存储、传输或显示装置内的物理量的其它数据。
在说明书和权利要求中,参考词语“逻辑单元卷”或简写为“LU卷”。词语LU卷(或逻辑单元卷)在数字存储领域中是公知的,并且仅为了方便的目的提供下述定义作为非限制性示例。因此,除非另有所述,否则权利要求中的词语LU卷的解释不构成对于下面的定义的限制并且词语LU卷应该按照其最宽泛的合理解释来理解。这里使用的词语LU卷涉及由卷创建请求或等同的请求创建的逻辑单元。例如,在SCSI存储协议中,LU卷由这样的卷创建请求来创建。
这里使用的词语“逻辑块地址”或简写为“LBA”是指由外部主机使用来对针对存储系统的IO请求寻址的基本参考单元。LBA可以是数字并且在从1-n的范围。可在存储系统中以多个不同卷(例如,所有卷)使用部分或整体交叠的LBA范围(例如,1-n),并且因此,为了援引特定逻辑块,可以要求对与逻辑块或快照层块(chunk)关联的卷的援引。为了简单起见,在本公开的主题的示例的描述中,没有提及IO请求援引LBA和在存储系统中多个卷的存在。应理解的是,该省略是用于简化本公开的主题的示例的描述,并且不意在构成对于说明书的范围的限制。因此,将理解的是,本公开的主题的示例涵盖多卷存储系统并且这里所提到的LBA可由LBA和卷ID(例如,LU编号)来构成。
应理解的是,上述寻址方案仅是寻址方案的一个可能实施并且这里仅通过示例来使用,并且在本公开的主题的进一步的示例中,可以使用不同的寻址方案。例如,在不同的寻址方案中,存储系统中的每个卷可与不同范围的LBA关联,并且在这样的情况下,当援引LBA时不需要援引卷ID。
在一开始参照图1,其是根据本公开的主题的示例的存储系统的框图。根据本公开的主题的示例,存储系统可被构造为存储数据并且向可直接或通过网络(例如,在互联网上)连接到存储系统100的一个或更多个主机90提供存储服务。存储系统100可包括用于支持与外部主机90的通信的接口10。例如,接口10可从主机接收IO请求并且可将IO请求指派给存储系统100的适合的组件。
存储系统100可进一步包括IO处理器20、去重数据库30、虚拟地址数据库40和物理存储装置50。下面提供由根据本公开的主题的示例的IO处理器20、去重数据库30、虚拟地址数据库40和物理存储装置50中的每一个实现或执行的构造和操作。
现在将参照图2,图2是根据本公开的主题的示例的IO处理器的扩展图。根据本公开的主题的示例,IO处理器120可包括处理器122、存储器124和存储由IO处理器120使用的配置或逻辑的存储单元126。根据本公开的主题的示例,处理器122、存储器124和存储单元126由IO处理器120使用来执行由根据本公开的主题的示例的IO处理器120执行的操作。
现在额外地参照图3,其是根据本公开的主题的示例的支持去重的分布式存储系统的分布式实施的高级别框图。根据本公开的主题的示例,分布式存储系统100可包括多个前端服务器310、多个后端服务器320、多个去重数据库服务器30和多个存储装置340。应理解的是,根据本公开的主题的示例,可将下述中的每一个实现为在计算机硬件上运行的服务:前端服务器310、后端服务器320、去重数据库服务器30;并且前端服务器310、后端服务器320、去重数据库服务器30中的每一个可在单个计算机硬件单元上运行或可在多个分立的计算机硬件单元上分布。
根据本公开的主题的示例,存储系统100的逻辑地址空间可被划分为使得针对每个逻辑地址,存在对其负责的至少一个后端服务器320。此外,例如,存在可对于系统中的写入数据计算的可能的哈希值的特定范围或空间,并且可能的哈希值的范围或空间可被划分为,使得对于任意(可能的)哈希值,存在对其负责的至少一个去重数据库服务器40。进一步,例如,前端服务器310和后端服务器320可保持从虚拟地址(将在下面描述)映射到对该地址负责的去重数据库服务器30的表或实施转换功能。
根据本公开的主题的示例,后端服务器320服务于来自向前端服务器310的请求。后端服务器320适用于将写入数据写入到存储340(例如,硬盘驱动器、闪速驱动器和其它固态驱动器等等)并且保持允许读取和写入的元数据,该元数据也可包括与去重相关的元数据。
根据本公开的主题的示例,后端服务器320保持从逻辑地址到与每个后端服务器关联的逻辑地址关联的虚拟地址的列表的映射。根据本公开的主题的示例,虚拟地址与各数据位置之间的映射存储在虚拟地址数据库40中。进一步例如,BE320可被构造成维持关于各虚拟地址的额外的元数据。如下面进一步详细描述的,根据本公开的主题的示例,每个虚拟地址条目包括指针,其指向存储位置或者指向另一虚拟地址条目。被指向的存储位置可以是本地的,这意味着指针将是针对实际(包括虚拟)存储位置,而不是针对另一虚拟地址的指针(其包括针对实际存储位置的指针或者其自身指向另一虚拟地址)。当虚拟地址条目包括针对写入数据的存储位置的指针时,存储位置可驻留在与存储了虚拟地址条目的BE服务器相同的节点上的存储装置中,或者可处于BE服务器外部,例如,其可以是某种其它末端服务器或者其可甚至与任何后端服务器分立。根据本公开的主题的示例,一些或全部虚拟地址条目可包括与去重处理相关的额外的元数据,下面将进行详细描述。
去重数据库服务器30上存储的去重数据库保持从写入数据片段的多个哈希值中的每一个到保持针对各写入数据的存储位置的指针的虚拟地址的映射。例如,每个虚拟地址由各虚拟地址援引键表示。下面描述根据本公开的主题的示例的虚拟地址援引键。根据本公开的主题的示例,去重数据库被构造为对于每个不同的哈希值存储最多一个虚拟地址援引键。根据本公开的主题的示例,如果两个不同的写入数据片段共享同一哈希值,则发生哈希冲突。这不会与同一写入数据与两个(或更多)逻辑地址关联的情况混淆。后一种情况并不是哈希冲突。根据本公开的主题的示例,在两个或更多写入数据片段之间发生哈希冲突的情况下,可仅对写入数据片段中的一个进行去重。将在下面描述包括处理共享同一哈希值的两个不同写入数据片段的本公开的主题的示例以及包括处理哈希冲突的本公开的主题的示例。
在本公开的主题的另一示例中,两个或更多个虚拟地址条目可与去重数据库中的特定哈希值关联,使得与和同一哈希值关联的两个或更多个虚拟地址条目中的每一个关联的写入数据不同于和另一虚拟地址条目关联的写入数据,即使其共享同一哈希值。又如,如果在去重数据库中找到了针对进入数据写入片段而计算的哈希值(并且其因此与已有虚拟地址关联),则与已有虚拟地址条目关联的虚拟地址援引键可从去重数据库获得,并且可用于获得与已有虚拟地址条目关联的写入数据,并且与已有虚拟地址条目关联的写入数据可与进入写入数据比较。可针对在去重数据库中列出的、与等于进入写入数据的哈希值的哈希值关联的每个虚拟地址援引键重复该处理,以找到匹配的写入数据或者确定不存在与和进入写入数据相同的写入数据关联的已有虚拟地址条目。如果在将进入写入数据与共享同一哈希值的这些虚拟地址条目的所有写入数据进行比较之后,没有找到匹配的数据,则可向与哈希值关联的去重数据库添加与新的虚拟地址条目关联的新的虚拟地址援引键,或者避免这样做,使得进入写入将不会被去重(其虚拟地址条目将不包括无效去重指示符)。下面描述包括在非去重虚拟地址条目中的元数据的格式。
根据本公开的主题的示例,去重数据库服务器330可支持各种动作,其可支持各种动作,包括lookup_and_store(hash_value,new_virtual_address)以及remove_mapping(hash_value)。
lookup_and_store(hash_value,new_virtual_address)操作涉及检查输入哈希值(hash_value)是否已经映射到虚拟地址援引键。例如,如果确定输入哈希值已经映射到虚拟地址援引键,则输入哈希值所映射到的已有虚拟地址援引键被返回。又例如,输入哈希值所映射到的已有虚拟地址援引键可被返回到向去重数据库发送了查询的后端服务器320,以进行进一步的处理,下面将详细描述。否则,如果去重数据库330不返回已经与输入哈希值关联的虚拟地址援引键,则去重数据库330可被构造成向数据库330添加条目,该条目将输入虚拟地址援引键(new_dedup_virtual_address)映射到输入哈希值(hash_value),并且向发出了查询的后端服务器320返回应答通知。
Remove_mapping(hash_value)操作涉及去除针对输入hash_value的映射。例如,当后端服务器320具有其援引计数到达零并且被去除的虚拟地址条目时,可调用(例如,由IO处理器20调用)去除映射操作。在下面描述虚拟地址条目中包括的元数据和计数器递增操作。去除了其援引计数达到零的虚拟地址条目的后端服务器320可被构造成在进行去除映射功能之前实现延迟(例如延迟预定时间段)。又如,在这样的情况下,一些其它BE服务器320可尝试将写入数据(例如,新的写入数据)与由在去重DB中找到的虚拟地址援引键援引的虚拟地址条目所指向的写入数据进行比较,并且可能失败。
根据本公开的主题的示例,前端服务器(统一简写为“FE”)310可被构造成从外部主机90接收IO请求(例如,读取请求和写入请求)。在接收到IO请求时,各FE310可被构造成确定IO请求与哪个LBA关联。FE310可使用地址映射表(或映射功能)来基于在IO请求中援引的逻辑地址来确定将该IO请求寻址到多个后端服务器320中的哪个后端服务器。
根据本公开的主题的示例,后端服务器(这里统一简写为“BE”)320可均与一组逻辑地址关联。根据本公开的主题的示例,IO处理器20可被实现为BE320的一部分。在该情况下,将理解的是,IO处理器20可以是分布式组件。BE320还可被构造成保持虚拟地址数据库40,其也可被实现为在多个后端服务器320上分布的分布式组件。
在已经提供了存储系统的各组件的高级描述之后,现在对存储系统的操作进行更详细的描述。下面的描述参考根据本公开的主题的示例的方法。应理解的是,虽然参考上面示出的系统的各组件描述了方法的示例,但是方法的示例不限于在这样的组件上实施并且可在任何适合的计算机硬件或硬件/软件组合上实施。
现在参照图4,其中示出了根据本公开的主题的示例的方法的流程图。流程开始于在存储系统100处接收包括与第一LBA关联的第一写入数据的第一写入请求(块405)。注意的是,这里使用的词语“第一”不表示第一个写入请求、写入数据、LBA、哈希值、去重ID、虚拟地址条目、虚拟地址援引键或指针;而是用于与“第二”写入请求、写入数据或LBA区分。类似地,“第二”、“第三”、“第四”等等也表示在不同的写入请求、写入数据、LBA、哈希值、去重ID、虚拟地址条目、虚拟地址援引键或指针之间进行区分。
例如,由FE服务器310中的一个接收写入请求,FE服务器310确定该写入请求应该被定向到哪个BE服务器320,例如,根据在请求中援引的LBA。
应理解的是,来自主机90的写入请求可援引多个LBA并且不必被寻址到仅一个LBA。接收到写入请求的FE服务器确定写入请求中援引的LBA落入哪个BE服务器的域中,并且将写入请求分发到适合的BE服务器。应理解的是,FE服务器还可将进入写入请求或进入写入请求的部分在它们自身之间进行分发。
根据本公开的主题的示例,在虚拟地址级别(其是系统中LBA的超集)生成、保持和使用元数据。因此,根据本公开的主题的示例,与各单个LBA关联的写入数据被独立于与其它LBA关联的写入数据进行处理。为了方便起见,下面的描述涉及处理与单个LBA关联的写入数据,但是应理解的是,在IO请求与两个或更多个(例如,三个、四个、…n个)LBA关联的情况下,这里描述的处理可以类似的方式对与IO请求关联的多个LBA中的每一个实施。
接下来,基于第一写入数据计算第一哈希值(块410)。根据本公开的主题的示例,与第一写入数据所关联的第一LBA关联的BE服务器320从FE服务器310接收第一写入数据,并且IO处理器20基于第一写入数据计算第一哈希值。可使用不同的哈希函数和计算来基于写入数据计算哈希值。
IO处理器20可进一步适用于向第一写入数据指派第一去重ID(块415)。根据本公开的主题的示例,IO处理器20被构造成指派去重ID使得在每个逻辑块地址的范围内,每个去重ID是唯一的。
在块420,可提供用于第一写入数据的第一虚拟地址援引键,其中,第一虚拟地址援引键是与第一写入数据关联的第一LBA和指派给第一写入数据的第一去重ID的组合。如上所述,作为LBA的一部分或者作为单独的指示符,给定LBA所属于的卷ID也可用作虚拟地址援引键的一部分。因此,例如,在具有多个卷(每个卷与唯一的卷ID关联)的存储系统中,在不同的卷中至少存在一些与其它卷LBA的交叠,虚拟地址援引也应该可包括LBA所属于的卷的标识符。在这样的情况下,去重ID被指派为使得在任何<卷ID,LBA>的范围内,每个去重ID是唯一的。例如,可由IO处理器20来提供第一虚拟地址援引键。从下面的描述中,虚拟地址的利用以及与虚拟地址条目一起使用的元数据的利用将变得明显。
在块425,提供与第一写入数据关联的第一指针,其中,第一指针指向存储了或者要存储第一写入数据的存储位置。例如,第一指针可由IO处理器20提供。又如,BE320可与一个或更多存储装置340关联并且可保持从BE320管理的虚拟地址到与BE320关联的存储装置中的存储位置的映射。在存在若干个BE服务器的情况下,各BE可与不同组的存储装置(物理或虚拟的)关联并且可保持从BE320管理的虚拟地址到与BE320关联的存储装置中的存储位置的映射。在另外的示例中,存储装置中的一些或全部可在BE服务器320中的一些或全部之间共享。
在块430,提供用于第一写入数据的第一虚拟地址条目。第一虚拟地址条目可包括:第一虚拟地址援引键、用于指示是否存在至少一个与第一虚拟地址条目关联的至少一个虚拟地址条目的援引指示符、以及第一指针。
根据本公开的主题的又一示例,IO处理器20可进一步构造成在第一虚拟地址条目中包括有效性指示符。根据本公开的主题的示例,有效性指示符可指示与第一虚拟地址条目关联的第一写入数据是否是写入到第一逻辑块地址的最新数据。在本公开的主题的又一示例中,有效性指示符可以是例如可由IO处理器20使用的、用于计数与第一虚拟地址条目关联的虚拟地址的数目的计数器。又如,与第一虚拟地址条目关联的虚拟地址的数目可包括第一虚拟地址条目自身和援引第一虚拟地址条目的任何虚拟地址条目。
根据本公开的主题的示例,当确定第一哈希值不与已有虚拟地址条目关联时或者当由于其它考虑而导致系统决定避免检查第一哈希值是否与已有虚拟地址条目关联时,实现图4中所示的操作序列。这样的其它考虑可包括例如性能考虑。性能考虑的示例可包括下述:(a)在高IO压力期间,系统可以避免去重;(b)用户可能希望对于他们相信收益不值得性能下降的某些数据地址/卷禁止去重。
下面描述其中第一哈希值与已有虚拟地址条目关联的根据本公开的主题的示例的情形的描述。
应理解的是,主机90使用逻辑地址(LBA)来将IO寻址到存储系统100,例如,以从系统读取数据/向系统写入数据。因此,任何逻辑块地址仅可指向存储装置(物理或虚拟的)中的单个数据片段。当某个写入数据第一次存储在存储系统中时,用于该写入数据的元数据可指向写入数据的实际存储位置(物理或虚拟的)。接下来的然而是相同的写入数据的元数据可指向之前写入数据的地址。如果是这种情况,则其暗含着单个LBA可以指向超过一个的数据项目,这是因为即使逻辑地址被重写并且其指针需要指向存储了逻辑地址更新后的写入数据的另一位置,逻辑地址必须继续指向该数据项目,只要其它地址指向它。本公开的主题的示例实现虚拟地址并且将某个元数据存储在数据库中以解决该问题,如根据本公开可看到的那样。
应注意的是,根据本公开的主题的示例,只要至少一个虚拟地址指向虚拟地址(包括虚拟地址自身),则在系统中存在该虚拟地址(或虚拟地址条目,其为表示虚拟地址的系统数据)。这意味着,只要虚拟地址(例如,第一虚拟地址)保持某个LBA(例如第一LBA)的最新的数据或者当存在与另一LBA(例如,第二LBA)关联的至少一个其它虚拟地址(例如,第二虚拟地址)(其是(第二LBA的)最新的数据并且在其指针中援引第一虚拟地址)时,保持该虚拟地址。这意味着第二虚拟地址条目与和第一虚拟地址条目相同的写入数据关联,并且尽管第一虚拟地址条目不再与第一LBA的范围内的最新的写入数据关联,但是指向第一虚拟地址条目的第二虚拟地址条目仍然是第二LBA的最新版本,并且因此,包括在第一虚拟地址条目中的元数据需要被保持。
可例如利用无效去重指示来标记由于例如哈希冲突而没有被去重的虚拟地址,以指示各写入数据被本地地存储并且没有被去重DB援引。
现在参照图5,其是根据本公开的主题的示例的某些情况下的方法的实施的流程图。根据本公开的主题的示例,在块405,在存储系统100处接收包括与第一LBA关联的第一写入数据的第一写入请求。如上所述,例如,该写入请求可由FE服务器中的一个接收并且可被转发给适合的BE服务器。
根据本公开的主题的示例,可为第一写入数据保留第一去重ID,并且如上所述,为该写入数据分配的去重ID在各LBA(在该情况下为第一LBA)的范围内是唯一的(块507)。根据下面的描述,在该阶段保留去重ID的需要将变得明显。
上面已经描述了其中基于第一写入数据计算第一哈希值的块410。
在块520,确定去重数据库30是否已经包括与第一哈希值关联的条目。例如,IO处理器20可使用为第一写入数据计算的第一哈希值来查询去重数据库服务器30。如果已经存在用于等于第一哈希值的哈希值的条目,则查询将返回已经与等于第一哈希值的哈希值关联的虚拟地址条目的虚拟地址援引键。又如,如果不存在这样的条目,则去重数据库30可返回具有空值的响应或者一些其它错误响应,或者返回包括第一虚拟地址援引键的去重数据库30响应。又如,不管以何种格式提供去重数据库30的响应,IO处理器20可被构造成得出第一虚拟地址条目是存储系统中与第一哈希值关联的第一条目的结论。
在确定在去重数据库30中不存在针对第一哈希值的现有条目的情况下,援引第一虚拟地址援引键的针对第一哈希值的条目可被添加到去重数据库(块525),并且进一步响应于确定在去重数据库30中不存在针对第一哈希值的现有条目,针对第一写入数据的第一虚拟地址条目可被添加到虚拟地址数据库40,其中在前进至块530的情况下(即,去重数据库30中不存在针对第一哈希值的现有条目),第一虚拟地址条目可包括第一虚拟地址援引键、用于指示是否存在与第一虚拟地址条目关联的至少一个虚拟地址条目的援引指示符和指向存储了第一写入数据的存储位置的第一指针。应理解的是,块525和块530可并行或顺序地(一个接一个地)实现。
现在将描述图6和图7中所示的在块520确定去重数据库30中存在针对第一哈希值的现有条目的情况的处理的示例。
现在参照图6,示出了根据本公开的主题的示例的在某些情况下的方法的实施的流程图。图6示出了当在块520确定去重数据库30中存在针对第一哈希值的现有条目时的根据本公开的主题的示例的方法的可能的实现方式。在上面在图4和图5中描述了可以根据本公开的主题的示例的方法实施的块520以及前面的块,并且应该被视为图6的描述的一部分。
根据本公开的主题的示例,在块520确定去重数据库30中存在针对第一哈希值的现有条目之后,可从去重数据库30获得与第一哈希值关联的已有虚拟地址条目的虚拟地址援引键(块625)。如上所述,在一些示例中,来自去重数据库30的、指示去重数据库30中存在针对第一哈希值的现有条目的响应可还包括已经与等于第一哈希值的哈希值关联的虚拟地址条目的虚拟地址援引键。
根据本公开的主题的示例,进一步响应于确定去重数据库30中存在针对第一哈希值的现有条目,可将第一虚拟地址条目添加到虚拟地址数据库40,其中,在导致块630的这些情况下(即,去重数据库30中存在针对第一哈希值的现有条目),第一虚拟地址条目包括:包括第一逻辑块地址的第一虚拟地址援引键,和指向已有虚拟地址条目的指针(例如,虚拟地址援引键是从去重数据库40返回的)。根据本公开的主题的示例,块630的虚拟地址条目不包括去重ID。又如,第一虚拟地址条目中的指针指向的虚拟地址援引键是另一LBA和针对该虚拟地址条目分配的去重ID的组合。
应了解的是,使用去重ID使得通过在逻辑寻址层上创建虚拟寻址层来将若干(例如,两个、三个、…、n个)数据写入片段与单个逻辑地址关联。这接着允许当存在与同一写入数据关联的其它虚拟地址(一个或更多个)时,将元数据(包括指向存储位置的指针)保持到特定写入数据片段,并且使用同一存储位置针对共享同一写入数据的全部虚拟地址而不是复制数据,并且同时,当与该元数据关联的逻辑地址被覆写并且更新后的写入数据被针对该逻辑地址存储在存储系统中时,可使用虚拟地址层来将该元数据(包括指向存储位置的指针)保持到特定写入数据片段(例如,以由指向该元数据的其它虚拟地址使用)。因此,根据本公开的主题的示例,当虚拟地址条目包括指向存储系统中存储写入数据的实际存储位置(或虚拟存储位置)的指针时,可在在特定虚拟地址条目的元数据中包括去重ID(或有效去重ID)(例如,作为虚拟地址援引键的一部分),并且根据本公开的主题的示例,指向另一虚拟地址(并且没有指向实际/虚拟存储位置)的虚拟地址条目不包括有效去重ID,例如,这样的虚拟地址条目可包括空去重ID。
在根据图6中示出的在上面参照图6描述的本公开的主题的示例的方法的实现方式中,假设了同一哈希值表示写入数据是相同的。该假设是基于哈希算法,该算法可被构造成,在足够高且可接受的可能性的情况下,相同的哈希值与相同的写入数据关联。例如,该可能性高于一些预定义的可能性。在另一示例中,可能性高于从存储读取的数据返回所存储的同一数据的可能性。然而,在本公开的主题的一些示例中,当确定去重数据库已经包括具有与针对进入写入请求的写入数据计算的哈希值相同的哈希值的条目时,对写入数据片段进行比较,并且系统的操作依赖于比较的结果,现在将参照图7进行进一步的讨论。现在参考的图7是根据本公开的主题的示例的在一些情况下的方法的显示方式的流程图。图7例示了当在块520确定去重数据库30中存在针对第一哈希值的现有条目时根据本公开的主题的示例的方法的可能的实现方式。在上面在图4和图5中描述了可以根据本公开的主题的示例的方法实现的块520以及前面的块,并且应该被视为图7的描述的一部分。将了解的是,图6和图7中示出的根据本公开的主题的示例的实现方式以及这里关于图6和图7的每个提供的描述是相互排斥的,并且如果算法使用其中的一方,则不使用另一方。
根据本公开的主题的示例,在块520确定去重数据库30中存在针对第一哈希值的现有条目之后,可从去重数据库30获得与第一哈希值关联的已有虚拟地址条目的虚拟地址援引键。该操作在上面参照块625进行了描述,并且上述描述也可以应用于此。如上所述,在一些示例中,来自去重数据库30的、指示去重数据库30中存在针对第一哈希值的现有条目的响应可还包括已经与等于第一哈希值的哈希值关联的虚拟地址条目的虚拟地址援引键。
使用从去重数据库30获得的与第一哈希值关联的已有虚拟地址条目的虚拟地址援引键,可获得与已有虚拟地址条目关联的写入数据(从由已有虚拟地址条目中的元数据指向的存储位置读取)(块722)。
根据本公开的主题的示例,所获得的与已有虚拟地址条目关联的写入数据可与和第一写入命令关联的第一写入数据进行比较,以确定两个写入数据片段是否相同(块725)。
根据本公开的主题的示例,如果在块725确定与已有虚拟地址条目关联的写入数据和与第一写入请求关联的第一写入数据相同,则获得与第一哈希值关联的已有虚拟地址条目的虚拟地址援引键(块727)并且实施作为图6的描述的一部分的描述的块630。例如,在块625从去重数据库获得的已有虚拟地址条目的虚拟地址援引键可存储在存储器单元中并且当实现块727时可从存储器单元取出。
又如,如果在块725确定与已有虚拟地址条目关联的写入数据和与第一写入请求关联的第一写入数据不同,则确定发生了哈希冲突,并且针对第一写入数据创建第一虚拟地址条目,其中,第一虚拟地址条目包括:包括第一逻辑块地址和无效去重指示的第一虚拟地址援引键、以及指向存储第一写入数据的存储位置的第一指针(块730)。在哈希冲突的情况下的虚拟地址条目的格式指示第一虚拟地址条目不可被去重,并且与第一虚拟条目关联的第一写入数据需要存储在物理的(或虚拟的)存储装置中。
现在参照图8,其为根据本公开的主题的示例的一些情况下的方法的实现方式的流程图。在图8中,块520、块525和块530描述了将用于与第一LBA关联的第一写入数据的第一虚拟地址条目包括虚拟地址数据库40中。在上面在图4和图5中描述了可以根据本公开的主题的示例的方法实现的块520、块525和块530以及前面的块,并且应该被视为图8的描述的一部分。将了解的是,块525和块530在图5中被示出为并行的块并且在这里的图8中,块525和块530被示出为顺序的。两种实施方案都处于本公开的范围内。
如上所述,第一虚拟地址条目包括:包括第一LBA和第一去重ID的第一虚拟地址援引键、用于指示是否存在与第一虚拟地址条目关联的至少一个虚拟地址条目的援引指示符、指向存储第一写入数据的存储位置的第一指针、以及指示第一写入数据是否是写入到第一逻辑块地址的最新数据的有效性指示符。
在块805,在存储系统处接收第二写入请求,其中,第二写入请求包括与第一LBA关联的第二写入数据。为了示出的方便起见,在图8中所示的并且在这里描述的场景中,假设在接收并处理第二写入请求时,第一写入数据是针对第一LBA的最新写入数据,并且第一虚拟地址条目中的有效性指示符指示第一写入数据是写入到第一逻辑块地址的最新数据。
因此,在本公开的主题的一些示例中,IO处理器响应于接收包括与第一LBA关联的第二写入数据在内的第二写入请求,以依赖于去重数据库的状态并且依赖于方法的实现方式重复例如块507、块410、块520和块525-530或块625-630(之前实施或不实施块722、块725和块727)或者块块730(之前实施或不实施块722和块725)以将第二虚拟地址条目添加到虚拟地址数据库40。添加虚拟援引条目可,涉及或触发对其它虚拟地址条目的更新,例如,在由于虚拟地址条目的添加而使得另一虚拟地址条目的援引计数器递减时,并且因此,如根据本公开的主题的某些示例的描述可看到的,可以进行虚拟地址数据库和/或去重数据库的进一步的更新,包括但不限于图11中所示的处理并且下面将参照图11进行描述。
因此,例如,在确定第二写入请求包括与第一虚拟地址条目关联的写入数据相同的写入数据的情况下,可实施块625和块630。又如,在确定针对第二写入数据的哈希值等于基于第一写入数据计算的哈希值的情况下,可实施块722、块725和块727,并且在确定第一写入数据和第二写入数据相同的情况下,可实施块625和块630,并且如果确定第一写入数据和第二写入数据不同,则可实施块730。
根据本公开的主题的示例,与第二虚拟地址条目的记录(块810)并行或顺序地,可更新第一虚拟地址条目的有效性指示符以指示第一写入数据不再是写入到第一LBA的最新数据(块815)。在本公开的主题的另一示例中,当与特定LBA关联的新虚拟地址条目被添加到存储系统并且其替换作为写入到该LBA的最新数据的之前的虚拟地址条目时,如果之前的虚拟地址条目包括援引计数器,则该援引计数器递减。在图8中例示的场景中,第一虚拟地址条目中的援引计数器递减。将理解的是,例如,在一些其它虚拟地址条目(例如,与不同LBA关联的虚拟地址条目)与和第一虚拟地址条目相同的写入数据关联并且其它虚拟地址条目指向包括指向第一写入数据的存储位置的指针在内的该第一虚拟地址条目的情况下,可以仍然需要保持第一虚拟地址条目。
将理解的是,根据本公开的主题的示例,因为与另一LBA关联的一些一些其它虚拟地址可仍然需要第一虚拟地址条目中的元数据(例如,指向写入数据的存储位置的指针),因此即使在不再保持针对第一LBA的最新数据之后也仍然需要将第一虚拟地址条目保持在虚拟地址数据库中。然而,当虚拟地址条目的援引计数器达到“0”(或任何其它援引指示符指示没有当前援引)时,可更新虚拟地址数据库并且可能的是,可去除虚拟地址条目。又如,当虚拟地址条目的援引计数器达到“0”时,可发出针对去重数据库去除援引了其计数器达到“0”的虚拟地址条目的条目的请求。在图11中进一步示出这些操作并且在下面参照图11进行描述。
现在参照图9,其是根据本公开的主题的示例的在四个不同的写入请求的处理之后的虚拟地址数据库的状态和去重数据库的状态的图。为了示出的目的,假设图9中所示的示例参考的存储系统具有八个逻辑块地址和两个后端服务器,BE1负责逻辑块地址1-4并且BE2负责逻辑块地址5-8。
由图9中的示例示出的场景开始于在BE1处接收援引LBA2的第一写入请求。BE1保留去重ID1。BE1基于第一写入请求中的写入数据计算哈希值,例如,结果为X。BE1然后向去重数据库(dedeupDB1)发送确定是否存在与该哈希值X关联的已有虚拟地址条目的请求。来自去重数据库的响应指示不存在这样的虚拟地址条目。因此,将包括哈希值X的条目902添加到去重数据库并且将该哈希值映射到虚拟地址援引键(2,1)。去重数据库然后向BE1通知创建了该条目,并且作为响应,BE1将针对第一写入数据的条目912添加到虚拟地址数据库。用于第一写入数据的条目912包括具有初始化为1的援引计数的虚拟地址援引键(2,1)、指示这是针对LBA2的最新写入数据的有效性指示符以及指向针对第一写入数据而分配的存储位置922的指针。
如图9中进一步示出的,在接收并处理第一写入请求之后的某个时间,在存储系统接收第二写入请求。该第二写入请求援引LBA6并且在BE2处被接收。第二写入请求包括第二写入数据,其与第一写入请求中包括的第一写入数据相同。因此,由BE2对于第二写入数据计算的哈希值与针对第一写入数据计算的哈希值相等(即,等于X)。BE2向去重数据库(dedeupDB1)发送确定是否存在与哈希值X关联的已有虚拟地址条目的请求。来自去重数据库的响应指示虚拟地址条目912已经与哈希值X关联地登记在去重数据库中。因此,无需响应于第二写入请求向去重数据库添加另外的条目。去重数据库然后通知BE2存在已经与来自BE2的查询中包括的哈希值(X)关联的已有虚拟地址条目(在图9中用数字912标记)。去重数据库可在通知中包括已经与来自BE2的查询中包括的哈希值关联的虚拟地址条目912的虚拟地址援引键(在该情况下为(2,1))。响应于来自去重数据库的通知,BE2将针对第二写入数据的条目914添加到虚拟地址数据库。针对第二写入数据的条目914包括虚拟地址援引键(6,-)、指示这是针对LBA6的最新写入数据的有效性指示符以及指向与针对第二写入数据计算的哈希值关联的已有虚拟地址条目的指针(在该情况下为(2,1))。响应于创建针对第二写入数据的虚拟地址条目914,并且由于该虚拟地址条目914援引虚拟地址条目(2,1)(在图9中标记为912),因此虚拟地址条目(2,1)中的援引计数器递增以指示存在援引虚拟地址条目(2,1)的额外的虚拟地址条目(即,虚拟地址条目(6,-),(在图9中标记为914))。
继续描述图9中所示的示例场景,在接收并处理了第二写入请求之后的某个时间,在存储系统处接收第三写入请求。该第三写入请求援引LBA2并且在BE1处被接收。BE1保留去重ID2(去重ID1已经被占用)。该第三写入请求包括与在第一写入请求和第二写入请求中包括的写入数据不同的第三写入数据。因此,由BE1对于第三写入数据计算的哈希值不同于为第一写入数据和第二写入数据计算的哈希值(例如,等于Y)。BE1然后向去重数据库(dedeupDB1)发送确定是否存在与哈希值Y关联的已有虚拟地址条目的请求。来自去重数据库的响应指示不存在这样的虚拟地址条目。因此,将包括哈希值Y的条目904添加到去重数据库并且将该哈希值映射到虚拟地址援引键(2,2)。去重数据库然后向BE1通知创建了该条目,并且作为响应,BE1将针对第三写入数据的条目916添加到虚拟地址数据库。针对第三写入数据的条目916包括具有初始化为1的援引计数的虚拟地址援引键(2,2)、指示这是针对LBA2的最新写入数据的有效性指示符以及指向针对第三写入数据分配的存储位置924的指针。另外,BE1修改虚拟地址条目(2,1)(在图9中标记为912)中存储的元数据以指示其不再指向(直接或通过指向另一虚拟地址条目)针对各LBA(即LBA2)的数据的最新版本,并且援引计数器递减。由于对于虚拟地址条目(2,1)(图9中标记为912)而言不再需要对于写入数据的存储位置的援引,并且现在仅对于虚拟地址条目(6,-)来说是需要的,因此执行援引计数器的递减。虚拟地址条目(2,1)(图9中标记为912)的该状态是图9中所示的状态。
在接收并处理了第三写入请求之后接收在图9中的示例场景中对其存在援引的第四写入请求。第四写入请求援引LBA5并且在BE2处接收。第四写入请求包括第四写入数据,其与包括在第三写入请求中的第三写入数据相同。因此,由BE2针对第四写入数据计算的哈希值与针对第三写入数据计算的哈希值相等(即,等于Y)。BE2向去重数据库(dedeupDB1)发送确定是否存在与哈希值Y关联的已有虚拟地址条目的请求。来自去重数据库的响应指示虚拟地址条目916已经与哈希值Y关联地登记在去重数据库中。因此,无需响应于第四写入请求向去重数据库添加另外的条目。去重数据库然后通知BE2存在已经与来自BE2的查询中包括的哈希值(Y)关联的已有虚拟地址条目(在图9中标记有数字916)。去重数据库可在通知中包括已经与来自BE2的查询中包括的哈希值(Y)关联的虚拟地址条目916的虚拟地址援引键(在该情况下为(2,2))。响应于来自去重数据库的通知,BE2将针对第四写入数据的条目918添加到虚拟地址数据库。针对第四写入数据的条目918包括虚拟地址援引键(5,-)、指示这是针对LBA5的最新写入数据的有效性指示符以及指向与针对第四写入数据计算的哈希值关联的已有虚拟地址条目的指针(在该情况下为(2,2))。响应于创建针对第四写入数据的虚拟地址条目918,并且由于该虚拟地址条目918援引虚拟地址条目(2,2)(在图9中标记为916),因此虚拟地址条目(2,2)中的援引计数器递增以指示存在援引虚拟地址条目(2,2)的额外的虚拟地址条目(即,虚拟地址条目(5,-)(在图9中标记为918))。
如上所述,根据本公开的主题的示例,当特定LBA被新写入数据覆写时,添加新虚拟地址条目并且其有效性指示符指示这是新虚拟地址条目所关联的LBA的最新版本。另外,在覆写的虚拟地址条目包括指向另一虚拟地址条目的指针的情况下,新虚拟地址条目的添加可触发对另一虚拟地址条目的援引计数器(作为援引指示符的示例)的更新。参照图9,假设在创建了虚拟地址条目918之后的某个时间,在存储系统处接收覆写LBA5中的数据的新写入请求。新虚拟地址条目被添加到虚拟地址数据库并且被标记为写入到LBA5的最新数据。虚拟地址条目918中的有效性指示符被更新以指示,其不再与存储系统中针对LBA5存储的最新数据关联。另外,根据本公开的主题的示例,虚拟地址条目918指向的虚拟地址条目916中的援引计数器(作为援引指示符的示例)递减。应了解的是,根据本公开的主题的示例,上述对于虚拟地址数据库的更新可在某些情况下涉及或触发如根据本公开的主题的某些示例的描述可看到的去重数据库的更新和垃圾收集,其包括但不限于图10和图11中示出的处理并且在下面参照图10和图11进行描述。
根据本公开的主题的示例,使用虚拟地址数据库中存储的数据可以使存储在存储系统中的数据准备好。图10是可作为根据本公开的主题的一些示例的一部分实现的读取流程的流程图。图10中所示的读取流程开始于在存储系统的FE服务器处接收援引LBA“A”的读取请求(块1005)。
FE服务器将写入请求转发给与在写入请求中援引的LBA“A”关联的后端服务器(块1010)。根据本公开的主题的示例,BE服务器接收读取请求,并且可被构造成找到参照在读取请求中援引的LBA“A”的虚拟地址的列表(块1015)。例如,BE服务器构建包括与LBA“A”关联的虚拟地址数据库中的所有虚拟地址条目的虚拟地址条目列表。
接下来,BE服务器确定在在列表中是否存在虚拟地址条目(块1020)。如果列表中不存在与LBA“A”关联的虚拟地址条目,则BE服务器向FE返回指示该地址尚未被写入的消息,并且FE可将该答复转发给主机(块1055)。
否则,如果在列表中存在至少一个虚拟地址条目,则BE服务器可被构造成在虚拟地址条目中寻找与LBA“A”关联的虚拟地址条目,对于该虚拟地址条目,有效性指示符指示这是写入到LBA“A”的最新数据(块1025)。在图10中,例如,与写入到LBA“A”的最新数据关联的虚拟地址条目被称为虚拟地址V’。如图10中所例示,有效性指示符可以是“是最新”标志,其可在该虚拟地址条目与和LBA“A”关联的最新写入数据关联的情况下为“真”,或者在该虚拟地址条目与和LBA“A”关联的最新写入数据不关联的情况下为“假”。
在块1030,确定与写入到LBA“A”的最新数据关联的条目“V”是否包括指向本地存储的指针,或者是否其包括指向存储位置或者指向另一虚拟地址条目的指针。
又如,在虚拟地址条目“V”指向本地存储的情况下,BE1读取“V”所指向的存储位置中的数据,并且将该数据发送给FE,FE将该数据发送给主机(块1050)。
又如,在虚拟地址条目“V”指向对数据的存储位置进行指向的另一虚拟地址条目“V2”的情况下,BE1可被构造成向对于在“V”中对其存在援引的虚拟地址条目负责的BE2发送读取请求(块1035)。将注意的是,目标BE可以是获得读取请求的BE的同一BE。
接下来,BE2可被构造成找到虚拟地址条目“V2”中指向所请求的数据的存储位置的指针,在指定的存储位置读取数据,并且将其发送给发起该请求的BE1(块1040)。
BE1获得该数据并且可将其转发给FE,FE将其发送给主机(块1045)。将了解的是,可设计其它操作和不同的流程来从根据本公开的示例构造并设计的存储系统读取数据,并且图10中所示的在上面参照图10描述的处理是可能的读取流程的一个可能的实现方式的示例。
作为本公开的主题的一些示例的一部分,可与上面描述的数据写入处理的一个或更多个实施组合地实施垃圾收集处理,并且还可与上面描述的数据读取处理组合地实施垃圾收集处理。根据本公开的主题的示例,可在线地进行旧的条目的垃圾收集,或者在其它示例中,可离线地实施垃圾收集。
例如,当新写入使得旧写入(即,已有虚拟地址条目)不必要时,可实施在线垃圾收集。在下面提供可被视为不必要的虚拟地址条目的示例。再现垃圾收集可在写入处理完成之后进行。
又如,离线垃圾收集是手动地调用或者作为预定例程的一部分来调用(例如,在预定时间之后,响应于特定参数满足某些标准等等)的处理,并且其对于虚拟地址数据库中存储的虚拟地址条目迭代,并且去除不再需要的虚拟地址条目。
在在线垃圾收集的情况和离线垃圾收集的情况下,如果是下述状态之一,则可以去除虚拟地址条目:
如果虚拟地址条目中的援引指示符指示没有虚拟地址条目援引其。例如,在使用援引计数器的情况下,当援引计数器等于“0”时。在该情况下,由该条目指向的存储位置处的数据被从本地存储删除并且通知去重数据库,从而其可去除针对各哈希值的条目。
条目不被去重(即,其不具有去重ID),并且其有效性指示指示其不是针对虚拟地址条目所关联的LBA的有效数据(例如,“是最新”标志为假)。在这样的情况下,如果虚拟地址条目指向本地存储,则可从本地存储删除由该虚拟地址条目指向的数据。或者,如果虚拟地址条目指向另一虚拟地址条目(并且该另一个虚拟地址条目指向数据的存储位置),则指向数据的存储位置的其它虚拟地址条目的援引计数器可递减。
现在参照图11,示出了可作为本公开的主题的一些示例的实施的垃圾收集处理的流程图。图11中所示的并且在这里参照图11描述的垃圾收集处理涉及单独的虚拟地址条目,但是将了解的是,该处理可关于不同虚拟地址条目而多次实施。
根据本公开的主题的示例,在一开始,可确定(当前)虚拟地址条目是否被去重(块1105)。例如,去重虚拟地址条目是具有有效去重ID的条目。
根据本公开的主题的示例,在在块1105确定虚拟地址条目被去重的情况下,处理转向块1110,在块1110确定援引计数器(作为援引指示符的示例)是否等于“0”。换言之,在块1110确定,根据虚拟地址条目中的元数据,在存储系统中是否存在包括指向当前虚拟地址条目中的元数据或者要求该元数据的任何虚拟地址条目(包括虚拟地址条目自身(例如,如果其保持各LBA的最新数据))。
如果在块1110确定援引计数器(作为援引指示符的示例)不等于“0”(例如,等于1以上),或者援引指示符指示存储系统中的至少一个虚拟地址条目需要该虚拟地址条目,则确定该虚拟地址条目不可被去除(块1115),并且关于该虚拟地址条目处理可结束。
然而,如果在块1110确定援引计数器等于“0”,则可去除虚拟地址条目,并且虚拟地址条目中的指针所指向的存储位置中的数据可被去除或者可被标记为无效,并且进一步,可将请求传递给去重ID以更新其数据并且从去重ID去除该虚拟地址条目(块1120)。
现在返回块1105,如果确定虚拟地址条目不被去重,则可检查虚拟地址条目的有效性指示符以确定该虚拟地址条目是否与各LBA的最新(或有效)写入数据关联(块1125)。
根据本公开的主题的示例,如果在块1125确定虚拟地址条目与各LBA的最新写入数据关联,则不可去除该虚拟地址条目(块1115)。
根据本公开的主题的示例,如果在块1125确定虚拟地址条目不与各LBA的最新写入数据关联,则确定虚拟地址条目中的指针是否指向本地地址(实际存储位置)(块1130)。
如果在块1130确定虚拟地址条目中的指针指向本地地址,则该虚拟地址条目可被去除并且可删除该虚拟地址条目所指向的存储位置中的数据(块1135)。
然而,如果在块1130确定虚拟地址条目中的指针指向另一虚拟地址条目,则可去除该指向的虚拟地址条目,并且更新该指向的虚拟地址条目中的援引指示符(例如,援引计数器递减)(块1140)。在所指向的虚拟地址条目中使用援引计数器的情况下,援引计数器递减。
还将理解的是,根据本发明的系统可以是适当地编程的计算机。类似地,本发明涉及可由计算机读取以执行本发明的方法的计算机程序。本发明还涉及有形地实施可由机器执行以执行本发明的方法的指令的程序的机器可读存储器。
Claims (19)
1.一种方法,所述方法包括以下步骤:
在存储系统处接收包括与第一逻辑块地址关联的第一写入数据的第一写入命令;
关于所述第一写入数据:
基于所述第一写入数据计算第一哈希值;
提供用于所述第一写入数据的第一虚拟地址条目,所述第一虚拟地址条目包括:
第一虚拟地址援引键,所述第一虚拟地址援引键是所述第一逻辑块地址和第一去重ID的组合,其中,去重ID被指派为使得在每个逻辑块地址的范围内,每个去重ID是唯一的;
援引指示符,所述援引指示符指示是否存在与所述第一虚拟地址条目关联的至少一个虚拟地址条目;以及
第一指针,所述第一指针指向存储所述第一写入数据的存储位置。
2.根据权利要求1所述的方法,其中,在确定所述第一哈希值不与已有虚拟地址条目关联之后实施提供用于所述第一写入数据的第一虚拟地址条目的步骤。
3.根据前述权利要求中的任一项所述的方法,所述方法进一步包括以下步骤:关于所述第一虚拟地址条目,提供有效性指示符,所述有效性指示符指示所述第一写入数据是否是被写入到所述第一逻辑块地址的最新数据。
4.根据前述权利要求中的任一项所述的方法,所述方法进一步包括以下步骤:
在所述存储系统处接收包括与第二逻辑块地址关联的第二写入数据的第二写入命令;
关于所述第二写入数据:
基于所述第二写入数据计算第二哈希值;
确定所述第二哈希值是否已经与已有虚拟地址条目关联,并且如果是,则提供用于所述第二写入数据的第二虚拟地址条目,所述第二虚拟地址条目包括:
第二虚拟地址援引键,所述第二虚拟地址援引键包括所述第二逻辑块地址;
第二指针,所述第二指针指向与和所述第二写入数据相同的写入数据关联的已有虚拟地址条目。
5.根据权利要求4所述的方法,所述方法进一步包括下述操作序列中的至少一个:
a.确定所述第二写入数据和与所述已有虚拟地址条目关联的写入数据是否相同,并且如果是,则提供包括所述第二虚拟地址援引键和指向所述已有虚拟地址条目的指针在内的所述第二虚拟地址条目;以及
b.确定所述第二哈希值是否已经与已有虚拟地址条目关联的步骤包括,如果确定所述第二哈希值与已有虚拟地址条目关联,则假定所述第二写入数据与所述已有虚拟地址条目关联的写入数据相同,并且从而实施提供第二虚拟地址条目的步骤。
6.根据权利要求6所述的方法,所述方法进一步包括以下步骤:更新所述已有虚拟地址条目的援引指示符,以指示所述第二虚拟地址条目现在与所述已有虚拟地址条目关联。
7.根据前述权利要求中的任一项所述的方法,所述方法进一步包括以下步骤:
在所述存储系统处接收包括与第三逻辑块地址关联的第三写入数据的第三写入命令;
关于所述第三写入数据:
基于所述第三写入数据计算第三哈希值;
确定所述第三哈希值是否与已有虚拟地址条目关联,并且如果是,则确定所述第三写入数据和与已有虚拟地址条目关联的写入数据是否相同,并且如果不同,则指示存在涉及所述第三写入数据的去重冲突。
8.根据权利要求7所述的方法,所述方法进一步包括以下步骤:
响应于检测到去重冲突,提供用于所述第三写入数据的第三虚拟地址条目,该第三虚拟地址条目包括:
第三虚拟地址援引键,所述第三虚拟地址援引键包括所述第三逻辑块地址和无效去重指示;
第三指针,所述第三指针指向存储所述第三写入数据的存储位置。
9.一种系统,所述系统包括:
去重数据库;
虚拟地址数据库;
IO处理器,所述IO处理器适用于在存储系统处接收包括与第一逻辑块地址关联的第一写入数据的第一写入命令,并且关于所述第一写入数据,所述IO处理器被构造成:
根据与所述第一写入数据关联的所述逻辑块地址来保留用于所述第一写入数据的去重ID,其中,去重ID被指派为使得在每个逻辑块地址的范围内,每个去重ID是唯一的;
基于所述第一写入数据计算第一哈希值,
其中,在所述去重数据库不包括与所述第一哈希值关联的条目的情况下,所述IO处理器进一步构造成:
提供作为所述第一逻辑块地址与所述第一去重ID的组合的第一虚拟地址援引键;
向所述去重数据库添加与所述第一哈希值唯一地关联并且援引所述第一虚拟地址援引键的条目;
向所述虚拟地址数据库添加第一虚拟地址条目,所述第一虚拟地址条目包括:
所述第一虚拟地址援引键;
援引指示符,所述援引指示符指示是否存在与所述第一虚拟地址条目关联的至少一个虚拟地址条目;
指针,所述指针指向存储所述第一写入数据的存储位置。
10.根据权利要求9所述的系统,其中,所述去重数据库被构造成存储多个哈希值条目,所述多个哈希值条目中的每一个与特定哈希值唯一地关联并且提供从所述哈希值到特定虚拟地址援引键的映射。
11.根据权利要求9所述的系统,其中,所述IO处理器被构造成进一步在所述第一虚拟地址条目中包括有效性指示符,所述有效性指示符指示所述第一写入数据是否是写入到所述第一逻辑块地址的最新数据。
12.根据权利要求9至11中的任一项所述的系统,其中,所述IO处理器被构造成接收包括与第二逻辑块地址关联的第二写入数据的第二写入命令,并且关于所述第二写入数据,所述IO处理器被构造成:
基于所述第二写入数据计算第二哈希值;
其中,在所述去重数据库已经包括与所述第二哈希值关联的条目的情况下,所述IO处理器被构造成:
向所述虚拟地址数据库添加第二虚拟地址条目,所述第二虚拟地址条目包括:
第二虚拟地址援引键,所述第二虚拟地址援引键包括所述第二逻辑块地址;
指针,所述指针指向与所述第二哈希值关联的已有虚拟地址条目。
13.根据权利要求12所述的系统,其中,所述IO处理器被进一步构造成从所述去重数据库获得与所述第二哈希值关联的所述已有虚拟地址条目的虚拟地址援引键,并且其中,所述第二虚拟地址条目中的所述指针指向与所述第二哈希值关联的所述已有虚拟地址条目。
14.根据权利要求13所述的系统,其中,所述IO处理器被进一步构造成更新所述已有虚拟地址条目的援引指示符,以指示所述第二虚拟地址条目现在与所述已有虚拟地址条目关联。
15.根据权利要求12所述的系统,其中,在确定所述第二哈希值已经与援引已有虚拟地址条目的已有虚拟地址条目关联的情况下,所述IO处理器被构造成确定所述第二写入数据和与所述已有虚拟地址条目关联的写入数据相同。
16.根据权利要求12所述的系统,其中,所述IO处理器被进一步构造成更新所述已有虚拟地址条目的援引指示符,以指示所述第二虚拟地址条目现在与所述已有虚拟地址条目关联。
17.根据权利要求9至11中的任一项所述的系统,其中,所述IO处理器被构造成在所述存储系统处接收包括与第三逻辑块地址关联的第三写入数据的第三写入命令,并且关于所述第三写入数据,所述IO处理器被构造成:
基于所述第三写入数据计算第三哈希值;
确定所述第三哈希值是否与已有虚拟地址条目关联,并且如果是,则所述IO处理器被构造成确定所述第三写入数据和与已有虚拟地址条目关联的写入数据是否相同,并且如果不同,则指示存在涉及所述第三写入数据的去重冲突。
18.根据权利要求17所述的系统,其中,所述IO处理器被构造成执行下述操作中的一个或更多个:
a.响应于确定所述第三哈希值已经与已有虚拟地址条目关联:
从所述去重数据库获得与所述第三哈希值关联的所述已有虚拟地址条目的所述虚拟地址援引键;
从所述虚拟地址数据库获得与所述已有虚拟地址关联的所述虚拟地址条目中的指针;以及
将由所述指针指向的所述存储位置中存储的数据与所述第三写入数据比较,
b.在确定所述第三哈希值已经与已有虚拟地址条目关联,但是所述第三写入数据和与所述已有虚拟地址条目所关联的所述写入数据不相同的情况下:
提供用于所述第三写入数据的第三虚拟地址条目,所述第三虚拟地址条目包括:
虚拟地址援引键,所述虚拟地址援引键包括所述第三逻辑块地址和无效去重指示;
第三指针,所述第三指针指向存储所述第三写入数据的存储位置。
19.一种可由机器读取的程序存储装置,该装置以有形的方式实现可由所述机器执行以执行权利要求1中所述的方法的指令程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410202882.XA CN105094688B (zh) | 2014-05-14 | 2014-05-14 | 存储系统中的去重方法和系统以及计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410202882.XA CN105094688B (zh) | 2014-05-14 | 2014-05-14 | 存储系统中的去重方法和系统以及计算机可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094688A true CN105094688A (zh) | 2015-11-25 |
CN105094688B CN105094688B (zh) | 2019-11-22 |
Family
ID=54575253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410202882.XA Active CN105094688B (zh) | 2014-05-14 | 2014-05-14 | 存储系统中的去重方法和系统以及计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094688B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107656966A (zh) * | 2017-08-28 | 2018-02-02 | 深圳市诚壹科技有限公司 | 一种处理数据的方法及服务器 |
CN110109867A (zh) * | 2018-01-18 | 2019-08-09 | 伊姆西Ip控股有限责任公司 | 改进在线模式检测的方法、装置和计算机程序产品 |
CN113488184A (zh) * | 2021-07-07 | 2021-10-08 | 天津开心生活科技有限公司 | 录入数据的方法及装置、计算机可读存储介质和电子设备 |
CN114253466A (zh) * | 2020-09-23 | 2022-03-29 | 慧与发展有限责任合伙企业 | 数据去重参数计算 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430691A (zh) * | 2007-03-30 | 2009-05-13 | 赛门铁克公司 | 直接将数据从去重复存储器导出到非去重复存储器的系统和方法 |
CN102880663A (zh) * | 2011-09-01 | 2013-01-16 | 微软公司 | 部分去重复的文件的优化 |
CN103098035A (zh) * | 2010-08-31 | 2013-05-08 | 日本电气株式会社 | 存储系统 |
CN103136243A (zh) * | 2011-11-29 | 2013-06-05 | 中国电信股份有限公司 | 基于云存储的文件系统去重方法及装置 |
US20140006354A1 (en) * | 2010-05-03 | 2014-01-02 | Panzura, Inc. | Executing a cloud command for a distributed filesystem |
-
2014
- 2014-05-14 CN CN201410202882.XA patent/CN105094688B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430691A (zh) * | 2007-03-30 | 2009-05-13 | 赛门铁克公司 | 直接将数据从去重复存储器导出到非去重复存储器的系统和方法 |
US20140006354A1 (en) * | 2010-05-03 | 2014-01-02 | Panzura, Inc. | Executing a cloud command for a distributed filesystem |
CN103098035A (zh) * | 2010-08-31 | 2013-05-08 | 日本电气株式会社 | 存储系统 |
CN102880663A (zh) * | 2011-09-01 | 2013-01-16 | 微软公司 | 部分去重复的文件的优化 |
CN103136243A (zh) * | 2011-11-29 | 2013-06-05 | 中国电信股份有限公司 | 基于云存储的文件系统去重方法及装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107656966A (zh) * | 2017-08-28 | 2018-02-02 | 深圳市诚壹科技有限公司 | 一种处理数据的方法及服务器 |
CN110109867A (zh) * | 2018-01-18 | 2019-08-09 | 伊姆西Ip控股有限责任公司 | 改进在线模式检测的方法、装置和计算机程序产品 |
CN110109867B (zh) * | 2018-01-18 | 2023-03-31 | 伊姆西Ip控股有限责任公司 | 改进在线模式检测的方法、装置和计算机程序产品 |
CN114253466A (zh) * | 2020-09-23 | 2022-03-29 | 慧与发展有限责任合伙企业 | 数据去重参数计算 |
CN113488184A (zh) * | 2021-07-07 | 2021-10-08 | 天津开心生活科技有限公司 | 录入数据的方法及装置、计算机可读存储介质和电子设备 |
CN113488184B (zh) * | 2021-07-07 | 2023-09-22 | 天津开心生活科技有限公司 | 录入数据的方法及装置、计算机可读存储介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105094688B (zh) | 2019-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9262430B2 (en) | Deduplication in a storage system | |
US10013317B1 (en) | Restoring a volume in a storage system | |
US9846642B2 (en) | Efficient key collision handling | |
US10387044B2 (en) | Deduplication in a distributed storage system | |
CN103150394B (zh) | 面向高性能计算的分布式文件系统元数据管理方法 | |
US8612488B1 (en) | Efficient method for relocating shared memory | |
CN107209714B (zh) | 分布式存储系统及分布式存储系统的控制方法 | |
KR101977575B1 (ko) | 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체 | |
CN110018998B (zh) | 一种文件管理方法、系统及电子设备和存储介质 | |
CN111241108B (zh) | 基于键值对kv系统的索引方法、装置、电子设备和介质 | |
US9965383B2 (en) | File system indirection technique for directly managing solid state devices | |
CN111400334B (zh) | 数据处理方法、装置、存储介质及电子装置 | |
CN105094688A (zh) | 存储系统中的去重 | |
US10346362B2 (en) | Sparse file access | |
CN111459885B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
CN104268159A (zh) | 一种基于动态镜像的实时数据仓库数据预存取方法 | |
CN112947856A (zh) | 一种内存数据的管理方法、装置、计算机设备及存储介质 | |
CN104424219A (zh) | 一种数据文件的管理方法及装置 | |
CN116578746A (zh) | 对象去重方法及装置 | |
WO2020215580A1 (zh) | 一种分布式全局数据去重方法和装置 | |
US9953042B1 (en) | Managing a deduplicated data index | |
EP2945050B1 (en) | Deduplication in a storage system | |
CN104956334A (zh) | 将请求发送至管理服务 | |
US9442948B2 (en) | Resource-specific control blocks for database cache | |
US8843708B2 (en) | Control block linkage for database converter handling |
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 |