重复删除DRAM系统算法架构的制作方法

文档序号:11773923阅读:300来源:国知局
重复删除DRAM系统算法架构的制作方法与工艺

对相关申请的交叉引用

本申请要求于2016年3月31日向美国专利商标局提交的第62/316,402号美国临时专利申请的优先权及权益,该美国临时专利申请的全部内容通过引用整体并入本文。

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



背景技术:

数据重复删除或数据重复消除指的是减少存储器设备中的冗余数据,从而降低存储设备的容量成本。在数据重复删除中,数据对象/项(例如,数据文件)被划分为一个或多个数据线/组块(chunk)/块。通过将由相同的数据构成的多个数据块与单个存储的数据块相关联,可以经由计算机存储器来减少或消除数据块的重复副本,从而减少存储器设备中数据的冗余副本的总量。数据的冗余副本的减少可能增加读取延迟和存储器带宽,并且可能潜在地引起电力节约。

因此,如果数据的重复副本可以被减少为数据的单个副本,则在使用相同量的物理资源时,存储器设备的总体可用容量增加。因为作为结果的(resultant)存储器设备的节省允许数据重写计数的减少,并且因为可以忽略对于在存储器中已经存储的重复的数据块的写入请求,所以通过有效地增加写入耐久性,可以延长实施了数据重复删除的存储器设备的寿命。

数据重复删除的传统方法可以使用存储器中(in-memory)重复删除技术,据此重复删除引擎按照cpu中心式方法与cpu或存储器控制器(mc)集成。这样的方法通常实施重复删除缓存(ddc),该重复删除缓存与存储器控制器一起操作,以使得cpu处理器知晓重复并且尝试根据存储器控制器的控制来提供重复删除的存储器操作(例如,内容查找、参考(reference)计数更新等)。重复删除的方法还可以实施直接转换缓冲器(dtb),该直接转换缓冲器为用于对转换线进行缓存以通过从关键路径移除转换取回(translationfetch)来改善数据读取的缓存,并且可以与旁路(lookaside)缓冲器类似。

重复删除最为常见地被用于硬盘驱动器。然而,对于在诸如动态随机存取存储器(dram)的易失性存储器的区域中提供精细粒度的重复删除存在兴趣。

在背景技术部分中所公开的以上信息仅用于增强对本发明的背景的理解,并且因此,其可能包含不构成现有技术的信息。



技术实现要素:

本公开的实施例的方面针对动态随机存取(dram)系统中的存储器重复删除。

根据本发明的实施例,提供了一种被配置为内部地执行存储器重复删除的重复删除存储器模块,该存储器模块包括:哈希表存储器,用于将多个数据块存储在包括哈希表的哈希表阵列中,哈希表中的每个包括物理桶(physicalbuckets)和多个虚拟桶,虚拟桶中的每个包括物理桶中的一些,物理桶中的每个包括路;地址查找表存储器(alutm),包括多个指针,所述多个指针指示在物理桶中的相对应的一个物理桶中所存储的数据块中的每个的位置;和缓冲存储器,用于当哈希表阵列为满时,存储未被存储在哈希表存储器中的唯一的数据块;处理器;以及存储器,其中,存储器在其上存储有指令,该指令当由处理器执行时使得存储器模块与外部系统交换数据。

存储器模块可以是片上系统动态随机存取存储器(dram)。

存储器模块可以被配置为:接收与应用模式历史池、重复删除算法池或重复删除算法选择策略中的至少一个相对应的信息;以及基于所接收的信息来定义一个或多个重复删除算法。

存储器模块可以被配置为接收用于设置重复删除线大小、哈希表的数量、哈希表之一中的物理桶的数量、物理桶之一中的路的数量或者虚拟桶之一中的物理桶的数量中的至少一个的指令。

存储器模块可以被配置为接收用于针对哈希表中的每个来设置哈希函数的指令。

存储器模块可以被配置为接收用于定义哈希表存储器、alutm或缓冲存储器中的至少一个的指令。

存储器模块可以被配置为:接收与进入的(incoming)数据块相对应的写入请求;当接收到写入请求时,对进入的数据块进行哈希化以生成哈希值;确定与哈希值相对应的值是否被存储在哈希表存储器中;取回与在哈希表存储器中所存储的值相对应的指针中的相对应的指针;对alutm中的指针中的相对应的指针进行更新;以及对哈希表存储器中的指针中的相对应的指针的频率计数进行更新。

存储器模块可以被配置为:接收读取请求;从alutm取回指针中的相对应的指针;从哈希表存储器取回与指针中的相对应的指针相关联地存储的数据块之一;以及将所存储的数据块之一返回到外部系统。

根据本发明的实施例,提供了一种存储器模块中的存储器重复删除的方法,该方法包括:在存储器模块中定义:哈希表存储器,用于将数据块存储在包括哈希表的哈希表阵列中,哈希表中的每个包括物理桶和多个虚拟桶,虚拟桶中的每个包括物理桶中的一些,物理桶中的每个包括路;地址查找表存储器(alutm),包括指示所存储的数据块中的每个在物理桶中的哪个物理桶中的多个指针;和缓冲存储器,用于当哈希表阵列为满时,存储未被存储在哈希表存储器中的数据块;该方法还包括:根据重复删除算法将数据块存储在哈希表存储器或缓冲存储器中。

该方法可以进一步包括将重复删除算法选择为:由与存储器模块相关联的软件或驱动所定义的非适应性的重复删除算法;或者基于由存储器模块所接收的信息的适应性重复删除算法。

该方法可以进一步包括从耦合到存储器模块的存储器控制器接收信息,所接收的信息确定重复删除线大小、哈希表的数量、哈希表之一中的物理桶的数量、物理桶之一中的路的数量或者虚拟桶之一中的物理桶的数量中的至少一个,其中,非适应性重复删除算法可以基于所接收的信息,并且可以通过与存储器模块相关联的驱动来设置所接收的信息。

该方法可以进一步包括通过基于非适应性重复删除算法使用驱动创建区域来确定哈希表存储器、alutm和缓冲存储器的区域。

该方法可以进一步包括接收针对哈希表中的每个的哈希算法,该哈希算法由驱动基于非适应性重复删除算法来选择。

该方法可以进一步包括:接收与应用模式历史池、重复删除算法池或重复删除算法选择策略中的至少一个相对应的信息;以及基于信息来设置自适应重复删除算法。

该方法可以进一步包括:使用与存储器模块相关联的驱动来选择预处理算法;接收预处理算法;以及创建重复删除算法。

根据本发明的实施例,提供了一种存储器模块中的存储器重复删除的方法,该方法包括:在存储器模块中定义:哈希表存储器,用于将数据块存储在包括哈希表的哈希表阵列中,哈希表中的每个包括物理桶和多个虚拟桶,虚拟桶中的每个包括物理桶,物理桶中的每个包括路;地址查找表存储器(alutm),包括多个指针,所述多个指针指示在物理桶中的相对应的一个物理桶中所存储的数据块中的每个的位置;和缓冲存储器,用于当哈希表阵列为满时,存储未被存储在哈希表存储器中的数据块;接收与进入的数据块相对应的写入请求;通过对进入的数据块执行哈希函数来计算哈希值;根据哈希值来访问物理桶中的期望的物理桶;确定进入的数据块是否被存储在期望的物理桶中;以及当与进入的数据块不同的另一个数据块被存储在期望的物理桶中时,将进入的数据块存储在虚拟桶中的期望的物理桶位于其中的一个虚拟桶的物理桶之一中。

该方法可以进一步包括当进入的数据块被存储在期望的物理桶中时,对alutm中的指针中的相对应的指针进行更新。

该方法可以进一步包括将与指针中相对应的指针相对应的频率计数减小1。

该方法进一步包括当频率计数达到0时,删除存储在期望的物理桶中的进入的数据块。

该方法可以进一步包括接收与在哈希表阵列中所存储的多个数据块相对应的读取请求;从alutm取回与多个数据块相对应的指针中的相对应的指针;在哈希表存储器中,基于指针中的相对应的指针来访问多个数据块;重编多个数据块以产生重编的数据;以及将重编的数据从存储器模块发送到存储器控制器。

附图说明

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

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

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

图3是图2的实施例的哈希表存储器的哈希表的框图;

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

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

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

图7是示出了根据本发明的实施例用于使用跳转阻止(hopscotch)方法将数据写入存储器模块的多哈希表阵列的处理的流程图;以及

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

具体实施方式

通过参考对实施例和附图的下面的详细描述,可以更加容易地理解本发明构思的特征以及实现该特征的方法。在下文中,将参考附图来更加详细地描述示例实施例,在附图中,相同的附图标记始终指代相同的元件。然而,本发明可以按照各种不同的形式来体现,并且不应当被解释为仅限于本文中所示的实施例。更确切地说,作为示例提供这些实施例,以使得本公开将是充分的和完整的,并且将全面地向本领域技术人员传达本发明的方面和特征。因此,对于本领域普通技术人员完整地理解本发明的方面和特征非必要的处理、元件和技术,可以不进行描述。除非另外地指明,否则贯穿附图和所撰写的描述,相同的附图标记指示相同的元件,并且因此,将不重复对其的描述。在附图中,为了清楚,可以夸大元件、层和区域的相对大小。

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

为了解释的方便,在本文中可以使用诸如“在……下方”、“在……以下”、“下方”、“在……之下”、“在……以上”、“上方”等空间相对术语来描述一个元件或特征与另外的(一个或多个)元件或(一个或多个)特征的关系,如附图所示。将理解的是,除了在附图中所描绘的定向之外,空间相对术语还意欲包含设备在使用中或操作中的不同的定向。例如,如果附图中的设备被翻转,则被描述为“在其他元件或特征以下”或“在其他元件或特征下方”或“在其他元件或特征之下”的元件然后将被定向为“在其他元件或特征以上”。因此,示例术语“在……以下”和“在……之下”可以包含以上和以下的定向两者。设备可以按照另外的方式被定向(例如,旋转90度或其他任何定向)并且在本文中所使用的空间相对描述符可以相应地解释。

将理解的是,当元件、层、区域或组件被称为“在另一个元件、层、区域或组件上”、“连接到另一个元件、层、区域或组件”或者“耦合到另一个元件、层、区域或组件”时,其可以直接地在该另一个元件、层、区域或组件上,直接地连接到该另一个元件、层、区域或组件或者直接地耦合到该另一个元件、层、区域或组件;或者可以存在一个或多个居于中间的元件、层、区域或组件。另外,还将理解的是,当元件或层被称为“在两个元件或层之间”时,其可以是两个元件或层之间仅有的元件或层;或者还可以存在一个或多个居于中间的元件或层。

在下面的示例中,x轴、y轴和z轴不限于直角坐标系的三个轴,并且可以按照更宽泛的意味来解释。例如,x轴、y轴和z轴可以彼此垂直,或可以表示不彼此垂直的不同方向。

在本文中所使用的术语出于仅描述特定的实施例的目的,而不意欲对本发明进行限制。当在本文中使用时,单数形式“一”和“一个”也意欲包括复数形式,除非上下文清楚地指示并非如此。将进一步理解的是,当在本说明书中使用时,术语“包括”、“包括有”、“包含”和“包含有”指明所阐述的特征、整数、步骤、操作、元件和/或组件的存在,但是不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其分组的存在或添加。当在本文中使用时,术语“和/或”包括相关列举项中的一个或多个的任何和所有组合。诸如“……中的至少一个”的表述当在元件列表之后时,修饰整个元件列表而不修饰列表中的单个元件。

当在本文中使用时,术语“基本上”、“大约”以及类似术语被用作近似术语而非程度术语,并且意欲解释(accountfor)本领域普通技术人员将认识到的测量值或计算值中的固有偏差。此外,当描述本发明的实施例时“可以”的使用指代“本发明的一个或多个实施例”。当在本文中使用时,术语“使用”、“使用于”和“被使用于”可以被认为分别地与术语“利用”、“利用于”和“被利用于”同义。另外,术语“示意性的”意欲指代示例或图示。

当可以不同地实施特定的实施例时,可以与所描述的顺序不同地来执行特定的处理顺序。例如,两个连续地描述的处理可以基本上同时执行或者可以按照与所描述的顺序相反的顺序执行。

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

除非另外地定义,否则在本文中使用的术语(包括技术术语和科学术语)具有与本发明所属领域的普通技术人员通常所理解的含义相同的含义。将进一步理解的是,术语——诸如在通用词典中所定义的术语——应当被解释为具有与其在相关技术的上下文和/或本说明书中的含义相一致的含义,并且不应当按照理想化的或过于正式的意味被解释,除非在本文中明确地如此定义。

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

参考图1,为了如计算机存储器那样起作用,重复删除的存储器执行被称为“转换(translation)”的功能,以记录原始数据内容与已经被重复删除的一组唯一的存储块之间的关系,所记录的关系以压缩形式被记忆。例如,原始数据的地址可以被存储在查找表中。

通常,cpu的处理器110缺乏对物理存储器(例如,重复删除dram存储器模块130)的直接访问,替代地,该物理存储器由存储器控制器120作为存储线的阵列来管理。cpu中心式重复删除系统试图在数据到达存储器系统之前在cpu内部对数据进行缓存。

与传统的cpu中心式重复删除相反,本实施例的重复删除dram系统架构100使用存储器中心式重复删除,这意味着重复删除dram存储器模块130可以在没有来自处理器110的命令的情况下执行存储器重复删除。重复删除dram系统架构100还使用在重复删除dram存储器模块130中所存储的可配置的重复删除算法来提高存储器的容量收益,从而提供大容量存储器解决方案。即,不同于cpu中心式重复删除,本实施例的重复删除dram系统架构100具有在ram模块(例如,重复删除dram存储器模块130)内所包括的所有重复删除情报(intelligence)。因此,能够在不为cpu模块140所知的情况下,在重复删除dram存储器模块130内执行重复删除,从而允许增加dram存储器模块130的容量。即,因为重复删除为精细粒度并且在易失性存储器内(例如,在dram存储器模块130内)进行操作,所以本实施例的所有重复删除情报发生在dram存储器模块130自身内,而同时cpu中的内核模块140可以不知晓在dram存储器模块130内所执行重复删除操作的具体内容。

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

另外,尽管可以对现存的dram存储器模块进行一些改变以实施本实施例(例如,驱动升级),但是软件实施方式允许使用本实施例的重复删除dram系统架构100,而不对操作系统/cpu140或处理器110进行物理改变。

本实施例的重复删除dram系统架构100可以在重复删除dram存储器模块130上实施片上系统(soc)以用于dram情报协议,诸如重复删除、内容可寻址性、安全性、存储器中处理器(pim)、行地址选通(ras)等等,行地址选通(ras)是被发送到dram以告知dram相关联的地址是行地址的信号,据此dram中的数据比特被存储在根据列地址和行地址的交叉所定位的单元中。

重复删除dram系统架构100还可以具有智能系统软件,其使得处理器110允许与存储器控制器120相关的虚拟密度(density)管理、智能数据替换以及dram情报应用编程接口(api)等等。

dram存储器模块130可以进一步具有3dsdram组件,诸如最高容量dram存储器模块,其具有多个形状因子(例如,双列直插存储器模块(dimm)、2.5英寸、全高、半高(fhhl)、半高半长(hhhl)、全高全长(fhfl)等等)。

因此,通过使用本实施例的重复删除dram系统架构100提供存储器中心式重复删除系统,可以在存储器接口处直接地执行重复删除写入处理,从而增加dram130的容量。

图2是图1的实施例的重复删除dram存储器模块中的存储器类型的框图;而图3是图2的实施例的哈希表存储器的哈希表的框图。

参考图2,本发明的实施例的重复删除dram存储器模块可以具有重复删除算法架构,其中,dram存储器模块130内部的存储器空间被分类为三个不同区域。三个不同区域包括:地址查找表(lut)存储器(alutm)210,用于指示所存储的重复删除的数据块的位置;哈希表存储器220,用于存储重复删除的数据块;以及溢出/缓冲存储器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列的数据线/槽/条目/哈希路320,其指示哈希桶310的容量(m和n是整数)。

数据块被存储在哈希表存储器220的哈希路320中,并且alutm210中的地址指针可以存储指示与特定的数据块相关联的特定的哈希桶310和特定哈希路320的值。因此,地址(例如,64位地址)可以被索引编制到alutm210中,并且据此,可以确定存储与地址相对应的数据块的哈希表380的哈希桶310的相关联的哈希路320。

因此,在写入处理(例如,64字节数据写入)期间,当接收到写入请求(即,用于记录包括一个或多个数据块的进入数据的请求)时,使用哈希函数/哈希算法针对进入数据来计算哈希值(即,对进入数据进行“哈希化”),以使得可以确定相对应的哈希桶310和路320。即,通过对进入的数据进行哈希化,可以确定数据是唯一的还是已经被存储在哈希表380中。因此,哈希值指示将要放置数据块的地点,或者,当数据块(例如,64字节的数据块)是重复的时,哈希值指示哈希表存储器220中已经存储有数据块的地点。当数据内容被添加到存储器时,m个哈希桶310中的一些可以首先达到容量。因此,重复删除的dram存储器模块130包括溢出条款(overflowprovision),其使用缓冲存储器230以用于存储不可以进入哈希表存储器220的数据块。之后,可以取回原始查找地址,并且可以依照根据对进入数据进行哈希化所计算出的查找地址来更新alutm210。

当在尝试写入处理期间确定所有哈希路320为满时,使用缓冲存储器230。即,当哈希表380填满时,数据被放置在缓冲存储器230的非重复删除的溢出区域中,从而降低重复删除等级。因此,缓冲存储器230本质上是预留的、标准的、简单的溢出存储器区域,其用作soc存储器缓冲/缓存以用于实施虚拟密度过量提供(over-provision)管理溢出。一旦数据被放置在缓冲存储器230中,则其不再被哈希化并且不再可以被重复删除。

如果计算机应用试图将相同的值序列存储到存储器多次,则在alutm210中所存储的转换阵列中的多个条目参考哈希表存储器220中的其中存储有数据块的同一地址,其中,alutm210中的条目小于原始的唯一的数据块,从而允许实现有效的压缩。

m个哈希桶310中的每个可以进一步包括:参考/频率计数线340,包括用于指示哈希桶310的相对应的哈希路320的唯一标识符;以及签名线330。对于每个哈希桶310,相对应的签名线330包含零值以指示自由线或者包含非零次要(secondary)哈希值以用于内容查找优化。因此,对于内容查找,通常不存在需要基于签名线中的零值条目所分配的自由线的签名匹配;或者存在单个签名匹配以使得随后的数据线的读取和内容的比较确认重复的存在。m个哈希桶310中的每个可以进一步包括跳转词线370,以下将参考图5a、图5b和图5c进一步对其进行描述。

物理线id(plid)350可以被用于将数据索引编制到哈希表380中。plid350可以被用于识别存储线,其可以被划分到alutm201、哈希表存储器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),以及通过要被存储在哈希表380中的哈希函数h(x)来生成和输出本质上不同的较小量的输出数据(例如,哈希值)。因此,当偶然地可能将不同的数据集哈希化为同一哈希值时,哈希函数h(x)使得能够进行压缩。

在写入到重复删除的存储器中时,当接收到与数据文件相对应的写入请求时,重复删除的存储器首先执行重复搜索以确定相同的/重复的数据块是否已经被存储在哈希表380中。然后,重复删除的存储器对alutm210和哈希表存储器220中的条目进行更新。例如,可以通过对哈希表存储器220中的原始查找地址的频率计数进行更新(即,降低1)来更新参考计数线340,并且其中,当频率计数达到0时删除相对应的数据块。此外,可以在alutm210中生成新的plid350。

在可以被称为内容查找的重复搜索期间,重复删除dram存储器模块130寻找意欲被写入的数据文件的之前存在的实例或其一部分。当存在被存储在哈希表存储器220中的数据的之前存在的(pre-existing)实例时,重复搜索返回指向相对应的数据线的plid350。当未发现数据的之前存在的实例时,则通过分配哈希表380中的空间、将内容写入其中以及返回新的plid350来针对相对应的数据块创建新的数据线。可以通过以由总线地址确定的偏移将plid350存储在alutm210中来记录内容。

为了将数据线“c”插入到哈希表380中,c“h(c)”的相对应的哈希函数可以被计算为数学运算。一旦针对数据线c计算了哈希函数,则可以通过内容查找操作来检查哈希表t(h(c))的行,以查看是否存在允许数据线c的插入的足够的可用空间(或查看重复的数据线c是否已经在哈希表380中)。

如所提及地,哈希表380中的每个哈希桶310额外地包括签名线330和参考计数线340,签名线330和参考计数线340中的每个仅占用单个哈希路320,这是由于签名线320的签名332和参考计数线340的参考计数342可以被设计为足够小以将若干量装入每个哈希桶310的事实。即,在哈希表380中,哈希表380的一个整个列可以被指派给分别地属于哈希桶310的签名线330,并且一个整个列可以被指派给分别地属于哈希桶310的参考计数线340。

当诸如数据线“c”的真实的数据块被添加到哈希表380中时,哈希表380开始被数据填充,该数据可以稍后通过将在alutm210中所存储的相对应的plid350与每个单独的重复删除的数据线在哈希表380内的地址进行匹配来访问。可以通过识别数据位于其中的特定的哈希桶310和特定的哈希路320(例如,识别哈希表380的行和列)来识别哈希表380内的地址。因此,对于在哈希表380中所存储的每个数据块,存在通过相对应的(一个或多个)plid350所识别的、在alutm210中所存储的以及指向数据块的位置的一个或多个相对应的地址。一旦哈希表380被数据填满,则新近引入的数据被放置在非重复删除的溢出区域/缓冲存储器230中,从而降低重复删除等级。

在从重复删除的存储器进行读取时,重复删除的存储器返回来自哈希表存储器220的数据线或来自缓冲存储器230的溢出线的副本。例如,当接收到读取请求、所存储的数据要被读取时,使用在alutm210中所存储的plid350来查找哈希表380的相对应的地址。然后,取回并且重编(reassemble)每个地址中的相对应的块。

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

参考图4,根据本发明的实施例的重复删除dram系统使用哈希表阵列400,该哈希表阵列400包括多个哈希表(mht)480,多个哈希表(mht)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)仍然产生logm比特哈希;并且因为每个哈希桶410包含n个哈希路420,所以3维(3d)哈希表阵列(例如,多哈希表阵列)的容量为m×n×k。

每个哈希表480可以对应于单个哈希函数,该哈希函数确定如何对数据进行索引编制。通过对要被写入的进入数据(incomingdata)进行哈希化,作为结果的计算(例如,包括查找地址和键的哈希值)可以与键和值进行比较,并且如果值匹配,则增加相对应的哈希桶410中的参考计数线340,从而指示alutm210中的额外的plid350指向特定的线。

不同于传统的哈希表,本实施例的多哈希表480各自包括多个虚拟哈希桶/虚拟桶460,虚拟桶460由多个物理哈希桶/物理桶410构成。在下文中,术语“物理桶”将指代之前所讨论的哈希桶,并且将被用于将之前所讨论的哈希桶310与虚拟桶460相区分。

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

当在哈希表480之一中所存储的数据块可以在相对应的虚拟桶460内移动或者可以移动到不同的物理桶410以释放由其他虚拟桶460所共享的其他物理桶410时,本实施例使用虚拟桶460来提高另一个等级的数据放置灵活性(dataplacementflexibility)。通过释放哈希表480内的空间,通过移除废弃的/重复的数据可以实现重复删除。即,通过使用根据本发明的实施例的虚拟桶460,不存在通过使用哈希函数将数据线哈希化到受限的相对应的位置所导致的严格限制,并且数据能够被放置在附近/“附近位置”的物理桶410中,所述附近/“附近位置”的物理桶410指代在包括初始地期望的(但是未被占用的)物理哈希桶410的同一虚拟桶460内的物理桶410。

作为示例,内容(例如,数据线c)将被放置在k个哈希表t1(h1(c)),t2(h2(c)),…,t3(h3(c))之一的物理桶410之一中。如果数据线c被放置在t1(h1(c))中而不是要求数据线c被放置在由t1(h1(c))所表示的物理桶410中,则本实施例允许虚拟桶460,该虚拟桶460大于单个物理桶410以及包括由t1(h1(c))所表示的物理桶410而且还包含总计h个物理桶410。即,虚拟桶460包含排列在哈希表480内的并且包括t1(h1(c)),t1(h1(c)+1),t1(h1(c)+2),…,t1(h1(c)+h-1)的h个连续的或邻近的物理桶410的集合。

因此,虚拟桶460允许数据块在哈希表480内移动,以释放空间来用于将来的写入操作。允许之前进入哈希表480的数据块的(在包含哈希表480的物理桶410的虚拟桶460内)移动的本实施例的操作可以被称为跳转阻止。可以如下所述地改进针对存储器重复删除的、使用多哈希表480的跳转阻止操作。

首先,作为哈希表480的哈希函数的结果,dram存储器模块130可以尝试将数据线c插入到哈希表480。然而,有时,作为同一哈希函数的结果,不同的数据线可以在之前进入了(enteredinto)哈希表480。即,尽管不同,但是作为哈希函数的结果,不同的数据线可以指向哈希表480内的同一位置。为了确定数据线c应该被插入到哪里,操作可以首先查找在被表示为t(h(c))的物理桶410处或之后的物理桶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的第二物理桶410,如果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)所表示的物理桶等等,直到确定由t(h(c)+f-1)所表示的物理桶410是否在其中包括有数据为止(例如,可以从头到尾扫描虚拟桶460)。然后,重复删除dram存储器模块可以确定在从t(h(c)+f-h)到t(h(c)+f-1)的物理桶410中所包含的任何数据对象是否可以被放置到空闲空间t(h(c)+f)中。即,重复删除dram存储器模块可以确定从t(h(c)+f-h)到t(h(c)+f-1)的物理桶中的任何一个是否与物理桶t(h(c)+f)在共同的虚拟桶460中,从而允许包含在其中的数据被移除。然后,重复删除dram存储器模块可以将最早地发现的这样的数据对象放置在空闲空间中,从而以便在由t(h(c)+e)所表示的物理桶410中创建新的空闲空间(e是小于f的整数)。可以重复该处理,直到e小于h为止(例如,数据可以按照级联方式在哈希表中移动),从而释放允许将数据线c放置在相对应的虚拟桶460中的足够空间。

例如,参考图5b,在本示例中,将物理桶pb2指派为期望的物理桶410。因为期望的物理桶bp2与虚拟桶vb1相关联地被占用,所以可以从头到尾扫描虚拟桶vb2(例如,从物理桶pb2到物理桶pb5)。因为物理桶pb3、pb4和pb5也被占用,所以第一可用物理桶410是物理桶bp6(即,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的交叠(overlap),所以数据可以从一个虚拟桶460移动到另一个虚拟桶460,从而创建用于初始哈希桶410的空间。

在另一个实施例中,在写入处理期间,当接收到用于将数据块写入到哈希表阵列400的请求时,dram存储器模块130可以查找每个哈希表的整个虚拟桶460的数据价值,以检查现存项是否已经在哈希表480之一中。如果第一期望的哈希表480为满,并且如果在第一期望的哈希表480中未找到数据块(即,每个物理桶410中的每个路420被不同的数据块占用),则dram存储器模块130可以试图使数据进入缓冲存储器230,或者可以替选地(alternatively)试图使数据进入阵列400的另一个哈希表480。然而,如果多哈希表阵列400的所有哈希表480为满,则数据块将“溢出”到缓冲存储器230。在这样的实施例中,哈希表阵列400内的数据的移动可以被dram存储器模块130否决。因此,通过否决之前所存储的数据在哈希表阵列400内的移动,当前实施例(不同于之前所讨论的实施例)能够改进与写入功能有关的延迟。

即,当接收到写入请求时,本实施例的dram存储器模块130对数据块进行哈希化,并且然后确定期望的物理桶(如由通过对数据块进行哈希化产生的哈希值所确定的)或在同一虚拟桶460内的任何其他附近物理桶410是否已经将数据块存储在其中。如果数据块未被存储在其中,则dram存储器模块130确定在同一虚拟桶460中是否存在用于存储数据块的任何空间。如果不存在空间,则dram存储器控制器130或者简单地将数据块存储在缓冲存储器中,或者替选地在将数据块存储在缓冲存储器230之前确定在哈希表阵列400的其他地点中的任何空间是否可用。因为未执行在虚拟桶之间移动其他数据块以释放期望的虚拟桶460中的空间的操作,所以相较于之前所描述的实施例,可以改进与本实施例的dram存储器模块130相关联的尾部延迟(taillatency)。

根据又一实施例,可以通过重复删除算法(例如,重复删除写入算法)来确定alutm210、哈希表存储器220和缓冲存储器230的配置。重复删除算法可以转而通过与重复删除dram存储器模块相关联的软件或驱动来确定(例如,非适应性重复删除算法),或者可以由重复删除dram存储器模块130自身基于由重复删除dram存储器模块130所分析的信息或参数来确定(例如,适应性重复删除算法)。

例如,对于适应性重复删除算法,重复删除dram存储器模块130可以接收与对应于重复删除dram系统架构100的应用模式历史、重复删除算法集或重复删除算法选择策略中的一个或多个相对应的信息。因此,通过访问追踪特定的应用的过去的行为或应用的类型的数据库,可以调整重复删除dram存储器模块130的参数以提高性能。这样的参数可以包括哈希表的数量(k)、物理桶的数量(m)、路的数量(m)、虚拟桶的“高度”(即,每个虚拟桶的物理桶的数量)(h)、哈希表的哈希函数(h(x))或者重复删除线大小。参数还可以确定dram存储器模块130内的什么空间分别地与alutm210、哈希表存储器220或缓冲存储器230相关联。

此外,重复删除dram存储器模块130可以生成各自与被不同地调整的参数相对应的不同的重复删除写入算法的数量。因此,dram存储器模块130可以依赖于由处理器110所处理的应用的类型来选择不同的重复删除写入算法之一(例如,优化的重复删除写入算法)以提高重复删除dram系统100的整体性能。

作为另一示例,对于非适应性重复删除算法,与重复删除dram系统100的处理器110或存储器控制器120相关联的软件或驱动可以支配(dictate)要由dram存储器模块130实施的上述参数。可替选地,软件或驱动可以选择预处理算法,并且重复删除dram存储器模块130可以基于经由存储器控制器120所传达的预处理算法来创建重复删除写入算法。

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

参考图5a、图5b以及图5c,根据本实施例,通过使用跳转词值591或跳转词向量592并且通过使用用于有效地追踪数据移动的虚拟桶利用值,各种虚拟桶460可以与其相对应的物理桶410相关联。因为每个被占用的物理桶410仅可以对应于单个虚拟桶460,所以跳转词值591或跳转词向量592可以被用于追踪哪个虚拟桶460与每个被占用的物理桶410相对应。

在本示例中,四个虚拟桶vb0、vb1、vb2以及vb3各自具有来自物理桶pb0、pb1、pb2、pb3、pb4、pb5和pb6的组的一组不同的四个连续的物理桶(即,h等于4)。

例如,参考图5a和图5b,通过创建包括物理桶位置和虚拟桶位置(例如,准地址)的二维阵列并且通过将1(例如,二进制指示符)放置在包含用于每个虚拟桶460的数据的每个物理桶410中,可以确定跳转词向量592,注意,在与物理桶410相对应的任何列中不可以存在多于一个的1。因此,跳转词向量592可以包括可以被用于追踪用于每个虚拟桶460的物理桶使用(physicalbucketusage)的1和0的阵列。在本示例中,针对第一虚拟桶vb0,物理桶pb0、pb1和pb3被占用;针对第二虚拟桶vb1,物理桶pb2和pb4被占用;针对第三虚拟桶vb2,仅物理桶pb5被占用;以及第四虚拟桶vb3未被占用。

类似地,参考图5c,通过知晓哪个虚拟桶460与被占用的物理桶410相对应,可以基于该被占用的物理桶410来创建跳转词值591。跳转词值可以为log2(h)比特长(h是每虚拟桶460的物理桶410的数量)。

跳转词向量592或跳转词值591的信息可以被存储在用于每个哈希桶410的跳转词线470中,以使得物理桶410与虚拟桶460之间的关系可以被索引编制到存储器中。

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

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

然而,在另一个实施例中,plid650采用虚拟桶利用值字段652(例如,虚拟桶索引)来替换键651,该虚拟桶利用值字段652包括log2(h)比特(例如,具有/包括为16个物理桶的高度的虚拟桶将对应于plid650中的4比特虚拟桶利用值字段)。虚拟桶利用值字段652指示哪个虚拟桶460对应于每个被占用的物理桶410。因此当将数据对象写入到虚拟桶460中时,可以计算在虚拟桶460中已经存在的对象的数量,并且等于在虚拟桶中已经存在的项的数量加一的值p可以被写作虚拟桶利用值字段652。通过使用plid650中的虚拟桶利用值字段652,可以降低plid650的存储开销。

图7是示出了根据本发明的实施例用于使用跳转阻止方法将数据写入存储器模块的多哈希表阵列的处理的流程图。

参考图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,通过采用物理线id(plid)对哈希表进行索引编制并且通过当对象被写入虚拟桶中的相对应的虚拟桶时将虚拟桶利用值字段增加一来识别多个虚拟桶,该物理线id(plid)包括为log2(h)比特的虚拟桶利用值字段并且包括等于在虚拟桶中的相对应的虚拟桶中的数据块的数量的值(例如,可以通过采用物理线id(plid)650对哈希表480进行索引编制来识别虚拟桶460,该物理线id(plid)650包括虚拟桶利用值字段652并且包括等于在虚拟桶460中的相对应的虚拟桶中的数据块的数量的值,如图6所示,其中,当对象或数据块被写入到虚拟桶460中的相对应的虚拟桶的对象或数据块时,虚拟桶利用值字段652可以增加一)。

在操作s703,在其上存储有数据的物理哈希桶中的每个可以被识别为被指派给虚拟桶中的单个相对应的虚拟桶(例如,重复删除dram存储器模块130可以将在其上存储由数据的物理哈希桶410识别为被指派给虚拟桶460(vb0、vb1和vb2)中的单个相对应的虚拟桶,如图5b和图5c所示)。在操作s703a,可以通过生成用于指示包含数据的物理哈希桶中的哪个与虚拟桶中的哪个相对应的跳转词向量或跳转词值来识别物理哈希桶(例如,重复删除dram存储器模块130可以生成用于指示包含数据的物理哈希桶410中的哪个与虚拟桶460中的哪个相对应的跳转词向量592或跳转词值591,如图5b和图5c所示)。

在操作s704,可以根据哈希函数中的相对应的哈希函数来对数据线进行哈希化以产生哈希值(例如,重复删除dram存储器模块130可以从与数据线c相对应的存储器控制器120接收写入请求,并且可以根据哈希函数h(x)中的相对应的哈希函数对进入数据进行哈希化以产生哈希值)。

在操作s705,可以根据哈希值来确定相对应的哈希表的虚拟桶中的相对应的虚拟桶是否具有用于数据块的可用空间(例如,重复删除dram存储器模块130可以确定虚拟桶460vb3在物理桶pb6中具有用于数据块的空间,如图5b和图5c所示)。

在操作s706,当虚拟桶中的相对应的虚拟桶不具有可用空间时,可以将数据从虚拟桶中的相对应的虚拟桶顺序地移动到虚拟桶中的邻近的虚拟桶,直到虚拟桶中的相对应的虚拟桶具有用于数据块的空间为止(例如,当虚拟桶vb2不具有任何其他可用物理桶时,重复删除dram存储器模块130可以将数据从虚拟桶vb2的物理桶pb5顺序地移动到虚拟桶vb3,直到虚拟桶vb2具有用于数据块的空间为止,如图5b和图5c所示,其中,如果虚拟桶vb1是虚拟桶460中的相对应的虚拟桶,则可以重复处理以将数据从虚拟桶vb1d的物理桶pb4移动到虚拟桶vb2的物理桶pb5)。在操作s706a,可以对地址查找表存储器进行更新以改变与被移动的数据块相对应的一个或多个查找地址(例如,重复删除dram存储器模块130可以对alutm210进行更新以改变与被移动的数据块相对应的一个或多个地址指针,以使得可以取回被移动的数据块在哈希表存储器220中的新的地址)。

在操作s707,数据块可以被存储在虚拟桶中的相对应的虚拟桶中(例如,如果虚拟桶vb1是期望的虚拟桶460,则重复删除dram存储器模块130可以将数据块存储在虚拟桶vb1的物理桶pb4中,如图5b和图5c所示)。如果确定包括虚拟桶vb1的哈希表480为满,则数据块可以被存储在缓冲存储器230中。

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

在操作s801,可以接收与在哈希表阵列中所存储的多个数据块相对应的读取请求(例如,重复删除dram存储器模块130可以从与构成数据线c的多个数据块相对应的存储器控制器120接收读取请求,数据块被存储在哈希表存储器220中的哈希表阵列400中)。

在操作s802,可以从alutm取回与多个数据块相对应的指针中的相对应的指针(例如,重复删除dram存储器模块130可以从alutm210取回与构成数据线c的多个数据块相对应的地址指针)。

在操作s803,在哈希表存储器中,可以基于指针中的相对应的指针来访问多个数据块(例如,重复删除dram存储器模块130可以对哈希表存储器220中的哈希表阵列400内的不同的地址进行访问并且从其取回数据块,不同的地址对应于所接收的地址指针)。

在操作s804,可以对多个数据块进行重编以产生重编的数据(例如,重复删除dram存储器模块130可以对从哈希表存储器220所取回的数据块进行重编,以产生重编的数据,该重编的数据可以等价于与所接收的读取请求相对应的数据线c)。

在操作s805,重编的数据可以从存储器模块被发送到存储器控制器(例如,重复删除dram存储器模块130可以向存储器控制120发送数据线c)。

如上所述,可以使用本发明的实施例的重复删除存储器模块来执行数据重复删除。因此,可以降低对存储器的访问,并且可以延长dram系统的寿命。

前述为示例实施例的例示,并且不将被解释为对其进行限制。尽管已经描述了一些示例实施例,但是本领域技术人员将容易地意识到,示例实施例中的多种修改是可能的,而实质上不背离示例实施例的新颖的教导和优点。因此,所有这样的修改意欲被包括在如权利要求书所定义的示例实施例的范围内。在权利要求书中,装置加功能语句意欲涵盖在本文中被描述为执行所列举的功能的结构,并且涵盖不仅结构上的等价形式还有等价的结构。因此,将理解的是,前述为示例实施例的例示而不将被解释为限于所公开的具体的实施例;并且将理解的是,对所公开的示例实施例的修改以及其他示例实施例意欲被包括在所附权利要求书的范围内。本发明构思通过所附权利要求书定义,权利要求书的等价形式将被包括在其中。

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