用于分割哈希值计算的向量处理的制作方法

文档序号:13352167阅读:312来源:国知局
用于分割哈希值计算的向量处理的制作方法



背景技术:

本发明的一些实施例涉及输入数据流的分割,更具体地但不仅限于,涉及采用向量分割输入数据流。

当今是信息时代,需要在各地之间存储和/或传输的数据量迅速增加。考虑到用于存储数据的存储空间和/或用于传输数据的网络带宽,巨大的数据量可能主要带来成本和/或复杂性的挑战。

常用于减少存储和/或传输的数据的量的一种解决方案是重复数据删除(通常称为“智能压缩”或“单实例存储”),其是通过消除冗余数据来减少数据量的方法。虽然存在用于重复文件删除的方法,但是考虑到数据压缩,块重复删除可以呈现更好的结果。在块重复删除中,实际上只保留数据流的数据段(块)的唯一一个实例,而与已经保留的数据段相同的冗余数据段替换为指向保留数据段的副本的指针。块重复删除处理可以为多个数据类型之一,例如,数据文件、媒体文件、流数据等的数据流,以识别一个或多个数据段(块)的唯一实例。采用哈希算法为每个分段生成唯一的数(哈希值)。为此,通常使用密码强度哈希算法,例如md5和/或sha-1。将针对每个分段生成的哈希值与针对先前分段生成的现有哈希值进行比较,并且当该哈希值等于现有哈希值,则该分段不保留,而由指向现有分段的副本的指针替代。此外,当该分段更新,可仅保留改变的数据,而不保留可能包括大量这种分段的剩余未改变数据。

主要挑战之一是有效地分割数据流,以使对分段的数据内容的改变尽可能少地影响分段。如业内已知,滚动哈希技术可以用于对数据流进行分割。使用滚动哈希,计算在数据流中对数据序列进行移位的哈希值(在每个滚动序列中删除结束数据项并插入新数据项)。检查所计算的哈希值是否符合预定义的一个或多个分割标准,且当识别出符合,将各个滚动序列的末端指定为分段边界或切割点。



技术实现要素:

根据本发明的第一方面,提供一种采用向量分割输入数据流的系统,包括:处理器,用于在整个输入数据流中重复以下步骤以创建包括多个分段的分割的数据流:在输入数据流的连续数据项的序列上应用滚动序列,其中,所述滚动序列包括所述序列的连续数据项的子集;由所述处理器的处理管线为多个部分滚动序列同时计算部分哈希值,其中,每个部分滚动序列包括所述子集的间隔均匀的数据项;确定所述多个部分哈希值中的每一个对至少一个相应的部分分割标准的符合性;当所述多个部分哈希值中的至少一些符合相应的至少一个部分分割标准时,将所述序列指定为可变长度分段。

术语“同时”因此具有在持续时间中重叠的含义,还包括同时的,例如,发生在同一时间的含义。

在本发明第一方面的第一种实现方式中,所述处理器是单指令多数据(single-instruction-multipledata,简称simd)处理器。

根据第一方面的第一种实现方式,在第一方面的第二种实现方式中,所述处理器用于使用相应的先前部分滚动序列的部分哈希值、从所述相应部分滚动序列中删除的删除数据项以及添加到所述相应部分滚动序列中的添加数据项来计算所述多个部分哈希值中的每一个作为部分滚动哈希值。

根据第一方面的第一或第二种实现方式中的任一种实现方式,在第一方面的第三种实现方式中,所述处理器用于:当针对符合所述相应的至少一个部分分割标准的序列的连续子集计算的连续的符合部分哈希值的数量超过多个部分滚动序列的数量时,将所述序列指定为可变长分段。

根据第一方面的第一至第三种实现方式中的任一种实现方式,在第一方面的第四种实现方式中,所述序列包括预定义的最少连续数据项。

根据第一方面的第一至第四种实现方式中的任一种实现方式,在第一方面的第五种实现方式中,当在检测到所述部分哈希值对所述相应的至少一个部分分割标准的符合性之前,所述多个序列中的至少一个大序列的大小超过预定义最大值,所述处理器用于将所述大序列指定为可变长度分段。

根据本发明的第二方面,提供一种采用向量分割输入数据流的方法,包括:处理器在整个输入数据流中重复以下步骤以创建包括多个分段的分割的数据流:在输入数据流的连续数据项的序列上应用滚动序列,其中,所述滚动序列包括所述序列的连续数据项的子集;处理器的处理管线为多个部分滚动序列同时计算部分哈希值,其中,每个部分滚动序列包括所述子集的间隔均匀的数据项;确定所述多个部分哈希值中的每一个对至少一个相应的部分分割标准的符合性;当所述多个部分哈希值中的至少一些符合相应的至少一个部分分割标准时,将所述序列指定为可变长分段。

在本发明第二方面的第一种实现方式中,使用相应的先前部分滚动序列的部分哈希值、从所述相应部分滚动序列中删除的删除数据项以及添加到所述相应部分滚动序列中的添加数据项来计算所述多个部分哈希值中的每一个作为部分滚动哈希值。

根据第二方面的第一种实现方式,在第二方面的第二种实现方式中,当针对符合所述相应的至少一个部分分割标准的序列的连续子集计算的连续的符合部分哈希值的数量超过多个部分滚动序列的数量时,将所述序列指定为可变长分段。

根据第二方面的第一或第二种实现方式中的任一种实现方式,在第二方面的第三种实现方式中,所述序列包括预定义的最少连续数据项。

根据第二方面的第一至第三种实现方式中的任一种实现方式,在第二方面的第四种实现方式中,当在检测所述部分哈希值对所述相应的至少一个部分分割标准的符合性之前,所述多个序列中的至少一个大序列的大小超过预定义最大值,将所述大序列指定为可变大小分段。

附图说明

此处仅作为示例,结合附图描述了本发明的一些实施例。现在具体结合附图,需要强调的是所示的项目作为示例,为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。

在附图中:

图1是本发明一些实施例采用向量分割输入数据流的示例性系统的示意图;

图2是本发明一些实施例采用向量分割输入数据流的示例性过程的流程图;

图3a是计算用于分割输入数据流的滚动哈希值的示例性过程的示意图;

图3b是计算用于分割输入数据流的滚动哈希值的示例性过程的示意图;

图3c是计算用于分割输入数据流的滚动哈希值的示例性公式;

图4a是本发明一些实施例计算用于采用向量来分割输入数据流的部分滚动哈希值的示例性过程的示意图;

图4b是本发明一些实施例计算用于采用向量来分割输入数据流的部分滚动哈希值的示例性过程的示意图;

图4c是本发明一些实施例用于分割输入数据流的部分滚动哈希值计算的示例性公式的示意图;

图5a是本发明一些实施例部分滚动哈希值符合部分分割标准的示例性过程的示意图;

图5b是本发明一些实施例部分滚动哈希值符合部分分割标准的示例性过程的示意图;

图5c是本发明一些实施例部分滚动哈希值符合部分分割标准的示例性过程的示意图;

图5d是本发明一些实施例部分滚动哈希值符合部分分割标准的示例性过程的示意图。

具体实施方式

本发明的一些实施例涉及输入数据流的分割,更具体地但不仅限于,涉及采用向量分割输入数据流。

本发明提供一种分割输入数据流的系统和方法,采用向量作为应用于输入数据流的重复删除过程的一部分,以便通过去除冗余(重复的)数据段减少输入数据流的数据量。执行用于减少输入数据流例如,数据文件、媒体文件、流数据等的数据量的重复删除过程,以便减少存储和/或传输输入数据流所需的存储空间和/或网络带宽。分割通过以下方式实现:并发或同时处理构成滚动序列的多个部分滚动序列,所述滚动序列逐渐在连续数据项的序列中移位,例如输入数据流的字节、字、双字和/或像素。同时处理部分滚动序列以计算每个部分滚动序列的部分滚动哈希值。在一个或多个向量处理器,例如单指令多数据(singleinstructionmultipledata,简称simd)处理器的多个处理管线中计算多个部分滚动的每一个的哈希值。虽然滚动序列包括序列的连续数据项的子集,多个部分滚动序列中的每一个包括滚动序列的子集的间隔均匀的数据项。当针对每个部分滚动序列计算的部分滚动哈希值的至少一些符合(满足)相应的一个或多个部分分割标准,可以将该序列指定为可变长分段。对整个输入数据流中的多个后续滚动序列重复该过程以创建分割的数据流,其中,每个滚动序列在先前滚动序列的末端开始。

与现有的顺序分割方法相比,采用向量同时分割可能呈现显著的优点。向量处理技术在许多方面迅速发展,例如,在现代处理器中可用的处理管线的数量、可以并行处理的数据项的数量和/或处理器的处理能力。虽然输入数据流的有效分割可能对整个重复删除过程的有效性做出了主要贡献,但该分割可能是重复删除过程中主要的耗时操作和/或处理器密集操作之一。由于在计算滚动序列的哈希值时可以将输入序列的数据项视为彼此独立的,因此作为分割过程的一部分,对部分滚动序列的同时处理可以充分利用向量处理技术,例如具有simd引擎的处理器。与当前分割方法所采用的顺序分割相比,采用向量处理器处理输入数据流可以显著减少分割时间。随着分割时间显著减少,整个重复删除过程可以显著缩短,并且可能去除数据传输和/或数据存储操作中的瓶颈。

在详细解释本发明的至少一个实施例之前,应当理解,本发明不必将其应用限于在下面的描述中阐述的和/或在附图和/或实施例中说明的部件和/或方法的结构和布置的细节。本发明可以有其他实施例或可以采用各种方式实践或执行。

本发明可以是系统、方法和/或计算机程序产品。所述计算机程序产品可以包括具有计算机可读程序指令的一个(或多个)计算机可读存储介质,所述指令用于使处理器执行本发明的各个方面。

所述计算机可读存储介质可以是有形设备,该有形设备可以保存和存储指令执行设备使用的指令。例如,所述计算机可读存储介质可以是但不限于电子存储设备、磁性存储设备、光存储设备、电磁存储设备、半导体存储设备或这几者的任意合适组合。

可以从计算机可读存储介质中将此处描述的计算机可读程序指令下载到各个计算/处理设备上,或通过网络下载到外部计算机或外部存储设备上,所述网络如因特网、局域网、广域网和/或无线网。

所述计算机可读程序指令可以完全在用户电脑上执行,部分在用户电脑上执行,或作为独立的软件包,部分在用户电脑上执行,部分在远端电脑上执行,或完全在远端电脑或服务器上执行。在后面的场景中,远端电脑可以通过任何类型的网络与用户电脑连接,包括局域网(localareanetwork,简称lan)或广域网(wideareanetwork,简称wan),或者,可以(例如,使用因特网服务提供商通过因特网)在外部电脑上建立该连接。在一些实施例中,包括可编程逻辑电路、现场可编程门阵列(field-programmablegatearray,简称fpga)或可编程逻辑阵列(programmablelogicarray,简称pla)等的电子电路可以利用计算机可读程序指令的状态信息执行所述计算机可读程序指令以个性化所述电子电路,以便执行本发明的各方面。

此处,结合本发明实施例的方法、装置(系统)以及计算机程序产品的流程图和/或框图描述本发明的各方面。应当理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。

附图中的流程图和框图示出了本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。此时,流程图或框图中的每个框都可以代表一个模块、分段或指令的一部分,包括一个或多个用于实现特定逻辑功能的可执行指令。在一些替代的实现方式中,框中指出的功能可以不按照图中的顺序实现。例如,事实上,连续展示的两个框可以同时执行,或者有时候,框可以按照相反的顺序执行,这取决于所涉及的功能。还应注意的是,框图和/或流程图中每一个框以及框图和/或流程图中框的组合可以由基于专用硬件的系统执行,该系统执行指定的功能或动作,或者执行专用硬件和计算机指令的组合。

现在参考图1,其是本发明的一些实施例的采用向量分割输入数据流的示例性系统的示意图。系统100包括用于接收和/或指定输入数据流120和输出分割的数据流130的输入/输出(i/o)接口102;处理器104,包括多个处理管线106,用于分割输入数据流120以创建分割的数据流130;和程序存储器108。输入数据流120可以一种或多种格式接收,例如数据文件、媒体文件和流数据等。输入数据流120包括多个数据项,例如可以作为流的顺序排列的字节、字、双字和/或像素。i/o接口102可以包括一个或多个接口,例如网络接口、存储器接口和/或存储接口。i/o接口102可以用于,例如,通过网络接收和/或传输数据流120和/或130,用于获取数据流120和/或130和/或将数据流120和/或130存储到存储器设备和/或存储设备等。处理器104可以包括一个或多个处理器,每个处理器具有一个或多个核。处理器104还包括向量处理能力,例如多个处理管线106。处理管线106支持均能够处理数据的多个独立执行管线,例如多个处理器、多核和/或向量处理器,例如simd处理器和/或simd引擎。simd引擎包括能够在处理器104的单个指令下同时处理多个数据项的多个处理管线106。程序存储器108可以包括一个或多个非易失性持久存储设备,例如硬盘驱动器和闪存阵列等。

现在同时参考图2,其是本发明的一些实施例采用向量分割输入数据流的示例性过程的流程图。用于分割输入数据流的分割过程200可以由系统100等系统执行。分割过程200使用多个处理管线106来同时处理输入数据流120的部分序列以产生分割的数据流130。

分割过程200可以由一个或多个软件模块完成,例如协调器110和/或计算节点112,其包括由处理器104和/或处理管线106执行的来自程序存储器108的多个程序指令。可选地,计算节点112可以包括嵌有处理管线106的一个或多个微代码模块,其中,微代码模块包括由处理管线106执行的程序指令。协调器110可以例如由处理器104的处理单元执行。协调器110可以管理和/或协调分割过程,例如在多个处理管线106之间分发数据,从多个处理管线106收集数据,同步数据,同步任务,协调计算节点112和/或指定分段等等。处理器104和/或每个处理管线106可以执行多个计算节点112的实例以同时处理输入数据流120的部分序列。当处理器104是包括作为独立处理单元的处理管线106的向量处理器,每个处理管线106可以独立地执行计算节点112实例。然而,当处理器104将simd引擎并入,计算节点112可以由向simd引擎的每个处理管线106分配数据的处理器104执行。然后,处理器104可以发起单个指令以指示simd引擎的所有处理管线106同时执行相同的操作(指令),每个处理管线106处理其各自的分配的数据。

如202所示,过程200开始于协调器110从i/o接口102接收输入数据流120。

在说明采用向量处理同时进行分割过程之前,首先描述采用滚动序列和滚动哈希的分割过程。

现在参考图3a和图3b,其是计算用于分割输入数据流的滚动哈希值的示例性过程的示意图。在包括多个数据项,例如,字节、字、双字、像素等的输入数据流120上应用移位的滚动序列来处理输入数据流120。滚动序列从数据流120的开始处在输入数据流120上开始移位,并且向输入数据流120的末端移位。一直对滚动序列进行移位直到识别和指定分段。一旦指定了分段,则从先前指定的分段的末端开始后续序列,并且向输入数据流120的末端移位的相应的滚动序列。重复该过程,直到分割了整个输入数据流以产生分割的数据流130。滚动序列中包括的数据项的数量可以根据一个或多个方面变化,例如,分割要求、数据吞吐量和处理能力等。示例性输入数据流120用滚动序列处理,每个滚动序列包括64个数据项,然而正如本发明实施例所描述的,数据项的数量可以不同。计算包括数据项sk310a0至sk-63310a63的滚动序列310a的哈希值hk312a。然后将滚动序列向左移位以定义滚动序列310b,删除数据项sk-63310a63并添加新数据项sk+1310b1。计算包括数据项sk+1310b1至sk-62310a62的滚动序列310b的新哈希值hk+1312b。滚动序列在输入数据流120的序列中移位,直到如下文所述的检测到分段。可以使用多种滚动哈希函数中的例如rabin-karp滚动哈希和/或buzhash来计算哈希值hk312a和hk+1312b以及计算针对输入数据流120的后续序列的哈希值。

尽管可以计算由滚动序列310a和310b等对应的滚动序列哈希值hk312a和hk+1312b等哈希值,但如前所述,显而易见的是,每个哈希值hk312a和hk+1312b取决于先前哈希值、来自相应序列的删除数据项以及添加到相应序列的数据项。因此,每个哈希值可以视为滚动哈希值,并且可以使用先前哈希值、删除数据项和添加数据项的值来计算,从而避免对整个相应滚动序列例如对滚动序列310a和310b的冗余复杂计算。

现在参考图3c,其是计算用于分割输入数据流的滚动哈希值的示例性公式。应用于输入流120等示例性输入流的序列的滚动序列310b相应滚动序列的滚动哈希值为hk+1312b,滚动哈希值hk+1312b可以作为哈希值hk312a先前哈希值、删除数据项sk-63310a63删除数据项和添加数据项sk+1310b1添加数据项的函数来计算。

比较哈希值hk312a和hk+1312b等哈希值中的每个哈希值是否符合一个或多个分割标准,以识别“切割”序列以指定分段所在的点。一个或多个分割标准可以定义例如数据模式,例如,检查哈希值的最后12位等于预定义的值。这样通常平均每4096字节会产生一次“切割”。当然,分段的长度是可变的并且取决于序列内的位置,在该序列中,计算的滚动哈希值符合一个或多个分割标准。可以为多个可变长分段中的每一个预定义最小长,使得输入数据流120的处理的序列从最小块长开始并一直增大直到“切割”。可以为多个可变长分段中的每一个预定义最大长,这样,如果在识别处理的序列中的“切割”点之前达到预定义的最大长,则即使哈希值不符合一个或多个分割标准,也“切割”该分段。

分割过程在输入数据流120的后续序列上继续直到输入数据流120的末端,以创建分割的数据流,例如分割的数据流130。

再次参考图2。如204所示,协调器110在输入流120等输入流的连续数据项的序列上应用滚动序列,例如滚动序列310a和/或310b。协调器110选择从输入数据流120的起点开始,并向输入数据流120的末端移动的第一序列。协调器110在所处理的序列上对滚动序列进行移位,例如滚动序列310a和310b。如上所述,每个滚动序列中包括的数据项的数量,例如,32、64和/或128,取决于分割过程和/或处理资源特征和/或能力的一个或多个方面。

如206所示,协调器110将滚动序列拆分成多个部分滚动序列,其中,分别由相应的一个处理管线106执行的多个计算节点112中的相应一个计算节点对这些部分滚动序列分别同时进行处理。当过程200由具有simd引擎的处理器104执行,计算节点112由处理器104执行,处理器104将相应部分滚动序列的数据分配给simd引擎的处理管线106。设置部分滚动序列的数量以适合可用的处理管线106的数量,例如4、8、16、32、64和/或128。每个部分滚动序列包括滚动序列310a和310b等滚动序列的子集的间隔均匀的数据项。例如,滚动序列310a和310b拆分成4个部分滚动序列以适合由具有处理管线106等4个处理管线的向量处理器104或由带有具有4个处理管线106的simd引擎的向量处理器104执行的4个计算节点112。滚动序列310a和310b中的每个部分滚动序列分别包括滚动序列310a或310b的第四数据项。第一部分滚动序列可以包括数据项0、4、8、……,第二子数据流可以包括数据项1、5、9、……,第三子数据流可以包括数据项2、6、10、……,第四子数据流可以包括数据项3、7、11、……,类似地,又例如,当滚动序列310a和310b拆分成8个部分滚动序列以适合由具有8个处理管线106或8个simd处理管线106等处理管线的向量处理器104执行的8个计算节点112,其中,每个部分滚动序列分别包括滚动序列的子集的第八数据项。第一部分滚动序列可以包括数据项0、8、16、……,第二部分滚动序列可以包括数据项1、9、17、……,第三部分滚动序列可以包括数据项2、10、18、……,第四部分滚动序列可以包括数据项3、11、19、……,第五部分滚动序列可以包括数据项4、12、20、……,第六部分滚动序列可以包括数据项5、13、21、……,第七部分滚动序列可以包括数据项6、14、22、……,第八部分滚动序列可以包括数据项7、15和23等等。类似地,协调器110可以将序列拆分为16、32、64、128和256等以适合可用计算节点112的数量,即可用处理管线106的数量。

由多个处理管线106中的相应一个所执行的每个计算节点112处理各个部分滚动序列以计算各个部分滚动序列的部分滚动哈希值。计算节点112可以使用多个滚动哈希函数中的例如,rabin-karp滚动哈希和/或buzhash来计算部分哈希值。多个计算节点112同时处理各自的部分滚动序列,以同时处理所有部分滚动序列。对于具有simd引擎的处理器104,处理器104执行的计算节点112发起单个命令(指令)以指示所有simd引擎处理管线106同时计算部分滚动序列的部分滚动哈希值。

现在参考图4a和图4b,其是本发明的一些实施例计算用于采用向量来分割输入数据流的部分滚动哈希值的示例性过程的示意图。

如图4a所示,协调器110将滚动序列310a等滚动序列拆分成8个部分滚动序列410a0至410a7,以适合具有8个处理管线106的示例性向量处理器104。协调器110可以将部分滚动序列410a0至410a7分发给8个相应的计算节点112。对于具有simd引擎的处理器104,由处理器104执行的单个计算节点112向每个simd引擎处理管线106分配部分滚动序列410a0-410a7中相应一个的数据。然而,如上所述,部分滚动序列的数量可以根据计算节点112和/或可用处理管线106的数量不同。由多个处理管线106中的相应一个执行的相应计算节点112处理部分滚动序列410a0至410a7中的每一个。对于具有simd引擎的处理器104,simd引擎处理管线106在(由处理器104执行的)计算节点112的单个指令下同时处理部分滚动序列410a0-410a7。

本文呈现的示例性过程200遵循上文所呈现的示例,其中每个滚动序列例如滚动序列310a包括具有64个数据项的子集,因此协调器110将滚动序列310a拆分成8个部分滚动序列410a0至410a7,每个部分滚动序列包括8个数据项。因此,示例性部分滚动序列410a0包括8个数据项sk310a0、sk-8310a8、sk-16310a16、sk-24310a24、sk-32310a32、sk-40310a40、sk-48310a48和sk-56310a56,示例性部分滚动序列410a7包括8个数据项sk-7310a7、sk-15310a15、sk-23310a23、sk-31310a31、sk-39310a39、sk-47310a47、sk-55310a55和sk-63310a63等等。需要再次强调的是,部分滚动序列410a0至410a7等多个部分滚动序列中的每一个都包括8个数据项,然而,数据项的数量可以根据一个或多个方面变化,例如,分割要求、哈希函数类型、数据吞吐量和处理器架构等。处理器架构可以包括一个或多个特征,例如寄存器的宽度、缓存行宽度、存储器接口宽度和/或速度、网络接口宽度和/或速度和存储介质接口宽度和/或速度等。

8个计算节点112同时处理8个部分滚动序列410a0至410a7,以计算相应部分滚动序列410a0至410a7中的每一个的部分滚动哈希值,例如部分滚动哈希值h’k412a0至h’k-7412a7。另外和/或可选地,当处理器104包括simd引擎,由处理器104执行的计算节点112指示8个simd引擎处理管线106处理8个部分滚动序列410a0至410a7。8个simd引擎处理管线106分别为部分滚动序列410a0-410a7中的相应一个计算部分滚动哈希值h’k412a0至h’k-7412a7。计算节点112可以使用一个或多个哈希函数,例如rabin-karp或buzhash来计算部分滚动哈希值h’k412a0至h’k-7412a7。

如图4b所示,每个处理管线106将部分滚动序列向右移位以创建部分滚动序列410b0至410b7,删除先前滚动序列410a0-410a7中的每一个的最左侧数据项,并添加新数据项。例如,部分滚动序列410b0对应于移位的部分滚动序列410a0,其中删除了数据项sk-56310a56并且添加了新数据项sk+8310b8。类似地,部分滚动序列410b7对应于移位的部分滚动序列410a7,其中删除了数据项sk-63310a63并且添加了新数据项sk+1310b1。

8个处理管线106同时处理其各自的部分滚动序列410b0-410b7,以计算各个部分滚动序列410b0-410b7的每一个的部分哈希值,例如哈希值h’k+8412b0至h’k+1412b7。

与哈希值hk312a和hk+1312b等哈希值相似,可以为相应的部分序列410a0-410a7和410b0-410b7分别计算部分哈希值h’k412a0-h’k-7412a7和h’k+8412b0-h’k+1412b7等部分哈希值。然而,如上文所述,显而易见的,部分哈希值h’k412a0-h’k-7412a7和h’k+8412b0-h’k+1412b7分别取决于先前相应部分哈希值、来自相应部分滚动序列的删除数据项和相应的部分滚动序列的添加数据项。因此,部分哈希值h’k412a0-h’k-7412a7和h’k+8412b0-h’k+1412b7均可以视为滚动哈希。因此,计算节点112可以使用先前相应的部分哈希值、相应的删除数据项和相应的添加数据项的值来计算部分哈希值h’k412a0-h’k-7412a7,从而避免对整个相应的部分滚动序列410a0-410a7和/或410b0-410b7的冗余计算。

现在参考图4c,其是本发明一些实施例计算用于分割输入数据流的部分滚动哈希值的示例性公式的示意图。相应的处理管线106可以为部分滚动序列410b7等相应的部分滚动序列计算部分滚动哈希值h’k+1412b7等部分滚动哈希值,作为部分滚动哈希值h’k-7412a7等先前部分滚动哈希值、删除数据项sk-63310a63等删除数据项和添加数据项sk+1310b1等添加数据项的函数。类似地,每个其他处理管线106可以使用相同的方法来计算部分滚动哈希值h’k+2412b6至h’k+8412b0。

再次参考图2。如208所示,检查每个计算的部分滚动哈希值是否符合和/或满足相应的一个或多个部分分割标准,以确定包括滚动序列310a和310b(分别包括相应的部分滚动序列)等滚动序列的完整序列是否可以指定为分段。分别检查部分滚动哈希值h’k412a0-h’k-7412a7和/或h’k+8412b0-h’k+1412b7等相应部分哈希值的符合性,以识别可以“切割”序列以指定分段所在的点。一个或多个部分分割标准可以定义例如数据模式,例如,部分滚动哈希值412大于预定义值和/或部分滚动哈希值412中的预定数量的位等于预定义值。每个符合相应部分分割标准的连续部分哈希值的数量影响平均分段长度。符合其相应的部分分割标准所需的连续部分哈希值的数量可以根据最大允许和/或期望的数据段长度变化。

如210所示,当部分滚动哈希值符合相应的部分分割标准,协调器110可以“切割”滚动序列移位所在的序列(并且其包括部分滚动序列),并且指定该序列为数据段。协调器110可以使用一个或多个分割标准来“切割”序列并将其指定为分段,其中,该分割标准是一个或多个部分分割标准的组合。

当然,分段的长度是可变的并且取决于序列内的位置,在该序列中,识别相应的计算的部分滚动哈希值对相应的一个或多个部分分割标准的符合性。通常,对于重复数据删除,数据段的平均长度可以是例如4千字节(kilobyte,简称kb)、6kb和/或8kb,其可能最适合当前处理,存储和/或网络吞吐量和性能,以关于分段的数量优化处理数据段的开销。

可选地,可以为多个可变长度分段中的每一个预定义最小长度,使得部分滚动序列从最小块长度开始并一直增大直到“切割”。基于典型的段长度,预定义的最小长度可以是例如2kb。

可选地,可以为多个可变长度分段中的每一个预定义最大长度,这样,如果在识别“切割”点之前达到预定义的最大长度,则即使哈希值与一个或多个分割标准不匹配,也“切割”该分段。基于典型的段长度,预定义的最大长度可以是例如16kb。

现在参考图5a和图5b,其是本发明一些实施例部分滚动哈希值符合部分分割标准的示例性过程的示意图。当计算节点112识别到与多个部分滚动序列中的一个相关联的各个部分滚动哈希值对相应的部分分割标准的符合性时,协调器110可以识别对分割标准的符合性。当处理器104具有simd引擎,由处理器执行的计算节点112收集分别由simd处理管线106计算的部分滚动哈希值,并比较部分滚动哈希值与相应的部分分割标准。例如,当部分滚动序列410a0-410a7等各个部分滚动序列的部分滚动哈希值h’k412a0-h’k-7412a7等部分滚动哈希值全部符合相应的部分分割标准,协调器110可以将数据项sk310a0的点的序列指定为分段。

如图5a所示,qk510a是分割标准,其是一组部分分割标准q’k-7510a7-q’k510a0的组合,其中,“1”表示相应部分哈希值对相应的部分分割标准的符合性,且“0”表示相应的部分哈希值对相应的一个或多个部分分割标准的不符合性。例如,部分分割标准q’k-7510a7表示部分哈希值h’k-7412a7符合。由于部分分割标准q’k-5510a5、q’k-3510a3和q’k-1510a1不符合相应的部分分割标准,因此不满足整个分割标准qk510a。

另一方面,如图5b所示,所有部分分割标准q’k-7510a7-q’k510a0符合其各自的部分分割标准,因此满足整个分割标准qk510a,并进行“切割”520以指定包括包括相应部分滚动序列的滚动序列的序列作为分段。

可选地,协调器110检查连续滚动序列,例如,先前滚动序列和/或后续滚动序列,的连续部分滚动哈希值对相应部分分割标准的符合性。需要符合相应的部分分割标准的连续部分哈希值的数量可能超过部分滚动哈希值的数量(当然,其是部分滚动序列的数量和处理管线106的数量)。因此,滚动序列对分割标准的符合性是连续部分滚动序列的部分哈希值的符合性的函数。如上所述,可以设置检查对部分分割标准的符合性的连续部分滚动哈希值的数量,以适合所需的和/或期望的典型数据段长度,因为连续的相符的部分滚动哈希值的数量影响平均分段长度。在此呈现的示例呈现8个连续的部分滚动哈希值对相应的部分分割标准的符合性,然而,根据所需/期望的典型数据段长度,可以使用其他数量的连续部分滚动哈希值。

通过检查两组连续的部分滚动序列的连续部分哈希值的符合性,协调器可以呈现额外的优点,因为与识别滚动序列310a和/或310b等原始滚动序列的符合性相比,用于分割序列的分辨率和/或粒度提高了。

现在参考图5c和图5d,其是本发明一些实施例部分滚动哈希值符合部分分割标准的示例性过程的示意图。

如图5c所示,qk510a是分割标准,其是一组部分分割标准q’k-7510a7-q’k510a0的组合。由于部分分割标准q’k-5510a5、q’k-3510a3和q’k-1510a1不符合相应的部分分割标准,因此协调器110可以判定不满足整个分割标准qk510a。这同样适用于作为一组部分分割标准q’k+1510b7-q’k+8510b0的组合的并且未满足的分割标准qk+8510b,因为不是所有部分分割标准q’k+1510b7-q’k+8510b0均符合相应的部分分割标准。此外,在随后的两个分割标准qk510a和qk+8510b中没有部分分割标准的序列,其全部符合其各自的部分分割标准,因此相应的序列可能不会指定为分割边界或“切割”点。

另一方面,如图5d所示,协调器110可以识别出一组8个连续的部分分割标准q’k+6510b2至q’k+13510c3都符合其各自的部分分割标准,因此协调器可以插入“切割”520以将相应的序列指定为分段,其中,该序列包括数据项到滚动序列510c3(包括在内)。

协调器110然后可以继续识别输入数据流120的序列中的后续分段,其中后续序列从先前检测到的分段的末端开始。

再次参考图2。如212所示,其是判定点,当协调器110检测到到达输入数据流120的末端,过程200分出214。当协调器110检测到输入数据流120包括添加数据项,协调器110可以转到204以对输入数据流120的后续序列重复分割过程。协调器110重复步骤204至212,直到到达输入数据流120的末端以创建分割的数据流130。

如214所示,一旦用于输入数据流120的分割过程200结束,协调器110可以采用例如i/o接口102输出分割的数据流130。

在分割之后,协调器110可输出分割的数据流以用于多个应用中的一个或多个,例如,重复数据删除。

对本发明各个实施例的描述只是为了说明的目的,而这些描述并不旨在穷举或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,本领域技术人员可以清楚理解许多修改和变化。相比于市场上可找到的技术,选择此处使用的术语可最好地解释本实施例的原理、实际应用或技术进步,或使本领域其他技术人员理解此处公开的实施例。

预期在从本申请衍生出的专利的有效期内能产生多个相关的向量处理技术,例如simd,当然,术语simd的范围旨在先验地包括所有这样的新技术。

此处使用的术语“大约”表示±10%。

术语“包括”以及“有”表示“包括但不限于”。这个术语包括了术语“由……组成”以及“本质上由……组成”。

短语“本质上由……组成”是指构成或方法在当且仅当附加成分和/或步骤不会实质性改变所要求保护的构成或方法的基本和新颖特征时才可以包括附加成分和/或步骤。

除非上下文中另有明确说明,此处使用的单数形式“一个”和“所述”包括复数含义。例如,术语“一个复合物”或“至少一个复合物”可以包括多个复合物,包括其混合物。

此处使用的词“示例性的”表示“作为一个例子、示例或说明”。任何“示例性的”实施例不必理解为优先于或优越于其他实施例,和/或并不排除其他实施例特征的结合。

此处使用的词语“可选地”表示“在一些实施例中提供且在其他实施例中没有提供”。本发明的任意特定的实施例可以包括多个“可选的”特征,除非这些特征相互矛盾。

单个实施例也可以提供某些特征的组合,这些特征在各个实施例正文中有简短的描述。相反地,本发明的各个特征在单个实施例的正文中有简短的描述,也可以分别提供这些特征或任何适合的子组合或者作为本发明所述的任何合适的其他实施例。不可认为各个实施例的正文中描述的某些特征是这些实施例的必要特征,除非没有这些元素,该实施例无效。

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