CN107239230B - 用于高效存储器内嵌去重应用的最优化的跳房子多散列表 - Google Patents
用于高效存储器内嵌去重应用的最优化的跳房子多散列表 Download PDFInfo
- Publication number
- CN107239230B CN107239230B CN201710196455.9A CN201710196455A CN107239230B CN 107239230 B CN107239230 B CN 107239230B CN 201710196455 A CN201710196455 A CN 201710196455A CN 107239230 B CN107239230 B CN 107239230B
- Authority
- CN
- China
- Prior art keywords
- hash
- data
- buckets
- virtual
- bucket
- 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
- 238000000034 method Methods 0.000 claims abstract description 44
- 230000006870 function Effects 0.000 claims abstract description 32
- 230000008859 change Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 238000013519 translation Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002657 hormone replacement therapy Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- 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
- G06F12/1009—Address translation using page tables, e.g. page table structures
- G06F12/1018—Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- 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/061—Improving I/O performance
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7821—Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1748—De-duplication implemented within the file system, e.g. based on file segments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- 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/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- 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/0625—Power saving in 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
- G06F3/0649—Lifecycle 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- 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/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
-
- 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
- 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/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/70—Masking faults in memories by using spares or by reconfiguring
- G11C29/74—Masking faults in memories by using spares or by reconfiguring using duplex memories, i.e. using dual copies
-
- 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
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- 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/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种存储器去重的方法包括:识别散列表,每个散列表与散列函数对应,并且每个散列表包括物理桶,每个物理桶包括路并且被配置为存储数据;识别虚拟桶,每个虚拟桶包括一些物理桶,并且每个虚拟桶与另一虚拟桶共享物理桶;将其上存储数据的物理桶的每个识别为被指定给单个虚拟桶;根据散列函数来散列数据行以生成散列值;根据散列值确定相应虚拟桶是否有用于数据块的可用空间;当相应虚拟桶没有可用空间时,将数据从相应虚拟桶顺序地移动到邻近虚拟桶,直到相应虚拟桶有用于数据块的空间为止,以及将数据块存储在相应虚拟桶中。
Description
相关申请的交叉引用
本申请要求2016年3月29日向美国专利商标局递交的美国临时申请第62/314,918号的优先权和权益,在此通过引用将其全部内容并入。
技术领域
根据本发明的实施例的一个或多个方面涉及数据去重(deduplication)。
背景技术
数据去重或数据重复消除,是指缩减存储器设备中的冗余数据从而降低存储器设备的容量成本。在数据去重中,数据对象/项(如,数据文件)被分割成一个或多个数据行(line)/区块(chunk)/块(block)。通过将相同数据构成的多个数据块与单个存储的数据块关联,数据块的重复拷贝可被计算机存储器减少或消除,从而减少了存储器设备中数据的冗余拷贝总量。数据冗余拷贝的减少可以增加读速度和存储器带宽,并且可以潜在地导致功率节省。
因而,如果数据的重复拷贝可被减少为该数据的单个拷贝,则虽然使用相同数量的物理资源,却增加了存储器设备的总可用容量。因为由此引发的存储器设备的节省允许数据重写计数的减少,并且因为对已存储在存储器中重复的数据块的写请求可以被丢弃,所以实施了数据去重的存储器设备的寿命可以通过有效提高写耐久性而延长。
传统的数据去重方法可以使用存储器内去重技术(in-memory deduplicationtechnology),借此,去重引擎被以CPU为中心的方法与CPU或存储器控制器(MC)集成。这样的方法通常实施去重高速缓存(deduplicated cache,DDC),DDC与存储器控制器一起操作以使能CPU处理器知晓重复并且试图根据存储器控制器的控制来提供去重的存储器操作(如,内容查找、引用计数更新等)。去重的方法还可以实施直接转换缓冲器(directtranslation buffer,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芯片上。进一步,这些设备的各种组件可以实现在柔性印刷电路膜、带载封装(tape carrierpackage,TCP)、印刷电路板(PCB)上,或形成在一个基底上。进一步,这些设备的各种组件可以是进程或线程,其运行在一个或多个计算设备中的一个或多个处理器上、运行计算机程序指令并且与其它系统组件交互,用以执行本文所述的各种功能。计算机程序指令存储在存储器中,存储器可以使用诸如,例如随机访问存储器(RAM)的标准存储器设备在计算设备中实现。计算机程序指令还可以存储在其它非暂态计算机可读介质中,诸如,例如CD-ROM、快闪驱动器等。并且,本领域技术人员应当意识到,在不脱离本发明的示例实施例的精神和范围的情况下,各种计算设备的功能可被组合或集成到单个计算设备,或者特定计算设备的功能可分布于一个或多个其它计算设备。
除非另有定义,本文使用的所有术语(包括技术性和科学性术语)具有和本发明所属领域普通技术人员通常理解的相同意思。将进一步理解,诸如定义在常用字典中的那些术语应当被解释为具有和相关领域和/或本说明书的语境中它们的意思一致的意思,并且不应以理想化或过于正式的意思解释,除非本文明确地这样定义。
图1是本发明的实施例的去重DRAM系统架构的框图。
参考图1,为起到计算机存储器的作用,去重存储器执行被称为“转换”的功能以记录原始数据的内容和已被去重的唯一存储块集之间的关系,记录的关系以压缩形式存储。例如,原始数据的地址可以存储在查找表中。
通常,CPU的处理器110缺少到物理存储器(如,去重DRAM存储器模块130)的直接访问,而物理存储器是由存储器控制器120按照存储器行(memory line)的阵列来管理。以CPU为中心的去重系统试图在数据到达存储器系统前将该数据高速缓存在CPU内部。
本实施例的去重DRAM系统架构100使用以存储器为中心的去重,而不是传统的以CPU为中心的去重,这意味着去重DRAM存储器模块130可以在缺少来自处理器110的命令的情况下执行存储器去重。去重DRAM系统架构100还使用存储在去重DRAM存储器模块130中的可配置去重算法以增加存储器的容量效益,从而提供大容量存储器解决方案。即,不像以CPU为中心的去重,本实施例的去重DRAM系统架构100具有包括在RAM模块(如,去重DRAM存储器模块130)内的去重智能(deduplication intelligence)的全部。因而,去重能在去重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)、行地址选通(row address strobe,RAS)等,其中RAS是被发送到DRAM的信号,其告知DRAM关联的地址是行地址,借此,DRAM中的数据比特被存储在由列地址和行地址的交叉点定位的单元内。
去重DRAM系统架构100还可以有智能系统软件,其导致处理器110结合存储器控制器120允许虚拟密度管理、智能数据放置和DRAM智能应用编程接口(API)等。
去重DRAM存储器模块130可以进一步具有3DS DRAM组件,诸如多个外形因子的高容量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、和用于在散列表存储器的散列表的散列路(hash way)已满时存储数据的溢出/缓冲存储器230。
当数据块要被输入去重DRAM存储器模块130时,去重算法可以操作以确定该数据块是否是在ALUTM 210中缺少任何对应地址的新的、之前未存储的数据块。为执行该操作,去重算法将访问ALUTM 210。为确保相同数据块仅被存储为单个条目,ALUTM 210内的指针(如,物理行ID(PLID),其进一步结合图5在下文描述)指示相同数据块被存储在散列表存储器220中的哪个位置。即,ALUTM 210是用于将散列表内的位置(如,地址)与查找地址映射指针(如,PLID)关联的储存设备。因而,如果数据块先前已被存储在散列表存储器220中,则ALUTM 210内的指针能够指向其中存储了相同数据块的散列表存储器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中,并且ALUTM 210中的地址指针可以存储指示与特定数据块关联的特定散列桶310和特定散列路320的值。因而,地址(如,64比特地址)可被索引到ALUTM 210中,并且由此,存储与该地址对应的数据块的散列表380的散列桶310的关联散列路320可被确定。
因而,在写入过程(如,64字节数据写入)期间,当接收到写请求(如,记录包含一个或多个数据块的传入数据的请求)时,使用散列函数/散列算法为传入数据计算散列值(即,传入数据被“散列”)以便相应散列桶310和散列路320可被确定。因而,散列值指示该数据块要被放置在哪里,或者,当该数据块(如,64字节数据块)是重复的时,散列值指示该数据块已存储在散列表存储器220的哪个位置。当数据内容被添加到存储器时,m个散列桶310中的一些可能最先达到容量。因而,去重DRAM存储器模块130包括溢出预备(overflowprovision),其使用缓冲存储器230来存储不能被输入散列表存储器220的数据块。此后,原始查找地址可被检索,并且ALUTM210可以根据从对所述传入数据进行散列而计算出的查找地址被更新。
缓冲存储器230可以在尝试写入过程期间当确定所有散列路320已满时使用。即,当散列表380填满时,数据可被放置在缓冲存储器230的非去重溢出区域,从而降低去重程度。因而,缓冲存储器230本质上是保留的、标准的、简单的溢出存储区域,其充当用于实现虚拟密度过度供应管理溢出的SOC存储器缓冲/高速缓存。一旦数据被放置在缓冲存储器230中,数据就不再是散列的并且不能再被去重。
如果计算机应用多次试图向存储器存储相同序列值,那么存储在ALUTM 210中转换阵列中的多个条目指代数据块存储在散列表存储器220中的同一地址,其中ALUTM 210中的条目小于原始唯一数据块,从而允许高效压缩被实现。
m个散列桶310的每个可以进一步包括引用/频率计数行340和签名行330,引用/频率计数行340包括用于指示散列桶310的相应散列路320的唯一标识符。对于每个散列桶310,相应签名行330包含指示空行的0或用于内容查找最优化的非0次级散列值中的任一者。因而,对于内容查找,通常要么不存在要求基于签名行中0条目分配的空行的签名匹配,要么存在单个签名匹配以便数据行的后续读取和内容的比较确认重复的存在。m个散列桶310的每个可以进一步包括跳字行(在图中没有相应附图标记),其将参考图5A、5B和5C在下文进一步描述。
物理行ID(PLID)350可被用来将数据索引到散列表380。PLID 350可被用来识别存储器行,存储器行可被划分到ALUTM 210、散列表存储器220或缓冲存储器230中的一个。每个存储器行可被称为以下二者之一:用于在散列表380中存储唯一内容的数据行,或用于存储若干PLID 350和用于提供从处理器总线地址到散列表380中被去重的数据块的映射的转换行。即,总线地址标识转换行,并且进一步识别转换行中包含相关PLID 350的条目,相关PLID 350进而指定特定的数据行。因而,PLID 350可被实现为包括溢出标志,并且可以包括用于指示特定相应散列表380的数据、相应散列桶比特和指示与PLID 350对应的数据块的位置的相应路比特。
对于每个散列桶310,存在一个关联的散列函数/散列算法“h(x)”,其是产生被用来将数据索引到散列桶310的log2(m)比特散列的算法(例如,如果散列表380有8个物理散列桶310,那么散列表380的散列函数将产生3比特散列)。即,散列函数h(x)允许相对大量的输入数据(如,要存储在存储器中的输入数据文件)被输入到散列函数h(x),并且基本上不同的较少量输出数据(如,散列值)由散列函数h(x)生成并且输出以存储在散列表380中。因而,散列函数h(x)使能压缩,因为不同数据集会偶尔散列为同一散列值。
在向去重存储器写入中,当接收到与数据文件对应的写请求时,去重存储器首先执行副本搜索以确定相同/重复的数据块是否已存储在散列表380中。去重存储器然后更新ALUTM 210和散列表存储器220中的条目。例如,引用/频率计数行340可以通过更新散列表存储器220中原始查找地址的频率计数(即,减小1)来更新,并且其中当频率计数到达0时相应数据块被删除。更进一步,新PLID 350可以在ALUTM 210中生成。
在可被称为内容查找的副本搜索期间,去重DRAM存储器模块130寻找意图被写入的数据文件或其部分的预先存在的实例。当存在散列表存储器220中存储的数据的预先存在的实例时,副本搜索返回指向相应数据行的PLID 350。当未发现数据的预先存在的实例时,则通过分配散列表380中的空间、在其中写内容并且返回新PLID 350,为相应数据块创建新数据行。该内容可通过在ALUTM 210中以总线地址所确定的偏移量存储该PLID 350而被记录。
为向散列表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开始被数据填充,该数据之后可以通过将存储在ALUTM 210中的相应PLID350和每个单独的被去重的数据行的散列表380内的地址匹配而被访问。散列表380内的地址可以通过识别数据所在的特定散列桶310和特定散列路320(如,识别散列表380的排和列)而被识别。因而,对于存储在散列表380中的每个数据块,存在由存储在ALUTM 210中并且指向数据块的位置的相应PLID 350标识的一个或多个相应地址。一旦散列表380被填满数据,新产生的数据就被放置在非去重溢出区域/缓冲存储器230中,从而降低了去重程度。
在从去重存储器读取时,去重存储器返回来自散列表存储器220的数据行或来自缓冲存储器230的溢出行二者中任一个的拷贝。例如,当存储的数据要被中读取时,当接收到读请求时,使用存储在ALUTM 210中的PLID 350查找散列表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)散列表阵列(如,多个散列表的阵列)的容量是m x n x k。
每个散列表480可以与单个散列函数对应,单个散列函数确定数据如何被索引。通过对要被写入的传入数据进行散列,计算结果(如,包括查找地址和键的散列值)可以与键和值比较,并且如果该值匹配,则相应散列桶410中的引用/频率计数行340增加,从而指示ALUTM 210中另外的PLID 350指向该特定行。
不像传统散列表,本实施例的多个散列表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,根据本发明的实施例,提供了修改的PLID 650。本发明的实施例的PLID650包括分别指示地址、偏移、表的索引、散列和槽/路(slot/way)的多个比特、以及与特定虚拟桶460配对以追踪在虚拟桶460之间移动的对象的键651。因而,如果键651与特定虚拟桶460匹配,则该特定虚拟桶460可以具有被写入其中的数据对象。
然而,在另一实施例中,PLID 650用虚拟桶利用值字段652(如,虚拟桶索引)替换键651,虚拟桶利用值字段652包含log2(H)个比特(如,高度为16个物理桶的虚拟桶将与PLID 650中的4比特虚拟桶利用值字段对应)。虚拟桶利用值字段652指示哪个虚拟桶460与每个占用的物理桶410对应。因而,当向虚拟桶460写入数据对象时,已存在于虚拟桶460中的对象的数目可被计算,并且值p,其等于虚拟桶中已存在的条目的数量加上1,可被写为虚拟桶利用值652。通过使用PLID 650中的虚拟桶利用值652,PLID 650的存储开销可被减少。
图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可以更新ALUTM 210以改变与被移动的数据块对应的一个或多个地址指针,以便散列表存储器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可以从ALUTM 210检索与构成数据行C的多个数据块对应的地址指针)。
操作S803处,可在散列表存储器中访问基于指针中的所述相应指针的所述多个数据块(如,去重DRAM存储器模块130可以从散列表存储器220中的散列表阵列400内的不同地址访问和检索所述数据块,不同地址与被检索的地址指针对应)。
操作S804处,多个数据块可被重组以产生的重组数据(如,去重DRAM存储器模块130可以重组从散列表存储器220检索的数据块以产生重组的数据,该重组的数据可以等同于与接收到的读请求对应的数据行C)。
操作S805处,重组数据可从存储器模块发送到存储器控制器(如,去重DRAM存储器模块130可以向存储器控制器120发送数据行C)。
如上所述,数据去重可以使用本发明的实施例的去重DRAM存储器模块来执行。因而,对存储器的访问可以被减少,并且DRAM系统的寿命可以被延长。
前述是示例实施例的阐述,并且不被解释为对其的限制。尽管已描述了少量示例实施例,但本领域技术人员将容易理解,在实质上不脱离示例实施例的新教学和优点的情况下,许多修改在示例实施例中是可能的。因而,所有这些修改意图被包括在权利要求限定的示例实施例的范围内。权利要求中,手段加功能的条款意图覆盖本文所述的作为执行所列功能的结构,并且不仅包括结构上的等同物,还包括等同的结构。因而,要理解,前述是示例实施例的阐述并且不被解释为限制所公开的特定实施例,并且对所公开的示例实施例的修改和其它示例实施例意图被包括在所附权利要求的范围内。发明构思由后面的权利要求和要被包括在其中的权利要求的等同物限定。
Claims (19)
1.一种存储器去重的方法,所述方法包含:
识别多个散列表,每个散列表与散列函数对应,并且每个散列表包含物理散列桶,每个物理散列桶包含路并且被配置为存储数据;
识别多个虚拟桶,每个虚拟桶包含所述物理散列桶中的一些,并且每个虚拟桶与所述虚拟桶中的另一个共享所述物理散列桶的至少一个;
将其上存储了数据的所述物理散列桶中的每个识别为被指定给所述虚拟桶中的单个相应虚拟桶;
根据所述散列函数中的相应一个来散列数据行以产生散列值;
根据所述散列值确定相应散列表的虚拟桶中的相应一个是否有用于数据块的可用空间;
当所述虚拟桶中的所述相应一个没有可用空间时,将数据从所述虚拟桶中的所述相应一个顺序地移动到所述虚拟桶中的邻近一个虚拟桶,直到所述虚拟桶的所述相应一个具有用于所述数据块的空间为止;以及
将所述数据块存储在所述虚拟桶中的所述相应一个。
2.如权利要求1所述的方法,进一步包含更新地址查找表存储器以改变与所述数据块相应的一个或多个查找地址。
3.如权利要求1所述的方法,其中所述散列表的每个进一步包含引用计数行、签名行和跳字行。
4.如权利要求3所述的方法,进一步包含生成用于指示包含数据的哪个物理散列桶与哪个虚拟桶对应的跳字矢量。
5.如权利要求4所述的方法,其中生成所述跳字矢量包含,对于所述虚拟桶中的每个,使用二进制指示符来指示所述虚拟桶中的相应虚拟桶的物理散列桶中的每个是否包含与虚拟桶中的所述相应虚拟桶关联的数据块。
6.如权利要求3所述的方法,进一步包含生成跳字值,所述跳字值包含每个物理散列桶log2(H)个比特,用于指示包含数据的哪个物理散列桶与哪个虚拟桶对应。
7.如权利要求6所述的方法,其中生成所述跳字值包含,生成在表示所述物理散列桶和所述虚拟桶的关联对的位置处包括含有数据的物理散列桶中的每个的准地址的二维阵列。
8.如权利要求1所述的方法,其中相应的散列表被存储在易失性存储器。
9.如权利要求8所述的方法,其中所述易失性存储器包含动态随机访问存储器DRAM。
10.如权利要求1所述的方法,进一步包含用PLID(物理行ID)索引相应的散列表,所述PLID包含log2(H)个比特的虚拟桶利用值字段,并且包含等于所述虚拟桶中的相应一个中的数据块数目的值。
11.如权利要求10所述的方法,进一步包含当向所述虚拟桶中的所述相应一个写入对象时,将所述虚拟桶利用值字段增加1。
12.如权利要求1所述的方法,进一步包含当所述相应散列表已满时,将所述数据块存储在缓冲存储器。
13.一种用于通过减少存储器中的重复数据块对存储器进行去重的去重DRAM存储器模块,所述去重DRAM存储器模块包含:
散列表存储器,用于仅存储被去重的数据块,并且包括存储在其中的散列表的三维阵列,所述散列表中的每个包含物理散列桶,每个物理散列桶包含路并且被配置为存储所述被去重的数据块;
地址查找表存储器ALUTM,用于存储与所述被去重的数据块对应的地址;以及
处理器,用于接收读请求以使能所述去重DRAM存储器模块从所述散列表存储器检索所述数据块并且导出所述数据块,并且用于接收写请求以使能所述去重DRAM存储器模块将所述数据块存储在所述散列表存储器中。
14.如权利要求13所述的去重DRAM存储器模块,其中所述散列表的每个包含多个虚拟桶,所述多个虚拟桶的每个包含两个或更多个所述物理散列桶。
15.如权利要求14所述的去重DRAM存储器模块,其中所述去重DRAM存储器模块被配置为将所述被去重的数据块在所述散列表中的相应一个内的虚拟桶中的相邻虚拟桶之间移动。
16.如权利要求13所述的去重DRAM存储器模块,其中所述去重DRAM存储器模块能够在没有外部提供的命令的情况下执行数据去重。
17.如权利要求13所述的去重DRAM存储器模块,其中所述去重DRAM存储器模块进一步包含缓冲存储器,用于在所述散列表存储器已满时存储数据。
18.一种用于减少存储器中的重复数据块的去重DRAM存储器模块,所述去重DRAM存储器模块包含:
存储在其中的散列表的三维阵列,所述散列表的每个包含物理散列桶,每个物理散列桶包含路并且被配置为存储所述数据块;
处理器;以及
存储器,其中所述存储器在其上存储指令,当所述指令由所述处理器运行时,导致所述去重DRAM存储器模块将先前存储的被去重的数据块在所述散列表中的一个散列表的相邻虚拟桶之间移动,所述虚拟桶中的每个包含所述物理散列桶中的两个或更多个。
19.如权利要求18所述的去重DRAM存储器模块,其中所述存储器进一步在其上存储指令,当所述指令由所述处理器运行时,导致所述去重DRAM存储器模块将传入数据存储在从其移出了先前存储的被去重的数据块的所述虚拟桶的一个中。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662314918P | 2016-03-29 | 2016-03-29 | |
US62/314,918 | 2016-03-29 | ||
US15/161,136 US9983821B2 (en) | 2016-03-29 | 2016-05-20 | Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application |
US15/161,136 | 2016-05-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107239230A CN107239230A (zh) | 2017-10-10 |
CN107239230B true CN107239230B (zh) | 2022-04-05 |
Family
ID=59958768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710196455.9A Active CN107239230B (zh) | 2016-03-29 | 2017-03-29 | 用于高效存储器内嵌去重应用的最优化的跳房子多散列表 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9983821B2 (zh) |
JP (1) | JP6764362B2 (zh) |
KR (1) | KR102597640B1 (zh) |
CN (1) | CN107239230B (zh) |
TW (1) | TWI710901B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10437785B2 (en) | 2016-03-29 | 2019-10-08 | Samsung Electronics Co., Ltd. | Method and apparatus for maximized dedupable memory |
TWI804466B (zh) * | 2016-05-20 | 2023-06-11 | 南韓商三星電子股份有限公司 | 擷取記憶體中儲存的資料的方法與去重複模組 |
US10462059B2 (en) * | 2016-10-19 | 2019-10-29 | Intel Corporation | Hash table entries insertion method and apparatus using virtual buckets |
US11644992B2 (en) * | 2016-11-23 | 2023-05-09 | Samsung Electronics Co., Ltd. | Storage system performing data deduplication, method of operating storage system, and method of operating data processing system |
US10394784B2 (en) | 2016-12-22 | 2019-08-27 | Intel Corporation | Technologies for management of lookup tables |
US10700974B2 (en) * | 2018-01-30 | 2020-06-30 | Marvell Israel (M.I.S.L) Ltd. | Dynamic allocation of memory for packet processing instruction tables in a network device |
CN108427539B (zh) * | 2018-03-15 | 2021-06-04 | 深信服科技股份有限公司 | 缓存设备数据的离线去重压缩方法、装置及可读存储介质 |
US11392491B2 (en) * | 2018-06-27 | 2022-07-19 | Intel Corporation | Hardware-assisted paging mechanisms |
US10915470B2 (en) | 2018-07-23 | 2021-02-09 | SK Hynix Inc. | Memory system |
KR102513919B1 (ko) | 2018-11-05 | 2023-03-27 | 에스케이하이닉스 주식회사 | 메모리 시스템 |
US11487473B2 (en) | 2018-07-23 | 2022-11-01 | SK Hynix Inc. | Memory system |
KR102516584B1 (ko) | 2018-11-21 | 2023-04-03 | 에스케이하이닉스 주식회사 | 메모리 시스템 |
US11288012B2 (en) | 2018-07-23 | 2022-03-29 | SK Hynix Inc. | Memory system |
KR102665410B1 (ko) * | 2018-07-30 | 2024-05-13 | 삼성전자주식회사 | 메모리 장치의 내부 프로세싱 동작 방법 |
US10628072B2 (en) * | 2018-08-21 | 2020-04-21 | Samsung Electronics Co., Ltd. | Scalable architecture enabling large memory system for in-memory computations |
US11079954B2 (en) * | 2018-08-21 | 2021-08-03 | Samsung Electronics Co., Ltd. | Embedded reference counter and special data pattern auto-detect |
KR20200036461A (ko) * | 2018-09-28 | 2020-04-07 | 삼성전자주식회사 | 메모리 디바이스들 사이의 직접 통신을 위한 메모리 시스템 및 메모리 디바이스 |
US11308036B2 (en) * | 2019-04-11 | 2022-04-19 | EMC IP Holding Company LLC | Selection of digest hash function for different data sets |
CN112068948B (zh) * | 2019-06-10 | 2024-03-26 | 上海赜睿信息科技有限公司 | 数据散列方法、可读存储介质和电子设备 |
EP3764233A1 (en) * | 2019-07-08 | 2021-01-13 | Continental Teves AG & Co. OHG | Method of identifying errors in or manipulations of data or software stored in a device |
US11429573B2 (en) * | 2019-10-16 | 2022-08-30 | Dell Products L.P. | Data deduplication system |
CN111143340B (zh) * | 2019-12-25 | 2023-03-21 | 北京中网易企秀科技有限公司 | 一种数据处理方法、装置及服务器、客户端 |
US11500815B2 (en) | 2020-03-26 | 2022-11-15 | EMC IP Holding Company LLC | Dual relationship-based hash structure for non-volatile memory technology |
US20210326271A1 (en) * | 2020-04-18 | 2021-10-21 | International Business Machines Corporation | Stale data recovery using virtual storage metadata |
US11475160B2 (en) | 2020-05-20 | 2022-10-18 | EMC IP Holding Company LLC | Data masking in a microservice architecture |
US11468193B2 (en) | 2020-05-20 | 2022-10-11 | EMC IP Holding Company LLC | Data masking in a microservice architecture |
US11347690B2 (en) | 2020-05-20 | 2022-05-31 | EMC IP Holding Company LLC | Data masking in a microservice architecture |
CN112799841B (zh) * | 2021-01-29 | 2023-04-25 | 烽火通信科技股份有限公司 | 一种数据对象存储管理的方法和装置 |
TWI780696B (zh) | 2021-05-10 | 2022-10-11 | 創鑫智慧股份有限公司 | 查找表壓縮方法與查找表讀取方法及其計算設備、主機與裝置 |
CN113298930A (zh) * | 2021-05-12 | 2021-08-24 | 天海欧康科技信息(厦门)有限公司 | 基于webgl技术的三维工艺可视化设计方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104504076A (zh) * | 2014-12-22 | 2015-04-08 | 西安电子科技大学 | 一种高并发和高空间利用率的分布式缓存方法 |
WO2015067382A1 (en) * | 2013-11-08 | 2015-05-14 | Fujitsu Technology Solutions Intellectual Property Gmbh | Storage appliance and method thereof for inline deduplication with segmentation |
Family Cites Families (56)
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 |
US8504791B2 (en) | 2007-01-26 | 2013-08-06 | Hicamp Systems, Inc. | Hierarchical immutable content-addressable memory coprocessor |
WO2008094455A2 (en) | 2007-01-26 | 2008-08-07 | Cheriton David R | Hierarchical immutable content-addressable memory processor |
US8407428B2 (en) | 2010-05-20 | 2013-03-26 | Hicamp Systems, Inc. | Structured memory coprocessor |
JP5026213B2 (ja) * | 2007-09-28 | 2012-09-12 | 株式会社日立製作所 | ストレージ装置及びデータ重複排除方法 |
US8219534B2 (en) | 2008-02-27 | 2012-07-10 | Dell Products L.P. | Multiple file compaction for network attached storage |
US7984022B2 (en) | 2008-04-18 | 2011-07-19 | International Business Machines Corporation | Space recovery with storage management coupled with a deduplicating storage system |
US8370593B2 (en) | 2010-04-14 | 2013-02-05 | Hitachi, Ltd. | Method and apparatus to manage groups for deduplication |
US9401967B2 (en) | 2010-06-09 | 2016-07-26 | Brocade Communications Systems, Inc. | Inline wire speed deduplication system |
US9141625B1 (en) | 2010-06-22 | 2015-09-22 | F5 Networks, Inc. | Methods for preserving flow state during virtual machine migration and devices thereof |
US8370316B2 (en) | 2010-07-12 | 2013-02-05 | Sap Ag | Hash-join in parallel computation environments |
WO2012030383A1 (en) * | 2010-08-31 | 2012-03-08 | Falconstor, Inc. | Data deduplication |
WO2012056491A1 (en) | 2010-10-26 | 2012-05-03 | Hitachi, Ltd. | Storage apparatus and data control method |
US20120158674A1 (en) | 2010-12-20 | 2012-06-21 | Mark David Lillibridge | Indexing for deduplication |
US9639543B2 (en) | 2010-12-28 | 2017-05-02 | Microsoft Technology Licensing, Llc | Adaptive index for data deduplication |
US8462781B2 (en) | 2011-04-06 | 2013-06-11 | Anue Systems, Inc. | Systems and methods for in-line removal of duplicate network packets |
US8630294B1 (en) | 2011-05-11 | 2014-01-14 | Juniper Networks, Inc. | Dynamic bypass mechanism to alleviate bloom filter bank contention |
US9501421B1 (en) | 2011-07-05 | 2016-11-22 | Intel Corporation | Memory sharing and page deduplication using indirect lines |
US8886508B2 (en) | 2011-08-22 | 2014-11-11 | Freescale Semiconductor, Inc. | Circuit simulation acceleration using model caching |
US9069616B2 (en) * | 2011-09-23 | 2015-06-30 | Google Inc. | Bandwidth throttling of virtual disks |
US9298707B1 (en) | 2011-09-30 | 2016-03-29 | Veritas Us Ip Holdings Llc | Efficient data storage and retrieval for backup systems |
US9170940B2 (en) | 2011-12-07 | 2015-10-27 | Intel Corporation | Techniques to prelink software to improve memory de-duplication in a virtual system |
KR20130064518A (ko) | 2011-12-08 | 2013-06-18 | 삼성전자주식회사 | 저장 장치 및 그것의 동작 방법 |
US9116812B2 (en) * | 2012-01-27 | 2015-08-25 | Intelligent Intellectual Property Holdings 2 Llc | Systems and methods for a de-duplication cache |
US20130275699A1 (en) | 2012-03-23 | 2013-10-17 | Hicamp Systems, Inc. | Special memory access path with segment-offset addressing |
US9177028B2 (en) | 2012-04-30 | 2015-11-03 | International Business Machines Corporation | Deduplicating storage with enhanced frequent-block detection |
US9069810B2 (en) | 2012-07-25 | 2015-06-30 | International Business Machines Corporation | Systems, methods and computer program products for reducing hash table working-set size for improved latency and scalability in a processing system |
US20140115260A1 (en) * | 2012-10-18 | 2014-04-24 | Oracle International Corporation | System and method for prioritizing data in a cache |
US9135383B2 (en) | 2012-11-16 | 2015-09-15 | Freescale Semiconductor, Inc. | Table model circuit simulation acceleration using model caching |
US9502139B1 (en) | 2012-12-18 | 2016-11-22 | Intel Corporation | Fine grained online remapping to handle memory errors |
US9424267B2 (en) | 2013-01-02 | 2016-08-23 | Oracle International Corporation | Compression and deduplication layered driver |
US9141554B1 (en) | 2013-01-18 | 2015-09-22 | Cisco Technology, Inc. | Methods and apparatus for data processing using data compression, linked lists and de-duplication techniques |
US20140281155A1 (en) * | 2013-03-14 | 2014-09-18 | Lsi Corporation | Storage device assisted data de-duplication |
KR20140114515A (ko) * | 2013-03-15 | 2014-09-29 | 삼성전자주식회사 | 불휘발성 메모리 장치 및 그것의 중복 데이터 제거 방법 |
US9537771B2 (en) | 2013-04-04 | 2017-01-03 | Marvell Israel (M.I.S.L) Ltd. | Exact match hash lookup databases in network switch devices |
US9471500B2 (en) | 2013-04-12 | 2016-10-18 | Nec Corporation | Bucketized multi-index low-memory data structures |
US9148387B2 (en) * | 2013-05-10 | 2015-09-29 | Brocade Communications Systems, Inc. | Hardware hash table virtualization in multi-packet processor networking systems |
US20150019815A1 (en) | 2013-07-15 | 2015-01-15 | International Business Machines Corporation | Utilizing global digests caching in data deduplication of workloads |
US10339109B2 (en) * | 2013-07-15 | 2019-07-02 | International Business Machines Corporation | Optimizing hash table structure for digest matching in a data deduplication system |
US10073853B2 (en) | 2013-07-17 | 2018-09-11 | International Business Machines Corporation | Adaptive similarity search resolution in a data deduplication system |
US9898410B2 (en) * | 2013-09-10 | 2018-02-20 | Intel Corporation | Hybrid main memory using a fine-grain level of remapping |
US10380073B2 (en) | 2013-11-04 | 2019-08-13 | Falconstor, Inc. | Use of solid state storage devices and the like in data deduplication |
KR20150067583A (ko) * | 2013-12-10 | 2015-06-18 | 삼성전자주식회사 | 불휘발성 메모리 장치 및 그것의 중복 데이터 제거 방법 |
US9792063B2 (en) * | 2014-01-15 | 2017-10-17 | Intel Corporation | Deduplication-based data security |
US10380183B2 (en) * | 2014-04-03 | 2019-08-13 | International Business Machines Corporation | Building and querying hash tables on processors |
US8868825B1 (en) | 2014-07-02 | 2014-10-21 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
US9658774B2 (en) * | 2014-07-09 | 2017-05-23 | Hitachi, Ltd. | Storage system and storage control method |
EP2966562A1 (en) * | 2014-07-09 | 2016-01-13 | Nexenta Systems, Inc. | Method to optimize inline i/o processing in tiered distributed storage systems |
US9454488B2 (en) * | 2014-08-08 | 2016-09-27 | PernixData, Inc. | Systems and methods to manage cache data storage |
US9489239B2 (en) | 2014-08-08 | 2016-11-08 | PernixData, Inc. | Systems and methods to manage tiered cache data storage |
US9740631B2 (en) * | 2014-10-07 | 2017-08-22 | Google Inc. | Hardware-assisted memory compression management using page filter and system MMU |
US9703797B2 (en) | 2015-02-18 | 2017-07-11 | Exagrid Systems, Inc. | Multi-level deduplication |
KR20150035876A (ko) * | 2015-02-24 | 2015-04-07 | 포항공과대학교 산학협력단 | 데이터 중복 제거 방법 및 장치 |
US9892053B2 (en) | 2015-03-24 | 2018-02-13 | Intel Corporation | Compaction for memory hierarchies |
US10089320B2 (en) * | 2015-07-31 | 2018-10-02 | Hiveio Inc. | Method and apparatus for maintaining data consistency in an in-place-update file system with data deduplication |
TWI804466B (zh) * | 2016-05-20 | 2023-06-11 | 南韓商三星電子股份有限公司 | 擷取記憶體中儲存的資料的方法與去重複模組 |
-
2016
- 2016-05-20 US US15/161,136 patent/US9983821B2/en active Active
- 2016-11-09 TW TW105136351A patent/TWI710901B/zh active
- 2016-11-10 KR KR1020160149705A patent/KR102597640B1/ko active IP Right Grant
-
2017
- 2017-03-24 JP JP2017058521A patent/JP6764362B2/ja active Active
- 2017-03-29 CN CN201710196455.9A patent/CN107239230B/zh active Active
-
2018
- 2018-02-26 US US15/905,746 patent/US10318434B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015067382A1 (en) * | 2013-11-08 | 2015-05-14 | Fujitsu Technology Solutions Intellectual Property Gmbh | Storage appliance and method thereof for inline deduplication with segmentation |
CN104504076A (zh) * | 2014-12-22 | 2015-04-08 | 西安电子科技大学 | 一种高并发和高空间利用率的分布式缓存方法 |
Also Published As
Publication number | Publication date |
---|---|
US20170286003A1 (en) | 2017-10-05 |
US20180181495A1 (en) | 2018-06-28 |
TW201734803A (zh) | 2017-10-01 |
US10318434B2 (en) | 2019-06-11 |
KR20170112952A (ko) | 2017-10-12 |
TWI710901B (zh) | 2020-11-21 |
CN107239230A (zh) | 2017-10-10 |
US9983821B2 (en) | 2018-05-29 |
JP2017182803A (ja) | 2017-10-05 |
JP6764362B2 (ja) | 2020-09-30 |
KR102597640B1 (ko) | 2023-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107239230B (zh) | 用于高效存储器内嵌去重应用的最优化的跳房子多散列表 | |
CN107273042B (zh) | 重复删除dram系统算法架构的存储器模块及方法 | |
CN107273397B (zh) | 用于有效的存储器在线重复删除应用的虚拟桶多哈希表 | |
TWI804466B (zh) | 擷取記憶體中儲存的資料的方法與去重複模組 | |
US11281585B2 (en) | Forward caching memory systems and methods | |
US10678704B2 (en) | Method and apparatus for enabling larger memory capacity than physical memory size | |
CN112639748B (zh) | 异步正向缓存存储器系统和方法 | |
US10528284B2 (en) | Method and apparatus for enabling larger memory capacity than physical memory size | |
CN112602071B (zh) | 正向高速缓存应用程序编程接口系统和方法 |
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 |