CN108363620B - 提供虚拟内存容量的内存模块及其操作方法 - Google Patents
提供虚拟内存容量的内存模块及其操作方法 Download PDFInfo
- Publication number
- CN108363620B CN108363620B CN201810007083.5A CN201810007083A CN108363620B CN 108363620 B CN108363620 B CN 108363620B CN 201810007083 A CN201810007083 A CN 201810007083A CN 108363620 B CN108363620 B CN 108363620B
- Authority
- CN
- China
- Prior art keywords
- memory
- overflow
- credit
- memory module
- deduplication
- 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.)
- Active
Links
Images
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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- 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/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/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/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
-
- 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/656—Address space sharing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/16—Memory access
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer Security & Cryptography (AREA)
- Storage Device Security (AREA)
Abstract
一种内存模块包括:主机接口,其被配置为提供到主计算机的接口;一个或多个内存设备;去重引擎,其被配置为提供大于所述一个或多个内存设备的物理大小的所述内存模块的虚拟内存容量;内存控制器,其用于控制对所述一个或多个内存设备的访问;易失性存储器,其包括哈希表、溢出内存区域和信用单元,其中,当哈希冲突发生或哈希表满时,溢出内存区域存储用户数据,并且其中,信用单元存储溢出内存区域中的无效条目的地址;以及控制逻辑,其被配置为控制溢出内存区域和信用单元,并且生成指示溢出内存区域和信用单元的状态的警告。
Description
相关申请的交叉引用
本申请要求2017年1月27日提交的美国临时专利申请No.62/451,157的优先权,该美国专利临时申请以其全部内容通过引用并入本文。
技术领域
本公开总体涉及去重内存系统,尤其涉及用于管理在去重内存模块中的溢出内存区域的系统和方法。
背景技术
具有高容量和低延迟的内存设备对于数据中心应用而言是非常需要的。这样的内存设备可以使用去重方案以及数据压缩方案来提供比其物理内存大小更大的内存容量。通过减少重复的用户数据并充分利用可用内存资源,去重内存设备可以一致地实现高去重率。此外,去重内存设备采用的去重方案可以实现去重数据的有效寻址。
当采用去重方案时,可能出现诸如哈希冲突(hash collision)和内存容量完结的问题,这些问题需要在内存硬件和用于控制内存设备的软件中的适当处理。例如,当用户数据不能纳入哈希表(hash table)的桶时,用户数据被放置在去重内存设备的溢出内存区域中。当主计算机将新用户数据写入到指向去重内存设备的溢出内存区域中的条目的位置时,溢出内存区域将具有无效条目,因为新用户数据被写入哈希表。在这种情况下,新的用户数据被写入去重内存区域或新的溢出内存区域中。结果,溢出内存区域可以包含通常被称为内存洞的无效条目。
发明内容
根据一个实施例,一种内存模块包括:主机接口,其被配置为提供到主计算机的接口;一个或多个内存设备;去重引擎,其被配置为提供大于所述一个或多个内存设备的物理大小的所述内存模块的虚拟内存容量;内存控制器,其用于控制对所述一个或多个内存设备的访问;易失性存储器,其包括哈希表、溢出内存区域和信用单元,其中,当哈希冲突发生或哈希表满时,溢出内存区域存储用户数据,并且其中,信用单元存储溢出内存区域中的无效条目的地址;以及控制逻辑,其被配置为控制溢出内存区域和信用单元,并且生成指示溢出内存区域和信用单元的状态的警告。
根据另一实施例,一种方法包括:在去重内存模块中实现控制逻辑,其中,去重内存模块包括一个或多个内存设备;将用户数据的哈希值存储在去重内存模块的哈希表中,所述哈希表包括可由物理行ID(PLID)标识的物理行(PL)的条目,所述物理行ID通过使用哈希函数存储在地址转换表中;提供去重内存模块的虚拟内存容量,所述虚拟内存容量大于所述一个或多个内存设备的物理大小;当发生哈希冲突或哈希表为满时,将用户数据存储在溢出内存区域中;在信用单元中存储一个或多个信用,其中,所述一个或多个信用中的每个对应于所述溢出内存区域中的一个或多个无效条目的地址;以及产生指示溢出内存区域和信用单元的状态的警告。
现在将参照附图更具体地描述以及在权利要求中指出的以上和其他优选特征,包括各种新颖的细节的实施和事件的组合。将会理解,这里描述的具体系统和方法仅仅是作为说明而不是作为限制来示出。如本领域技术人员将理解的,在不脱离本公开的范围的情况下,可以在各种各样的实施例中采用本文所描述的原理和特征。
附图说明
作为本说明书的一部分而包括的附图示出了当前优选的实施例,并且与上面给出的一般性描述和下面给出的优选实施例的详细描述一起用于解释和教导本文描述的原理。
图1示出根据一个实施例的示例去重内存模块的框图;
图2A示出根据一个实施例的示例去重内存模块的架构;
图2B示出根据一个实施例的示例哈希表;
图3示出根据一个实施例的放置在去重内存模块的溢出内存区域中的用户数据的示例处理;
图4示出了根据一个实施例的用于管理溢出内存区域的示例信用单元;以及
图5是根据一个实施例的示例控制逻辑的流程图。
附图不一定按比例绘制,并且类似结构或功能的元件贯穿附图通常由相似的附图标记来表示,用于说明性目的。附图仅旨在便于描述本文所述的各种实施例。附图没有描述在本文公开的教导的每个方面,并且不限制权利要求的范围。
具体实施方式
本文公开的特征和教导中的每一个可以被单独使用或者与其他特征和教导结合使用以提供用于管理去重内存模块中的溢出内存区域的系统和方法。参考附图进一步详细描述了单独和组合地利用这些附加特征和教导中的许多的代表性示例。该详细描述仅旨在教导本领域技术人员用于实践本教导的方面的进一步的细节,而不旨在限制权利要求的范围。因此,上面在详细描述中公开的特征的组合对于以最广泛的意义来实践教导可以是不必要的,而是被教导仅仅是为了描述本教导的特别的代表性示例。
在下面的描述中,仅出于解释的目的,阐述了特定的术语以提供对本公开的透彻理解。然而,对于本领域技术人员显而易见的是,这些具体细节不被要求来实践本公开的教导。
本文详细描述的一些部分是按照在计算机内存内的数据位上的操作的算法和符号表示来呈现的。数据处理领域的技术人员使用这些算法描述和表示来将其工作的实质有效地传达给本领域的其他技术人员。算法在这里,通常被认为是导致期望结果的自相一致的步骤序列。这些步骤是需要对物理量进行物理操纵的步骤。通常,但不一定,这些量采取能够被存储、传输、组合、比较和以其他方式操纵的电或磁信号的形式。主要出于常用的原因,有时将这些信号称为位、值、元素、符号、字符、项、号等被证明是方便的。
但是,应该牢记的是,所有这些和类似的术语都与适当的物理量相关联,并且仅仅是适用于这些量的便利的标签。除非特别指出,否则如从下面的讨论中显而易见的那样,可以理解,贯穿说明书,利用诸如“处理”、“计算”、“算计”、“确定”、“显示”等的术语的讨论指的是计算机系统或类似的电子计算设备的动作和过程,其将在计算机系统的寄存器和存储器内表示为物理(电子)量的数据操作并转换为类似地表示为计算机系统存储器或寄存器内的物理量的其他数据,或指其他这样的信存储、传输或显示设备的动作和过程。
本文呈现的算法并不固有地涉及任何特定的计算机或其他装置。根据本文的教导,各种通用系统、计算机服务器或个人计算机可以与程序一起使用,或者可以证明构造更专用的装置来执行所需的方法步骤是方便的。下面的描述将显示用于各种这些系统的所需的结构。应该理解的是,可以使用各种编程语言来实现本文所述的本公开的教导。
此外,代表性示例和从属权利要求的各种特征可以以未明确且明确列举的方式进行组合,以便提供本教导的附加的有用实施例。还明确指出,为了原始公开的目的,为了限制所要求保护的主题的目的,所有值范围或实体组的指示都公开了每个可能的中间值或中间实体。还明确指出,图中所示的组件的尺寸和形状被设计成有助于理解如何实践本教导,而不旨在限制示例中所示的尺寸和形状。
本公开提供了一种用于管理去重内存模块的溢出内存区域并且处理哈希表中的哈希冲突和内存容量完结的情况的系统和方法。去重内存模块可以包含去重引擎,其可以提供比其物理内存大小更大的内存容量。在去重内存模块中采用去重方案时,可能会出现诸如哈希冲突和内存容量完结的问题。本发明还提供了一种哈希冲突处理机制和硬件控制器逻辑,其可以为主计算机提供去重内存模块的溢出内存区域的状态和状况。本文被称为信用单元的内存管理单元被用于通过将无效内存条目地址存储到循环缓冲中来处理去重内存模块的溢出内存区域中的无效条目。
图1示出根据一个实施例的示例去重内存模块的框图。去重内存模块100包括静态随机存取存储器SRAM 121、CPU 122、去重引擎123、读取高速缓存124、主机接口125、桥接器130(例如,AXI X-bar、桥接IP、定制的直接附接逻辑)以及与一个或多个内存设备150(例如,DRAM、闪存)交互的内存控制器135。去重内存模块100可以为联接的内存设备150提供比物理内存大小更大的内存容量。
去重内存模块100通过主机接口125联接到主计算机(未示出)。例如,去重内存模块100具有异步存储器接口。去重内存模块100可以具有双倍数据速率(DDR)内存模块的形式因素,并且可以通过异步存储器接口联接到主计算机。需要注意的是,诸如外围组件互连快速(PCIe)接口、非易失性存储器快速(non-volatile memory express,NVMe)以及NVMover fabric(NVMeoF)之类的任何其他非存储器接口可用于提供在去重内存模块100和主机之间的接口。在一个实施例中,去重内存模块100可以是非易失性双列直插式存储器模块NVDIMM(例如,NVDIMM-P,被配置为永久存储器的NVDIMM类型),其包括一个或多个非易失性存储器设备(例如,闪存)或至少一个非易失性存储器设备以及一个或多个易失性存储器设备(例如,动态随机存取存储器(DRAM))。
SRAM 121可以存储去重内存模块100特有的各种参数,包括但不限于去重算法、应用程序历史和选择策略。CPU 122可以基于用户选择来应用存储在SRAM 121中的不同去重算法。去重算法可以经由主机接口125升级并保存到SRAM 121。
读取高速缓存124表示去重内存模块100的去重内存的高速缓存版本。读取高速缓存124可以显式地高速缓存地址转换表的条目、元数据条目(例如,签名/引用计数)等。读取高速缓存124可以减少对内存设备150的内存访问次数。
根据一个实施例,主计算机可以经由主机接口125(例如,DDRT、NVIDIMM-P、PCIe)访问去重内存模块100。去重引擎123可以将去重内存模块100的较大的内存容量(即,虚拟内存容量)提供给主计算机。由于存储在去重内存模块100的内存设备150中的去重的数据,去重内存模块100的虚拟内存容量可以大于其物理内存容量。
图2A示出根据一个实施例的示例去重内存模块的架构。去重内存模块200可以包括易失性存储器(例如,DRAM),其用于存储包括哈希表211、地址转换表221、签名表222、参考计数器表223的各种表格、溢出内存区域225和信用单元226。图2B示出根据一个实施例的示例哈希表。
哈希表211可以存储具有固定宽度的去复的用户数据C,该固定宽度在本文中被称为物理行(PL)。例如,物理行(PL)长度是64字节。PL长度可配置为具有其他大小,例如32字节或更小。
根据一个实施例,哈希表211由一个或多个哈希桶组织。哈希桶212包括作为用户数据的容器的多个条目(道或列),这里称为物理行(PL)。每个哈希桶212可以与一个或多个虚拟桶(VB)213相关联以扩展哈希桶212的大小。在本示例中,哈希桶212可以包括v个虚拟桶213。每个哈希桶212可以具有指定的虚拟桶高度,在此被称为VB高度h。虚拟桶213允许将用户数据放置在附近位置的哈希桶212中,例如,在指定的VB高度h内。当搜索PL时,搜索逻辑可以搜索哈希桶212及其关联的虚拟桶213。
地址转换表221可以存储将逻辑地址(LA)转换为用户数据C的物理地址(PA)的信息。这里称为PLID的用于PL的标识符用于将逻辑地址转换为用户数据C的物理地址。物理行ID(PLID)可以包括与列号联结的哈希桶号。哈希桶号可以通过使用哈希函数h1(C)来生成。例如,哈希函数h1(C)可以产生(log M)位哈希值以将PLID索引到对应的哈希桶212,其中M是哈希桶的总数。去重引擎(例如,图1的去重引擎123)可以在哈希桶中找到空列(或道)。物理行ID(PLID)对应于哈希桶号和列号的联结。
对于每个物理行,相应签名值存储在签名表222中。签名是用户数据C的较小哈希值,其由第二哈希函数h2(C)生成。参考计数器也与特定的物理行相关联。参考计数器指示用户数据C匹配物理行的内容的次数。例如,参考计数器可以表示特定用户数据的去重率。
逻辑地址(LA)是来自主计算机的由去重引擎(例如,图1的去重引擎123)接收的地址。物理地址(PA)是指向哈希表211、签名表222、参考计数表223和信用单元224中的条目的地址。
当用户数据C不能被纳入哈希桶212中也不能纳入哈希表211的虚拟桶213中时,用户数据C被放入溢出内存区域225中。例如,主计算机可以对于两个或更多不同的用户数据C产生相同的哈希值。在这种情况下,认为发生哈希冲突,并且用户数据C被放入溢出内存区域225。在另一示例中,当哈希桶212满并且其相关联的虚拟桶213也是满的,使得不再能将用户数据C放置在哈希表211中时,用户数据C被放入溢出内存区域225。
根据一个实施例,信用单元226用于回收溢出内存区域225中的无效条目。溢出内存区域225中的由信用单位226再循环的条目可以避免内存洞,如果溢出内存区域225中的条目的无效处理不当的话,在溢出内存区域中可能发生所述内存洞。溢出内存区域225和信用单元226的细节将在下面关于图3到图5讨论。
图3示出了根据一个实施例的放置在去重内存模块中的溢出内存区域中的用户数据的示例处理。用户数据C的逻辑地址可以是包括g位的粒度和(x-g)位的转换表索引的x位地址。粒度位可以确定PL的大小。例如,对于6位粒度(g=6),PL的大小是64字节(26)。可以使用哈希函数h1将逻辑地址的转换表索引转换成对应的物理地址。由哈希函数h1获得的物理地址在转换表321中被查找,并进一步被格式化以识别用于写到溢出内存区域325的状况(例如,RGN位)和索引到哈希表311的索引。到哈希表311的索引包括索引到哈希桶312内的条目的行索引R_INDX(这里也称为哈希桶号)和列索引COL_INDX(这里也称为道号)。格式化的物理地址中的一位指示符RGN指示发生了哈希冲突,或哈希表311已满,并且用户数据已被写入到溢出内存区域中。当RGN位等于“1”时,去重引擎将用户数据324放置在溢出内存区域325中。否则,去重引擎将用户数据324放置在由行索引R_INDX和列索引COL_INDX标识的哈希桶312中的一个中。
当主计算机使溢出内存区域325中的条目无效并将新用户数据写入哈希表311或溢出内存区域325中的新条目时,溢出内存区域325可具有对应于无效的条目的内存洞。根据一个实施例,信用单元326用于回收溢出内存区域325中的无效条目。在溢出内存区域325中由信用单元326再循环的条目可以被重新使用以避免溢出内存区域中的任何内存洞。
根据一个实施例,用于信用单元326的存储空间被保留在溢出内存区域325内。去重内存模块的去重引擎可以具有用于溢出内存区域的被保留的存储空间。根据另一实施例,为了更好的性能,用于信用单元326的专用内存区域可以被保留在与溢出内存区域325分离的更快的存储器(例如,SRAM)的另一区域中。
图4示出了根据一个实施例的用于管理溢出内存区域的示例信用单元。当主计算机使溢出存储区域425中的条目无效时,溢出存储区域425中的相应地址作为信用被保存在信用单元426中。当去重内存随后写入到溢出存储区域425时,如由信用标识的地址所指示的溢出内存区域425中的条目可通过写入操作重新使用,而不在溢出内存区域425中创建内存洞。
根据在一个实施例,信用单元426具有与溢出内存区域425的大小成比例的大小,以确保信用单元426可以回收无效条目。例如,信用单元的最大存储大小等于(overflow_memory_size*(credit_entry_size/pl_entry_size))。例如,溢出内存区域425中的每个条目是512位(或64字节,这是PL大小)宽,并且溢出内存区域425的指针是32位。在这种情况下,如果溢出内存区域425的大小为1024MB,其中条目大小为64字节,则信用单元426被定大小为64MB,其中条目大小为32位。这是信用单元426的最大大小,其能够覆盖溢出内存区域中的所有条目同时无效的极端情况。结合信用单元利用监控,信用单元的大小可以定大小为小于最大大小以节省去重内存模块的存储空间(例如,DRAM)。
根据一个实施例,信用单元426被实现为循环缓冲。当溢出内存区域425中的条目被无效时,溢出内存区域425的无效条目的相应地址作为信用被存储在信用单元中。循环缓冲可以具有头指针(head_ptr)和尾指针(tail_ptr)。头指针指示信用单元条目的头部,尾指针指示当前信用单元条目的尾部。头指针和尾指针可以指向信用单元426中的条目。基于应用,信用单元也可以被实现为后进先出队列。
根据一个实施例,去重内存具有用于管理溢出内存区域425和信用单元426的控制逻辑。当头指针定位在信用单元426内的尾指针之下时,控制逻辑设置被称为包装的位以指示信用单元426中的条目被包装起来。当头指针等于尾指针,并且包装位为伪时,控制逻辑可以指示信用单元426是空的。当头指针等于尾指针,但是包装位为真时,控制逻辑可以指示信用单元426是满的。
控制逻辑可以从软件方面和/或硬件方面处理作为异常事件的溢出内存区域的容量完结的状况。根据一个实施例,去重内存具有一个或多个专用寄存器(例如,状态寄存器、中断寄存器)以指示各种警告和异常状况。
根据一个实施例,去重内存模块的控制逻辑产生溢出内存区域425的状态指示符。溢出内存区域状态指示符可以指示溢出内存区域425的各种状态,包括但不限于几乎满警告、满警告、超限错误状况。当被主计算机请求时,去重内存模块可以提供指示溢出内存区域425的当前状况的溢出内存区域状态指示符。例如,在溢出内存区域超限的情况下,去重内存模块停止被请求的存储器写入操作,设置溢出内存满错误(例如,图5中的513)。如果去重内存模块的去重引擎读取失败地址或错误地址,则去重引擎可以将“0”返回给主计算机。
根据一个实施例,去重内存模块的控制逻辑生成指示信用单元426的状况的指示符。信用单元状况指示符可以指示信用单元426的各种状态,包括但不限于满警告和空警告。当信用单元426的头指针接近尾指针,其中包装位为伪时,控制逻辑可以发出空警告。当头指针接近尾指针,其中包装位为真时,控制逻辑可以发出满警告。
图5是根据一个实施例的去重内存模块的示例控制逻辑的流程图。控制逻辑处理溢出内存区域或信用单元闲置(OVM_IDEL,501)的操作,直到去重引擎发出命令以指示控制逻辑将用户数据写入溢出内存区域或使溢出内存区域中的条目无效,或刷新溢出内存区域。当从主计算机到达包括溢出内存区域中的存储位置x和用户数据C的内存写请求write(x,C)时,控制逻辑首先检查信用单元是否为空(CU空,502)。如果信用单元不为空,则信用单元的尾指针被设置为指针PTR(PTR=[CU_TAIL],515),并且尾指针增加(CU_TAIL++,516)。对应于指针PTR的溢出内存区域中的条目被设置为包括用户数据C(OVM[PTR]==C,517),并且控制逻辑返回到闲置状态(OVM_IDLE,501)。
如果信用单元在步骤502为空,则控制逻辑检查溢出内存区域中的空闲空间是否为空(504)。如果空闲空间为空,则控制逻辑发出溢出内存区域为满的警告(OVM_FULL,509)。控制逻辑进一步检查信用单元是否被绕过。如果在步骤504中溢出内存区域中的空闲空间不是空的,则控制逻辑检查空闲空间是否几乎为空(AE)(505)。如果在步骤505中空闲空间几乎为空,则控制逻辑发出指示溢出内存区域几乎满的警告(OVM_AF,506)。在检查空闲空间是否几乎为满之后,控制逻辑将指针PTR设置为溢出内存区域中的写入指针(PTR=OVM_WPTR,507),并且溢出写入指针增加(OVM_WPTR++,508)。对应于指针PTR的溢出内存区域中的条目被设置为包括用户数据C(OVM[PTR]==C,517),并且控制逻辑返回到闲置状态(OVM_IDLE,501)。
在控制逻辑在步骤(OVM_FULL,509)中发出溢出内存区域为满的警告之后,控制逻辑将中断OVM_FULL_INT设置为1(OVM_FULL_INT=1,512)以向主计算机指令溢出内存区域为满。控制逻辑可以经由主机接口发出警告消息,而不是设置中断OVM_FULL_INT。控制逻辑将用户数据C写入溢出内存区域中的位置x(即,write(x,C)),并发出溢出内存满错误(OVM_FULL_ERR,513)。在步骤512中将中断OVM_FULL_INT设置为1后,控制逻辑根据从去重引擎接收到的命令进一步执行下一步骤。例如,该命令是写入命令(write(x,C)),清理溢出内存区域的清理命令和invalidate(x)命令。
当主计算机指令使溢出内存区域中的条目x无效时,控制逻辑检查信用单元是否为满(519)。如果信用单元为满,则控制逻辑将信用单元指示符设置为满(CU_FULL,524),并且控制逻辑返回闲置状态(OVM_IDLE,501)。如果信用单元未满,但几乎为满(520),则控制逻辑发出警告,指示信用单元几乎为满(CU_AF,521)。信用单元中对应于头指针的条目被设置为溢出内存区域中的存储位置x(CU[CU_HEAD]==x,522),信用单元的头指针增加(CU_HEAD++,523),并且控制逻辑返回到闲置状态(OVM_IDLE,501)。
根据一个实施例,一种内存模块包括:主机接口,其被配置为提供到主计算机的接口;一个或多个内存设备;去重引擎,其被配置为提供大于所述一个或多个内存设备的物理大小的所述内存模块的虚拟内存容量;内存控制器,其用于控制对所述一个或多个内存设备的访问;易失性存储器,其包括哈希表、溢出内存区域和信用单元,其中,当哈希冲突发生或哈希表满时,溢出内存区域存储用户数据,并且其中,信用单元存储溢出内存区域中的无效条目的地址;以及控制逻辑,其被配置为控制溢出内存区域和信用单元,并且生成指示溢出内存区域和信用单元的状态的警告。
主机接口可以是双倍数据速率(DDR)接口。
主机接口可以是外围组件互连快速(PCIe)接口。
用于信用单元的存储空间可以被保留在溢出内存区域内。
用于信用单元的存储空间可以被保留在与溢出内存区域分离的SRAM中。
信用单元的大小可以被设置为与溢出内存区域的大小成比例。
指示溢出内存区域和信用单元的状态的警告可以使用一个或多个寄存器来生成。
信用单元可以被实现为包括头指针和尾指针的循环缓冲,或者后进先出队列。
控制逻辑可以被配置为生成包括几乎满警告、满警告、超限错误状况的溢出内存区域的状态指示符。
控制逻辑可以被配置为生成指示信用单元的状况的信用单元状况指示符,其包括满警告和空警告。
根据另一实施例,一种方法包括:在去重内存模块中实现控制逻辑,其中,去重内存模块包括一个或多个内存设备;将用户数据的哈希值存储在去重内存模块的哈希表中,所述哈希表包括可由物理行ID(PLID)标识的物理行(PL)的条目,所述物理行ID通过使用哈希函数存储在地址转换表中;提供去重内存模块的虚拟内存容量,所述虚拟内存容量大于所述一个或多个内存设备的物理大小;当发生哈希冲突或哈希表为满时,将用户数据存储在溢出内存区域中;在信用单元中存储一个或多个信用,其中,所述一个或多个信用中的每个对应于所述溢出内存区域中的一个或多个无效条目的地址;以及产生指示溢出内存区域和信用单元的状态的警告。
该方法还可以包括提供去重内存模块和主计算机之间的主机接口。
主机接口可以是双倍数据速率(DDR)接口或者外围组件互连快速(PCIe)接口。
用于信用单元的存储空间可以被保留在溢出内存区域内。
用于信用单元的存储空间可以被保留在与溢出内存区域分离的SRAM中。
信用单元的大小可以被设置为与溢出内存区域的大小成比例。
指示溢出内存区域和信用单元的状态的警告可以使用一个或多个寄存器来生成。
信用单元可以被实现为包括头指针和尾指针的循环缓冲,或者后进先出队列。
该方法还可以包括生成包括几乎满警告、满警告、超限错误状况的溢出内存区域的状态指示符。
该方法还可以包括生成指示信用单元的状况的信用单元状况指示符,其包括满警告和空警告。
以上示例实施例已经在上文中描述以说明实现用于提供用于管理去重内存模块中的溢出内存区域的系统和方法的各种实施例。本领域的普通技术人员将会想到对所公开的示例实施例的各种修改和偏离。旨在落入本发明范围内的主题在以下权利要求中阐述。
Claims (20)
1.一种内存模块,包括:
主机接口,其被配置为提供到主计算机的接口;
一个或多个内存设备;
去重引擎,其被配置为提供大于所述一个或多个内存设备的物理大小的所述内存模块的虚拟内存容量;
内存控制器,其用于控制对所述一个或多个内存设备的访问;
易失性存储器,其包括哈希表、溢出内存区域和信用单元,其中,当哈希冲突发生或所述哈希表满时,所述溢出内存区域存储用户数据,并且其中,所述信用单元存储所述溢出内存区域中的无效条目的地址;以及
控制逻辑,其被配置为控制所述溢出内存区域和所述信用单元,并且生成指示所述溢出内存区域和所述信用单元的状态的警告。
2.根据权利要求1所述的内存模块,其中,所述主机接口是双倍数据速率(DDR)接口。
3.根据权利要求1所述的内存模块,其中,所述主机接口是外围组件互连快速(PCIe)接口。
4.根据权利要求1所述的内存模块,其中,用于所述信用单元的存储空间被保留在所述溢出内存区域内。
5.根据权利要求4所述的内存模块,其中,用于所述信用单元的存储空间被保留在与所述溢出内存区域分离的SRAM中。
6.根据权利要求4所述的内存模块,其中,所述信用单元的大小被设置为与所述溢出内存区域的大小成比例。
7.根据权利要求4所述的内存模块,其中,指示所述溢出内存区域和所述信用单元的状态的所述警告使用一个或多个寄存器来生成。
8.根据权利要求1所述的内存模块,其中,所述信用单元被实现为包括头指针和尾指针的循环缓冲,或者后进先出队列。
9.根据权利要求8所述的内存模块,其中,所述控制逻辑被配置为生成所述溢出内存区域的状态指示符,其包括几乎满警告、满警告、超限错误状况。
10.根据权利要求8所述的内存模块,其中,所述控制逻辑被配置为生成指示所述信用单元的状况的信用单元状况指示符,其包括满警告和空警告。
11.一种方法,包括:
在去重内存模块中实现控制逻辑,其中,所述去重内存模块包括一个或多个内存设备;
将用户数据的哈希值存储在所述去重内存模块的哈希表中,所述哈希表包括能够由物理行ID(PLID)标识的物理行(PL)的条目,所述物理行ID通过使用哈希函数存储在地址转换表中;
提供所述去重内存模块的虚拟内存容量,所述虚拟内存容量大于所述一个或多个内存设备的物理大小;
当发生哈希冲突或哈希表满时,将用户数据存储在溢出内存区域中;
在信用单元中存储一个或多个信用,其中,所述一个或多个信用中的每个对应于所述溢出内存区域中的一个或多个无效条目的地址;以及
产生指示所述溢出内存区域和所述信用单元的状态的警告。
12.根据权利要求11所述的方法,还包括提供在所述去重内存模块和主计算机之间的主机接口。
13.根据权利要求12所述的方法,其中,所述主机接口是双倍数据速率(DDR)接口或外围组件互连快速(PCIe)接口。
14.根据权利要求11所述的方法,其中,用于所述信用单元的存储空间被保留在所述溢出内存区域内。
15.根据权利要求14所述的方法,其中,用于所述信用单元的存储空间被保留在与所述溢出内存区域分离的SRAM中。
16.根据权利要求14所述的方法,其中,所述信用单元的大小被设置为与所述溢出内存区域的大小成比例。
17.根据权利要求14所述的方法,其中,指示所述溢出内存区域和所述信用单元的状态的所述警告使用一个或多个寄存器来生成。
18.根据权利要求11所述的方法,其中,所述信用单元被实现为包括头指针和尾指针的循环缓冲,或者后进先出队列。
19.根据权利要求18所述的方法,还包括生成所述溢出内存区域的状态指示符,其包括几乎满警告、满警告、超限错误状况。
20.根据权利要求18所述的方法,还包括生成指示所述信用单元的状况的信用单元状况指示符,其包括满警告和空警告。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762451157P | 2017-01-27 | 2017-01-27 | |
US62/451,157 | 2017-01-27 | ||
US15/473,311 | 2017-03-29 | ||
US15/473,311 US10268413B2 (en) | 2017-01-27 | 2017-03-29 | Overflow region memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108363620A CN108363620A (zh) | 2018-08-03 |
CN108363620B true CN108363620B (zh) | 2023-01-10 |
Family
ID=62979813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810007083.5A Active CN108363620B (zh) | 2017-01-27 | 2018-01-04 | 提供虚拟内存容量的内存模块及其操作方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10268413B2 (zh) |
KR (1) | KR102459964B1 (zh) |
CN (1) | CN108363620B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10437496B1 (en) * | 2017-05-10 | 2019-10-08 | Yellowbrick Data, Inc. | System and method for managing buffers in a computer system |
US11068406B2 (en) * | 2017-07-27 | 2021-07-20 | EMC IP Holding Company LLC | Maintaining a single copy of data within a read cache |
US11079954B2 (en) * | 2018-08-21 | 2021-08-03 | Samsung Electronics Co., Ltd. | Embedded reference counter and special data pattern auto-detect |
CN111240579B (zh) * | 2018-11-28 | 2024-03-19 | 京东方科技集团股份有限公司 | 用于数据存储的方法和装置 |
KR102659832B1 (ko) * | 2019-03-05 | 2024-04-22 | 삼성전자주식회사 | 데이터 저장 장치 및 시스템 |
US10983915B2 (en) * | 2019-08-19 | 2021-04-20 | Advanced Micro Devices, Inc. | Flexible dictionary sharing for compressed caches |
CN112988654A (zh) * | 2019-12-12 | 2021-06-18 | 蜜蜂计算(香港)股份有限公司 | 适用于哈希算法的电路系统 |
CN111831227B (zh) * | 2020-07-07 | 2024-07-16 | 山东华芯半导体有限公司 | 一种nvme协议命令加速处理系统 |
US11940908B2 (en) * | 2022-04-19 | 2024-03-26 | Western Digital Technologies, Inc. | Relative size reduction of a logical-to-physical table |
US20240248625A1 (en) * | 2023-01-20 | 2024-07-25 | Lemon Inc. | Transparent block device compression using hash-table |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1617113A (zh) * | 2003-11-13 | 2005-05-18 | 国际商业机器公司 | 向物理内存分配虚拟内存的方法、存储控制器和计算机系统 |
JP2006178764A (ja) * | 2004-12-22 | 2006-07-06 | Toshiba Corp | メモリ管理装置、コンピュータシステム及びメモリ管理方法 |
CN101097544A (zh) * | 2006-06-30 | 2008-01-02 | 英特尔公司 | 虚拟化事务存储器的全局溢出方法 |
CN103116529A (zh) * | 2011-07-18 | 2013-05-22 | 英飞凌科技股份有限公司 | 用于实时检测缓冲区溢出致堆内存损坏的方法和设备 |
CN105094710A (zh) * | 2015-09-06 | 2015-11-25 | 国电南瑞科技股份有限公司 | 基于哈希表的单进程动态存储管理方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6438560B1 (en) | 1999-09-16 | 2002-08-20 | International Business Machines Corporation | Reuse of immutable objects during object creation |
US20070204142A1 (en) * | 2006-02-27 | 2007-08-30 | Dieffenderfer James N | Method and apparatus for repairing a link stack |
US8504791B2 (en) | 2007-01-26 | 2013-08-06 | Hicamp Systems, Inc. | Hierarchical immutable content-addressable memory coprocessor |
TWI417722B (zh) | 2007-01-26 | 2013-12-01 | Hicamp Systems Inc | 階層式不可改變的內容可定址的記憶體處理器 |
JP4961319B2 (ja) * | 2007-10-11 | 2012-06-27 | 株式会社日立製作所 | 仮想ボリュームにおける仮想領域に動的に実領域を割り当てるストレージシステム |
US8719485B2 (en) * | 2008-06-27 | 2014-05-06 | Marvell World Trade Ltd. | Solid-state disk with wireless functionality |
JP5178355B2 (ja) * | 2008-07-01 | 2013-04-10 | キヤノン株式会社 | 記録装置 |
KR20110038246A (ko) * | 2009-10-08 | 2011-04-14 | 동국대학교 산학협력단 | 데이터 저장 장치 및 방법 |
JP2011128998A (ja) * | 2009-12-18 | 2011-06-30 | Toshiba Corp | 半導体記憶装置 |
US8543757B2 (en) * | 2010-06-23 | 2013-09-24 | Sandisk Technologies Inc. | Techniques of maintaining logical to physical mapping information in non-volatile memory systems |
WO2012109679A2 (en) | 2011-02-11 | 2012-08-16 | Fusion-Io, Inc. | Apparatus, system, and method for application direct virtual memory management |
US9223511B2 (en) * | 2011-04-08 | 2015-12-29 | Micron Technology, Inc. | Data deduplication |
US9501421B1 (en) | 2011-07-05 | 2016-11-22 | Intel Corporation | Memory sharing and page deduplication using indirect lines |
US20130275699A1 (en) | 2012-03-23 | 2013-10-17 | Hicamp Systems, Inc. | Special memory access path with segment-offset addressing |
US20130290636A1 (en) | 2012-04-30 | 2013-10-31 | Qiming Chen | Managing memory |
WO2014038016A1 (ja) | 2012-09-05 | 2014-03-13 | 富士通株式会社 | 制御プログラム、制御方法及び制御装置 |
US9898410B2 (en) | 2013-09-10 | 2018-02-20 | Intel Corporation | Hybrid main memory using a fine-grain level of remapping |
US9792063B2 (en) | 2014-01-15 | 2017-10-17 | Intel Corporation | Deduplication-based data security |
-
2017
- 2017-03-29 US US15/473,311 patent/US10268413B2/en active Active
- 2017-10-31 KR KR1020170143156A patent/KR102459964B1/ko active IP Right Grant
-
2018
- 2018-01-04 CN CN201810007083.5A patent/CN108363620B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1617113A (zh) * | 2003-11-13 | 2005-05-18 | 国际商业机器公司 | 向物理内存分配虚拟内存的方法、存储控制器和计算机系统 |
JP2006178764A (ja) * | 2004-12-22 | 2006-07-06 | Toshiba Corp | メモリ管理装置、コンピュータシステム及びメモリ管理方法 |
CN101097544A (zh) * | 2006-06-30 | 2008-01-02 | 英特尔公司 | 虚拟化事务存储器的全局溢出方法 |
CN103116529A (zh) * | 2011-07-18 | 2013-05-22 | 英飞凌科技股份有限公司 | 用于实时检测缓冲区溢出致堆内存损坏的方法和设备 |
CN105094710A (zh) * | 2015-09-06 | 2015-11-25 | 国电南瑞科技股份有限公司 | 基于哈希表的单进程动态存储管理方法 |
Non-Patent Citations (2)
Title |
---|
A study on user-level remote memory extension system;Shinyoung Ahn等;《2016 18th International Conference on Advanced Communication Technology (ICACT)》;20160303;全文 * |
基于哈希表的高效存储器内建自修复方法;郭旭峰等;《电子学报》;20130715(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108363620A (zh) | 2018-08-03 |
KR102459964B1 (ko) | 2022-10-27 |
KR20180088573A (ko) | 2018-08-06 |
US10268413B2 (en) | 2019-04-23 |
US20180217777A1 (en) | 2018-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108363620B (zh) | 提供虚拟内存容量的内存模块及其操作方法 | |
US10365844B2 (en) | Logical block address to physical block address (L2P) table compression | |
US11074190B2 (en) | Slot/sub-slot prefetch architecture for multiple memory requestors | |
US9280290B2 (en) | Method for steering DMA write requests to cache memory | |
US5555392A (en) | Method and apparatus for a line based non-blocking data cache | |
US20130091331A1 (en) | Methods, apparatus, and articles of manufacture to manage memory | |
EP3276494B1 (en) | Memory space management | |
US9612764B2 (en) | Frame choosing during storage constraint condition | |
CN105117351A (zh) | 向缓存写入数据的方法及装置 | |
US11636034B2 (en) | Write-back cache policy to limit data transfer time to a memory device | |
US20180276128A1 (en) | Methods for performing a memory resource retry | |
US9009411B2 (en) | Flexible control mechanism for store gathering in a write buffer | |
US7469320B2 (en) | Adaptive replacement cache | |
CN118401929A (zh) | 基于处理器的系统的经压缩存储器系统中的基于优先级的高速缓存行拟合 | |
US20100257319A1 (en) | Cache system, method of controlling cache system, and information processing apparatus | |
US20230315299A1 (en) | Systems and method for tracking activations to perform row hammer mitigation in memory modules | |
CN112148639B (zh) | 一种高效小容量高速缓冲存储器替换方法及系统 | |
US11836092B2 (en) | Non-volatile storage controller with partial logical-to-physical (L2P) address translation table | |
CN111290974B (zh) | 用于存储设备的缓存淘汰方法与存储设备 | |
CN111290975A (zh) | 使用统一缓存处理读命令与预读命令的方法及其存储设备 | |
US11436150B2 (en) | Method for processing page fault by processor | |
US10241916B2 (en) | Sparse superline removal | |
US12038852B2 (en) | Partial logical-to-physical (L2P) address translation table for multiple namespaces | |
US9652198B2 (en) | FIFO buffer clean-up | |
Novac et al. | DEPENDABILITY ASPECTS REGARDING THE DESIGN OF A CACHE MEMORY. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |