CN117950574A - 用于存储系统的指纹跟踪结构 - Google Patents
用于存储系统的指纹跟踪结构 Download PDFInfo
- Publication number
- CN117950574A CN117950574A CN202310788894.4A CN202310788894A CN117950574A CN 117950574 A CN117950574 A CN 117950574A CN 202310788894 A CN202310788894 A CN 202310788894A CN 117950574 A CN117950574 A CN 117950574A
- Authority
- CN
- China
- Prior art keywords
- fingerprint
- node
- stored
- entries
- entry
- 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.)
- Pending
Links
- 230000002085 persistent effect Effects 0.000 claims abstract description 31
- 239000000872 buffer Substances 0.000 claims description 50
- 238000000034 method Methods 0.000 claims description 47
- 230000004044 response Effects 0.000 claims description 22
- 238000012217 deletion Methods 0.000 claims 4
- 230000037430 deletion Effects 0.000 claims 4
- 230000008569 process Effects 0.000 description 36
- 230000006870 function Effects 0.000 description 10
- 230000003287 optical effect Effects 0.000 description 7
- 239000004065 semiconductor Substances 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000011010 flushing procedure Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000006837 decompression Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及用于存储系统的指纹跟踪结构。示例实施方式涉及存储系统中的重复数据删除操作。示例包括:接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元;生成每个接收到的数据单元的指纹;识别要存储在容器索引中的一组指纹,所述容器索引包括指示存储在所述重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据;将所识别的一组指纹存储在至少一个容器索引中;以及将所述所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,其中,所述指纹跟踪结构用于标识存储在所述重复数据删除存储系统的持久性存储装置中的每个数据单元。
Description
背景技术
可以应用数据归约技术来减少存储在存储系统中的数据量。示例数据归约技术包括重复数据删除。重复数据删除标识重复的数据单元,并且力图缩减或消除存储在存储系统中的重复数据单元的实例的数量。
附图说明
关于以下附图描述了一些实施方式。
图1是根据一些实施方式的示例存储系统的示意图。
图2是根据一些实施方式的示例数据结构的图示。
图3A至图3C是根据一些实施方式的示例数据结构的图示。
图4A至图4F是根据一些实施方式的示例操作的图示。
图5是根据一些实施方式的示例数据格式的图示。
图6A至图6E是根据一些实施方式的示例操作的图示。
图7是根据一些实施方式的示例过程的图示。
图8是根据一些实施方式的示例过程的图示。
图9是根据一些实施方式的示例过程的图示。
图10A至图10C是根据一些实施方式的示例操作的图示。
图11是根据一些实施方式的存储有指令的示例机器可读介质的图。
图12是根据一些实施方式的示例过程的图示。
图13是根据一些实施方式的示例计算设备的示意图。
在所有附图中,相同的附图标记表示相似但不一定相同的要素。附图不一定是按比例绘制的,并且一些部分的尺寸可以被放大以更清楚地图示所示的示例。此外,附图提供了与描述一致的示例和/或实施方式;然而,描述不限于附图中提供的示例和/或实施方式。
具体实施方式
在本公开中,除非上下文另外明确指示,否则使用术语“一个(a)”、“一种(an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开中使用时,术语“包括(includes/including/comprises/comprising)”或“具有(have/having)”指明存在该要素,但不排除存在或添加其他要素。
在一些示例中,存储系统可以以去重形式备份数据集合(在本文中称为数据的“流”或“数据流”),从而减少存储数据流所需的存储空间量。存储系统可以创建“备份项目”来以去重形式表示数据流。存储系统可以执行重复数据删除过程,包括将数据流分解成离散的数据单元(或“组块(chunk)”)并确定这些传入数据单元的“指纹”(如下所述)。进一步地,存储系统可以将传入数据单元的指纹与所存储数据单元的指纹进行比较,并且可以由此确定哪些传入数据单元是先前存储的数据单元的复制品(例如,当比较指示匹配的指纹时)。在数据单元是复制品的情况下,存储系统可以存储对先前存储的数据单元的引用,而不是存储重复的传入数据单元。
如本文所使用的,“指纹”是指通过对数据单元的内容应用函数而得到的值(其中“内容”可以包括数据单元的内容的全部或子集)。可以应用的函数的示例包括基于传入数据单元的内容产生散列值的散列函数。散列函数的示例包括如安全散列算法2(SHA-2)散列函数(例如,SHA-224、SHA-256、SHA-384等)等密码散列函数。在其他示例中,可以采用其他类型的散列函数或其他类型的指纹函数。
“存储系统”可以包括存储设备或存储设备阵列。存储系统还可以包括管理对(多个)存储设备的访问的(多个)存储控制器。“数据单元”可以指存储系统中可以单独识别的任何数据部分。在一些情况下,数据单元可以指组块、组块的集合、或任何其他数据部分。在一些示例中,存储系统可以将数据单元存储在持久性存储装置中。可以使用一种或多种(多个)持久性(例如,非易失性)存储设备(如(多个)基于磁盘的存储设备(例如,(多个)硬盘驱动器(HDD))、(多个)固态设备(SSD)(如(多个)闪速存储设备)等或者其组合)来实施持久性存储装置。
“控制器”可以指硬件处理电路,其可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或其他硬件处理电路中的任一项或某种组合。可替代地,“控制器”可以指硬件处理电路与可在硬件处理电路上执行的机器可读指令(软件和/或固件)的组合。
在一些示例中,重复数据删除存储系统可以使用元数据来处理入站数据流。例如,这样的元数据可以包括指定特定数据单元的接收顺序(例如,在数据流中)的数据配方(本文也称为“清单”)。处理每个数据流在本文中可以被称为“备份过程”。随后,响应于读取请求,重复数据删除系统可以使用一组清单(本文也称为“项目元数据”)来确定数据单元的接收顺序,从而可以重新创建原始数据流。相应地,该组清单可以是原始数据流的表示。清单可以包括一系列记录,每个记录代表特定的一组(多个)数据单元。清单中的记录可以包括标识容器索引的一个或多个字段,这些容器索引包括数据单元的存储信息。例如,容器索引可以包括一个或多个字段,所述字段指定所存储数据单元的位置信息(例如,容器、偏移量等)、所存储数据单元的压缩和/或加密特性等。容器索引可以包括指示引用每个数据单元的清单数量的引用计数。
在一些示例中,在接收到(例如,数据流中的)数据单元时,可以将其与一个或多个容器索引相匹配,以确定相同的组块是否已经存储在重复数据删除存储系统的容器中。例如,重复数据删除存储系统可以将接收到的数据单元的指纹与一个或多个容器索引中的指纹进行比较。如果在(多个)搜索的容器索引中没有找到匹配指纹,则可以将接收到的数据单元添加到容器中,并且可以将接收到的数据单元的条目添加到与该容器相对应的容器索引中。然而,如果在搜索的容器索引中找到匹配指纹,则可以确定与接收到的数据单元相同的数据单元已经存储在容器中。响应于该确定,对应条目的引用计数递增,并且接收到的数据单元不存储在容器中(因为其已经存在于容器之一中),从而避免在重复数据删除存储系统中存储重复的数据单元。如本文所使用的,术语“匹配操作”可以指用于将多个数据单元的集合(例如,来自特定备份数据流)的指纹与存储在容器索引中的指纹进行比较的操作。
在一些示例中,重复数据删除存储系统可以接收对关于具有特定指纹的数据单元(如果有的话)的量和/或位置的信息的请求(在本文中也称为数据单元的“跟踪信息”)。例如,重复数据删除存储系统可以接收跟踪查询,以确定具有特定指纹的任何(多个)数据单元是否以去重形式存储,并且如果是,则确定那些所存储数据单元的数量和/或位置。然而,尝试搜索重复数据删除存储系统的所有容器索引以识别特定指纹的每个实例,然后确定(多个)对应数据单元的(多个)位置可能是不切实际的。例如,一些重复数据删除存储系统可能不允许针对接收到的数据单元的指纹对所有容器索引进行穷举搜索(例如,搜索限于指定数量的容器索引)。因此,如果在搜索过程中没有找到特定指纹的匹配,则可以将该指纹添加到新的容器索引中。然而,同一指纹也可能存储在未被搜索的另一容器索引中(例如,由于搜索限制)。因此,用指定指纹识别每个数据单元的数量和/或位置可能需要详尽地搜索重复数据删除存储系统的所有容器索引,并且因此可能消耗过量的处理时间、系统带宽、存储器空间等。
根据本公开的一些实施方式,存储系统可以包括重复数据删除元数据和指纹跟踪结构。重复数据删除元数据可以包括用于存储所存储数据单元的指纹和指针的容器索引。指纹跟踪结构可以是用于存储条目的节点树,所述条目包括所存储数据单元的指纹和跟踪信息(例如,量和/或位置)。在一些实施方式中,存储系统可以使用重复数据删除元数据来确定接收到的数据单元是否是先前存储的数据单元的复制品(例如,通过将接收到的数据单元的指纹与存储在容器索引中的指纹进行匹配)。一旦识别出一组新数据单元(即,具有与容器索引中所存储的指纹不匹配的指纹的数据单元),存储系统就可以将新数据单元存储在数据容器中,并且可以将新数据单元的指纹和位置存储在(多个)容器索引中。进一步地,在一些实施方式中,新数据单元的指纹(和跟踪信息)可以包括加载在指纹跟踪结构的根节点中的数据对象(在本文中称为“指纹条目”)中。
在一些实施方式中,当指纹跟踪结构的根节点已满(例如,达到最大数量的所存储的指纹条目)时,可以从根节点移除并且可以在一组子节点之间分配所存储的指纹条目(在本文中也称为“转储清除”所存储的指纹条目)。这种转储清除过程可以针对多个层级的节点继续进行。在一些实施方式中,对于每个层级的节点,指纹条目在子节点之间的分配可以基于应用于指纹的层级移位的位掩码。例如,对于包括四个节点的第一层级,可以基于指纹的第一位和第二位的四种不同组合(例如,00、01、10和11)将指纹条目分配至四个节点。进一步地,对于包括四个节点的第二层级,可以基于指纹的第三位和第四位的四种不同组合将指纹条目分配至四个节点。对于使用来自指纹的连续位对的附加层级,该过程可以继续,其中最后一层使用指纹的最后一对位。以这种方式,每个指纹条目可以被路由到穿过指纹跟踪结构的单条路径,其中,每条路径包括指纹跟踪结构的每层级一个节点。进一步地,当指纹跟踪结构包括具有同一指纹的多个指纹条目时(例如,当多次接收到同一数据单元时),所有这些指纹条目将被存储并沿着同一路径转储清除。在一些实施方式中,如果同一指纹的两个指纹条目存储在同一节点中,则这些重复的指纹条目可以合并为单个指纹条目。
在一些实施方式中,在接收到对特定指纹的跟踪查询时,存储系统可以遍历指纹跟踪结构中的对应路径(即,针对该指纹的单条节点路径),并且可以从存储在所遍历路径中的针对该指纹的指纹条目收集跟踪信息。可以提供收集到的跟踪信息(例如,具有所述指纹的数据单元的量和/或位置)作为对跟踪查询的响应。因此,存储系统可以通过遍历预定义且相对较少数量的节点(即,每树层级一个节点)来处理跟踪查询,而不必详尽地加载和处理大量的重复数据删除元数据(例如,容器索引)。以这种方式,指纹跟踪结构的使用可以提供对跟踪查询的相对快速和高效的处理,并由此可以提高重复数据删除存储系统的性能。下面参考图1至图13进一步讨论所公开的使用指纹跟踪结构的技术。
图1-示例存储系统
图1示出了根据一些实施方式的包括存储控制器110、存储器115和持久性存储装置140的存储系统100的示例。持久性存储装置140可以包括一个或多个非暂态存储介质,如硬盘驱动器(HDD)、固态驱动器(SSD)、光盘等、或其组合。存储器115可以用如随机存取存储器(RAM)等半导体存储器实施。在一些示例中,存储控制器110可以经由硬件(例如,电子电路)或硬件和编程的组合(例如,包括至少一个处理器和可由该至少一个处理器执行并存储在至少一个机器可读存储介质上的指令)来实施。
如图1所示,存储器115可以包括重复数据删除引擎120和指纹跟踪引擎130。如本文所使用的,“引擎”可以指可在硬件处理电路上执行的机器可读指令(例如,存储在至少一个机器可读存储介质上的软件指令和/或固件指令)。例如,重复数据删除引擎120和指纹跟踪引擎130可以被实施为由存储控制器110执行并加载在存储器115中的程序代码。进一步地,在一些实施方式中,用于引擎120、130的程序代码可以存储在持久性存储装置130中。可替代地,“引擎”可以指硬件处理电路(例如,微处理器、多核微处理器的核心、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或另一硬件处理电路的任何或某种组合),或硬件处理电路和机器可读指令的组合。
在一些实施方式中,重复数据删除引擎120可以对所存储数据执行重复数据删除引擎。例如,重复数据删除引擎120可以接收包括多个数据单元的入站数据流105,并且可以以去重形式将每个数据单元的至少一个副本存储为所存储数据122。进一步地,重复数据删除引擎120可以使用所存储的重复数据删除元数据125来根据所存储数据122处理和重构原始数据流125。
在一些实施方式中,重复数据删除引擎120可以生成每个数据单元的指纹。例如,指纹可以包括基于数据单元的完整或部分散列值。为了确定传入数据单元是否是所存储数据单元的复制品,重复数据删除引擎120可以将生成的传入数据单元的指纹与存储在重复数据删除元数据125中(例如,在容器索引中)的指纹进行比较。具有与所存储指纹相匹配的指纹的入站数据单元(在重复数据删除元数据125中)被确定为已经包括在所存储数据122中的先前数据单元的副本,并且重复数据删除引擎120然后将对先前数据单元的引用存储在所存储数据122中(而不是存储重复的传入数据单元)。进一步地,具有与所存储指纹不匹配的指纹的剩余入站数据单元被确定为新数据单元(即,未包括在所存储数据122中)。然后,重复数据删除引擎120将新数据单元添加到所存储数据122中,并更新重复数据删除元数据125以记录关于新数据单元的信息。
在一些实施方式中,重复数据删除元数据125可以包括用于记录数据单元被接收的顺序的清单。每个清单可以包括指示与每个数据单元相关联的容器索引的指针或其他信息。相关联的容器索引可以指示数据单元被存储的位置(例如,偏移量、实体、数据容器等)。容器索引可以包括指示引用每个数据单元的清单数量的引用计数。下面参考图2来讨论这种重复数据删除元数据125的示例实施方式。
在一些实施方式中,当重复数据删除引擎120识别数据流105中的新数据单元(即,具有与重复数据删除元数据125中存储的指纹不匹配的指纹的入站数据单元)时,重复数据删除引擎120可以向指纹跟踪引擎130提供新数据单元的指纹(以及相关联的信息)。在一些实施方式中,指纹跟踪引擎130可以将指纹条目(针对新数据单元的指纹)加载到指纹跟踪结构135中。随后,指纹跟踪引擎130可以接收请求关于特定指纹的跟踪信息的跟踪查询107,并且然后可以使用指纹跟踪结构135来搜索所请求的信息。如果在指纹跟踪结构135中找到所请求的信息,则指纹跟踪引擎130可以在对跟踪查询107的响应中提供所请求的信息(例如,提供给用户、应用程序等)。
在一些实施方式中,指纹跟踪结构135可以被实施为在节点中存储指纹条目的节点树。进一步地,每个指纹条目可以通过穿过节点树的单条节点路径传播,并且每条节点路径可以包括预定义的且相对少量的节点。这样,指纹跟踪引擎130可以通过遍历指纹跟踪结构135中对应于指纹的单条节点路径,并从在所遍历的节点中找到的针对该指纹的任何所存储指纹条目收集跟踪信息,来获得针对该指纹的请求信息(如果可用的话)。以这种方式,指纹跟踪结构135可以用于提供对跟踪查询107的相对快速和高效的处理,并由此可以提高存储系统100的性能。下面参考图3A至图13进一步讨论指纹跟踪结构135的示例实施方式。
应注意,图1图示了示例实施方式,其中,存储系统100使用指纹跟踪结构135和重复数据删除元数据125两者,但是指纹跟踪结构135不用于所存储数据122的重复数据删除。然而,其他实施方式是可能的。例如,在其他实施方式中,指纹跟踪结构135可以用于对所存储数据122进行重复数据删除,而不是使用单独的重复数据删除元数据125(例如,容器索引)。下面参考图5讨论使用指纹跟踪结构135进行重复数据删除的示例实施方式。
图2-示例数据结构
现在参考图2,示出了根据一些实施方式的在重复数据删除中使用的示例数据结构200的图示。如图所示,数据结构200可以包括备份项目元数据202、清单记录210、容器索引220和数据容器250。在一些实施方式中,备份项目元数据202可以包括多个清单记录210。在一些示例中,示例数据结构200可以大体上对应于重复数据删除元数据125(如图1所示)的示例实施方式。在一些示例中,数据结构200可以由存储控制器110(如图1所示)生成和/或管理。
尽管为了简化图2中的图示,每种数据结构仅示出了一个,但是数据结构200可以包括备份项目元数据202的多个实例,每个实例包括或指向一个或多个清单记录210。在这种示例中,数据结构200可以包括多个清单记录210。清单记录210可以引用多个容器索引220,每个容器索引对应于多个容器250之一。每个容器索引220可以包括一个或多个数据单元记录230以及一个或多个实体记录240。
如图2所示,在一些示例中,清单记录210可以包括各种字段,如偏移量、长度、容器索引和单元地址。在一些实施方式中,每个容器索引220可以包括任何数量的数据单元记录230和实体记录240。每个数据单元记录230可以包括各种字段,如指纹(例如,数据单元的散列)、单元地址、实体标识符、单元偏移量(即,数据单元在实体内的偏移量)、引用计数值和单元长度。在一些示例中,引用计数值可以指示引用数据单元记录230的清单记录210的数量。进一步地,每个实体记录240可以包括各种字段,如实体标识符、实体偏移量(即,实体在容器内的偏移量)、存储长度(即,数据单元在实体内的长度)、解压缩长度、校验和值和压缩/加密信息(例如,压缩类型、加密类型等)。在一些实施方式中,每个容器250可以包括任何数量的实体260,并且每个实体260可以包括任何数量的存储的数据单元。
在一个或多个实施方式中,数据结构200可以用于取得存储的去重数据。例如,读取请求可以指定给定文件中数据的偏移量和长度。可以将这些请求参数与特定清单记录210的偏移量和长度字段进行匹配。然后可以将特定清单记录210的容器索引和单元地址与包括在容器索引220中的特定数据单元记录230进行匹配。进一步地,可以将特定数据单元记录230的实体标识符与特定实体记录240的实体标识符进行匹配。此外,可以使用特定实体记录240的一个或多个其他字段(例如,实体偏移量、存储长度、校验和等)来识别容器250和实体260,然后可以从所识别的容器250和实体260中读取数据单元。
图3A至图3C-示例数据结构
图3A示出了根据一些实施方式的示例跟踪节点树300。在一些示例中,跟踪节点树300可以大体上对应于指纹跟踪结构135(如图1所示)的示例实施方式。
如图3A所示,跟踪节点树300可以是包括多个节点320A-320I(在本文中也称为节点320)的数据结构。节点320可以被组织成形成父子关系的各种层级。例如,第一层级可以包括根节点320A,并且第二层级可以包括作为根节点320A的直接子代的四个节点320B-320E。进一步地,第三层级可以包括作为节点320C的直接子代的节点320F-320I。在一些实施方式中,与每个父节点相关的子节点的数量可以由与跟踪节点树300相关联的扇出参数指定。应注意,尽管为了清楚起见未在图3A中示出,但是节点320B和320D-320I中的任何一个都可以包括对应的一组子节点。进一步地,跟踪节点树300可以包括比图3A中图示的更多层级的节点(例如,第四层级、第五层级等等)。
现在参考图3C,在一些实施方式中,每个节点320可以包括用于存储多个指纹条目(“FG条目”)的节点缓冲器325。如本文所使用的,术语“指纹条目”可以指包括新数据单元的单个指纹并且可以包括与新数据单元相关联的其他数据值或字段的数据对象。例如,指纹条目可以包括用于存储新数据单元的指纹、接收新数据单元的时间、包括新数据单元在内的清单的标识符等的字段。根据一些实施方式,下面参考图5描述一些示例指纹条目。
再次参考图3A,所有指纹条目最初可以被加载到根节点320A中。在一些实施方式中,当节点的节点缓冲器325被填充至最大水平或阈值时,存储在该节点缓冲器325中的指纹条目可以被分配在下一个向下层级的节点之中。例如,当根节点320A的节点缓冲器325被填充时,存储在根节点320A中的指纹条目可以被分配在节点320B-320E之中。进一步地,当节点320C的节点缓冲器325被填充时,存储在节点320C中的指纹条目可以被分配在节点320F-320I之中。以这种方式,指纹条目可以向下传播穿过跟踪节点树300。如本文所使用的,“分配”指纹条目是指将指纹条目移动到一组子节点320,使得指纹条目不再存在于源节点320中。
在一些实施方式中,可以基于应用于指纹的层级移位的位掩码将指纹条目分配至一组节点320。例如,现在参考图3B,示出了包括八个位的示例指纹305。在一些实施方式中,可以将位掩码应用于指纹305以阻挡除两个相邻位(例如,位0-1)之外的所有位。进一步地,可以针对跟踪节点树300中向下的每一层级将位掩码上移两位。例如,参考图3A,包括节点320B-320E的第一层级使用位位置0-1的不同组合来分配指纹。如图所示,节点320B接收位位置0-1中具有值“00”的所有指纹条目(从根节点320A转储清除)。类似地,节点320C接收位位置0-1中具有值“01”的所有指纹条目,节点320D接收位位置0-1中具有值“10”的所有指纹条目,并且节点320E接收位位置0-1中具有值“11”的所有指纹条目。
进一步地,包括节点320F-320I的第二层级使用位位置2-3的不同组合来分配指纹。如图所示,节点320F接收位位置2-3中具有值“00”的所有指纹条目(从节点320C转储清除),节点320G接收位位置2-3中具有值“01”的所有指纹条目,节点320H接收位位置2-3中具有值“10”的所有指纹条目,并且节点320I接收位位置2-3中具有值“11”的所有指纹条目。此外,虽然在图3A中未示出,但是跟踪节点树300可以包括与指纹的不同位位置相对应的附加层级,直到使用了所有位位置。例如,跟踪节点树300可以包括使用位位置5-6的不同组合的第三层级,并且还包括使用位位置7-8的不同组合的第四层级。
在一些实施方式中,跟踪节点树300的节点320可以从树结构的顶部到底部以逐步的方式生成。例如,在初始化跟踪节点树300时(例如,在首次使用时),跟踪节点树300可以仅包括根节点320A。下面参考图4A至图4F描述用于生成跟踪节点树300的示例操作。
应注意,虽然图3A至图3C示出了一些示例实施方式,但是其他实施方式也是可能的。例如,跟踪节点树300可以包括任何数量的层级和/或节点,可以使用不同长度的指纹,可以使用不同数量或组合的位位置来路由指纹,等等。
图4A至图4F-用于生成跟踪节点树的示例操作
图4A至图4F图示了根据一些实施方式的用于生成跟踪节点树300的示例操作。现在参考图4A,图示了在第一时间点的跟踪节点树300。跟踪节点树300包括根节点320A。如图所示,根节点320A已经接收到新的指纹条目(“新的FG”),并且因此存储两个指纹条目(每个被图示为阴影矩形)。进一步地,根节点320A具有三个附加指纹条目的剩余容量(每个被图示为空矩形)。
现在参考图4B,图示了在第二时间点的跟踪节点树300。如图所示,根节点320A已经接收到另一个新的指纹条目,并且因此存储五个指纹条目。在图4B的示例中,根节点320A已经达到其指纹条目的最大容量。因此,存储在根节点320A中的指纹条目将被转储清除到跟踪节点树300中的下一层级。
现在参考图4C,图示了在第三时间点的跟踪节点树300。如图4C所示,由于根节点320A先前不具有任何子节点,因此生成新的子节点320B、320D和320E以存储从根节点320A转储清除的五个指纹条目。应注意,在图4C的示例中,没有一个转储清除的指纹条目在其指纹的位位置0-1中包括值“01”。因此,添加到跟踪节点树300的新层级还不包括被分配用于接收在位位置0-1中具有值“01”的指纹条目的节点(例如,图3A中所示的节点320C)。
现在参考图4D,图示了在第四时间点的跟踪节点树300。如图4D所示,根节点320A再次达到其指纹条目的最大容量。因此,存储在根节点320A中的指纹条目将被转储清除到跟踪节点树300中的下一层级。
现在参考图4E,图示了在第五时间点的跟踪节点树300。如图4E所示,两个转储清除的指纹条目在其指纹的位位置0-1中包括值“01”。因此,生成新的子节点320C以将具有值“01”的两个转储清除的指纹条目存储在位位置0-1中。进一步地,在图4E的示例中,节点320D现在已经达到其指纹条目的最大容量。因此,存储在节点320D中的指纹条目将被转储清除到跟踪节点树300中的下一层级。
现在参考图4F,图示了在第六时间点的跟踪节点树300。如图4F所示,由于节点320D先前不具有任何子节点,因此生成新的子节点320J、320K、320L和320M以存储从节点320D转储清除的五个指纹条目。以这种方式,可以将附加节点层级添加到跟踪节点树300,以容纳新的指纹条目,这些指纹条目被加载到根节点320A中,并且然后传播穿过通过跟踪节点树300的层级。
图5-示例数据格式
图5图示了根据一些实施方式的指纹条目的示例数据格式。在一些示例中,指纹条目可以存储在指纹跟踪结构135(如图1所示)中。
如图所示,格式510可以包括用于存储指纹、清单的标识符和数据单元量的字段。指纹可以是通过将函数(例如,散列函数)应用于接收到的数据单元的内容而得到的值。清单标识符可以标识引用接收到的数据单元的清单。在一些实施方式中,清单标识符可以用于确定具有特定指纹的数据单元的所有数据流位置。例如,在接收到请求指定指纹的数据流位置的跟踪查询时,控制器遍历指纹跟踪结构135中对应于指定指纹的单条路径,并收集包括在指定指纹的每个指纹条目中的清单标识符。收集到的清单标识符然后可以用于标识指定指纹的所有数据流位置。
该量值可以指示接收到的数据单元的实例的数量。最初,在生成指纹条目时,可以将量设置为一。随后,如果同一指纹的两个指纹条目被存储在同一节点中,则这两个指纹条目可以被组合成一个指纹条目。在一些实施方式中,组合的指纹条目的量值可以是被组合的两个指纹条目的量值之和。
如图所示,格式520可以包括用于存储指纹、清单的标识符和时间戳的字段。时间戳可以指示存储系统接收数据单元的日期和时间。格式530可以包括用于存储指纹和清单标识符的字段。
如图所示,格式540可以包括用于存储指纹和时间戳的字段。格式550可以包括用于存储指纹和量值的字段。格式560可以仅包括用于存储指纹的单个字段。在一些实施方式中,如果指纹跟踪结构135未被实施为确定指纹的数据流位置,则可以使用不包括清单标识符的格式(例如,格式540、550、560)。例如,指纹跟踪结构135可以被实施为确定具有指定指纹的数据单元是否存储在系统中,但不需要确定所述数据单元的数据流位置。
在一些实施方式中,如果指纹跟踪结构135未被实施为确定具有指定指纹的所存储数据单元的数量,则可以使用不包括量值的格式(例如,格式520、530、540、560)。例如,指纹跟踪结构135可以被实施为确定具有指定指纹的任何数据单元是否存储在系统中,但不需要确定所存储数据单元的量。
如图所示,格式570可以包括用于存储指纹、位置和量值的字段。格式580可以包括用于存储指纹、清单标识符、位置标识符和量值的字段。位置标识符可以指示数据单元(例如,数据容器、偏移量等)的存储位置。在一些实施方式中,如果指纹跟踪结构135被实施为对所存储数据单元执行重复数据删除(例如,而不是使用容器索引执行重复数据删除),则可以使用包括位置标识符的格式(例如,格式570、580)。例如,在使用跟踪节点树300(如图3A所示)来对数据单元执行重复数据删除的存储系统中,为在数据流中接收的所有数据单元创建指纹条目。每个指纹条目被加载到根节点320A中,并且随后沿着单条节点路径向下传播穿过跟踪节点树300。如果同一指纹的两个指纹条目存储在同一节点320中,则在存储系统中对由这两个指纹条目表示的数据单元进行重复数据删除。在这种实施方式中,使用这两个指纹条目中的一个指纹条目中的位置标识符从持久性存储装置中删除对应的数据单元,从而留下一个去重数据单元(其由两个指纹条目中的另一个指纹条目中的位置标识符标识)。进一步地,两个指纹条目可以被组合成一个指纹条目,并且组合的指纹条目的量值可以是被组合的两个指纹条目的量值之和。此外,如果指纹条目包括清单标识符(例如,格式580),则组合的指纹条目可以包括来自被组合的两个指纹条目的清单标识符。
图6A至图6E-用于存储指纹条目的示例操作
图6A至图6E图示了根据一些实施方式的用于在节点缓冲器325中存储新的指纹条目(“新的FG”)的各种示例操作。节点缓冲器325可以包括在跟踪节点树300(如图3A所示)的节点320中。
现在参考图6A,节点缓冲器325存储指纹“A”和“X”的两个先前指纹条目,并且加载有指纹“A”的新的指纹条目。在一些实施方式中,在确定同一指纹的两个指纹条目存储在同一节点缓冲器325中时,控制器可以将这两个指纹条目组合成一个指纹条目。例如,如图6A所示,指纹“A”的两个指纹条目被组合成一个指纹条目,并且组合的指纹条目的量值(“2”)是被组合的这两个指纹条目的量值之和。进一步地,在一些实施方式中,指纹“A”的组合的指纹条目包括来自被组合的两个指纹条目的所有清单标识符(例如,“MA:1”和“MA:3”)。
现在参考图6B,在确定指纹“A”的两个指纹条目存储在同一节点缓冲器325中时,控制器将这两个指纹条目组合成一个指纹条目。如图所示,组合的指纹条目包括来自被组合的两个指纹条目的所有时间戳值(例如,“TS:t1”和“TS:t5”)。
现在参考图6C,在确定指纹“A”的两个指纹条目存储在同一节点缓冲器325中时,控制器将这两个指纹条目组合成一个指纹条目。如图所示,组合的指纹条目的量值(“2”)是被组合的两个指纹条目的量值之和。
在其他实施方式中,如果同一指纹的两个指纹条目被存储在同一节点缓冲器325中,则这两个指纹条目可以不被组合。例如,现在参考图6D,指纹“A”的两个指纹条目作为单独的指纹条目存储在节点缓冲器325中。
在一些实施方式中,当数据单元被删除或以其他方式从存储系统中移除时,表示被删除的数据单元的指纹条目可以从跟踪节点树300中移除。该移除可以通过插入新的指纹条目来执行,所述新的指纹条目与要移除的指纹条目相匹配,但包括要移除的指纹条目的量值的相反数(即,负版本)。例如,现在参考图6E,节点缓冲器325存储具有指纹“A”、清单标识符“MA:1”和量值“1”的第一指纹条目。如果要从跟踪节点树300中删除第一指纹条目(例如,当由第一指纹条目表示的数据单元已被删除时),则节点缓冲器325加载有具有指纹“A”、清单标识符“MA:1”和量值“-1”的第二指纹条目(即,“1”的相反数)。因此,当第一指纹条目和第二指纹条目被组合时,得到的量值是“0”。如图6E所示,在一些实施方式中,可以从节点缓冲器325中删除量值为“0”的指纹条目。以这种方式,可以从跟踪节点树300中移除表示被删除的数据单元的指纹条目。
图7-用于生成指纹跟踪结构的示例过程
图7示出了根据一些实施方式的用于生成指纹跟踪结构的示例过程700。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1至图6E描述过程700的细节。然而,其他实施方式也是可能的。在一些示例中,可以使用存储控制器110(图1所示)来执行过程700。可以以硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)的方式来实施过程700。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。
框710可以包括接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元。框720可以包括生成接收到的数据单元的指纹。例如,参考图1至图2,重复数据删除引擎120接收包括多个数据单元的数据流105,并且可以将每个数据单元的至少一个副本存储在数据容器250中。重复数据删除引擎120生成每个数据单元的指纹(例如,完整或部分散列值)。
框730可以包括将生成的指纹与存储在重复数据删除存储系统的容器索引中的指纹进行匹配。框740可以包括识别要存储在重复数据删除存储系统的容器索引中的生成的指纹的子集。框750可以包括将生成的指纹的子集存储在重复数据删除存储系统的至少一个容器索引中。例如,参考图1至图2,重复数据删除引擎120将为传入数据单元生成的指纹与存储在容器索引220中的指纹进行比较。具有与容器索引220中的所存储指纹相匹配的指纹的入站数据单元被确定为已经包括在所存储数据122中的先前数据单元的副本,并且重复数据删除引擎120然后将对先前数据单元的引用存储在所存储数据122中(而不是存储重复的传入数据单元)。进一步地,具有与所存储指纹不匹配的指纹的剩余入站数据单元被确定为新数据单元。重复数据删除引擎120将新数据单元存储在所存储数据122中,并更新重复数据删除元数据125以记录关于新数据单元的信息。
框760可以包括将生成的指纹的子集的指纹条目加载在指纹跟踪结构的根节点的缓冲器中。在框760之后,过程700可以完成。例如,参考图1至图3,指纹跟踪引擎130将指纹的子集的一组指纹条目加载到跟踪节点树300的根节点320A中。
图8-用于生成指纹跟踪结构的示例过程
图8示出了根据一些实施方式的用于生成指纹跟踪结构的示例过程800。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1至图6E描述过程800的细节。然而,其他实施方式也是可能的。在一些示例中,可以使用存储控制器110(图1所示)来执行过程800。可以以硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)的方式来实施过程800。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。
框810可以包括接收新的所存储数据单元的指纹。框820可以包括将指纹条目存储在第一节点的节点缓冲器中。决策框830可以包括确定第一节点的节点缓冲器是否已经达到阈值水平。如果否,则过程800可以返回到框810(即,继续新的所存储数据单元的指纹)。否则,如果第一节点的节点缓冲器已经达到阈值水平,则过程800可以在框840处继续,包括将指纹条目从第一节点的节点缓冲器分配至子节点的节点缓冲器。
例如,参考图1至图3A,指纹跟踪引擎130继续将指纹条目加载到根节点320A的节点缓冲器325中。当根节点320A的节点缓冲器325被填充至最大水平时,存储在根节点320A的节点缓冲器325中的指纹条目会被分配在节点320B-320E之中。在另一示例中,当节点320C的节点缓冲器325被填充至最大水平时,存储在节点320C中的节点缓冲器325中的指纹条目会被分配在节点320F-320I之中。在一些实施方式中,可以基于应用于每个指纹条目的指纹的层级移位的位掩码将指纹条目分配至一组子节点320。
图9-用于执行跟踪查询的示例过程
图9示出了根据一些实施方式的用于执行跟踪查询的示例过程900。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1至图6E描述过程900的细节。然而,其他实施方式也是可能的。在一些示例中,可以使用存储控制器110(图1所示)来执行过程900。可以以硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)的方式来实施过程900。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。
框910可以包括接收对特定指纹的跟踪查询。框920可以包括遍历指纹跟踪结构中的指纹的路径。框930可以包括从存储在所遍历路径中的每个指纹条目收集查询数据。框940可以包括返回收集到的查询数据。在框940之后,过程900可以完成。
例如,参考图1至图3A,指纹跟踪引擎130接收请求关于特定指纹的跟踪信息的跟踪查询107。作为响应,指纹跟踪引擎130遍历跟踪节点树300中对应于特定指纹的单条节点路径(即,一组节点320),并从遍历节点中找到的该指纹的每个指纹条目收集跟踪信息。指纹跟踪引擎130然后在对跟踪查询107的响应中提供该收集的跟踪信息(例如,提供给用户、应用程序等)。
图10A至图10C-用于记录节点更新的示例操作
图10A至图10C图示了根据一些实施方式的用于记录节点更新的示例操作。现在参考图10A,图示了在第一时间点的跟踪节点树300。跟踪节点树300包括父节点320A和四个子节点320B-320E。如图所示,父节点320A已经达到其指纹条目的最大容量(例如,五个),并且因此所存储的指纹条目将从父节点320A分配。
在一些示例中,如果将指纹条目直接分配至子节点320B-320E,则子节点320B-320E首先从持久性存储装置140加载(例如,使用读取I/O)到存储器115(如图1所示)中,并且然后被更新以包括从根节点320A分配的其相应的多组指纹条目。一旦被更新,子节点320B-320E就可以从存储器115被写回到持久性存储装置140(例如,使用写入I/O)。可以针对从父节点320A对指纹条目的每个分配重复该更新过程。因此,由于该重复更新过程涉及子节点320B-320E的多个读取I/O和写入I/O,因此重复更新过程可能消耗相对大量的系统处理时间和带宽,从而可能降低存储系统的性能。
在一些实施方式中,代替将指纹条目直接分配至子节点320B-320E,指纹条目可以被临时存储在节点日志1010中。一旦节点日志1010达到最大存储容量,就可以将存储在节点日志1010中的指纹条目分配至适当的子节点320B-320E。
例如,参考图10B,父节点320A已经四次达到其指纹条目的最大存储容量,并且因此已经将四组指纹条目转移到节点日志1010中。进一步地,节点日志1010现在已经达到其四组指纹条目的最大存储容量。因此,如图10C所示,将存储在节点日志101中的指纹条目分配至子节点320B-320E(例如,基于指纹的位值)。以这种方式,存储多个指纹条目所需的子节点320B-320E的读取I/O和写入I/O的数量可以小于将相同数量的指纹条目直接分配至子节点320B-320E时所需的读取I/O和写入I/O的数量。因此,使用节点日志1010可以减少处理节点更新所需的系统处理时间和带宽的量。
图11-示例机器可读介质
图11示出了根据一些实施方式的存储有指令1110-1150的机器可读介质1100。指令1110-1150可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。机器可读介质1100可以是非暂态存储介质,如光学存储介质、半导体存储介质或磁性存储介质。
可以执行指令1110以接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元流。可以执行指令1120以生成数据单元流中的每个数据单元的指纹。可以执行指令1130以识别要存储在多个容器索引中的一组指纹,所述多个容器索引包括指示存储在重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据。
可以执行指令1140以将所识别的一组指纹存储在多个容器索引中的至少一个容器索引中。可以执行指令1150以将所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,所述指纹跟踪结构用于标识存储在重复数据删除存储系统的持久性存储装置中的每个数据单元。
图12-示例过程
图12示出了根据一些实施方式的示例过程1200。在一些示例中,可以使用存储控制器110(图1所示)来执行过程1200。可以以硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)的方式来实施过程1200。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。
框1210可以包括由重复数据删除存储系统的存储控制器接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元流。框1220可以包括由存储控制器生成数据单元流中的每个数据单元的指纹。
框1230可以包括由存储控制器识别要存储在多个容器索引中的一组指纹,所述多个容器索引包括指示存储在重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据。框1240可以包括由存储控制器将所识别的一组指纹存储在多个容器索引中的至少一个容器索引中。框1250可以包括由存储控制器将所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,所述指纹跟踪结构用于标识存储在重复数据删除存储系统的持久性存储装置中的每个数据单元。
图13-示例计算设备
图13示出了示例计算设备1300的示意图。在一些示例中,计算设备1300可以大体上对应于存储系统100(如图1所示)的一些或全部。如图所示,计算设备1300可以包括硬件处理器1302、存储器1304以及包括指令1310-1350的机器可读存储装置1305。机器可读存储装置1305可以是非暂态介质。指令1310-1350可以由硬件处理器1302或者由硬件处理器1302中所包括的处理引擎执行。
可以执行指令1310以接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元流。可以执行指令1320以生成数据单元流中的每个数据单元的指纹。可以执行指令1330以识别要存储在多个容器索引中的一组指纹,所述多个容器索引包括指示存储在重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据。
可以执行指令1340以将所识别的一组指纹存储在多个容器索引中的至少一个容器索引中。可以执行指令1350以将所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,所述指纹跟踪结构用于标识存储在重复数据删除存储系统的持久性存储装置中的每个数据单元。
根据本文所述的实施方式,存储系统可以包括重复数据删除元数据和指纹跟踪结构。存储系统可以使用重复数据删除元数据来对接收到的数据单元进行重复数据删除。新数据单元的指纹可以包括在加载在指纹跟踪结构中的指纹条目中。在一些实施方式中,每个指纹条目包括单个指纹,并且每个指纹条目沿基于该指纹条目中包括的单个指纹穿过指纹跟踪结构的节点路径被路由。每条节点路径可以包括指纹跟踪结构的每层级一个节点。进一步地,如果同一指纹的两个指纹条目存储在同一节点中,则这些重复的指纹条目可以合并为单个指纹条目。在一些实施方式中,在接收到对特定指纹的跟踪查询时,存储系统可以遍历跟踪树结构中的对应路径,并且可以从存储在所遍历路径中的针对该指纹的指纹条目收集跟踪信息。以这种方式,指纹跟踪结构的使用可以提供对跟踪查询的相对快速和高效的处理,并由此可以提高重复数据删除存储系统的性能。
应注意,尽管图1至图13示出了各种示例,但是实施方式在这方面不受限制。例如,参考图1,可以设想存储系统100可以包括附加的设备和/或部件、更少的部件、不同的部件、不同的布置等。在另一示例中,可以设想上述存储控制器110的功能可以被包括在存储系统100的任何另一引擎或软件中。其他组合和/或变化也是可能的。
数据和指令存储在被实施为一个或多个计算机可读或机器可读存储介质的相应存储设备中。存储介质包括不同形式的非暂态存储器,包括:半导体存储器设备,如动态随机存取存储器或静态随机存取存储器(DRAM或SRAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和闪速存储器;磁盘,如固定的软盘和可移动盘;其他磁性介质,包括磁带;光学介质,如光盘(CD)或数字视频盘(DVD);或者其他类型的存储设备。
注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这种一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质可以位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从所述远程站点下载机器可读指令以供执行。
在前述描述中,阐述了许多细节以使得理解本文中所公开的主题。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在覆盖这样的修改和变化。
Claims (20)
1.一种计算设备,包括:
处理器;
存储器;以及
存储有指令的机器可读存储装置,所述指令能够由所述处理器执行以进行以下操作:
接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元流;
生成所述数据单元流中的每个数据单元的指纹;
识别要存储在多个容器索引中的一组指纹,所述多个容器索引包括指示存储在所述重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据;
将所识别的一组指纹存储在所述多个容器索引中的至少一个容器索引中;以及
将所述所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,所述指纹跟踪结构用于标识存储在所述重复数据删除存储系统的持久性存储装置中的每个数据单元。
2.如权利要求1所述的计算设备,包括能够由所述处理器执行以进行以下操作的指令:
将所述指纹条目存储在所述根节点的节点缓冲器中;
确定存储在所述根节点的节点缓冲器中的一组指纹条目是否超过阈值水平;以及
响应于确定存储在所述根节点的节点缓冲器中的所述一组指纹条目超过阈值水平,将存储在所述根节点的节点缓冲器中的所述一组指纹条目分配至多个子节点的节点缓冲器。
3.如权利要求2所述的计算设备,包括能够由所述处理器执行以进行以下操作的指令:
基于应用于所述指纹的层级移位的位掩码来分配所述指纹条目。
4.如权利要求1所述的计算设备,其中,每个指纹条目包括单个指纹,其中,每个指纹条目沿基于包括在该指纹条目中的所述单个指纹穿过所述指纹跟踪结构的节点路径被路由,并且其中,每条节点路径包括所述指纹跟踪结构的每层级一个节点。
5.如权利要求4所述的计算设备,包括能够由所述处理器执行以进行以下操作的指令:
响应于接收到对第一指纹的跟踪查询,遍历所述指纹跟踪结构中与所述第一指纹相关联的节点路径;
从所述第一指纹的存储在所遍历路径中的每个指纹条目收集跟踪信息;以及
提供收集到的跟踪信息作为对所述跟踪查询的响应,其中,所述收集到的跟踪信息包括具有所述第一指纹的数据单元的量和位置中的至少一者。
6.如权利要求1所述的计算设备,包括能够由所述处理器执行以进行以下操作的指令:
响应于确定同一指纹的两个指纹条目存储在节点缓冲器中,将所述两个指纹条目组合成组合的指纹条目。
7.如权利要求6所述的计算设备,其中,所述组合的指纹条目包括所述两个指纹条目中包括的所有清单标识符,并且其中,所述组合的指纹条目还包括量值,所述量值等于来自所述两个指纹条目的两个质量值之和。
8.如权利要求1所述的计算设备,包括能够由所述处理器执行以进行以下操作的指令:
将第一指纹条目加载在所述指纹跟踪结构的根节点中,所述第一指纹条目包括存储在所述重复数据删除存储系统中的第一数据单元的第一指纹,所述第一指纹条目还包括第一量值;
检测从所述重复数据删除存储系统中对所述第一数据单元的删除;以及
响应于检测到对所述第一数据单元的删除,将第二指纹条目加载在所述指纹跟踪结构的根节点中,所述第二指纹条目包括所述第一数据单元的第一指纹,所述第二指纹条目还包括第二量值,所述第二量值等于所述第一量值的相反数。
9.如权利要求1所述的计算设备,包括能够由所述处理器执行以进行以下操作的指令:
将所述指纹条目存储在所述根节点的节点缓冲器中;
确定存储在所述根节点的节点缓冲器中的第一组指纹条目是否超过第一阈值水平;
响应于确定存储在所述根节点的节点缓冲器中的所述一组指纹条目超过所述第一阈值水平,将所述指纹条目转移到节点日志;
确定存储所述节点日志的一组指纹条目是否超过第二阈值水平;以及
响应于确定存储所述节点日志的所述一组指纹条目超过第二阈值水平,将存储在所述节点日志中的第二组指纹条目分配至多个子节点的节点缓冲器。
10.一种方法,包括:
由重复数据删除存储系统的存储控制器接收要存储在所述重复数据删除存储系统的持久性存储装置中的数据单元流;
由所述存储控制器生成所述数据单元流中的每个数据单元的指纹;
由所述存储控制器识别要存储在多个容器索引中的一组指纹,所述多个容器索引包括指示存储在所述重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据;
由所述存储控制器将所识别的一组指纹存储在所述多个容器索引中的至少一个容器索引中;以及
由所述存储控制器将所述所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,所述指纹跟踪结构用于标识存储在所述重复数据删除存储系统的持久性存储装置中的每个数据单元。
11.如权利要求10所述的方法,进一步包括:
将所述指纹条目存储在所述根节点的节点缓冲器中;
确定存储在所述根节点的节点缓冲器中的一组指纹条目是否超过阈值水平;以及
响应于确定存储在所述根节点的节点缓冲器中的所述一组指纹条目超过阈值水平,将存储在所述根节点的节点缓冲器中的所述一组指纹条目分配至多个子节点的节点缓冲器。
12.如权利要求10所述的方法,其中,每个指纹条目包括单个指纹,其中,每个指纹条目沿基于包括在该指纹条目中的所述单个指纹穿过所述指纹跟踪结构的节点路径被路由,并且其中,每条节点路径包括所述指纹跟踪结构的每层级一个节点。
13.如权利要求12所述的方法,进一步包括:
接收对第一指纹的跟踪查询;
响应于接收到对所述第一指纹的所述跟踪查询,遍历所述指纹跟踪结构中与所述第一指纹相关联的节点路径;
从所述第一指纹的存储在所遍历路径中的每个指纹条目收集跟踪信息;以及
提供收集到的跟踪信息作为对所述跟踪查询的响应,其中,所述收集到的跟踪信息包括具有所述第一指纹的数据单元的量和位置中的至少一者。
14.如权利要求10所述的方法,进一步包括:
确定同一指纹的两个指纹条目存储在节点缓冲器中;以及
响应于确定所述同一指纹的两个指纹条目存储在所述节点缓冲器中,将所述两个指纹条目组合成组合的指纹条目,其中,所述组合的指纹条目包括所述两个指纹条目中包括的所有清单标识符,并且其中,所述组合的指纹条目还包括量值,所述量值等于来自所述两个指纹条目的两个质量值之和。
15.如权利要求10所述的方法,进一步包括:
将第一指纹条目加载在所述指纹跟踪结构的根节点中,所述第一指纹条目包括存储在所述重复数据删除存储系统中的第一数据单元的第一指纹,所述第一指纹条目还包括第一量值;
检测从所述重复数据删除存储系统中对所述第一数据单元的删除;以及
响应于检测到对所述第一数据单元的删除,将第二指纹条目加载在所述指纹跟踪结构的根节点中,所述第二指纹条目包括所述第一数据单元的第一指纹,所述第二指纹条目还包括第二量值,所述第二量值等于所述第一量值的相反数。
16.一种存储有指令的非暂态机器可读介质,所述指令在执行时使处理器进行以下操作:
接收要存储在重复数据删除存储系统的持久性存储装置中的数据单元流;
生成所述数据单元流中的每个数据单元的指纹;
识别要存储在多个容器索引中的一组指纹,所述多个容器索引包括指示存储在所述重复数据删除存储系统的持久性存储装置中的数据单元的存储位置的元数据;
将所识别的一组指纹存储在所述多个容器索引中的至少一个容器索引中;以及
将所述所识别的一组指纹的指纹条目加载在指纹跟踪结构的根节点中,所述指纹跟踪结构用于标识存储在所述重复数据删除存储系统的持久性存储装置中的每个数据单元。
17.如权利要求16所述的非暂态机器可读介质,包括能够由所述处理器执行以进行以下操作的指令:
将所述指纹条目存储在所述根节点的节点缓冲器中;
确定存储在所述根节点的节点缓冲器中的一组指纹条目是否超过阈值水平;以及
响应于确定存储在所述根节点的节点缓冲器中的所述一组指纹条目超过阈值水平,将存储在所述根节点的节点缓冲器中的所述一组指纹条目分配至多个子节点的节点缓冲器。
18.如权利要求16所述的非暂态机器可读介质,其中,每个指纹条目包括单个指纹,其中,每个指纹条目沿基于包括在该指纹条目中的所述单个指纹穿过所述指纹跟踪结构的节点路径被路由,并且其中,每条节点路径包括所述指纹跟踪结构的每层级一个节点。
19.如权利要求18所述的非暂态机器可读介质,包括能够由所述处理器执行以进行以下操作的指令:
响应于接收到对第一指纹的跟踪查询,遍历所述指纹跟踪结构中与所述第一指纹相关联的节点路径;
从所述第一指纹的存储在所遍历路径中的每个指纹条目收集跟踪信息;以及
提供收集到的跟踪信息作为对所述跟踪查询的响应,其中,所述收集到的跟踪信息包括具有所述第一指纹的数据单元的量和位置中的至少一者。
20.如权利要求16所述的非暂态机器可读介质,包括能够由所述处理器执行以进行以下操作的指令:
响应于确定同一指纹的两个指纹条目存储在节点缓冲器中,将所述两个指纹条目组合成组合的指纹条目,其中,所述组合的指纹条目包括所述两个指纹条目中包括的所有清单标识符,并且其中,所述组合的指纹条目还包括量值,所述量值等于来自所述两个指纹条目的两个质量值之和。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US18/050,626 US20240143213A1 (en) | 2022-10-28 | 2022-10-28 | Fingerprint tracking structure for storage system |
US18/050,626 | 2022-10-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117950574A true CN117950574A (zh) | 2024-04-30 |
Family
ID=90731947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310788894.4A Pending CN117950574A (zh) | 2022-10-28 | 2023-06-30 | 用于存储系统的指纹跟踪结构 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240143213A1 (zh) |
CN (1) | CN117950574A (zh) |
DE (1) | DE102023116322A1 (zh) |
-
2022
- 2022-10-28 US US18/050,626 patent/US20240143213A1/en active Pending
-
2023
- 2023-06-21 DE DE102023116322.1A patent/DE102023116322A1/de active Pending
- 2023-06-30 CN CN202310788894.4A patent/CN117950574A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102023116322A1 (de) | 2024-05-08 |
US20240143213A1 (en) | 2024-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9430164B1 (en) | Memory efficient sanitization of a deduplicated storage system | |
US9317218B1 (en) | Memory efficient sanitization of a deduplicated storage system using a perfect hash function | |
US9424185B1 (en) | Method and system for garbage collection of data storage systems | |
US9043334B2 (en) | Method and system for accessing files on a storage system | |
US9367448B1 (en) | Method and system for determining data integrity for garbage collection of data storage systems | |
US8843454B2 (en) | Elimination of duplicate objects in storage clusters | |
EP2324440B1 (en) | Providing data structures for determining whether keys of an index are present in a storage system | |
US9715505B1 (en) | Method and system for maintaining persistent live segment records for garbage collection | |
US9594674B1 (en) | Method and system for garbage collection of data storage systems using live segment records | |
US7577808B1 (en) | Efficient backup data retrieval | |
US9280570B2 (en) | System and method for deletion compactor for large static data in NoSQL database | |
US11494334B2 (en) | Embedded reference counts for file clones | |
CN113535670B (zh) | 一种虚拟化资源镜像存储系统及其实现方法 | |
US9195692B2 (en) | Information processing system | |
CN111104377B (zh) | 文件管理的方法、电子设备和计算机可读存储介质 | |
US11556513B2 (en) | Generating snapshots of a key-value index | |
JP4825719B2 (ja) | 高速ファイル属性検索 | |
US8156126B2 (en) | Method for the allocation of data on physical media by a file system that eliminates duplicate data | |
CN117950574A (zh) | 用于存储系统的指纹跟踪结构 | |
TWI475419B (zh) | 用於在儲存系統上存取檔案的方法和系統 | |
US12061581B2 (en) | Matching operation for a deduplication storage system | |
US20240037034A1 (en) | Data intake buffers for deduplication storage system | |
CN117493290A (zh) | 存储系统中日志分组的迁移 | |
Bobbarjung | Improving the performance of highly reliable storage systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |