用于高效存储器内嵌去重应用的最优化的跳房子多散列表的制作方法

文档序号:11215850阅读:315来源:国知局
用于高效存储器内嵌去重应用的最优化的跳房子多散列表的制造方法与工艺

相关申请的交叉引用

本申请要求2016年3月29日向美国专利商标局递交的美国临时申请第62/314,918号的优先权和权益,在此通过引用将其全部内容并入。

根据本发明的实施例的一个或多个方面涉及数据去重(deduplication)。



背景技术:

数据去重或数据重复消除,是指缩减存储器设备中的冗余数据从而降低存储器设备的容量成本。在数据去重中,数据对象/项(如,数据文件)被分割成一个或多个数据行(line)/区块(chunk)/块(block)。通过将相同数据构成的多个数据块与单个存储的数据块关联,数据块的重复拷贝可被计算机存储器减少或消除,从而减少了存储器设备中数据的冗余拷贝总量。数据冗余拷贝的减少可以增加读速度和存储器带宽,并且可以潜在地导致功率节省。

因而,如果数据的重复拷贝可被减少为该数据的单个拷贝,则虽然使用相同数量的物理资源,却增加了存储器设备的总可用容量。因为由此引发的存储器设备的节省允许数据重写计数的减少,并且因为对已存储在存储器中重复的数据块的写请求可以被丢弃,所以实施了数据去重的存储器设备的寿命可以通过有效提高写耐久性而延长。

传统的数据去重方法可以使用存储器内去重技术(in-memorydeduplicationtechnology),借此,去重引擎被以cpu为中心的方法与cpu或存储器控制器(mc)集成。这样的方法通常实施去重高速缓存(deduplicatedcache,ddc),ddc与存储器控制器一起操作以使能cpu处理器知晓重复并且试图根据存储器控制器的控制来提供去重的存储器操作(如,内容查找、引用计数更新等)。去重的方法还可以实施直接转换缓冲器(directtranslationbuffer,dtb),dtb是用于缓存转换行以通过从关键路移除转换提取来改善数据读取的高速缓存,并且dtb可以类似于后援(lookaside)缓冲器。

去重最常用于硬件驱动器。然而,对在诸如动态随机访问存储器(dram)的易失性存储器的区域中提供细粒度去重感兴趣。

在本背景部分公开的以上信息只为增强对本发明背景的理解,并且因而它可以包含不构成现有技术的信息。



技术实现要素:

本公开的实施例的方面针对动态随机访问存储器(dram)系统中的存储器去重。

根据本发明的实施例,提供了一种存储器去重的方法,该方法包括:识别多个散列表,每个散列表与散列函数对应,并且每个散列表包括物理散列桶,每个物理散列桶包括路并且被配置为存储数据;识别多个虚拟桶,每个虚拟桶包括物理散列桶中的一些,并且每个虚拟桶与虚拟桶中的另一个共享物理散列桶中的至少一个;将其上存储数据的物理散列桶的每个识别为被指定给虚拟桶中的单个相应虚拟桶;根据散列函数中的相应一个来散列数据行以产生散列值;根据散列值确定相应散列表的虚拟桶的相应一个是否有用于数据块的可用空间;当虚拟桶中的相应一个没有可用空间时,将数据从虚拟桶中的相应一个顺序地移动到虚拟桶中的邻近一个,直到虚拟桶中的相应一个有用于数据块的空间,以及将数据块存储在虚拟桶中的相应一个。

该方法可以进一步包括更新地址查找表存储器以改变与被移动的数据块对应的一个或多个查找地址。

散列表的每个进一步可以包括引用计数行、签名行和跳字行。

该方法可以进一步包括生成用于指示包含数据的哪个物理散列桶与哪个虚拟桶对应的跳字矢量。

生成跳字矢量可以包括,对于虚拟桶的每个,使用二进制指示符指示虚拟桶的相应一个的物理散列桶中的每个是否包含与虚拟桶中的该相应一个关联的数据块。

该方法可以进一步包括生成跳字值,该跳字值包括log2(h)比特每物理散列桶,该跳字值用于指示包含与某个虚拟桶对应的数据的某个物理散列桶,其中h是每个虚拟桶的物理散列桶的数目。

生成跳字值可以包括生成在表示物理散列桶和虚拟桶的关联对的位置处包括含有数据的物理散列桶的每个的准地址的二维阵列。

散列表可以存储在易失性存储器中。

易失性存储器可以包括动态随机访问存储器(dram)。

该方法可以进一步包括用物理行id(plid)索引散列表,plid包括log2(h)个比特的虚拟桶利用值字段,并且包括等于虚拟桶的相应一个中的数据块的数目的值,其中h是每个虚拟桶的物理散列桶的数目。。

该方法可以进一步包括,当向虚拟桶的相应一个写入对象时,将虚拟桶利用值字段增加1。

该方法还可以包括当相应散列表已满时,将数据块存储在缓冲存储器。

根据本发明的实施例,提供了用于通过减少存储器中重复的数据块来对存储器进行去重的去重动态随机访问存储器(dram)存储器模块,去重dram存储器模块包括:用于存储被去重的数据块的散列表存储器,用于存储与被去重的数据块对应的地址的地址查找表存储器(alutm),和处理器,用于接收读请求以使能去重dram存储器模块从散列表存储器检索数据块并导出数据块,并且用于接收写请求以使能去重dram存储器模块将数据块存储在散列表存储器。

散列表存储器可以包括存储在其中的散列表的三维阵列,散列表的每个包括物理散列桶,每个物理散列桶包括路并且被配置为存储被去重的数据块。

散列表的每个可以进一步包括多个虚拟桶,每个虚拟桶包括两个或更多个物理散列桶。

去重dram存储器模块可被配置为将去重的数据块在散列表的相应一个内的虚拟桶的相邻虚拟桶之间移动。

去重dram存储器模块可以在没有外部提供的命令的情况下执行数据去重。

去重dram存储器模块可以进一步包括,用于在散列表存储器已满时存储数据的缓冲存储器。

根据本发明的实施例,提供了用于减少存储器中重复的数据块的去重dram存储器模块,去重dram存储器模块包括:存储在其中的散列表的三维阵列,散列表的每个包括物理散列桶,每个物理散列桶包括路并且被配置为存储数据块;处理器;和存储器,其中该存储器在其上存储指令,当指令由处理器运行时,导致去重dram存储器模块将先前存储的被去重的数据块在散列表的一个的邻近虚拟桶之间移动,虚拟桶的每个包括两个或更多个物理散列桶。

存储器可以进一步在其上存储指令,当指令由处理器运行时,导致去重dram存储器模块将传入数据存储在从其移出了先前存储的被去重数据块的虚拟桶的一个中。

附图说明

参考说明书、权利要求和附图,本发明的这些和其它方面将被领会和理解,其中:

图1是本发明的实施例的去重dram系统架构的框图;

图2是图1的实施例的去重dram存储器模块中存储器的类型的框图;

图3是图2的实施例的散列表存储器的散列表框图;

图4是根据本发明的实施例的多散列表阵列的框图;

图5a、5b和5c描述了根据本发明的实施例的用于生成跳字(hopword)以将虚拟桶(bucket)与特定物理桶关联的二维阵列;

图6是根据本发明的实施例用于寻址散列表存储器中的数据块的物理行id(plid)的框图;

图7是示出了根据本发明的实施例用于使用跳房子(hopscotch)方法向存储器模块的多散列表阵列写入数据的过程的流程图;以及

图8是示出了根据本发明的实施例用于从存储器模块的多散列表阵列读取数据的过程的流程图。

具体实施方式

通过引用实施例的以下具体描述和附图,可以更容易理解发明构思的特征和实现该发明构思的方法。此后,示例实施例将通过参考附图更具体描述,附图中相同的附图标记始终指代相同的元素。然而,本发明可以以各种不同形式具体化,并且不应被解释为受限于只在本文示出的实施例。而是,这些实施例被提供为示例以便本公开将是全面和完整的,并且将向本领域技术人员完全地传达本发明的方面和特征。因而,对于本领域普通技术人员完全理解本发明的方面和特征不必要的过程、元素和技术可以不描述。除非另有说明,贯穿附图和书面描述全文,相同的附图标记指代相同元素,并且因而其描述将不被重复。附图中,为了清楚,可以扩大元素、层和区域的相对大小。

将理解,尽管术语“第一”、“第二”、“第三”等在本文可以用来描述各种元素、组件、区域、层和/或部分,但是这些元素、组件、区域、层和/或部分不应受这些术语的限制。这些术语被用来区分一个元素、组件、区域、层或部分与另一元素、组件、区域、层或部分。因而,在不脱离本发明的精神和范围的情况下,以下描述的第一元素、组件、区域、层或部分可以称为第二元素、组件、区域、层或部分。

为容易解释,空间上相对的术语,诸如“下面”、“之下”、“低于”、“以下”、“之上”、“上面”等可在本文用以描述如图所示的一个元素或特征与其它(多个)元素或(多个)特征的关系。将理解,空间上相对的术语意图包含使用或操作中的设备的除了图所述方向之外的不同方向。例如,如果图中的设备被翻转,则被描述为其它元素或特征“之下”或“下面”或“以下”的元素之后将被标定方向在其它元素或特征“之上”。因而,示例术语“之下”和“以下”可以包含之上和之下二者的方向。设备可以被另外标定方向(如,旋转90度或在其它方向上)并且本文使用的在空间上相对的描述符应当被相应地解释。

将理解,当元素、层、区域或组件被称为在另一元素、层、区域或组件“上”或与它们“连接”或“耦接”时,它可以直接在另一元素、层、区域或组件上或与它们直接连接或耦接,或者可以存在一个或多个介于其间的元素、层、区域或组件。并且,还将理解,当元素或层被称为在两元素或层“之间”时,它可以是该两元素或层之间唯一的元素或层,或者也可以存在一个或多个介入其间的元素或层。

以下示例中,x轴、y轴和z轴不限于直角坐标系的三个轴,并且可被更广义地解释。例如,x轴、y轴和z轴可以彼此垂直,或可以表示彼此不垂直的不同方向。

本文使用的术语是只用于描述具体实施例的目的并且不意图限制本发明。如本文使用的,单数形式“一”和“一个”意图也包括复数形式,除非上下文清楚地另有所指。将进一步理解,术语“包含”和“包括”,当在本说明书中使用时,指明所述特征、整数、步骤、操作、元素和/或组件的存在,但是不排除一个或多个其它特征、整数、步骤、操作、元素、组件和/或其组合的存在或附加。如本文使用的,术语“和/或”包括关联列表项的一个或多个的任意和所有组合。诸如“至少其中之一”的表述,当在元素列表之后时,修饰整个元素列表并且不修饰该列表的单个元素。

如本文使用的,术语“基本上”、“大约”和类似术语被用作近似的术语并且不作为程度的术语,并且意图说明将被本领域普通技术人员识别的测量或计算值的固有偏差。进一步,当描述本发明的实施例时“可以”的使用指代“本发明的一个或多个实施例”。如本文使用的,术语“使用”可被认为与术语“利用”同义。并且,术语“示范性”意图指代示例或阐述。

当某一实施例可以被不同地实现时,具体过程顺序可以不同于所述顺序执行。例如,两个连续描述的过程可以基本上同时执行或以相反于所述顺序的顺序执行。

本文所述根据本发明的实施例的电子或电动设备和/或任意其它相关设备或组件可以利用任意合适的硬件、固件(如,专用集成电路)、软件、或软件、固件和硬件的组合实现。例如,这些设备的各种组件可以形成在一个集成电路(ic)芯片上或分开的ic芯片上。进一步,这些设备的各种组件可以实现在柔性印刷电路膜、带载封装(tapecarrierpackage,tcp)、印刷电路板(pcb)上,或形成在一个基底上。进一步,这些设备的各种组件可以是进程或线程,其运行在一个或多个计算设备中的一个或多个处理器上、运行计算机程序指令并且与其它系统组件交互,用以执行本文所述的各种功能。计算机程序指令存储在存储器中,存储器可以使用诸如,例如随机访问存储器(ram)的标准存储器设备在计算设备中实现。计算机程序指令还可以存储在其它非暂态计算机可读介质中,诸如,例如cd-rom、快闪驱动器等。并且,本领域技术人员应当意识到,在不脱离本发明的示例实施例的精神和范围的情况下,各种计算设备的功能可被组合或集成到单个计算设备,或者特定计算设备的功能可分布于一个或多个其它计算设备。

除非另有定义,本文使用的所有术语(包括技术性和科学性术语)具有和本发明所属领域普通技术人员通常理解的相同意思。将进一步理解,诸如定义在常用字典中的那些术语应当被解释为具有和相关领域和/或本说明书的语境中它们的意思一致的意思,并且不应以理想化或过于正式的意思解释,除非本文明确地这样定义。

图1是本发明的实施例的去重dram系统架构的框图。

参考图1,为起到计算机存储器的作用,去重存储器执行被称为“转换”的功能以记录原始数据的内容和已被去重的唯一存储块集之间的关系,记录的关系以压缩形式存储。例如,原始数据的地址可以存储在查找表中。

通常,cpu的处理器110缺少到物理存储器(如,去重dram存储器模块130)的直接访问,而物理存储器是由存储器控制器120按照存储器行(memoryline)的阵列来管理。以cpu为中心的去重系统试图在数据到达存储器系统前将该数据高速缓存在cpu内部。

本实施例的去重dram系统架构100使用以存储器为中心的去重,而不是传统的以cpu为中心的去重,这意味着去重dram存储器模块130可以在缺少来自处理器110的命令的情况下执行存储器去重。去重dram系统架构100还使用存储在去重dram存储器模块130中的可配置去重算法以增加存储器的容量效益,从而提供大容量存储器解决方案。即,不像以cpu为中心的去重,本实施例的去重dram系统架构100具有包括在ram模块(如,去重dram存储器模块130)内的去重智能(deduplicationintelligence)的全部。因而,去重能在去重dram存储器模块130内不为cpu模块140所知地执行,从而允许去重dram存储器模块130容量增加。即,因为该去重是细粒度的并且在易失性存储器内(如,在去重dram存储器模块130内)操作,所以本实施例的去重智能的全部都出现在去重dram存储器模块130自身内,而cpu中的核模块140可以不知道在去重dram存储器模块130内执行的去重操作的细节。

应当理解,尽管本实施例描述使用dram作为去重dram存储器模块130,但其它类型的存储器可以在本发明的其它实施例中使用。更进一步,本实施例的去重dram系统架构100能够支持与多个类型存储器接口。即,本实施例的去重dram存储器模块130能够经存储器控制器120(如,双倍数据率第4代同步动态随机访问存储器(ddr4)、作为用于连接计算机和一个或多个外围设备的串行扩展总线标准的外围组件高速互连(pcie)、ddr-t和kti)与多个不同类型存储器接口关联。因而,应当注意,不同架构可被用来将去重dram存储器模块130集成到去重dram系统架构100中。

并且,尽管可以对现有dram存储器模块做出一些变化以实现本实施例(如,驱动器升级),但软件实现允许本实施例的去重dram系统架构100的使用而无需对操作系统/cpu模块140或处理器110做出物理改变。

本实施例的去重dram系统架构100可以针对dram智能协议在去重dram存储器模块130上实现片上系统(soc),dram智能协议诸如去重、内容可寻址性、安全性、存储器内处理器(processor-in-memory,pim)、行地址选通(rowaddressstrobe,ras)等,其中ras是被发送到dram的信号,其告知dram关联的地址是行地址,借此,dram中的数据比特被存储在由列地址和行地址的交叉点定位的单元内。

去重dram系统架构100还可以有智能系统软件,其导致处理器110结合存储器控制器120允许虚拟密度管理、智能数据放置和dram智能应用编程接口(api)等。

去重dram存储器模块130可以进一步具有3dsdram组件,诸如多个外形因子的高容量dram存储器模块(如,双列直插式存储器模块(dimm)、2.5in、全高半长(fhhl)、半高半长(hhhl)、全高全长(fhfl)等)。

因而,通过使用本实施例的去重dram系统架构100提供以存储器为中心的去重系统,去重的写入过程可以在存储器接口处直接执行,从而增加去重dram存储器模块130的容量。

图2是图1的实施例的去重dram存储器模块中的存储器类型的框图,并且图3是图2的实施例的散列表存储器的散列表的框图。

参考图2,本发明的实施例的去重dram存储器模块可以具有去重算法架构,其中去重dram存储器模块130内部的存储器空间被归类为3个不同区域。3个不同区域包括用于指示存储的被去重数据块位置的地址查找表(ltu)存储器(alutm)210、用于存储被去重数据块的散列表存储器220、和用于在散列表存储器的散列表的散列路(hashway)已满时存储数据的溢出/缓冲存储器230。

当数据块要被输入去重dram存储器模块130时,去重算法可以操作以确定该数据块是否是在alutm210中缺少任何对应地址的新的、之前未存储的数据块。为执行该操作,去重算法将访问alutm210。为确保相同数据块仅被存储为单个条目,alutm210内的指针(如,物理行id(plid),其进一步结合图5在下文描述)指示相同数据块被存储在散列表存储器220中的哪个位置。即,alutm210是用于将散列表内的位置(如,地址)与查找地址映射指针(如,plid)关联的储存设备。因而,如果数据块先前已被存储在散列表存储器220中,则alutm210内的指针能够指向其中存储了相同数据块的散列表存储器220的地址,从而消除了对于存储该数据块的重复拷贝的需要,从而增加了去重dram存储器模块130的存储容量。

参考图3,存储器去重可以使用相对高效但简单的多路散列表/散列阵列380,以确保高程度的去重,并且因而,确保去重dram存储器模块130的大存储器容量。本实施例的去重dram存储器模块130的散列表存储器220是一个或多个散列表380所处的位置,并且被用于确定数据块是否是唯一的。散列表380被认为是包含散列桶310(排)和散列路320(列)的二维阵列。即,本实施例的散列表380包括m排散列桶310,每个散列桶310包含n列指示散列桶310容量的数据行/槽/条目/散列路320(m和n是整数)。

数据块被存储在散列表存储器220的散列路320中,并且alutm210中的地址指针可以存储指示与特定数据块关联的特定散列桶310和特定散列路320的值。因而,地址(如,64比特地址)可被索引到alutm210中,并且由此,存储与该地址对应的数据块的散列表380的散列桶310的关联散列路320可被确定。

因而,在写入过程(如,64字节数据写入)期间,当接收到写请求(如,记录包含一个或多个数据块的传入数据的请求)时,使用散列函数/散列算法为传入数据计算散列值(即,传入数据被“散列”)以便相应散列桶310和散列路320可被确定。因而,散列值指示该数据块要被放置在哪里,或者,当该数据块(如,64字节数据块)是重复的时,散列值指示该数据块已存储在散列表存储器220的哪个位置。当数据内容被添加到存储器时,m个散列桶310中的一些可能最先达到容量。因而,去重dram存储器模块130包括溢出预备(overflowprovision),其使用缓冲存储器230来存储不能被输入散列表存储器220的数据块。此后,原始查找地址可被检索,并且alutm210可以根据从对所述传入数据进行散列而计算出的查找地址被更新。

缓冲存储器230可以在尝试写入过程期间当确定所有散列路320已满时使用。即,当散列表380填满时,数据可被放置在缓冲存储器230的非去重溢出区域,从而降低去重程度。因而,缓冲存储器230本质上是保留的、标准的、简单的溢出存储区域,其充当用于实现虚拟密度过度供应管理溢出的soc存储器缓冲/高速缓存。一旦数据被放置在缓冲存储器230中,数据就不再是散列的并且不能再被去重。

如果计算机应用多次试图向存储器存储相同序列值,那么存储在alutm210中转换阵列中的多个条目指代数据块存储在散列表存储器220中的同一地址,其中alutm210中的条目小于原始唯一数据块,从而允许高效压缩被实现。

m个散列桶310的每个可以进一步包括引用/频率计数行340和签名行330,引用/频率计数行340包括用于指示散列桶310的相应散列路320的唯一标识符。对于每个散列桶310,相应签名行330包含指示空行的0或用于内容查找最优化的非0次级散列值中的任一者。因而,对于内容查找,通常要么不存在要求基于签名行中0条目分配的空行的签名匹配,要么存在单个签名匹配以便数据行的后续读取和内容的比较确认重复的存在。m个散列桶310的每个可以进一步包括跳字行(在图中没有相应附图标记),其将参考图5a、5b和5c在下文进一步描述。

物理行id(plid)350可被用来将数据索引到散列表380。plid350可被用来识别存储器行,存储器行可被划分到alutm210、散列表存储器220或缓冲存储器230中的一个。每个存储器行可被称为以下二者之一:用于在散列表380中存储唯一内容的数据行,或用于存储若干plid350和用于提供从处理器总线地址到散列表380中被去重的数据块的映射的转换行。即,总线地址标识转换行,并且进一步识别转换行中包含相关plid350的条目,相关plid350进而指定特定的数据行。因而,plid350可被实现为包括溢出标志,并且可以包括用于指示特定相应散列表380的数据、相应散列桶比特和指示与plid350对应的数据块的位置的相应路比特。

对于每个散列桶310,存在一个关联的散列函数/散列算法“h(x)”,其是产生被用来将数据索引到散列桶310的log2(m)比特散列的算法(例如,如果散列表380有8个物理散列桶310,那么散列表380的散列函数将产生3比特散列)。即,散列函数h(x)允许相对大量的输入数据(如,要存储在存储器中的输入数据文件)被输入到散列函数h(x),并且基本上不同的较少量输出数据(如,散列值)由散列函数h(x)生成并且输出以存储在散列表380中。因而,散列函数h(x)使能压缩,因为不同数据集会偶尔散列为同一散列值。

在向去重存储器写入中,当接收到与数据文件对应的写请求时,去重存储器首先执行副本搜索以确定相同/重复的数据块是否已存储在散列表380中。去重存储器然后更新alutm210和散列表存储器220中的条目。例如,引用/频率计数行340可以通过更新散列表存储器220中原始查找地址的频率计数(即,减小1)来更新,并且其中当频率计数到达0时相应数据块被删除。更进一步,新plid350可以在alutm210中生成。

在可被称为内容查找的副本搜索期间,去重dram存储器模块130寻找意图被写入的数据文件或其部分的预先存在的实例。当存在散列表存储器220中存储的数据的预先存在的实例时,副本搜索返回指向相应数据行的plid350。当未发现数据的预先存在的实例时,则通过分配散列表380中的空间、在其中写内容并且返回新plid350,为相应数据块创建新数据行。该内容可通过在alutm210中以总线地址所确定的偏移量存储该plid350而被记录。

为向散列表380插入数据行“c”,c的相应散列函数“h(c)”可按数学运算来计算。一旦为数据行c计算了散列函数,散列表的行t(h(c))就可以通过内容查找操作来检查以了解是否有足够可用空间允许数据行c的插入(或了解数据行c的副本是否已在散列表380中)。

如所述,散列表380的每个散列桶310额外地包括签名行330和引用/频率计数行340,由于事实是签名行330的签名332和引用/频率计数行340的引用计数342可被设计成足够小以将若干量打包到每个散列桶310中,所以签名行330和引用计数行340的每个只占用单个散列路320。即,在散列表380中,散列表380的一整列可被指定为分别属于散列桶310的签名行330,并且一整列可被指定为分别属于散列桶310的引用/频率计数行340。

当诸如数据行“c”的实数据块被添加到散列表380时,散列表380开始被数据填充,该数据之后可以通过将存储在alutm210中的相应plid350和每个单独的被去重的数据行的散列表380内的地址匹配而被访问。散列表380内的地址可以通过识别数据所在的特定散列桶310和特定散列路320(如,识别散列表380的排和列)而被识别。因而,对于存储在散列表380中的每个数据块,存在由存储在alutm210中并且指向数据块的位置的相应plid350标识的一个或多个相应地址。一旦散列表380被填满数据,新产生的数据就被放置在非去重溢出区域/缓冲存储器230中,从而降低了去重程度。

在从去重存储器读取时,去重存储器返回来自散列表存储器220的数据行或来自缓冲存储器230的溢出行二者中任一个的拷贝。例如,当存储的数据要被中读取时,当接收到读请求时,使用存储在alutm210中的plid350查找散列表380的相应地址。然后,每个地址中的相应块被检索和重组。

图4是根据本发明的实施例的多散列表阵列的框图。

参考图4,根据本发明的实施例的去重dram系统架构使用包含多个散列表(mht)480的散列表阵列400,多个散列表480的每个包括m个散列桶410,每个散列桶410包括n个散列路420。尽管,本实施例将散列表480和散列桶410描述为就它们的维度而言是统一的(如,m和n被描述为整数),但其它实施例中,同一多散列表阵列中的不同散列表可以有不同数目的散列桶,并且类似地,该多散列表阵列内或甚至同一散列表内的不同散列桶可以有不同数目的散列路。更进一步,尽管多个散列表480被共同利用,但不同散列表480在某些方面彼此独立(如,不同散列表480可以有不同的各自的散列函数,或者可以有公共散列函数)。

如果散列表的阵列400包括“k”个并行散列表t1,t2,…,tk,(k是整数),其中每个散列表480分别使用单独、独立的散列函数h1(x),h2(x),…,hk(x),那么因为散列表t1,t2,…,tk的每个都包含m个散列桶410,以致散列函数h1(x),h2(x),…,hk(x)还产生log2(m)-比特的散列,并且因为每个物理桶410包含n个散列路420,所以该三维(3d)散列表阵列(如,多个散列表的阵列)的容量是mxnxk。

每个散列表480可以与单个散列函数对应,单个散列函数确定数据如何被索引。通过对要被写入的传入数据进行散列,计算结果(如,包括查找地址和键的散列值)可以与键和值比较,并且如果该值匹配,则相应散列桶410中的引用/频率计数行340增加,从而指示alutm210中另外的plid350指向该特定行。

不像传统散列表,本实施例的多个散列表480包括多个虚拟散列桶/虚拟桶460,虚拟桶460由多个物理散列桶/物理桶410组成。此后,术语“物理桶”将指代先前讨论的散列桶310,并且将被用来区分先前讨论的散列桶310和虚拟桶460。

每个虚拟桶460可以包括相应散列表480的m个物理桶410中的h个物理桶,h是小于m的整数。然而,应当注意,同一散列表480中的虚拟桶460中的不同虚拟桶可以共享一个或多个物理桶410。如以下将描述的,通过使用根据本发明的实施例的虚拟桶460,第四维度被添加到三维的多散列表阵列。因而,可以在安排和放置数据时提供更大的灵活性,从而提高去重dram系统的效率并且增加去重dram系统架构的压缩比。

由于存储在散列表480的一个中的数据块可以在相应虚拟桶460内移动,或者移动到不同物理桶410,以释放被其它虚拟桶460共享的其它物理桶410,所以本实施例使用虚拟桶460提高数据放置灵活性的程度。通过释放散列表480内的空间,去重可以通过移除废弃/重复的数据来实现。即,通过根据本发明的实施例的虚拟桶460的使用,不存在使用散列函数将数据行进行散列所导致的对于受限的相应位置的严格限制,并且数据能够被放置在“附近位置”的散列桶410,“附近位置”散列桶410指代在包括最初预期的(但未占用的)物理散列桶410的同一虚拟桶460内的物理桶410。

作为示例,内容(如,数据行c)要被放置到k个散列表t1(h1(c)),t2(h2(c)),…,tk(hk(c))中的一个的物理桶410的一个中。如果数据行c要被放置到t1(h1(c))中,代替要求数据行c要被放置在由t1(h1(c))表示的物理桶410中,那么本实施例允许大于单个物理桶410并且包括由t1(h1(c))表示的物理桶410、而且包含总计h个物理桶410的虚拟桶460。即,虚拟桶460包含在散列表480内排列的h个邻近或相邻的物理桶410的聚集,包括t1(h1(c)),t1(h1(c)+1),t1(h1(c)+2),…,t1(h1(c)+h-1)。

因而,虚拟桶460允许数据块在散列表480内移动或者释放空间用于将来的写操作。允许先前被写入散列表480的数据块(在包含散列表480的物理桶410的虚拟桶460内)移动的本实施例的操作,可被称为跳房子(hopscotch)。如下所述,可以改进使用多个散列表480用于存储器去重的跳房子操作。

首先,作为散列表480的散列函数的结果,去重dram存储器模块130可以试图将数据行c插入到散列表480。然而,有时候,作为相同的散列函数的结果,不同数据行可能在之前被输入散列表480。即,不同数据行,尽管不同,但作为散列函数的结果,其可被指向散列表480内的同一位置。为确定数据行c应被插入到哪里,该操作可以最先在被表示为t(h(c))的物理桶410处或其后面寻找第一可用物理桶410。

因而,在确定向哪里写入数据行c时,因为被表示为t(h(c))的最初预期的物理桶410可能被占用,所以第一可用物理桶410(即,数据行可以插入的第一空的空间)可被表示为t(h(c)+f),其中f是0或更大。假定被表示为t(h(c))的物理桶410是相应虚拟桶460的h个物理桶410中的第一物理桶410,如果f小于h(即,如果同一虚拟桶460内存在未被占用的物理桶410),那么数据行c可被放置到相应虚拟桶460。类似地,如果被表示为t(h(c))的物理桶410是相应虚拟桶460的第二物理桶,那么如果f小于h-1,则数据行c可被放置到相应虚拟桶460。

然而,并且假定相应虚拟桶460的第一物理桶410是预期的物理桶410,如果f大于或等于h(即,没有数据行c可以适合放入的虚拟桶460的物理桶410),尽管数据行c不适合放入其虚拟桶460,但该操作可以试图用以下方式在虚拟桶460中创建空的空间。例如,本发明的实施例的去重dram存储器模块130可以查看物理桶410,从由t(h(c)+f-h)表示的物理桶410开始、然后是由t(h(c)+f-h+1)表示的物理桶410等等,直到确定由t(h(c)+f-1)表示的物理桶410其中是否包括数据为止(如,可以从头至尾扫描虚拟桶460)。去重dram存储器模块130可以随后确定包含在从t(h(c)+f-h)到t(h(c)+f-1)的物理桶410内的任何数据对象是否可被放置到空的空间t(h(c)+f)。即,去重dram存储器模块130可以确定从t(h(c)+f-h)到t(h(c)+f-1)的物理桶中的任何物理桶是否与物理桶t(h(c)+f)位于公共虚拟桶460中,从而允许包含在其中的数据被移动。去重dram存储器模块130然后可以将最早找到的这些数据对象放置在空的空间中,从而在由t(h(c)+e)(e是小于f的整数)表示的物理桶410中创建新的空的空间。该过程可被重复直到e小于h(如,数据可以以级联方式在散列表内移动),从而释放足够的空间以允许将数据行c放置在相应虚拟桶460中。

例如,并且参考图5b,本示例中,将指定物理桶pb2作为预期的物理桶410。因为预期的物理桶pb2与虚拟桶vb1关联地被占用,所以可以从头至尾(如,从物理桶pb2到物理桶pb5)扫描虚拟桶vb2。因为物理桶pb3、pb4和pb5也被占用,所以第一可用物理桶410是物理桶pb6(即,f等于4,并且因而大于或等于h,并且第一可用物理桶410不在相应虚拟桶vb2中)。因而,物理桶pb5中的数据可被移动到物理桶pb6,从而释放虚拟桶vb2中的空间,以便数据行c可被放置在相应虚拟桶vb2中(物理桶pb5中)。然而,如果预期的物理桶是pb1(即,相应虚拟桶460是vb1),则该过程可被重复以便物理桶pb4中的数据可从虚拟桶vb1向邻近虚拟桶vb2移动,即,移动到最新释放的物理桶pb5的空间。此后,数据行c可被写入与预期物理桶pb1相应的虚拟桶vb1的物理桶pb4中。

因而,由于不同虚拟桶460共同拥有某些物理桶410,其可被认为是不同虚拟桶460的重叠,所以数据可以从一个虚拟桶460向另一虚拟桶460移动,从而为最初的散列表410创建空间。

另一实施例中,在写入过程期间,当接收到向散列表的阵列400写入数据块的请求时,去重dram存储器模块130可以查找每个散列表数据的整个虚拟桶460以检查现有条目是否已在散列表480的一个中。如果第一预期散列表480已满,并且如果未在第一预期散列表480中找到该数据块(即,每个物理桶410的每条散列路420被不同数据块占用),则去重dram存储器模块130可以试图将数据写入散列表阵列400的另一散列表480中。然而,如果多散列表阵列400的所有散列表480已满,则该数据块将“溢出”到缓冲存储器230。这样的实施例中,去重dram存储器模块130可以不允许散列表阵列400内数据的移动。

图5a、5b和5c描述根据本发明的实施例用于生成跳字(hopword)以将虚拟桶与特定物理桶关联的二维阵列。

参考图5a、5b和5c,根据本实施例,各种虚拟桶460可以通过使用跳字值591或跳字矢量592二者中的任一个并且通过使用虚拟桶利用值而与它们的相应物理桶410关联,从而高效追踪数据移动。因为每个占用的物理桶410可以只与单个虚拟桶460对应,所以跳字值591或跳字矢量592可被用来追踪哪个虚拟桶460与每个占用的物理桶410对应。

本示例中,4个虚拟桶vb0、vb1、vb2和vb3每个都具有来自物理桶pb0、pb1、pb2、pb3、pb4、pb5和pb6的组中的4个相邻物理桶的不同集(即,h等于4)。

例如,参考图5a和图5b,跳字矢量592可以通过创建包含物理桶位置和虚拟桶位置(如,准地址)的二维阵列并且通过在包含用于每个虚拟桶460的数据的每个物理桶410中放置1(如,二进制指示符)来确定,注意到,至多单个1可以在与物理桶410对应的任意列中。因而,跳字矢量592可以包括1和0的阵列,其可被用来追踪每个虚拟桶460对物理桶的使用。本示例中,物理桶pb0、pb1和pb3被第一虚拟桶vb0占用,物理桶pb2和pb4被第二虚拟桶vb1占用,只有物理桶pb5被第三虚拟桶vb2占用,并且第四虚拟桶vb3是未占用的。

类似地,并且参考图5c,跳字值591可以基于占用的物理桶410、通过知道哪个虚拟桶460与之对应而创建。跳字值591可以是log2(h)比特长(h是每个虚拟桶460的物理桶410的数目)。

跳字矢量592或跳字值591的信息可存储在用于每个散列桶410的跳字行(图4中没有相应的附图标记)中,以便物理桶410和虚拟桶460之间的关系可在存储器中被索引。

图6是根据本发明的实施例用于寻址散列表存储器中的数据块的物理行id(plid)的框图。

参考图6,根据本发明的实施例,提供了修改的plid650。本发明的实施例的plid650包括分别指示地址、偏移、表的索引、散列和槽/路(slot/way)的多个比特、以及与特定虚拟桶460配对以追踪在虚拟桶460之间移动的对象的键651。因而,如果键651与特定虚拟桶460匹配,则该特定虚拟桶460可以具有被写入其中的数据对象。

然而,在另一实施例中,plid650用虚拟桶利用值字段652(如,虚拟桶索引)替换键651,虚拟桶利用值字段652包含log2(h)个比特(如,高度为16个物理桶的虚拟桶将与plid650中的4比特虚拟桶利用值字段对应)。虚拟桶利用值字段652指示哪个虚拟桶460与每个占用的物理桶410对应。因而,当向虚拟桶460写入数据对象时,已存在于虚拟桶460中的对象的数目可被计算,并且值p,其等于虚拟桶中已存在的条目的数量加上1,可被写为虚拟桶利用值652。通过使用plid650中的虚拟桶利用值652,plid650的存储开销可被减少。

图7是示出了根据本发明的实施例用于使用跳房子(hopscotch)方法向存储器模块的多散列表阵列写入数据的过程的流程图。

参考图7,操作s701中,多个散列表可被识别,散列表的每个与散列函数对应,并且每个包括物理散列桶,每个物理散列桶包括散列路并且被配置为存储数据(如,去重dram存储器模块130可以识别k个散列表480,每个与散列函数h(x)对应,每个包括m个物理散列桶410,每个物理散列桶包括n个散列路420)。

操作s702中,多个虚拟桶可被识别,虚拟桶的每个包括物理散列桶的一些,并且每个与另一虚拟桶共享至少一个物理散列桶(如,去重dram存储器模块130可以识别多个虚拟桶460,虚拟桶460的每个包括m个物理散列桶410中的h个,并且每个虚拟桶460与另一虚拟桶460共享物理散列桶410中的至少一个,如图4所示)。在操作s702a处,通过用包括log2(h)个比特的虚拟桶利用值字段并且包括等于虚拟桶中的相应一个中的数据块的数目的值的物理行id(plid)来索引散列表,并且通过当对象被写入所述虚拟桶中的相应一个时将虚拟桶利用值字段增加1,可以识别多个虚拟桶(如,通过用如图6所示的包括虚拟桶利用值字段652并且包括等于虚拟桶460中的相应一个中的数据块的数目的值的物理行id(plid)650来索引散列表480,可以识别虚拟桶460,其中当向虚拟桶460中的相应一个写入对象或数据块时,可以将虚拟桶利用值字段652增加1)。

操作s703处,其上存储了数据的物理散列桶的每个可被识别为被指定给虚拟桶中的单个相应虚拟桶(如,去重dram存储器模块130可以将其上存储了数据的物理散列桶410(pb0、pb1、pb2、pb3、pb4和pb5)识别为被指定给虚拟桶460(vb0、vb1和vb2)中的单个相应虚拟桶,如图5b和图5c所示)。操作s703a处,可以通过生成用于指示包含数据的哪个物理散列桶对应哪个虚拟桶的跳字矢量或跳字值来识别物理散列桶(如,去重dram存储器模块130可以生成用于指示包含数据的哪个物理散列桶410与哪个虚拟桶460对应的跳字矢量592或跳字值591,如图5b和图5c所示)。

操作s704处,数据行可以根据散列函数中的相应一个被散列以产生散列值(如,去重dram存储器模块130可以从存储器控制器120接收与数据行c对应的写请求,并且可以根据散列函数h(x)中的相应一个来散列传入的数据以产生散列值)。

操作s705处,可以确定,根据该散列值,相应散列表的虚拟桶的相应一个是否有用于数据块的可用空间(如,去重dram存储器模块130可以确定虚拟桶460vb3在物理桶pb6中有用于数据块的空间,如图5b和图5c所示)。

操作s706处,当虚拟桶中的相应一个没有可用空间时,数据可从虚拟桶中的该相应一个向虚拟桶中的邻近一个顺序地移动,直到虚拟桶中的相应一个有用于数据块的空间(如,去重dram存储器模块130可以,当虚拟桶vb2没有任何其它可用物理桶时,将数据从虚拟桶vb2的物理桶pb5顺序地移动到虚拟桶vb3,直到虚拟桶vb2有用于数据块的空间为止,如图5b和图5c所示,其中如果虚拟桶vb1是虚拟桶460中的相应一个,则该过程可被重复以将数据从虚拟桶vb1的物理桶pb4移动到虚拟桶vb2的物理桶pb5)。操作s706a处,地址查找表存储器可被更新以改变与被移动的数据块对应的一个或多个查找地址(如,去重dram存储器模块130可以更新alutm210以改变与被移动的数据块对应的一个或多个地址指针,以便散列表存储器220中被移动的数据块的新地址可被检索)。

操作s707处,数据块可被存储在虚拟桶中的相应一个(如,如果虚拟桶vb1是预期的虚拟桶460,则去重dram存储器模块130可以将数据块存储在虚拟桶vb1的物理桶pb4中,如图5b和图5c所示)。如果确定包括虚拟桶vb1的散列表480已满,则数据块可被存储在缓冲存储器230中。

图8是示出了根据本发明的实施例用于从存储器模块的多散列表阵列读取数据的过程的流程图。

操作s801处,与存储在散列表阵列中的多个数据块对应的读请求可被接收(如,去重dram存储器模块130可以接收来自存储器控制器120的与构成数据行c的多个数据块对应的读请求,该数据块存储在散列表存储器220中的散列表阵列400里)。

操作s802处,与多个数据块对应的指针中的相应指针可以从alutm210检索(如,去重dram存储器模块130可以从alutm210检索与构成数据行c的多个数据块对应的地址指针)。

操作s803处,可在散列表存储器中访问基于指针中的所述相应指针的所述多个数据块(如,去重dram存储器模块130可以从散列表存储器220中的散列表阵列400内的不同地址访问和检索所述数据块,不同地址与被检索的地址指针对应)。

操作s804处,多个数据块可被重组以产生的重组数据(如,去重dram存储器模块130可以重组从散列表存储器220检索的数据块以产生重组的数据,该重组的数据可以等同于与接收到的读请求对应的数据行c)。

操作s805处,重组数据可从存储器模块发送到存储器控制器(如,去重dram存储器模块130可以向存储器控制器120发送数据行c)。

如上所述,数据去重可以使用本发明的实施例的去重dram存储器模块来执行。因而,对存储器的访问可以被减少,并且dram系统的寿命可以被延长。

前述是示例实施例的阐述,并且不被解释为对其的限制。尽管已描述了少量示例实施例,但本领域技术人员将容易理解,在实质上不脱离示例实施例的新教学和优点的情况下,许多修改在示例实施例中是可能的。因而,所有这些修改意图被包括在权利要求限定的示例实施例的范围内。权利要求中,手段加功能的条款意图覆盖本文所述的作为执行所列功能的结构,并且不仅包括结构上的等同物,还包括等同的结构。因而,要理解,前述是示例实施例的阐述并且不被解释为限制所公开的特定实施例,并且对所公开的示例实施例的修改和其它示例实施例意图被包括在所附权利要求的范围内。发明构思由后面的权利要求和要被包括在其中的权利要求的等同物限定。

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