KR20170131274A - Method and apparatus for enabling larger memory capacity than physical memory size - Google Patents

Method and apparatus for enabling larger memory capacity than physical memory size Download PDF

Info

Publication number
KR20170131274A
KR20170131274A KR1020170062408A KR20170062408A KR20170131274A KR 20170131274 A KR20170131274 A KR 20170131274A KR 1020170062408 A KR1020170062408 A KR 1020170062408A KR 20170062408 A KR20170062408 A KR 20170062408A KR 20170131274 A KR20170131274 A KR 20170131274A
Authority
KR
South Korea
Prior art keywords
hash
data
bucket
memory
buckets
Prior art date
Application number
KR1020170062408A
Other languages
Korean (ko)
Other versions
KR102190403B1 (en
Inventor
동옌 지앙
창후이 린
크리슈나 말라디
김종민
홍종 정
Original Assignee
삼성전자주식회사
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US15/161,136 external-priority patent/US9983821B2/en
Priority claimed from US15/162,517 external-priority patent/US10496543B2/en
Priority claimed from US15/476,757 external-priority patent/US10678704B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20170131274A publication Critical patent/KR20170131274A/en
Application granted granted Critical
Publication of KR102190403B1 publication Critical patent/KR102190403B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

A method for collecting data stored in a memory related to a de-duplication module is provided. The method comprises the steps of: identifying a logical address of data; identifying a physical line ID (PLID) of the data according to the logical address by searching at least a part of a logical address of a translation table; finding a position of each physical line corresponding to the PLID; collecting the data from each of the physical lines. The collecting step includes a step of copying each hash cylinder to a read cache. Each of the hash cylinders includes: each hash bucket including each of the physical lines; and each reference counter related to each of the physical lines.

Description

물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치{METHOD AND APPARATUS FOR ENABLING LARGER MEMORY CAPACITY THAN PHYSICAL MEMORY SIZE}[0001] METHOD AND APPARATUS FOR ENABLING LARGER MEMORY [0002] CAPACITY THAN PHYSICAL MEMORY SIZE [

본 발명의 실시 예들의 하나 이상의 측면들은 시스템 메모리 및 저장 장치에 관한 것이고, 좀 더 구체적으로, 고용량 저 대기시간(high capacity low latency)의 메모리 및 저장 장치에 관한 것이다.One or more aspects of embodiments of the present invention relate to system memory and storage devices, and more particularly, to memory and storage devices with high capacity low latency.

데이터베이스들(databases), 데스크톱 가상화(virtual desktop infrastructure), 및 데이터 분석(data analytics)과 같은 전형적인 최신 컴퓨터 애플리케이션(applications)은 대용량 메인 메모리(main memory)를 필요로 한다. 컴퓨터 시스템들이 더 복잡한 데이터 및 저장 집약형 애플리케이션들을 수행하기 위해 확장함에 따라, 보다 큰 메모리 용량에 대한 요구는 비례해서 증가한다.Typical modern computer applications, such as databases, virtual desktop infrastructure, and data analytics, require large amounts of main memory. As computer systems expand to perform more complex data and storage intensive applications, the demand for larger memory capacity increases proportionally.

전형적인 RAM(random-access memory)은 RAM의 물리적 설계에 의해 저장될 수 있는 데이터의 양이 제한된다. 예를 들어, 8GB DRAM은 전형적으로 최대 8GB 데이터를 갖는다. 또한, 미래 데이터 센터(data center) 애플리케이션은 고용량 저 대기시간(high capacity low latency) 메모리를 사용할 것이다.A typical random-access memory (RAM) limits the amount of data that can be stored by the physical design of the RAM. For example, an 8 GB DRAM typically has a maximum of 8 GB of data. Future data center applications will also use high capacity low latency memory.

이러한 배경 기술 부분에서 개시된 상술한 정보는 본 발명의 배경의 이해를 돕기 위한 것이고, 그러므로 종래 기술을 구성하지 않는 정보를 포함할 수 있다.The above-described information disclosed in this Background section is for the purpose of helping to understand the background of the present invention, and may therefore include information that does not constitute prior art.

본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치를 제공할 수 있다.SUMMARY OF THE INVENTION The present invention has been made to solve the above-mentioned technical problems, and it is an object of the present invention to provide a method and apparatus for enabling a memory capacity larger than a physical memory size.

본 명세서의 실시 예들의 측면들은 RAM의 물리적 메모리 크기보다 큰 RAM 내의 메모리 용량을 가능하게 하는 방법들 및 연관된 구조들에 관한 것이다. 본 발명의 실시 예들에 따라, 중복 제거 알고리즘들(deduplication algorithms)은 데이터 메모리 감소 및 문맥 주소 지정(context addressing)을 달성하기 위해 사용된다. 본 발명의 실시 예들에 따라, 유저 데이터(user data)는 유저 데이터의 해시 값(hash value)에 의해 색인된 해시 테이블(hash table)에 저장된다.Aspects of embodiments of the present disclosure relate to methods and associated structures that enable memory capacity in RAM that is larger than the physical memory size of the RAM. In accordance with embodiments of the present invention, deduplication algorithms are used to achieve data memory reduction and context addressing. According to embodiments of the present invention, the user data is stored in a hash table indexed by the hash value of the user data.

본 발명의 실시 예에 따라, 중복 제거 모듈(dedupe module)과 연관된 메모리에 저장된 데이터를 회수하는 방법이 제공되고, 상기 중복 제거 모듈은 읽기 캐시(read cache)를 포함하고, 상기 메모리는 변환 테이블(translation table) 및 결합된 데이터 구조를 포함하고, 상기 결합된 데이터 구조는 해시 테이블(hash table) 및 참조 카운터 테이블(reference counter table)을 포함하고, 상기 해시 테이블 및 상기 참조 카운터 테이블 각각은 상기 결합된 데이터 구조의 복수의 해시 원통(hash cylinder)에 저장되고, 상기 해시 테이블은 복수의 해시 버킷(bucket)을 포함하고 각 해시 버킷은 복수의 물리적 라인을 포함하고 각 물리적 라인은 데이터를 저장하고, 상기 참조 카운터 테이블은 복수의 참조 카운터 버킷을 포함하고 각 참조 카운터 버킷은 복수의 참조 카운터를 포함한다. 상기 방법은: 상기 데이터의 논리적 주소(logical address)를 식별하는 단계; 상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하는 단계; 상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾는 단계; 및 상기 각각의 물리적 라인으로부터 상기 데이터를 회수하는 단계를 포함하되, 상기 회수하는 단계는 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 단계를 포함하고, 상기 각각의 해시 원통은: 상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 및 상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함한다.According to an embodiment of the present invention there is provided a method of retrieving data stored in a memory associated with a dedupe module, the deduplication module including a read cache, wherein the combined data structure comprises a hash table and a reference counter table, wherein each of the hash table and the reference counter table is associated with the combined Wherein the hash table is stored in a plurality of hash cylinders of the data structure, the hash table includes a plurality of hash buckets, each hash bucket includes a plurality of physical lines, each physical line stores data, The reference counter table includes a plurality of reference counter buckets, and each reference counter bucket includes a plurality of reference counters. The method comprising: identifying a logical address of the data; Retrieving at least a portion of the logical address of the translation table to identify a physical line ID (PLID) of the data according to the logical address; Finding a position of each physical line of the plurality of physical lines corresponding to the PLID; And recovering the data from each physical line, wherein the recovering comprises copying each hash cylinder of the plurality of hash cylinders into the read cache, wherein each hash cylinder : Each hash bucket of the plurality of hash buckets, including the respective physical lines; And each reference counter bucket of the plurality of reference counter buckets, each reference counter associated with each physical line.

방법은 상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하는 단계를 더 포함할 수 있다.The method may further include determining, based on the PLID, that the data is stored in the hash table.

상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다.The PLID may be generated using a first hash function applied to the data. The PLID may include an address indicating the location of the hash table.

상기 PLID는 포함할 수 있다: 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier); 상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및 상기 데이터가 저장된 열을 나타내는 제 3 식별자.The PLID may include: a first identifier that indicates whether the data is stored in the hash table or in an overflow memory region; A second identifier indicating a row in which the data is stored; And a third identifier indicating a column in which the data is stored.

상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함할 수 있다. 상기 각각의 해시 원통은 상기 복수의 서명 버킷을 포함하는 각각의 서명 버킷을 더 포함할 수 있고, 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함한다.The combined data structure may further comprise a signature table comprising a plurality of signature buckets, wherein each signature bucket may comprise a plurality of signatures. Each hash cylinder may further comprise a respective signature bucket comprising the plurality of signature buckets and wherein each signature bucket comprises a respective signature associated with each of the physical lines.

상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다. 상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성될 수 있다.The PLID may be generated using a first hash function applied to the data. The PLID may include an address indicating the location of the hash table. The plurality of signatures may be generated using a second hash function that is smaller than the first hash function.

각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적할 수 있다.Each reference counter can track the number of duplicates removed for the corresponding data stored in the hash table.

본 발명의 실시 예에 따라, 중복 제거 엔진(dedupe engine)과 연관된 메모리에 데이터를 저장하는 방법이 제공된다. 방법은 포함한다: 저장될 상기 데이터를 식별하는 단계; 제 1 해시 함수(hash function)를 이용하여 상기 메모리의 해시 테이블(hash table)에 저장되어야 할 상기 데이터의 위치에 대응하는 제 1 해시 값(hash value)을 결정하는 단계; 상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계; 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 상기 데이터가 저장되어야 할 위치에 또한 대응하는 제 2 해시 값을 결정하는 단계; 상기 메모리의 변환 테이블(translation table)에 상기 제 1 해시 값을 저장하는 단계; 및 상기 메모리의 서명 테이블에 상기 제 2 해시 값을 저장하는 단계.According to an embodiment of the present invention, a method of storing data in a memory associated with a dedupe engine is provided. The method includes: identifying said data to be stored; Determining a first hash value corresponding to a location of the data to be stored in a hash table of the memory using a first hash function; Storing the data at a location of the hash table corresponding to the first hash value; Determining a second hash value corresponding also to a location at which the data is to be stored using a second hash function less than the first hash function; Storing the first hash value in a translation table of the memory; And storing the second hash value in a signature table of the memory.

방법은 상기 데이터에 대응하는, 참조 카운터 테이블(reference counter table)의 참조 카운터를 증가시키는 단계를 더 포함할 수 있다.The method may further comprise incrementing a reference counter of a reference counter table corresponding to the data.

상기 메모리는 포함할 수 있다: 복수의 데이터를 저장하는 상기 해시 테이블; 상기 제 1 해시 함수를 이용하여 생성되는 복수의 PLID(physical line ID)를 저장하는 상기 변환 테이블; 상기 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 상기 서명 테이블; 복수의 참조 카운터를 저장하는 참조 카운터 테이블; 및 오버플로 메모리 영역(overflow memory region), 각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적한다.The memory may include: the hash table storing a plurality of data; A conversion table storing a plurality of physical line IDs (PLIDs) generated using the first hash function; The signature table storing a plurality of signatures generated using the second hash function; A reference counter table storing a plurality of reference counters; And an overflow memory region, each reference counter tracks the number of duplicates removed for the corresponding data stored in the hash table.

상기 복수의 PLID 각각은 포함할 수 있다: 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 상기 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(identifier); 상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및 상기 데이터가 저장된 열을 나타내는 제 3 식별자.Each of the plurality of PLIDs may include: a first identifier that indicates whether the data is stored in the hash table or the overflow memory area; A second identifier indicating a row in which the data is stored; And a third identifier indicating a column in which the data is stored.

상기 해시 테이블, 상기 서명 테이블, 및 상기 참조 카운터 테이블은 결합된 데이터 구조로 통합될 수 있다. 상기 결합된 데이터 구조는 복수의 해시 원통(cylinder)을 포함할 수 있다. 각 해시 원통은 포함한다: 복수의 물리적 라인을 포함하는 해시 버킷; 상기 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및 상기 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷.The hash table, the signature table, and the reference counter table may be combined into a combined data structure. The combined data structure may include a plurality of hash cylinders. Each hash cylinder includes: a hash bucket comprising a plurality of physical lines; A signature bucket comprising respective signatures corresponding to the plurality of physical lines; And a plurality of reference counters corresponding to the plurality of physical lines.

상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계는 상기 제 1 해시 값에 대응하는 상기 해시 버킷에 상기 데이터를 저장하는 단계를 포함할 수 있다. 상기 서명 테이블에 상기 제 2 해시 값을 저장하는 단계는 상기 데이터가 저장된 상기 해시 버킷에 대응하는 상기 서명 버킷에 상기 제 2 해시 값을 저장하는 단계를 포함할 수 있다.The step of storing the data at a location of the hash table corresponding to the first hash value may include storing the data in the hash bucket corresponding to the first hash value. The step of storing the second hash value in the signature table may include storing the second hash value in the signature bucket corresponding to the hash bucket in which the data is stored.

본 발명의 실시 예에 따라, 읽기 캐시(read cache); 호스트 시스템으로부터 데이터 회수 요청을 수신하는 중복 제거 엔진(dedupe engine); 및 메모리를 포함하되, 상기 메모리는: 변환 테이블(translation table); 및 결합된 데이터 구조를 포함하되, 상기 결합된 데이터 구조는: 복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블(hash table); 복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및 복수의 해시 원통(cylinder)을 포함하되, 각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 각 해시 원통은 상기 해시 버킷들 중 하나 및 상기 참조 카운터 버킷들 중 하나를 포함하되, 상기 데이터 회수 요청은 상기 중복 제거 엔진으로 하여금: 상기 데이터의 논리적 주소를 식별하고; 상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하고; 상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾고; 그리고 상기 각각의 물리적 라인으로부터 상기 데이터를 회수하도록 야기하고, 상기 데이터를 회수하는 것은 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 것을 포함하고, 상기 각각의 해시 원통은: 상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함하는 중복 제거 모듈이 제공된다.According to an embodiment of the present invention, a read cache; A dedupe engine for receiving a data retrieval request from the host system; And a memory, said memory comprising: a translation table; And a combined data structure, the combined data structure comprising: a hash table including a plurality of hash buckets; A reference counter table including a plurality of reference counter buckets; And a plurality of hash cylinders, wherein each hash bucket comprises a plurality of physical lines, each physical line storing data, each reference counter bucket comprising a plurality of reference counters, each hash cylinder One of the hash buckets and one of the reference counter buckets, wherein the data retrieval request causes the deduplication engine to: identify the logical address of the data; Searching at least a portion of the logical address of the translation table to identify a physical line ID (PLID) of the data according to the logical address; Find a location of each physical line of the plurality of physical lines, corresponding to the PLID; And recovering the data from each physical line, wherein recovering the data comprises copying each hash cylinder of the plurality of hash cylinders into the read cache, each of the hash cylinders comprising: Each hash bucket of each of the plurality of hash buckets, each containing a respective physical line; A deduplication module is provided that includes a respective reference counter bucket of the plurality of reference counter buckets, each counter reference counter associated with each physical line.

상기 데이터 회수 요청은 상기 중복 제거 엔진이 상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하도록 한다.The data retrieval request causes the de-duplication engine to determine, based on the PLID, that the data is stored in the hash table.

상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다.The PLID may be generated using a first hash function applied to the data. The PLID may include an address indicating the location of the hash table.

상기 PLID는 포함할 수 있다: 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier); 상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및 상기 데이터가 저장된 열을 나타내는 제 3 식별자.The PLID may include: a first identifier that indicates whether the data is stored in the hash table or in an overflow memory region; A second identifier indicating a row in which the data is stored; And a third identifier indicating a column in which the data is stored.

상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함할 수 있다. 상기 각각의 해시 원통은 상기 복수의 서명 버킷을 포함하는 각각의 서명 버킷을 더 포함할 수 있다. 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함한다.The combined data structure may further comprise a signature table comprising a plurality of signature buckets, wherein each signature bucket may comprise a plurality of signatures. Each hash cylinder may further include a respective signature bucket comprising the plurality of signature buckets. Each of the signature buckets comprising a respective signature associated with the respective physical line.

상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다. 상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성될 수 있다.The PLID may be generated using a first hash function applied to the data. The PLID may include an address indicating the location of the hash table. The plurality of signatures may be generated using a second hash function that is smaller than the first hash function.

각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적할 수 있다.Each reference counter can track the number of duplicates removed for the corresponding data stored in the hash table.

본 발명의 실시 예에 따라, 호스트 인터페이스; 상기 호스트 인터페이스를 통해 호스트 시스템으로부터 데이터 전송 요청들을 수신하는 전송 관리부; 및 복수의 파티션(partition)을 포함하되, 각 파티션은: 상기 전송 관리부로부터 파티션 데이터 요청들을 수신하는 중복 제거 엔진(dedupe engine); 복수의 메모리 컨트롤러; 상기 중복 제거 엔진 및 상기 복수의 메모리 컨트롤러 사이의 메모리 관리부; 및 복수의 메모리 모듈을 포함하되, 각 메모리 모듈은 상기 복수의 메모리 컨트롤러 중 하나와 연결되는 중복 제거 모듈이 제공된다. According to an embodiment of the present invention, a host interface; A transmission management unit for receiving data transmission requests from the host system through the host interface; And a plurality of partitions, each partition comprising: a dedupe engine for receiving partition data requests from the transmission manager; A plurality of memory controllers; A memory management unit between the de-duplication engine and the plurality of memory controllers; And a plurality of memory modules, wherein each memory module is connected to one of the plurality of memory controllers.

본 발명의 실시 예에 따라, 읽기 캐시(read cache) 및 메모리를 포함하되, 상기 메모리는: 변환 테이블(translation table); 및 복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블; 복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및 상기 복수의 해시 버킷의 제 1 해시 버킷에 대한 V개 가상 버킷들을 식별하는 중복 제거 엔진을 포함하되, 각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 상기 가상 버킷은 상기 제 1 해시 버킷에 인접한 상기 복수의 해시 버킷 중 다른 것들이고, 상기 가상 버킷들은 상기 제 1 해시 버킷이 가득 찬 경우 상기 제 1 해시 버킷의 데이터의 일부를 저장하고, V는 제 1 해시 버킷의 가상 버킷들이 얼마나 가득 찼는지에 기초하여 동적으로 설정되는 정수인 중복 제거 모듈이 제공된다.According to an embodiment of the present invention, there is provided a computer system comprising a read cache and a memory, said memory comprising: a translation table; A hash table including a plurality of hash buckets; A reference counter table including a plurality of reference counter buckets; And a de-duplication engine for identifying V virtual buckets for a first hash bucket of the plurality of hash buckets, wherein each hash bucket comprises a plurality of physical lines, each physical line storing data, Wherein the counter bucket includes a plurality of reference counters, wherein the virtual bucket is other of the plurality of hash buckets adjacent to the first hash bucket, and wherein the virtual buckets are configured such that when the first hash bucket is full, And V is an integer set dynamically based on how full the virtual buckets of the first hash bucket are.

본 발명의 실시 예들은 동일한 데이터로 구성되는 복수의 데이터 블록을 하나의 저장된 데이터 블록에 연관시켜, 데이터 블록들의 중복 복사본들은 컴퓨터 메모리(computer memory)에 의해 감소되거나 제거될 수 있고, 그렇게 함으로써 메모리 장치 내 불필요한 데이터 복사본들의 전체 양이 감소하게 된다. 불필요한 데이터 복사본들(redundant copies of data)의 감소는 읽기 대기시간을 줄일 수 있고, 메모리 대역폭(bandwidth)을 증가시킬 수 있고, 잠재적으로 전력 절감을 야기할 수 있다.Embodiments of the present invention relate to a plurality of data blocks comprised of the same data to a single stored data block such that duplicate copies of the data blocks can be reduced or eliminated by computer memory, The total amount of unnecessary data copies is reduced. Reducing redundant copies of data can reduce read latency, increase memory bandwidth, and potentially lead to power savings.

본 발명의 이들 및 다른 특징들 및 측면들은 명세서, 청구 범위, 및 첨부 도면들을 참조하여 인식되고 이해될 것이다.
도 1은 본 발명의 실시 예에 따른 중복 제거 모듈의 블록도이다.
도 2는 본 발명의 다른 실시 예에 따른 중복 제거 모듈의 블록도이다.
도 3은 본 발명의 실시 예에 따른 중복 제거 엔진의 논리적 관점의 블록도이다.
도 4는 본 발명의 실시 예에 따른 레벨-1 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다.
도 5는 본 발명의 실시 예에 따른 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다.
도 6은 본 발명의 실시 예에 따른, 동적 L2 맵 테이블, 서명 및 참조 카운터 테이블들, 및 오버플로 메모리 영역을 갖는 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다.
도 7은 본 발명의 실시 예에 따른 해시 원통(hash cylinder)의 논리적 관점의 블록도이다.
도 8은 본 발명의 실시 예에 따른 결합된 데이터 구조의 논리적 관점의 블록도이다.
도 9는 본 발명의 실시 예에 따른 가상 버킷들과 연관된 해시 버킷 및 해당 참조 카운터 버킷의 논리적 관점의 블록도이다.
도 10은 본 발명의 실시 예에 따른 RAM에 저장된 데이터를 회수하는 방법을 도시하는 순서도이다.
도 11은 본 발명의 실시 예에 따른 RAM에 데이터를 저장하는 방법을 도시하는 순서도이다.
These and other features and aspects of the present invention will be appreciated and understood with reference to the specification, the claims, and the accompanying drawings.
1 is a block diagram of a de-duplication module according to an embodiment of the present invention.
2 is a block diagram of a de-duplication module in accordance with another embodiment of the present invention.
3 is a block diagram of a logical view of a deduplication engine in accordance with an embodiment of the present invention.
4 is a block diagram of a logical view of a de-duplication engine including a level-1 conversion table according to an embodiment of the present invention.
5 is a block diagram of a logical view of a de-duplication engine including a level-2 conversion table according to an embodiment of the present invention.
6 is a block diagram of a logical view of a deduplication engine including a dynamic L2 map table, signature and reference counter tables, and a level-2 translation table having an overflow memory area, in accordance with an embodiment of the present invention.
7 is a block diagram of a logical view of a hash cylinder according to an embodiment of the present invention.
8 is a block diagram of a logical view of a combined data structure in accordance with an embodiment of the present invention.
9 is a block diagram of a logical view of a hash bucket associated with virtual buckets and corresponding reference counter buckets in accordance with an embodiment of the present invention.
10 is a flowchart showing a method of recovering data stored in a RAM according to an embodiment of the present invention.
11 is a flowchart showing a method of storing data in a RAM according to an embodiment of the present invention.

본 명세서의 실시 예들은 물리적 메모리 크기보다 큰 메모리(예를 들면, RAM(random-access memory)) 내의 메모리 용량을 가능하게 하는 방법들 및 연관된 구조들에 관한 것이다. 본 발명의 실시 예들에 따라, 중복 제거 알고리즘들(deduplication algorithms)은 데이터 메모리 감소 및 문맥 주소 지정(context addressing)을 달성하기 위해 사용된다. 본 발명의 실시 예들에 따라, 유저 데이터(user data)는 유저 데이터의 해시 값(hash value)에 의해 색인된 해시 테이블(hash table)에 저장된다.Embodiments of the present disclosure are directed to methods and associated structures that enable memory capacity in a memory (e.g., random-access memory (RAM)) that is larger than the physical memory size. In accordance with embodiments of the present invention, deduplication algorithms are used to achieve data memory reduction and context addressing. According to embodiments of the present invention, the user data is stored in a hash table indexed by the hash value of the user data.

DRAM(dynamic random access memory) 기술이 메모리 용량에 대한 이러한 증가하는 요구를 충족시키기 위해 20nm 공정 기술을 넘어 공격적으로 확장하는 동안, 중복 제거와 같은 기법들(techniques)은 시스템 메모리의 물리적 메모리 용량보다 2-3배 또는 그 이상만큼 시스템 메모리의 가상 메모리 용량을 증가시키기 위해 적용될 수 있다. 또한, 본 발명의 실시 예들은 다른 유형의 메모리(예를 들면, 플래시 메모리(flash memory))를 사용할 수 있다.While dynamic random access memory (DRAM) technology is aggressively expanding beyond the 20nm process technology to meet this growing demand for memory capacity, techniques such as deduplication may require more than two -3 times or more to increase the virtual memory capacity of the system memory. In addition, embodiments of the present invention may use other types of memory (e.g., flash memory).

보조 압축(auxiliary compaction) 방법들을 사용하여, 본 발명의 실시 예들은 모든 메모리 자원을 충분히 이용하여 높은 중복 제거 비율을 지속적으로 달성하기 위해 고급의 중복 제거된 메모리 및 데이터 구조들을 제공할 수 있다.Using auxiliary compaction methods, embodiments of the present invention can provide advanced de-duplicated memory and data structures to fully exploit all memory resources to continuously achieve a high deduplication ratio.

고용량(high capacity) 및 저 대기시간(low latency)을 갖는 메모리는 데이터 센터 애플리케이션(data center applications)을 위해 크게 요구된다. 이러한 메모리 장치는 그들의 물리적 메모리 크기(size)보다 큰 메모리 용량을 제공하기 위해 데이터 압축 방식(scheme)뿐만 아니라 중복 제거 방식도 채용할 수 있다. 중복 제거된 메모리 장치들은 중복된 유저 데이터를 줄이고 사용 가능한 메모리 자원을 완전히 이용하여 높은 중복 제거 비율을 지속적으로 달성할 수 있다. 또한, 중복 제거된 메모리 장치들에 의해 이용되는 중복 제거 방식은 중복 제거된 데이터에 대한 효과적인 주소 지정을 달성할 수 있다.Memory with high capacity and low latency is highly required for data center applications. Such memory devices may employ a deduplication scheme as well as a data compression scheme to provide a memory capacity greater than their physical memory size. Deduplicated memory devices can reduce duplicated user data and fully utilize available memory resources to achieve a high deduplication ratio continuously. Also, the deduplication scheme utilized by deduplicated memory devices can achieve effective addressing of de-duplicated data.

데이터 중복 제거(data deduplication, or data duplication elimination)는 메모리 장치 내 불필요한 데이터(redundant data)의 감소를 나타내고 그렇게 함으로써 메모리 장치의 용량 비용이 감소한다. 데이터 중복 제거에서, 데이터 객체/아이템(object/item, 예를 들면, 데이터 파일)은 하나 이상의 데이터 라인들/청크들/블록들(lines/chunks/blocks)로 분할된다. 동일한 데이터로 구성되는 복수의 데이터 블록을 하나의 저장된 데이터 블록에 연관시켜, 데이터 블록들의 중복 복사본들은 컴퓨터 메모리(computer memory)에 의해 감소되거나 제거될 수 있고, 그렇게 함으로써 메모리 장치 내 불필요한 데이터 복사본들의 전체 양이 감소한다. 불필요한 데이터 복사본들(redundant copies of data)의 감소는 읽기 대기시간을 줄일 수 있고, 메모리 대역폭(bandwidth)을 증가시킬 수 있고, 잠재적으로 전력 절감을 야기할 수 있다.Data deduplication (or data duplication elimination) indicates a reduction in redundant data in a memory device, thereby reducing the capacity cost of the memory device. In data de-duplication, a data object / item (e.g., a data file) is divided into one or more data lines / chunks / blocks (lines / chunks / blocks). By associating a plurality of blocks of data comprised of the same data with a block of stored data, redundant copies of the blocks of data can be reduced or eliminated by computer memory, thereby reducing the total number of unnecessary copies of data in the memory device The amount decreases. Reducing redundant copies of data can reduce read latency, increase memory bandwidth, and potentially lead to power savings.

따라서, 중복된 데이터 복사본들이 하나의 데이터 복사본으로 감소될 수 있으면, 동일한 물리적 자원량을 사용하면서도 메모리 장치의 전체 사용 가능한 용량이 증가한다. 그 결과로 생긴 메모리 장치의 경제적 사용은 데이터 다시 쓰기 횟수(data re-write count)를 감소시키게 하고, 그리고 메모리에 이미 저장된 중복된 데이터 블록들에 대한 쓰기 요청들을 버릴 수 있으므로, 데이터 중복 제거를 실행하는 메모리 장치의 수명은 효과적으로 쓰기 내구성이 증가되는 것에 의해 연장될 수 있다.Thus, if duplicate data copies can be reduced to one copy of the data, the total available capacity of the memory device increases while using the same amount of physical resources. The economical use of the resulting memory device can reduce data re-write counts and discard write requests for redundant blocks of data already stored in memory, The life of the memory device can be extended by effectively increasing the write durability.

데이터 중복 제거의 관련 분야의 방법들은 메모리 내(in-memory) 중복 제거 기술을 사용할 수 있고, 여기서, 중복 제거 엔진(deduplication engine)은 CPU 중심 접근 방식(CPU-centric approach)으로 CPU(central processing unit) 또는 메모리 컨트롤러(memory controller; MC)와 통합된다. 이러한 방법들은 CPU 프로세서의 중복들의 인식을 가능하게 하기 위해, 그리고 메모리 컨트롤러의 제어에 따라 중복 제거된 메모리 동작들(예를 들어, 콘텐츠 검색 (content lookups), 참조 카운트 업데이트 (reference count updates), 등)를 제공하려는 시도를 하기 위해 메모리 컨트롤러와 함께 동작하는 중복 제거된 캐시(deduplicated cache; DDC)를 전형적으로 구현한다. 중복 제거 방법들은 또한 중요 경로(critical path)로부터 변환 인출(translation fetch)을 제거하여 데이터 읽기들을 향상하는 변환 라인들을 캐싱(caching)하기 위한 캐시(cache)이고, 색인 버퍼(lookaside buffer)와 유사할 수 있는 직접 전환 버퍼(direct translation buffer; DTB)를 구현할 수 있다.Related methods of deduplication can use in-memory deduplication techniques, where the deduplication engine is a CPU-centric approach to central processing unit (CPU) ) Or a memory controller (MC). These methods may be used to enable recognition of redundancies of the CPU processor and to enable memory operations (e.g., content lookups, reference count updates, etc.) Typically implement a deduplicated cache (DDC) that works in conjunction with a memory controller to attempt to provide the memory controller. Deduplication methods are also caches for caching translation lines that improve data reads by removing translation fetches from critical paths and are similar to lookaside buffers A direct translation buffer (DTB) can be implemented.

중복 제거는 하드 드라이브들(hard drives)을 위해 가장 보편적으로 사용된다. 그러나, DRAM과 같은 휘발성 메모리의 영역에서 미세한(fine grain) 중복 제거를 가능하게 하는데 관심이 있다.Deduplication is most commonly used for hard drives. However, there is interest in enabling fine grain deduplication in the area of volatile memory such as DRAM.

첨부 도면들과 관련하여 이하에서 설명되는 상세한 설명은 본 발명의 실시 예에 따라 제공되는 RAM(또는 다른 메모리 저장 장치)의 물리적 메모리 크기보다 큰 RAM(또는 다른 메모리 저장 장치) 내의 메모리 용량을 가능하게 하기 위한 방법들 및 연관된 구조들의 예시적인 실시 예들의 설명으로서 의도된 것이고 본 발명이 구성되거나 이용될 수 있는 유일한 형태를 표현하기 위해 의도된 것은 아니다. 설명은 도시된 실시 예들과 관련하여 본 발명의 특징들을 설명한다. 그러나, 동일하거나 동등한 기능들 및 구조들은 본 발명의 사상 및 범위 내에서 포함되는 것으로 의도된 다른 실시 예들에 의해 달성될 수 있음은 이해된다. 본 명세서의 다른 곳에서 언급된 바와 같이, 동일한 참조 번호들은 동일한 구성 요소들 또는 특징들을 나타내기 위한 것으로 의도된다.The detailed description set forth below in connection with the accompanying drawings is intended to enable memory capacity within the RAM (or other memory storage device) to be greater than the physical memory size of the RAM (or other memory storage device) provided in accordance with embodiments of the present invention Are intended as a description of exemplary embodiments of the methods and associated structures for carrying out the invention and are not intended to represent the only forms in which the invention may be constructed or used. The description sets forth the features of the invention in connection with the illustrated embodiments. It is understood, however, that the same or equivalent functions and structures may be achieved by other embodiments, which are intended to be included within the spirit and scope of the present invention. As mentioned elsewhere herein, like reference numerals are intended to depict the same elements or features.

도 1은 본 발명의 실시 예에 따른 중복 제거 모듈의 블록도이다. 도 1을 참조하면, 본 발명의 실시 예에 따른 중복 제거 모듈(dedupe module, 100)은 브릿지(bridge, 130), 메모리 컨트롤러(memory controller, 140), 호스트 인터페이스(host interface; host I/F, 160), 읽기 캐시(read cache, 170), 하나 이상의 메모리 모듈들(memory modules, 180), 및 중복 제거 엔진(dedupe engine, 200)을 포함한다.1 is a block diagram of a de-duplication module according to an embodiment of the present invention. 1, a dedupe module 100 according to an embodiment of the present invention includes a bridge 130, a memory controller 140, a host interface (host I / F) 160, a read cache 170, one or more memory modules 180, and a dedupe engine 200.

브릿지(130)는 중복 제거 엔진(200) 및 읽기 캐시(170)가 메모리 컨트롤러(140)와 통신하게 할 수 있는 인터페이스를 제공한다. 메모리 컨트롤러(140)는 통신하기 위해 브릿지(130) 및 메모리 모듈들(180)에 대한 인터페이스를 제공할 수 있다. 읽기 캐시(170)는 메모리 모듈들(180)의 일부일 수 있다.Bridge 130 provides an interface through which deduplication engine 200 and read cache 170 may communicate with memory controller 140. [ Memory controller 140 may provide an interface to bridge 130 and memory modules 180 for communication. The read cache 170 may be part of the memory modules 180.

몇몇 실시 예들에 있어서, 브릿지(180)는 존재하지 않을 수 있다. 이 경우, 메모리 컨트롤러(140)는 중복 제거 엔진(200) 및 읽기 캐시(170)와 직접적으로 통신할 수 있다.In some embodiments, the bridge 180 may not be present. In this case, the memory controller 140 can communicate directly with the deduplication engine 200 and the read cache 170.

중복 제거 엔진(200)은 메모리 모듈들(180)에 데이터를 저장하거나 메모리 모듈들(180)의 데이터에 접근하기 위해 호스트 인터페이스(160)를 통해 호스트 시스템과 통신할 수 있다. 중복 제거 엔진(200)은 호스트 인터페이스(160)를 통해 호스트 시스템의 다른 구성 요소들과 더 통신할 수 있다.Deduplication engine 200 may communicate with the host system via host interface 160 to store data in memory modules 180 or to access data in memory modules 180. Deduplication engine 200 may further communicate with other components of the host system via host interface 160. [

메모리 모듈들(180)은 DRAM 연결을 위한 DIMM(dual in-line memory module) 슬롯들(slots)이거나 플래시 메모리(flash memory), 다른 유형의 메모리 연결을 위한 슬롯들 등일 수 있다.Memory modules 180 may be dual in-line memory module (DIMM) slots or a flash memory for DRAM connections, slots for other types of memory connections, and the like.

도 2는 본 발명의 다른 실시 예에 따른 중복 제거 모듈의 블록도이다. 도 2를 참조하면, 중복 제거 모듈(dedupe module, 150)은 하나 이상의 파티션들(partitions, 250, 예를 들면, 파티션0(205-0), 파티션1(205-1), 등), 전송 관리부(transfer manager, 230), 및 호스트 인터페이스(162)를 포함할 수 있다. 각 파티션(250)은 중복 제거 엔진(202), 메모리 관리부(210), 하나 이상의 메모리 컨트롤러들(예를 들면, 메모리 컨트롤러0(142), 메모리 컨트롤러1(144) 등), 및 하나 이상의 메모리 모듈들(예를 들면, DIMM/플래시0(182), DIMM/플래시1(184) 등)을 포함할 수 있다.2 is a block diagram of a de-duplication module in accordance with another embodiment of the present invention. 2, a dedupe module 150 includes one or more partitions 250, for example, partition 0 (205-0), partition 1 (205-1), etc., a transfer manager 230, and a host interface 162. Each partition 250 includes a de-duplication engine 202, a memory manager 210, one or more memory controllers (e.g., memory controller 0 142, memory controller 1 144, etc.) (E.g., DIMM / Flash 0 182, DIMM / Flash 1 184, etc.).

중복 제거 엔진들(202) 각각은 전송 관리부(230) 또는 호스트 인터페이스(162)를 통해 호스트 시스템 중 어느 하나와 직접적으로 통신할 수 있다. 전송 관리부(230)는 호스트 인터페이스(162)를 통해 호스트 시스템과 통신할 수 있다.Each of the deduplication engines 202 may communicate directly with either of the host systems via the transmission management unit 230 or the host interface 162. [ The transmission management unit 230 can communicate with the host system via the host interface 162. [

전송 관리부(230)는 호스트 인터페이스(162)를 통해 호스트 시스템으로부터 데이터 전송 요청들을 수신할 수 있다. 전송 관리부(230)는 중복 제거 모듈(150)의 하나 이상의 파티션들(250)로의 데이터 전송 및 중복 제거 모듈(150)의 하나 이상의 파티션들(250)로부터의 데이터 전송을 더 관리할 수 있다. 몇몇 실시 예들에 있어서, 전송 관리부(230)는 저장될 데이터(예를 들면, RAM에 저장)를 저장하는 파티션(250)을 결정할 수 있다. 다른 실시 예들에 있어서, 전송 관리부(230)는 데이터가 저장되어야 할 파티션(250)에 관해서 호스트 시스템으로부터 지시들을 수신한다. 몇몇 실시 예들에 있어서, 전송 관리부(230)는 호스트 시스템으로부터 수신된 데이터를 분리할 수 있고 그것을 둘 이상의 파티션들로 보낼 수 있다.The transmission management unit 230 may receive data transmission requests from the host system via the host interface 162. [ The transmission management unit 230 may further manage data transmission from one or more partitions 250 of the deduplication module 150 and data transfer from one or more partitions 250 of the deduplication module 150. [ In some embodiments, transmission manager 230 may determine partition 250 to store data to be stored (e.g., stored in RAM). In other embodiments, the transmission manager 230 receives indications from the host system about the partition 250 where the data is to be stored. In some embodiments, the transmission management unit 230 may separate the data received from the host system and send it to two or more partitions.

중복 제거 모듈(150)은 호스트 인터페이스(162)를 통해 호스트 시스템의 구성 요소들과 통신할 수 있다.Deduplication module 150 may communicate with the components of the host system via host interface 162.

중복 제거 엔진(202)은 전송 관리부(230)로부터 그것의 각각의 파티션(250)에 대한 파티션 데이터 요청들을 수신할 수 있다. 중복 제거 엔진(202)은 메모리 모듈들 내 데이터의 접근 및 저장을 더 제어할 수 있다. 메모리 관리부(210)는 하나 이상의 메모리 모듈들 중에서 데이터가 저장되거나 데이터가 저장되어야 하는 메모리 모듈을 결정할 수 있다. 하나 이상의 메모리 컨트롤러들은 그들 각각의 메모리 모듈들 상의 데이터의 저장 또는 접근을 제어할 수 있다.Deduplication engine 202 may receive partition data requests from its transmission manager 230 for its respective partition 250. Deduplication engine 202 may further control access and storage of data in memory modules. The memory management unit 210 may determine which one of the one or more memory modules is to be stored or a memory module in which data is to be stored. One or more memory controllers may control the storage or access of data on their respective memory modules.

몇몇 실시 예들에 있어서, 중복 제거 엔진(202) 및 메모리 관리부(210)는 메모리 관리부(210) 및 중복 제거 엔진(202) 모두의 기능들을 수행할 수 있는 하나의 메모리 관리부로서 구현될 수 있다.In some embodiments, the deduplication engine 202 and the memory management section 210 may be implemented as a single memory management section capable of performing the functions of both the memory management section 210 and the deduplication engine 202. [

하나 이상의 메모리 컨트롤러들, 메모리 관리부(210), 및 중복 제거 엔진(202) 각각은 임의의 적합한 하드웨어(예를 들면, ASIC(application-specific integrated circuit)), 펌웨어(firmware, 예를 들면, DSP 또는 FPGA), 소프트웨어, 또는 소프트웨어, 펌웨어, 및 하드웨어의 적합한 조합을 이용하여 구현될 수 있다. 또한, 중복 제거 엔진(202)은 이하에서 보다 상세하게 설명될 것이다.Each of the one or more memory controllers, memory manager 210, and deduplication engine 202 may be implemented in any suitable hardware (e.g., application-specific integrated circuit (ASIC), firmware FPGA), software, or any suitable combination of software, firmware, and hardware. In addition, de-duplication engine 202 will be described in more detail below.

몇몇 실시 예들에 따라, 메모리가 고용량을 가지면, 파티션들은 변환 테이블 크기(translation table size)를 줄이기 위해 사용될 수 있다.According to some embodiments, if the memory has a high capacity, the partitions may be used to reduce the translation table size.

도 3은 본 발명의 실시 예에 따른 중복 제거 엔진의 논리적 관점의 블록도이다. 도 3을 참조하면, 중복 제거 엔진(200)은 복수의 테이블을 포함할 수 있다. 중복 제거 엔진(200)은 해시 테이블(hash table, 220), 변환 테이블(translation table, 240), 서명 및 참조 카운터 테이블들(signature and reference counter tables, 260), 및 오버플로 메모리 영역(overflow memory region, 280)을 포함할 수 있다.3 is a block diagram of a logical view of a deduplication engine in accordance with an embodiment of the present invention. Referring to FIG. 3, the de-duplication engine 200 may include a plurality of tables. The de-duplication engine 200 includes a hash table 220, a translation table 240, signature and reference counter tables 260, and an overflow memory region , 280).

해시 테이블(220)은 복수의 물리적 라인(physical lines; PLs)을 포함할 수 있다. 각 물리적 라인은 데이터(예를 들면, 유저 데이터)를 포함할 수 있다. 해시 테이블(220) 내 데이터는 중복 제거된다(즉, 중복된 데이터는 저장 장치의 공간 사용량을 줄이기 위해 하나의 위치로 통합된다).The hash table 220 may comprise a plurality of physical lines (PLs). Each physical line may contain data (e.g., user data). The data in the hash table 220 is deduplicated (i.e., the redundant data is consolidated into one location to reduce space usage of the storage device).

변환 테이블(240)은 그 안에 저장된 복수의 물리적 라인 ID를 포함한다. 해시 테이블의 각 물리적 라인은 변환 테이블(240)에 저장된 연관된 물리적 라인 ID(PLID)을 가진다. 변환 테이블(240)에 저장된 PLID는 논리적 주소에서 물리적 주소로의 변환이다. 예를 들어, 중복 제거 엔진(200)이 특정 논리적 주소와 연관된 데이터 위치를 찾아낼 필요가 있는 경우, 중복 제거 엔진(200)은 변환 테이블(240)을 이용하여 논리적 주소에 저장된 데이터를 문의할 수 있고 데이터가 저장된 해시 테이블(220)의 물리적 라인에 대응하는 데이터의 PLID를 수신할 수 있다. 그 다음에 중복 제거 엔진(200)은 해시 테이블(220) 내의 해당 물리적 라인에 저장된 데이터에 접근할 수 있다.The conversion table 240 includes a plurality of physical line IDs stored therein. Each physical line in the hash table has an associated physical line ID (PLID) stored in the translation table 240. The PLID stored in the conversion table 240 is a logical address to physical address translation. For example, if the deduplication engine 200 needs to find a data location associated with a particular logical address, the deduplication engine 200 can use the conversion table 240 to query the data stored in the logical address And the PLID of the data corresponding to the physical line of the hash table 220 in which the data is stored. The deduplication engine 200 may then access the data stored in the corresponding physical line in the hash table 220.

PLID는 제 1 해시 함수를 이용하여 생성될 수 있다. 예를 들어, 데이터가 해시 테이블 내에 저장될 필요가 있는 경우, 제 1 해시 함수는 데이터가 저장되어야 할 물리적 라인에 대응하는 제 1 해시 값을 결정하기 위해 데이터에 대해 실행된다. 제 1 해시 값은 데이터의 PLID로서 저장된다.The PLID may be generated using the first hash function. For example, if data needs to be stored in a hash table, the first hash function is performed on the data to determine a first hash value corresponding to the physical line where the data is to be stored. The first hash value is stored as the PLID of the data.

각 PLID는 표적(targeting) 데이터 라인의 물리적 위치를 나타낸다. 데이터 라인들은 해시 테이블(220) 또는 오버플로 메모리 영역(280) 중 어느 하나에 있을 수 있으므로, PLID들은 해시 테이블(220) 또는 오버플로 메모리 영역(280) 내 위치들일 수 있다.Each PLID represents the physical location of the targeting data line. The data lines may be in either the hash table 220 or the overflow memory area 280 so that the PLIDs may be locations in the hash table 220 or the overflow memory area 280. [

해시 테이블(220)은 행(row)-열(column) 구조의 테이블로서 간주될 수 있다. 이 경우, PLID는 영역 비트(region bit), 행 비트, 및 열 비트로 구성된다(예를 들면, 도 4 및 그에 대한 설명 참조). 제 1 해시 함수는 데이터를 저장하기 위해 사용할 수 있는 물리적 라인을 찾기 위한 시작 지점인 행 비트를 생성할 수 있다. 다른 비트들은 사용할 수 있는 물리적 라인이 발견되면 결정될 수 있다.The hash table 220 may be regarded as a table of row-column structure. In this case, the PLID consists of a region bit, a row bit, and a column bit (see, for example, FIG. 4 and the description thereof). The first hash function may generate a row bit, which is a starting point for looking for a physical line that can be used to store data. Other bits may be determined if an available physical line is found.

상술한 단계에서 해시 테이블(220) 내 사용 가능한 물리적 라인을 발견하지 못하면, 데이터는 오버플로 메모리 영역(280)에 쓰여질 수 있다. 이 경우, PLID는 오버플로 메모리 영역 엔트리(entry)의 물리적 위치일 것이다.If the physical line not found in the hash table 220 is not found in the above step, the data may be written to the overflow memory area 280. In this case, the PLID will be the physical location of the overflow memory area entry.

제 2 해시 함수를 이용하여 계산되는 데이터의 제 2 해시 값(예를 들면, 서명)은 서명 테이블에 저장된다. 제 2 해시 함수는 제 1 해시 함수보다 작을 수 있다. 제 1 및 제 2 해시 함수들은 임의의 적합한 해시 함수일 수 있고 상이한 해시 함수들일 수 있다.The second hash value (e.g., signature) of the data calculated using the second hash function is stored in the signature table. The second hash function may be smaller than the first hash function. The first and second hash functions may be any suitable hash function and may be different hash functions.

서명은 2개 데이터 라인들간의 빠른 비교를 위해 사용될 수 있다. 새로운 데이터 라인이 해시 테이블(220)에 쓰여지는 경우, 해시 테이블에 동일한 데이터 라인이 이미 있는지 알기 위한 검사가 이루어질 수 있다. 이 검사를 수행하는 것은 동일한 데이터를 여러 번 저장하는 것을 방지할 수 있다.The signature can be used for a quick comparison between the two data lines. If a new data line is written to the hash table 220, a check may be made to see if the same data line already exists in the hash table. Performing this check can prevent storing the same data multiple times.

검사가 서명들을 이용하지 않고 이루어지면, 메모리의 특정 영역 내 모든 데이터(전체 버킷(bucket) 또는 전체 가상 버킷)가 중복을 감지하기 위해 읽혀진다. 검사가 서명들을 통해 이루어지면, 특정 영역에 대한 데이터의 서명들만이 메모리로부터 읽혀져서 대역폭을 절약할 수 있다.If the check is made without using signatures, all data (a whole bucket or an entire virtual bucket) in a particular area of memory is read to detect redundancy. If the checks are made through signatures, then only signatures of the data for a particular area can be read from memory, saving bandwidth.

일치하는 서명이 없으면, 새로운 데이터 라인과 일치하는 데이터 라인은 없다. 그렇지 않고, 일치하는 서명이 발견되는 경우, 서명 비교가 잘못된 긍정일 수 있기 때문에, 일치하는 서명들을 갖는 데이터 라인들이 추가 비교를 수행하기 위해 메모리로부터 읽혀진다.If there is no matching signature, there is no data line that matches the new data line. Otherwise, if a matching signature is found, the data lines with matching signatures are read from the memory to perform further comparisons, since the signature comparison may be false positive.

해시 테이블의 각 데이터 라인은 서명 테이블 내에 해당 서명을 갖고 그리고 각 데이터 라인은 참조 카운터 테이블 내에 해당 참조 카운터를 갖는다.Each data line in the hash table has its signature in the signature table and each data line has a corresponding reference counter in the reference counter table.

참조 카운터 테이블은 해시 테이블(220)의 물리적 라인들 각각에 대한 중복 제거 수(예를 들면, 데이터가 복제된 횟수)를 추적한다. 중복 제거된 데이터의 인스턴스(instance)가 해시 테이블에 추가되면, 이전에 저장된 유저 데이터와 동일한 새로운 유저 데이터를 추가하기 보다는, 참조 카운터 테이블의 해당 참조 카운터는 증가될 수 있고, 그리고 해시 테이블로부터 중복 제거된 데이터의 인스턴스가 삭제되면, 참조 카운터 테이블의 해당 참조 카운터는 1만큼 감소할 수 있다.The reference counter table tracks the number of deduplication counts (e.g., the number of times data has been replicated) for each of the physical lines of the hash table 220. When an instance of deduplicated data is added to a hash table, rather than adding the same new user data as the previously stored user data, the corresponding reference counter of the reference counter table can be incremented, and deduplication from the hash table The corresponding reference counter in the reference counter table may be decremented by one.

또한, (해시 테이블로도 알려진) 중복 제거된 메모리는 고정된 비트 폭을 갖는 유저 데이터 C인 물리적 라인들(physical lines; PLs)로 구성된다. 기본(default) 물리적 라인의 길이는 64 바이트일 수 있으나, 본 발명은 이에 제한되지 않는다. PL 길이는 다른 크기로 구성될 수 있고, 예를 들면, PL 크기는 64 바이트보다 크거나 작을 수 있다. 예를 들어, PL 크기는 32 바이트일 수 있다.In addition, the deduplicated memory (also known as a hash table) consists of physical lines (PLs) which are user data C with a fixed bit width. The length of the default physical line may be 64 bytes, but the present invention is not limited thereto. The PL length may be of different sizes, for example, the PL size may be larger or smaller than 64 bytes. For example, the PL size may be 32 bytes.

큰 PL 크기는 변환 테이블의 크기를 감소시킬 수 있지만 또한 중복되는 데이터의 양을 감소시킬 수 있다(즉, 더 큰 비트 패턴과 일치할 필요가 있기 대문에 중복 제거들의 수가 감소한다). 작은 PL 크기는 변환 테이블의 크기를 증가시킬 수 있지만 또한 중복되는 데이터의 양을 증가시킬 수 있다(즉, 중복 제거들의 횟수가 증가한다).A large PL size can reduce the size of the translation table, but can also reduce the amount of redundant data (i.e., the number of deduplications decreases because it needs to match a larger bit pattern). The small PL size can increase the size of the translation table, but can also increase the amount of redundant data (i.e., the number of de-duplications increases).

변환 테이블은 물리적 라인 ID(PLID)로 불리는 논리적 주소들에서 물리적 주소들로의 변환들을 저장한다. PLID는 해시 함수 h1(C)에 의해 생성된다. 또한, 각 물리적 라인에 대해, 서명 테이블에 저장된 물리적 라인에 연관된 서명이 있다. 서명은 유저 데이터의 훨씬 작은 해시 결과이고, 해시 함수 h2(C)에 의해 생성된다. 참조 카운터는 또한 물리적 라인과 연관되고, 참조 카운터 테이블에 저장된다. 참조 카운터는 (중복 제거 비율로도 알려진) 유저 데이터가 PL 콘텐츠와 일치하는 횟수를 카운트한다.The translation table stores translations from logical addresses to physical addresses, called physical line IDs (PLIDs). The PLID is generated by a hash function h 1 (C). Also, for each physical line, there is a signature associated with the physical line stored in the signature table. The signature is a much smaller hash result of the user data, and is generated by the hash function h 2 (C). The reference counter is also associated with the physical line and stored in the reference counter table. The reference counter counts the number of times the user data (also known as the deduplication rate) matches the PL content.

해시 테이블, 서명 테이블, 및 참조 카운터 테이블들은 모두 동일한 데이터 구조를 가질 수 있지만 다른 세분성(granularity)을 가질 수 있다.The hash table, signature table, and reference counter tables all may have the same data structure, but may have different granularity.

복수의 테이블은 중복 제거 모듈의 일부로서 도시되었지만, 본 발명은 이에 제한되지 않는다. 본 발명의 몇몇 실시 예들에 따라, 복수의 테이블은 중복 제거 모듈 내에 있는 메모리(예를 들면, RAM)에 저장될 수 있고 다른 실시 예들에 따라 복수의 테이블은 중복 제거 모듈 외부에 있는 메모리(예를 들면, RAM)에 저장되고 본 명세서에서 설명된 방식으로 중복 제거 모듈에 의해 제어된다.Although a plurality of tables are shown as a part of the deduplication module, the present invention is not limited thereto. In accordance with some embodiments of the present invention, a plurality of tables may be stored in a memory (e.g., RAM) in a deduplication module and in accordance with other embodiments, a plurality of tables may be stored in a memory external to the deduplication module , RAM) and controlled by the deduplication module in the manner described herein.

본 발명의 상술한 특징들의 추가적인 설명은 미국 특허 출원(No. 15/473,311)에서 찾을 수 있고 그 전체 내용은 본 명세서에서 참고 문헌으로 인용된다.Further descriptions of the above-mentioned features of the invention can be found in U.S. Patent Application (No. 15 / 473,311), the entire contents of which are incorporated herein by reference.

도 4는 본 발명의 실시 예에 따른 레벨-1 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다. 변환 테이블은 그것의 크기 및 그것을 사용하는데 걸리는 시간으로 인해 중복 제거 비율, 시스템 용량, 및/또는 시스템 대기시간에 영향을 줄 수 있는 주요 메타 데이터(metadata) 테이블이다. 도 4를 참조하면, 논리적 주소(310)는 시스템 메모리(예를 들면, DRAM)에 저장된 데이터의 위치로서 컴퓨터 시스템에 의해 사용될 수 있다.4 is a block diagram of a logical view of a de-duplication engine including a level-1 conversion table according to an embodiment of the present invention. A translation table is a major metadata table that can affect deduplication rate, system capacity, and / or system latency due to its size and the time it takes to use it. 4, logical address 310 may be used by a computer system as the location of data stored in a system memory (e.g., a DRAM).

논리적 주소(310)는 x비트 길이일 수 있고, 여기서 x는 정수이다. 논리적 주소(310)는 g비트 길이인 세분성(granularity, 314)을 포함할 수 있고, 여기서 g는 정수이다. 세분성(314)은 논리적 주소(310)의 0부터 g-1까지의 비트에 위치할 수 있다. 논리적 주소(310)는 변환 테이블 색인(translation table index, 312)을 더 포함할 수 있다. 변환 테이블 색인(312)은 x-g비트 길이일 수 있고 논리적 주소(310)의 g부터 x-1까지의 비트에 위치할 수 있다. 몇몇 실시 예들에 있어서, 물리적 라인이 32 바이트 길이면, g는 5(25=32)이고 물리적 라인이 64 바이트 길이면, g는 6(26=64)이다. 몇몇 실시 예들에 있어서, 가상 용량 1TB(terabyte)가 지원되면, x는 40(240은 1TB)이다.Logical address 310 may be x bits long, where x is an integer. Logical address 310 may include granularity 314, which is a g bit length, where g is an integer. The granularity 314 may be located in bits from 0 to g-1 of the logical address 310. The logical address 310 may further include a translation table index 312. The translation table index 312 may be xg bits long and may be located in bits from g to x-1 of the logical address 310. [ In some embodiments, if the physical line is 32 bytes long, g is 5 (2 5 = 32) and if the physical line is 64 bytes long, g is 6 (2 6 = 64). In some embodiments, if a virtual capacity of 1 terabyte (terabyte) is supported, x is 40 (2 40 is 1 TB).

변환 테이블 색인(312)은 변환 테이블(240) 내 물리적 주소(320)에 대응한다. 물리적 주소(320)는 RGN 영역 비트(322), 행 색인(R_INDX, 326), 및 열 색인(COL_INDX, 328)을 포함할 수 있다. 영역 비트(RGN, 322)는 1개 비트일 수 있고 데이터가 해시 테이블(220)에 저장되었는지 또는 오버플로 메모리 영역(280)에 저장되었는지를 나타낼 수 있다. 행 색인(R_INDX, 326)은 해시 테이블(220) 내 M개 행들(0부터 M-1 또는 0부터 2m-1)에 대응하는 m개 비트일 수 있다. 열 색인(COL_INDX, 328)는 해시 테이블(220) 내 N개 열들(0부터 N-1 또는 0부터 2n-1)에 대응하는 n개 비트일 수 있다. M, N, m, n은 정수이다. 몇몇 실시 예들에 따라, 해시 테이블이 128GB(237)이면, g=6, m=26, n=5, M=226, 그리고 N=25이다.The translation table index 312 corresponds to the physical address 320 in the translation table 240. The physical address 320 may include an RGN region bit 322, a row index R_INDX 326, and a column index COL_INDX 328. The region bit (RGN) 322 may be one bit and may indicate whether the data is stored in the hash table 220 or in the overflow memory area 280. The row index R_INDX 326 may be m bits corresponding to M rows (0 to M-1 or 0 to 2 m -1) in the hash table 220. The column index (COL_INDX, 328) may be n bits corresponding to N columns (0 to N-1 or 0 to 2 n -1) in the hash table 220. M, N, m, and n are integers. According to certain embodiments, the hash table is 128GB (2 37), is g = 6, m = 26, n = 5, M = 2 26, and N = 2 5.

또한, 오버플로 메모리 영역(280)은 해시 테이블에 배치되지 않는 데이터를 저장한다.The overflow memory area 280 also stores data that is not placed in the hash table.

도 5는 본 발명의 실시 예에 따른 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다. 변환 테이블은 중복 제거 비율, 시스템 용량, 및 시스템 대기시간에 영향을 줄 수 있는 주요 메타 데이터 테이블이다. 도 5의 중복 제거 엔진에서, 변환 테이블은 레벨-2, 페이지 색인 테이블(242) 및 레벨2 (L2) 맵 테이블(244)를 포함한다.5 is a block diagram of a logical view of a de-duplication engine including a level-2 conversion table according to an embodiment of the present invention. Conversion tables are key metadata tables that can affect deduplication rates, system capacity, and system latency. 5, the translation table includes level-2, page index table 242, and level 2 (L2) map table 244.

논리적 주소(310')는 메모리(예를 들면, RAM)에 저장된 데이터의 위치로서 컴퓨터 시스템에 의해 사용될 수 있다. 논리적 주소(310')의 길이는 x비트 길이일 수 있고, 여기서 x는 정수이다. 논리적 주소(310')은 g비트 길이인 세분성(314')을 포함할 수 있고, 여기서 g는 정수이다. 세분성(314’)은 논리적 주소(310')의 0부터 g-1까지의 비트에 위치할 수 있다. 논리적 주소(310')는 페이지 엔트리(318) 및 페이지 색인(316)을 더 포함할 수 있다. 페이지 엔트리(318)는 12-g비트 길이일 수 있고 논리적 주소(310')의 g부터 11까지의 비트에 위치할 수 있다. 페이지 색인(316)은 x-12비트 길이일 수 있고 논리적 주소(310')의 12부터 x-1까지의 비트에 위치할 수 있다. 몇몇 실시 예들에 있어서, 물리적 라인이 32 바이트 길이이면, g는 5(25=32)이고 물리적 라인은 64 바이트 길이이면, g는 6(26=64)이다. 몇몇 실시 예들에 있어서, 가상 용량 1TB 가 지원되면, x는 40(240은 1TB)이다.The logical address 310 'may be used by a computer system as the location of data stored in a memory (e.g., RAM). The length of the logical address 310 'may be x bits long, where x is an integer. The logical address 310 'may include a granularity 314' that is a g bit length, where g is an integer. The granularity 314 'may be located in bits from 0 to g-1 of the logical address 310'. The logical address 310 'may further include a page entry 318 and a page index 316. The page entry 318 may be 12-g bits long and may be located in bits g through 11 of the logical address 310 '. The page index 316 may be x-12 bits long and may be located in bits 12 to x-1 of the logical address 310 '. In some embodiments, if the physical line is 32 bytes long, g is 5 (2 5 = 32) and if the physical line is 64 bytes long, g is 6 (2 6 = 64). In some embodiments, if a virtual capacity of 1 TB is supported, x is 40 (2 40 is 1 TB).

페이지 색인(316)은 페이지 색인 테이블(242) 내 페이지에 대응한다. 페이지 색인 테이블(242) 내의 페이지는 L2 맵 테이블(244) 내의 엔트리 0 위치에 대응한다. 페이지 엔트리(318)는 엔트리 0 이후 어느 엔트리가 논리적 주소(310')에 대응하는 저장된 데이터의 물리적 주소(320')를 저장하는지를 나타낸다.The page index 316 corresponds to the page in the page index table 242. The page in the page index table 242 corresponds to the entry 0 position in the L2 map table 244. [ The page entry 318 indicates which entry after entry 0 stores the physical address 320 'of the stored data corresponding to the logical address 310'.

다시 말해, 페이지 색인(316)은 L2 맵 엔트리들의 집합 및 그 세트의 엔트리로 지정된 페이지 엔트리(318)과 연관된다. 페이지 색인(316)은 집합 내의 첫 번째 엔트리로 이어지고, 그리고 페이지 엔트리(318)는 엔트리들의 그 집합의 어느 특정 엔트리가 물리적 주소(320')를 포함하는지를 보여준다. 페이지 색인 테이블(242) 내 각 페이지는 영역 비트(RGN)를 포함할 수 있다. 영역 비트(RGN, 322')는 1개 비트일 수 있고 데이터가 해시 테이블(220')에 저장되었는지 또는 오버플로 메모리 영역(280')에 저장되었는지를 나타낼 수 있다.In other words, the page index 316 is associated with a set of L2 map entries and a page entry 318 designated with an entry of that set. The page index 316 leads to the first entry in the set, and the page entry 318 shows which particular entry of that set of entries contains the physical address 320 '. Each page in the page index table 242 may include a region bit RGN. The area bits RGN 322 'may be one bit and may indicate whether the data is stored in the hash table 220' or the overflow memory area 280 '.

물리적 주소(320')는 행 색인(R_INDX, 326') 및 열 색인(COL_INDX, 328')을 포함할 수 있다. 행 색인(R_INDX, 326')은 해시 테이블(220)' 내 M개 행들(0부터 M-1 또는 0부터 2m-1)에 대응하는 m개 비트일 수 있다. 열 색인(COL_INDX, 328')은 해시 테이블(220') 내 N개 열들(0부터 N-1 또는 0부터 2n-1)에 대응하는 n개 비트일 수 있다. M, N, m, n은 정수이다. 몇몇 실시 예들에 따라, 해시 테이블이 128GB(237)이면, g=6, m=26, n=5, M=226, 그리고 N=25이다.The physical address 320 'may include a row index R_INDX 326' and a column index COL_INDX 328 '. The row index R_INDX 326 'may be m bits corresponding to M rows (0 to M-1 or 0 to 2 m -1) in the hash table 220'. The column index (COL_INDX, 328 ') may be n bits corresponding to N columns (0 to N-1 or 0 to 2 n -1) in the hash table 220'. M, N, m, and n are integers. According to certain embodiments, the hash table is 128GB (2 37), is g = 6, m = 26, n = 5, M = 2 26, and N = 2 5.

또한, 오버플로 메모리 영역(280)은 해시 테이블에 배치되지 않은 데이터를 저장한다.The overflow memory area 280 also stores data that is not placed in the hash table.

도 6은 본 발명의 실시 예에 따른, 동적 L2 맵 테이블 및 오버플로 메모리 영역을 갖는 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다. 도 6을 참조하면, 레벨-2 변환 테이블은 오버플로 메모리 영역에 대한 추가 공간을 만들 수 있다.6 is a block diagram of a logical view of a de-duplication engine including a dynamic L2 map table and a level-2 translation table having an overflow memory area, in accordance with an embodiment of the present invention. Referring to FIG. 6, the level-2 conversion table may create additional space for the overflow memory area.

몇몇 실시 예들에 있어서, 서명 및 참조 카운터 테이블들(260') 그리고 페이지 색인 테이블(242')의 크기들은 고정되나 L2 맵 테이블(244') 및 오버플로 메모리 영역(280'')의 크기들은 동적이다.In some embodiments, the sizes of the signature and reference counter tables 260 'and the page index table 242' are fixed, but the sizes of the L2 map table 244 'and the overflow memory area 280' to be.

L2 맵 테이블(244') 및 오버플로 메모리 영역 (280'')의 크기들이 증가함에 따라, 이들은 서로를 향하여 커진다. 이러한 방식으로, 저장 공간은 L2 맵 테이블(244') 또는 오버플로 메모리 영역(280'') 중 어느 하나가 사용되지 않은 공간을 향해 커지게 할 수 있게 하여 효율적으로 사용될 수 있다.As the sizes of L2 map table 244 'and overflow memory area 280 " increase, they increase towards each other. In this way, the storage space can be efficiently used by allowing either the L2 map table 244 'or the overflow memory area 280 " to grow toward an unused space.

도 7은 본 발명의 실시 예에 따른 해시 원통(hash cylinder)의 논리적 관점의 블록도이다. 도 8은 본 발명의 실시 예에 따른 결합된 데이터 구조의 논리적 관점의 블록도이다. 도 7 및 도 8을 참조하면, 서명 테이블, 참조 카운터 테이블, 및 해시 테이블은 결합된 데이터 구조(600, 예를 들면, 결합된 구조(600) 또는 결합된 테이블(600))의 해시 원통들(500, 예를 들면 해시 원통(500-i)) 내의 버킷들(buckets, 예를 들면, 해시 버킷(i)) 내에 분배되고 정렬된다. 각 해시 원통(500)은 해시 테이블의 해시 버킷(560, 예를 들면, 해시 버킷(560-i)), 서명 테이블의 서명 버킷(520, 예를 들면, 서명 버킷(520-i)), 및 참조 카운터 테이블의 참조 카운터 버킷(540, 예를 들면, 참조 카운터 버킷(i))을 포함한다.7 is a block diagram of a logical view of a hash cylinder according to an embodiment of the present invention. 8 is a block diagram of a logical view of a combined data structure in accordance with an embodiment of the present invention. 7 and 8, the signature table, the reference counter table, and the hash table are stored in the hash cylinders (e.g., the combined structure 600 (e.g., the combined structure 600 or the combined table 600) (E.g., a hash bucket (i)) in the first, second, third, fourth, fifth, Each hash cylinder 500 includes a hash table hash bucket 560 (e.g., a hash bucket 560-i), a signature table signature bucket 520 (e.g., signature bucket 520-i) And a reference counter bucket 540 (e.g., reference counter bucket (i)) of the reference counter table.

해시 버킷(560)은 물리적 라인들의 복수의 엔트리(예를 들면, 엔트리(0)부터 엔트리(N-1))를 포함한다.The hash bucket 560 includes a plurality of entries (e.g., entries (0) through (N-1)) of physical lines.

서명 버킷(520)은 동일 해시 원통(500)의 해시 버킷(560) 내의 물리적 라인들에 저장된 데이터에 대응하는 복수의 서명을 포함한다.The signature bucket 520 includes a plurality of signatures corresponding to data stored in physical lines in the hash bucket 560 of the same hash cylinder 500.

참조 카운터 버킷(540)은 동일 해시 원통(500)의 해시 버킷(560) 내의 물리적 라인들에 저장된 데이터가 중복 제거된 횟수에 대응하는 복수의 참조 카운터를 포함한다.The reference counter bucket 540 includes a plurality of reference counters corresponding to the number of times data stored in the physical lines in the hash bucket 560 of the same hash cylinder 500 are deduplicated.

다시 말해, 해시 테이블은 복수의 해시 버킷(560)으로 나누어지고, 각 해시 버킷(560)은 복수의 엔트리를 포함한다. 서명 테이블은 복수의 서명 버킷(520)으로 나누어지고, 각 서명 버킷(520)은 복수의 서명을 포함한다. 참조 카운터 테이블은 복수의 참조 카운터 버킷(540)으로 나누어지고, 각 참조 카운터 버킷(540)은 복수의 참조 카운터를 포함한다.In other words, the hash table is divided into a plurality of hash buckets 560, and each hash bucket 560 includes a plurality of entries. The signature table is divided into a plurality of signature buckets 520, and each signature bucket 520 includes a plurality of signatures. The reference counter table is divided into a plurality of reference counter buckets 540, and each reference counter bucket 540 includes a plurality of reference counters.

결합된 데이터 구조(600)는 1개 해시 버킷(560), 1개 서명 버킷(520), 및 1개 참조 카운터 버킷(540)을 함께 해시 원통(500)에 배치되도록 구성된다. 본 발명의 몇몇 실시 예들에 따라, 버킷들은 다음의 순서대로 배치된다: 제 1 서명 버킷(520-0), 제 1 참조 카운터 버킷(540-0), 제 1 해시 버킷(560-0), 제 2 서명 버킷(520-1), 제 2 참조 카운터 버킷(540-1), 제 2 해시 버킷(560-1) 등.The combined data structure 600 is configured to be placed in the hash cylinder 500 together with one hash bucket 560, one signature bucket 520, and one reference counter bucket 540. In accordance with some embodiments of the present invention, the buckets are arranged in the following order: a first signature bucket 520-0, a first reference counter bucket 540-0, a first hash bucket 560-0, 2 signature bucket 520-1, a second reference counter bucket 540-1, a second hash bucket 560-1, and so on.

이 배열에서, 제 1 서명 버킷(520-0)은 제 1 해시 버킷(560-0)에 저장된 데이터와 연관된 서명들을 포함하고 제 1 참조 카운터 버킷(540-0)은 제 1 해시 버킷(560-0)에 저장된 데이터와 연관된 참조 카운터들을 포함한다. 또한, 제 2 서명 버킷(520-1)은 제 2 해시 버킷(560-1)에 저장된 데이터와 연관된 서명들을 포함하고 제 2 참조 카운터 버킷(540-1)은 제 2 해시 버킷(560-1)에 저장된 데이터와 연관된 참조 카운터들을 포함한다. 또한, 제 1 원통(500-0)은 제 1 서명 버킷(520-0), 제 1 참조 카운터 버킷(540-0), 및 제 1 해시 버킷(560-0)을 포함하고 제 2 원통(500-1)은 제 2 서명 버킷(520-1), 제 2 참조 카운터 버킷(540-1), 및 제 2 해시 버킷(560-1)을 포함한다.In this arrangement, the first signature bucket 520-0 includes signatures associated with the data stored in the first hash bucket 560-0 and the first reference counter bucket 540-0 includes the first hash bucket 560- 0 < / RTI > In addition, the second signature bucket 520-1 includes signatures associated with the data stored in the second hash bucket 560-1 and the second reference counter bucket 540-1 includes the second hash bucket 560-1, Lt; RTI ID = 0.0 > and / or < / RTI > In addition, the first cylinder 500-0 includes a first signature bucket 520-0, a first reference counter bucket 540-0, and a first hash bucket 560-0, -1 includes a second signature bucket 520-1, a second reference counter bucket 540-1, and a second hash bucket 560-1.

이 방식에서, 각 해시 원통(500)은 데이터 및 동일 해시 버킷(500) 내에 저장된 데이터와 연관된 서명들 및 참조 카운터들을 포함한다.In this manner, each hash cylinder 500 includes data and signatures associated with data stored in the same hash bucket 500 and reference counters.

결합된 데이터 구조(600)의 해시 원통(500-i) 내에 저장된 데이터에 대한 요청이 이루어지면, 전체 해시 원통(500-i)은 읽기 캐시(170')로 복사된다. 전체 해시 원통(500-i)이 읽기 캐시(170')로 복사되므로, 요청된 데이터, 해당 서명(또는 각 서명), 및 해당 참조 카운터(또는 각 참조 카운터) 전부를 회수하는데 필요한 시간은 감소할 수 있다.When a request is made for data stored in the hash cylinder 500-i of the combined data structure 600, the entire hash cylinder 500-i is copied to the read cache 170 '. Since the entire hash cylinder 500-i is copied into the read cache 170 ', the time required to retrieve all of the requested data, the signature (or each signature), and the corresponding reference counter (or each reference counter) .

몇몇 실시 예들에 따라, 읽기 데이터 캐시는 해시 원통과 동일한 크기일 수 있다.According to some embodiments, the read data cache may be the same size as the hash cylinder.

또한, 중복 제거 엔진이 (중복을 방지하기 위해) 데이터가 이미 해시 테이블 내에 존재하는 것으로 결정하면, 전체 해시 원통(500)은 읽기 캐시(170')로 복사될 수 있다. 중복 제거 엔진은 중복 제거가 가능할지를 결정하고 데이터를 저장할 때 서명들, 참조 카운터들, 및 데이터에 접근하므로, 읽기 캐시가 전체 해시 원통을 복사하게 하는 것은 접근 시간을 감소시킬 수 있고 전체 계산 속도를 증가시킬 수 있다.Also, if the deduplication engine determines that data is already present in the hash table (to avoid duplication), the entire hash cylinder 500 may be copied to the read cache 170 '. Because the deduplication engine has access to signatures, reference counters, and data when deciding whether deduplication is possible and storing the data, having the read cache copy the entire hash cylinder can reduce the access time, .

다시 말해, 대기시간 및 성능을 향상시키기 위해, 해시 엔트리들, 서명, 및 참조 카운터 엔트리들의 통합 단위인 해시 원통(500)이 생성될 수 있다. 통합된 해시 원통(500)은 시스템 메모리 접근 주기를 줄여서 시스템 대기시간을 향상시킬 수 있다. 간결한(compacted) 데이터 구조는 메모리 접근 횟수를 줄일 수 있다. 각 해시 원통(500)은 중복 제거 엔진이 계산을 수행하는데 필요한 모든 정보를 포함한다. 결합된 데이터 구조(600)는 또한 캐싱(caching)을 쉽게 할 수 있다.In other words, a hash cylinder 500, which is an integral unit of hash entries, signatures, and reference counter entries, can be created to improve latency and performance. The integrated hash cylinder 500 can reduce system memory access cycles and improve system latency. A compacted data structure can reduce the number of memory accesses. Each hash cylinder 500 contains all the information necessary for the deduplication engine to perform the computation. The combined data structure 600 may also facilitate caching.

도 9는 본 발명의 실시 예에 따른 가상 버킷들과 연관된 해시 버킷 및 해당 참조 카운터 버킷의 논리적 관점의 블록도이다. 도 9를 참조하면, 각 해시 버킷(560')은 하나 이상의 가상 버킷들(VBs, 예를 들면, VB(0)부터 VB(V-1))과 연관될 수 있다. 각 해시 버킷(560')은 N개 웨이들(ways, 예를 들면, WAY(0)부터 WAY(N-1))을 포함할 수 있다.9 is a block diagram of a logical view of a hash bucket associated with virtual buckets and corresponding reference counter buckets in accordance with an embodiment of the present invention. Referring to FIG. 9, each hash bucket 560 'may be associated with one or more virtual buckets (VBs, e.g., VB (0) to VB (V-1)). Each hash bucket 560 'may include N ways (e.g., WAY (0) to WAY (N-1)).

관련 분야의 해시 테이블들과 달리, 본 실시 예의 해시 테이블들은 각각 복수의 가상 해시 버킷 또는 가상 버킷들을 포함하고, 가상 버킷들은 복수의 물리적 해시 버킷 또는 물리적 버킷들로 이루어진다. 이하, “물리적 버킷” 용어는 이전에 설명된 해시 버킷들을 나타낼 것이고, 이전에 설명된 해시 버킷들과 가상 버킷들을 구별하기 위해 사용될 것이다.Unlike the hash tables of related fields, the hash tables of the present embodiment each include a plurality of virtual hash buckets or virtual buckets, and the virtual buckets comprise a plurality of physical hash buckets or physical buckets. Hereinafter, the term " physical bucket " will refer to the previously described hash buckets and will be used to distinguish the virtual buckets from the previously described hash buckets.

각 가상 버킷은 해시 테이블의 물리적 버킷들의 일부를 포함할 수 있다. 그러나, 가상 버킷들의 다른 것들은 하나 이상의 물리적 버킷들을 공유할 수 있음을 유의해야 한다. 이하에서 설명될 바와 같이, 본 발명의 실시 예들에 따라 가상 버킷들을 이용하여, 추가 치수(dimension)가 해시 테이블에 더해진다. 따라서, 데이터를 배열하고 배치하는데 보다 큰 유연성이 제공될 수 있고, 그렇게 함으로써 중복 제거 DRAM 시스템의 효율이 증가하고 압축 비율이 증가한다.Each virtual bucket may include some of the physical buckets of the hash table. However, it should be noted that other of the virtual buckets may share one or more physical buckets. As will be described below, additional dimensions are added to the hash table, using virtual buckets in accordance with embodiments of the present invention. Thus, greater flexibility in arranging and arranging data can be provided, thereby increasing the efficiency of the deduplication DRAM system and increasing the compression ratio.

본 실시 예는 다른 가상 버킷들에 의해 공유되는 다른 물리적 버킷들을 확보하기 위해, 해시 버킷들 중 하나에 저장된 데이터의 블록이 대응하는 가상 버킷 내에서 또는 다른 물리적 버킷으로 이동될 수 있게 하여, 다른 레벨의 데이터 배치의 유연성을 증가시키기 위해 가상 버킷들을 이용한다. 해시 테이블 내에서 공간을 확보함으로써, 중복 제거는 쓸모 없는/중복된 데이터를 제거함으로써 달성될 수 있다. 즉, 본 발명의 실시 예들에 따른 가상 버킷들을 이용하는 것에 의해, 해시 함수를 이용하여 데이터의 라인을 제한된 해당 위치로 해싱(hashing)하는 것에 의해 기인하는 엄격한 제한은 없고, 데이터는 인근의/”근접한” 물리적 버킷에 배치될 수 있고, 이 물리적 버킷은 초기에 의도된 (그러나 점유된) 물리적 해시 버킷을 포함하는 동일한 가상 버킷 내에 있는 물리적 버킷을 나타낸다.This embodiment allows a block of data stored in one of the hash buckets to be moved into the corresponding virtual bucket or to another physical bucket in order to secure other physical buckets shared by other virtual buckets, Lt; / RTI > to increase the flexibility of the data placement of the virtual buckets. By ensuring space within the hash table, deduplication can be achieved by eliminating useless / duplicated data. That is, by using the virtual buckets according to the embodiments of the present invention, there is no strict restriction due to hashing of the lines of data to a limited corresponding location using a hash function, Quot; physical bucket, " which represents a physical bucket in the same virtual bucket that initially contains the intended (but occupied) physical hash bucket.

예시로서, 콘텐츠(예를 들면, 데이터 라인)는 물리적 버킷들 중 하나에 배치된다. 만약 데이터 라인이 첫 번째 물리적 버킷에 배치되면, 데이터 라인이 물리적 버킷 내에 배치되는 것을 요구하는 대신에, 본 실시 예는 단일 물리적 버킷보다 크고, 물리적 버킷 뿐만 아니라 다른 물리적 버킷들도 포함하는 가상 버킷도 가능하다. 즉, 가상 버킷은 해시 테이블 내에서 정렬된 근접한, 또는 인접한 물리적 버킷들의 총합을 포함한다. By way of example, content (e.g., a data line) is disposed in one of the physical buckets. Instead of requiring the data line to be placed in a physical bucket if the data line is placed in the first physical bucket, this embodiment is also a virtual bucket that is larger than a single physical bucket and includes physical buckets as well as other physical buckets It is possible. That is, the virtual bucket includes the sum of adjacent or contiguous physical buckets aligned in the hash table.

따라서, 가상 버킷들은 장래의 쓰기 동작들을 위한 공간을 확보하기 위해 해시 테이블 내에서 데이터 블록들이 움직이게 할 수 있다.Thus, the virtual buckets may cause the data blocks to move within the hash table to free up space for future write operations.

가상 버킷들에 대한 추가 설명에 대해서는, 2016년 5월 23에 출원된 미국 특허 출원(No. 15/162,512) 및 2016년 5월 23에 출원된 미국 특허 출원(No. 15/162,517)을 확인하면 되고, 그 전체 내용은 본 명세서에서 참고 문헌으로 인용된다.For further discussion of virtual buckets, see U.S. Patent Application No. 15 / 162,512, filed May 23, 2016, and U.S. Patent Application No. 15 / 162,517, filed May 23, 2016, , The entire contents of which are incorporated herein by reference.

또한, 가상 버킷들은 동적 높이 또는 크기를 가질 수 있다. 동적 가상 버킷 높이(virtual bucket height; VBH)를 갖는 것은 제한된 대기시간 영향에서의 메모리 사용을 향상시킬 수 있다.Also, virtual buckets may have dynamic heights or sizes. Having a dynamic virtual bucket height (VBH) can improve memory usage in a limited latency impact.

물리적 버킷과 연관된 가상 버킷들의 수는 가상 버킷(virtual bucket; VB)의 높이 색인에 의해 나타난다. 가상 버킷 높이 정보는 해시 버킷(560')과 연관된 참조 카운터 버킷(540')의 마지막 참조 카운터에 저장된다. 참조 카운터의 비트의 일부분은 VB 높이 색인으로서 사용된다(예를 들면, VBH[1:0]).The number of virtual buckets associated with the physical bucket is indicated by the height index of the virtual bucket (VB). The virtual bucket height information is stored in the last reference counter of the reference counter bucket 540 'associated with the hash bucket 560'. A portion of the bits of the reference counter is used as the VB height index (e.g., VBH [1: 0]).

해시 버킷(i)을 예시로 사용하여, VB 높이가 V이면, 해시 버킷(i)의 가상 버킷들은 해시 버킷(i+1)부터 해시 버킷(i+V)을 나타낼 수 있다. 해시 버킷(i)이 가득 차면, 중복 제거 엔진은 가상 버킷들에 유저 데이터를 넣을 것이다.Using the hash bucket (i) as an example, if the VB height is V, the virtual buckets of the hash bucket (i) may represent a hash bucket (i + V) from the hash bucket (i + 1). When the hash bucket (i) is full, the deduplication engine will put user data in the virtual buckets.

플래그(flag, 1개 RC 비트의 일부분, 예를 들면, 해시 버킷(M)의 마지막 RC 카운터)는 얼마나 많은 가상 버킷들이 현재 해시 버킷(i)에 의해 사용되고 있는지를 나타낸다. 이 방식에서, 필요한 것보다 더 많은 가상 버킷들을 검색할 필요가 없으므로 대기시간은 감소할 수 있다. 관련 분야의 가상 버킷은 고정된 VB 높이를 사용한다. 고정된 가상 버킷 높이를 사용하면, 검색 로직은 해시 버킷(i)에 의해 실제로 사용되는 가상 버킷들의 수와 상관없이 모든 가상 버킷들을 검색하고, 이는 증가된 대기시간을 야기할 수 있다.A flag (flag, a portion of one RC bit, e.g., the last RC counter of the hash bucket M) indicates how many virtual buckets are currently being used by the hash bucket (i). In this way, the latency can be reduced because there is no need to retrieve more virtual buckets than are needed. Virtual buckets in related fields use a fixed VB height. Using a fixed virtual bucket height, the search logic retrieves all virtual buckets, regardless of the number of virtual buckets actually used by the hash bucket i, which can result in increased wait times.

가상 버킷들은 추가 메모리 공간을 요구하지 않는다. 이들은 해시 버킷들 근처에서 사용되지 않은 엔트리들을 사용한다. 예를 들어, 해시 버킷(i+1)에 대해, 그것의 가상 버킷들은 해시 버킷(i+2)부터 해시 버킷(i+V'+1)을 나타낸다.Virtual buckets do not require additional memory space. They use unused entries near the hash buckets. For example, for a hash bucket (i + 1), its virtual buckets represent a hash bucket (i + V '+ 1) from a hash bucket (i + 2).

또한, 해시 버킷(i)의 가상 버킷들(예를 들면, 해시 버킷(i+1)부터 해시 버킷(i+V))이 가득 차면, 본 발명의 실시 예에 따른, 중복 제거 엔진은 해시 버킷 근처에서 이용할 수 있는 공간을 사용하기 위해 가상 버킷의 높이(V)를 증가시킨다. 관련 분야의 가상 버킷의 높이들은 (동적이기 보다는) 미리 결정되었기 때문에, 증가될 수 없다. 이와 같이, 해시 버킷(i)의 가상 버킷들(예를 들어, 해시 버킷들(i+1)부터 해시 버킷들(i+V)까지의 해시 버킷들)이 가득 차면, 관련 분야의 중복 제거 엔진은 높이(V)를 증가시킬 수 없다. In addition, if the virtual buckets (e.g., hash bucket (i + 1) to hash bucket (i + V)) of the hash bucket i are full, then the deduplication engine according to the embodiment of the present invention, Increase the height (V) of the virtual bucket to use the space available nearby. The heights of the virtual buckets in the relevant field can not be increased because they have been predetermined (rather than dynamic). Thus, if the virtual buckets (e.g., hash buckets (i + 1) to hash buckets (i + V) of the hash bucket i) are full, Can not increase the height (V).

또한, 가상 버킷들의 높이를 동적으로 조정하는 것에 의해, 중복 제거 엔진이 (중복을 방지하기 위해) 데이터가 이미 해시 테이블 내에 있는지를 확인하는 경우, 중복 제거 엔진은 미리 결정된 수의 가상 버킷들 대신에 사용 중인 가상 버킷들만을 확인하면 된다. 이것은 접근 시간을 감소시킬 수 있고 전체 연산 속도를 증가시킬 수 있다.In addition, by dynamically adjusting the height of the virtual buckets, if the deduplication engine determines that the data is already in the hash table (to avoid duplication), the deduplication engine may replace the virtual buckets with a predetermined number of virtual buckets You only need to check the virtual buckets you are using. This can reduce the access time and increase the overall operation speed.

도 10은 본 발명의 실시 예에 따른 RAM에 저장된 데이터를 회수하는 방법을 도시하는 순서도이다. 도 10은 RAM을 이용하여 도시되었으나, 본 발명은 이에 제한되지 않고 임의의 다른 적합한 메모리 유형이 본 방법들과 함께 사용될 수 있다.10 is a flowchart showing a method of recovering data stored in a RAM according to an embodiment of the present invention. Although FIG. 10 is illustrated using RAM, the present invention is not so limited and any other suitable memory type may be used with these methods.

도 10을 참조하면, 컴퓨터 시스템의 CPU는 RAM에 저장된 데이터를 요청할 수 있다. CPU는 RAM 내 데이터의 위치에 대한 주소를 제공할 수 있다. 본 발명은 이에 제한되지 않고, 예를 들어, 다른 구성 요소들이 RAM으로부터 데이터를 요청할 수 있고 논리적 주소를 제공할 수 있다.Referring to FIG. 10, the CPU of the computer system may request data stored in the RAM. The CPU can provide an address for the location of data in RAM. The present invention is not limited thereto, for example, other components may request data from the RAM and provide a logical address.

본 발명의 실시 예에 따라 RAM 내에 저장된 데이터를 회수하는 방법은 RAM에 저장된 데이터의 논리적 주소를 식별하는 단계를 포함한다(1000 단계). 논리적 주소는 변환 테이블의 위치에 대응할 수 있다.A method for retrieving data stored in a RAM according to an embodiment of the present invention includes identifying a logical address of data stored in the RAM (operation 1000). The logical address may correspond to the location of the translation table.

방법은 변환 테이블의 논리적 주소를 검색하여 논리적 주소에 따른 데이터의 PLID(물리적 라인 ID)를 식별하는 단계를 더 포함한다(1010 단계).The method further includes identifying the PLID (physical line ID) of the data according to the logical address by searching the logical address of the conversion table (step 1010).

방법은 PLID에 기초하여, 데이터가 RAM의 해시 테이블에 저장되는지 또는 RAM의 오버플로 메모리 영역에 저장되는지를 확인하는 단계를 더 포함한다(1020 단계).The method further includes determining, based on the PLID, whether the data is stored in a hash table of RAM or in an overflow memory area of RAM (step 1020).

데이터가 해시 테이블에 저장되면, 방법은 PLID에 대응하는 해시 테이블의 물리적 라인의 위치를 찾는 단계(1030 단계) 및 해시 테이블의 물리적 라인으로부터 데이터를 회수하는 단계(1040 단계)를 더 포함한다. 데이터를 회수하는 단계는 서명 테이블 및 참조 카운터 테이블로부터 해당 데이터를 회수하는 단계를 포함한다.If the data is stored in the hash table, the method further includes the step of finding the position of the physical line of the hash table corresponding to the PLID (step 1030) and the step of recovering data from the physical line of the hash table (step 1040). The step of recovering the data includes recovering the data from the signature table and the reference counter table.

데이터가 오버플로 메모리에 저장되면, 방법은 PLID에 대응하는 오버플로 메모리 영역의 물리적 라인의 위치를 찾는 단계(1050 단계) 및 오버플로 메모리 영역의 물리적 라인으로부터 데이터를 회수하는 단계(1060 단계)를 더 포함한다.If the data is stored in the overflow memory, the method includes locating the physical line of the overflow memory area corresponding to the PLID (step 1050) and recovering the data from the physical line of the overflow memory area (step 1060) .

PLID는 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. PLID는 RAM의 해시 테이블의 또는 RAM의 오버플로 메모리 영역의 위치를 나타내는 주소를 포함할 수 있다.The PLID may be generated using the first hash function applied to the data. The PLID may include an address that indicates the location of the hash table of the RAM or the overflow memory area of the RAM.

PLID는 포함할 수 있다: 데이터가 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(identifier, 예를 들면, 도 4의 RGN 참조); 데이터가 저장된 행을 나타내는 제 2 식별자(예를 들면, 도 4의 R_INDX 참조); 및 데이터가 저장된 열을 나타내는 제 3 식별자(예를 들면, 도 4의 COL_INDX 참조).A PLID may include: a first identifier (e.g., an RGN reference in FIG. 4) that indicates whether data is stored in the hash table or overflow memory area; A second identifier (e.g., see R_INDX in FIG. 4) that represents the row in which the data is stored; And a third identifier (e.g., COL_INDX in FIG. 4) indicating the column in which the data is stored.

방법은 서명 테이블로부터 데이터와 연관된 서명을 회수하는 단계를 더 포함할 수 있다.The method may further include recovering a signature associated with the data from the signature table.

RAM은 복수의 데이터를 저장하는 해시 테이블; 제 1 해시 함수를 이용하여 생성되는 복수의 PLID를 저장하는 변환 테이블; 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 서명 테이블; 복수의 참조 카운터를 포함하는 참조 카운터 테이블, 각 참조 카운터는 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적한다; 및 오버플로 메모리 영역을 포함할 수 있다.The RAM includes a hash table storing a plurality of data; A conversion table storing a plurality of PLIDs generated using the first hash function; A signature table storing a plurality of signatures generated using a second hash function smaller than the first hash function; A reference counter table including a plurality of reference counters, each reference counter tracks the number of deduplication counts for the corresponding data stored in the hash table; And an overflow memory area.

해시 테이블, 서명 테이블, 및 참조 카운터 테이블은 결합된 데이터 구조로 통합될 수 있다. 결합된 데이터 구조는 복수의 해시 원통을 포함할 수 있고 각 해시 원통은 포함할 수 있다: 복수의 물리적 라인을 포함하는 해시 버킷; 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷.The hash table, signature table, and reference counter table may be combined into a combined data structure. The combined data structure may comprise a plurality of hash cylinders and each hash cylinder may comprise: a hash bucket comprising a plurality of physical lines; A signature bucket comprising respective signatures corresponding to a plurality of physical lines; And a reference counter bucket comprising respective reference counters corresponding to the plurality of physical lines.

물리적 라인 또는 오버플로 메모리 영역으로부터 데이터를 회수하는 단계는 물리적 라인, 해당 서명, 및 해당 참조 카운터를 포함하는 전체 해시 원통을 읽기 캐시로 복사하는 단계를 포함할 수 있다.Recalling data from a physical line or overflow memory area may include copying the entire hash cylinder containing the physical line, the signature, and the corresponding reference counter into the read cache.

도 11은 본 발명의 실시 예에 따른 RAM에 데이터를 저장하는 방법을 도시하는 순서도이다. 도 11은 RAM을 이용하여 도시되었으나, 본 발명은 이에 제한되지 않고 임의의 다른 적합한 메모리 유형이 본 방법들과 함께 사용될 수 있다.11 is a flowchart showing a method of storing data in a RAM according to an embodiment of the present invention. Although FIG. 11 is shown using RAM, the present invention is not so limited and any other suitable memory type may be used with these methods.

도 11을 참조하면, 컴퓨터 시스템의 CPU는 RAM에 데이터가 저장되도록 요청할 수 있다. CPU는 RAM 내에 저장될 데이터를 제공할 수 있다. 본 발명은 이에 제한되지 않고, 예를 들어, 다른 구성 요소들이 RAM에 데이터가 저장되도록 요청할 수 있고 데이터를 제공할 수 있다.Referring to FIG. 11, the CPU of the computer system may request that data be stored in the RAM. The CPU can provide data to be stored in the RAM. The present invention is not limited thereto, and for example, other components can request and store data in the RAM.

본 발명의 실시 예들에 따른 RAM 내에 데이터를 저장하는 방법은 RAM에 저장될 데이터를 식별하는 단계를 포함한다(1100 단계).A method of storing data in a RAM according to embodiments of the present invention includes identifying data to be stored in RAM (step 1100).

방법은 제 1 해시 함수를 이용하여 데이터가 RAM의 해시 테이블에 저장되어야 하는 위치에 대응하는 제 1 해시 값을 결정하는 단계를 더 포함한다(1110 단계).The method further includes determining a first hash value corresponding to a location where the data should be stored in the hash table of the RAM using the first hash function (step 1110).

방법은 제 1 해시 값에 대응하는 해시 테이블의 위치에 데이터를 저장하는 단계를 더 포함한다(1120 단계).The method further includes storing data at a location of the hash table corresponding to the first hash value (step 1120).

방법은 제 2 해시 함수를 이용하여 데이터가 저장되어야 하는 위치에 또한 대응하는 제 2 해시 값도 결정하는 단계를 더 포함한다(1130 단계). 제 2 해시 함수는 제 1 해시 함수보다 작을 수 있다.The method further includes determining a second hash value corresponding to the location where the data should be stored using the second hash function (step 1130). The second hash function may be smaller than the first hash function.

방법은 제 1 해시 값을 변환 테이블에 저장하는 단계를 더 포함한다(1140 단계).The method further includes storing the first hash value in a translation table (step 1140).

방법은 제 2 해시 값을 서명 테이블에 저장하는 단계를 더 포함한다(1150 단계).The method further includes storing the second hash value in a signature table (step 1150).

방법은 참조 카운터 테이블 내에서, 데이터에 대응하는, 참조 카운터를 증가시키는 단계를 더 포함할 수 있다.The method may further include, within the reference counter table, incrementing a reference counter corresponding to the data.

RAM은 포함할 수 있다: 복수의 데이터를 저장하는 해시 테이블; 제 1 해시 함수를 이용하여 생성되는 복수의 PLID를 저장하는 변환 테이블; 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 서명 테이블; 복수의 참조 카운터를 저장하는 참조 카운터 테이블, 각 참조 카운터는 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적한다; 및 오버플로 메모리 영역.RAM may include: a hash table storing a plurality of data; A conversion table storing a plurality of PLIDs generated using the first hash function; A signature table storing a plurality of signatures generated using the second hash function; A reference counter table storing a plurality of reference counters, each reference counter tracks the number of times of deduplication for the corresponding data stored in the hash table; And overflow memory areas.

PLID들 각각은 포함할 수 있다: 데이터가 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(예를 들면, 도 4의 RGN 참조); 데이터가 저장된 행을 나타내는 제 2 식별자(예를 들면, 도 4의 R_INDX 참조); 및 데이터가 저장된 열을 나타내는 제 3 식별자(예를 들면, 도 4의 COL_INDX 참조).Each of the PLIDs may include: a first identifier (e.g., see RGN in FIG. 4) that indicates whether data is stored in a hash table or an overflow memory area; A second identifier (e.g., see R_INDX in FIG. 4) that represents the row in which the data is stored; And a third identifier (e.g., COL_INDX in FIG. 4) indicating the column in which the data is stored.

해시 테이블, 서명 테이블, 및 참조 카운터 테이블은 결합된 데이터 구조로 통합될 수 있다. 결합된 데이터 구조는 복수의 해시 원통을 포함할 수 있다. 각 해시 원통은 포함할 수 있다: 복수의 물리적 라인을 포함하는 해시 버킷; 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷.The hash table, signature table, and reference counter table may be combined into a combined data structure. The combined data structure may include a plurality of hash cylinders. Each hash cylinder may include: a hash bucket comprising a plurality of physical lines; A signature bucket comprising respective signatures corresponding to a plurality of physical lines; And a reference counter bucket comprising respective reference counters corresponding to the plurality of physical lines.

제 1 해시 값에 대응하는 해시 테이블의 위치에 데이터를 저장하는 단계는 제 1 해시 값에 대응하는 해시 버킷에 데이터를 저장하는 단계를 포함할 수 있다. 서명 테이블에 제 2 해시 값을 저장하는 단계는 데이터가 저장되는 해시 버킷에 대응하는 서명 버킷에 제 2 해시 값을 저장하는 단계를 포함할 수 있다.Storing data at a location of the hash table corresponding to the first hash value may include storing the data in a hash bucket corresponding to the first hash value. Storing the second hash value in the signature table may include storing the second hash value in the signature bucket corresponding to the hash bucket where the data is stored.

그러므로, 본 명세서의 실시 예들은 물리적 메모리 크기보다 큰 메모리(예를 들면, RAM(random-access memory)) 내의 메모리 용량을 가능하게 하는 방법들 및 연관 구조들에 관한 것이다. 본 발명의 실시 예들에 따라, 중복 제거는 데이터 메모리 감소 및 문맥 주소 지정을 달성하기 위해 사용된다. 본 발명의 실시 예들에 따라, 유저 데이터는 유저 데이터의 해시 값에 의해 색인된 해시 테이블에 저장된다.Thus, the embodiments herein relate to methods and association structures that enable memory capacity in a memory (e.g., random-access memory (RAM)) that is larger than the physical memory size. In accordance with embodiments of the present invention, de-duplication is used to achieve data memory reduction and context addressing. According to embodiments of the present invention, the user data is stored in a hash table indexed by the hash value of the user data.

비록 여기에서 제 1, 제 2, 제3 등의 용어들은 다양한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들을 설명하기 위해 사용되지만, 이러한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들은 이러한 용어들로 인해 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 성분, 영역, 층, 또는 섹션으로부터 하나의 요소, 구성, 영역, 층 또는 섹션을 구별하기 위해 사용된다. 따라서, 후술하는 제 1 구성 요소, 성분, 영역, 층, 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않고, 제 2 구성 요소, 성분, 영역, 층, 또는 섹션을 지칭 할 수 있다.Although the terms first, second, third, etc. are used herein to describe various elements, components, regions, layers and / or sections, these terms, components, Or sections are not intended to be limited by these terms. These terms are used to distinguish one element, component, region, layer or section from another element, element, region, layer, or section. Thus, a first component, component, region, layer, or section described below may refer to a second component, component, region, layer, or section without departing from the spirit and scope of the present invention.

본 명세서에 기술된 본 발명의 실시 예들에 따라, 관련 장치 또는 구성 요소(또는 관련 장치들 또는 구성 요소들, 예를 들어, 중복 제거 엔진)는 임의의 적합한 하드웨어(예를 들어, ASIC), 펌웨어(예를 들어, DSP 또는 FPGA), 소프트웨어, 또는 소프트웨어, 펌웨어, 및 하드웨어의 적절한 조합을 이용하여 구현될 수 있다. 예를 들어, 관련 디바이스(들)의 다양한 구성 요소들은 하나의 집적 회로(integrated circuit; IC) 칩 또는 분리된 IC 칩들 상에 형성될 수 있다. 또한, 관련 장치(들)의 다양한 구성 요소들은 FPCF(flexible printed circuit film), TCP(tape carrier package), PCB(printed circuit board) 상에 구현되거나, 또는 하나 이상의 회로들 및/또는 다른 장치들과 동일한 기판 상에 형성 될 수 있다. 또한, 관련 장치(들)의 다양한 구성 요소들은 하나 이상의 프로세서들 상에서 실행되고, 하나 이상의 컴퓨팅 장치들에서, 컴퓨터 프로그램 지시들을 실행하고 여기에서 설명된 다양한 기능들을 수행하기 위해 다른 시스템 구성 요소들과 상호 작용하는 프로세스 또는 스레드(thread)일 수 있다. 컴퓨터 프로그램 지시들은 예를 들어, RAM과 같은 표준 메모리 장치를 사용하여 컴퓨팅 장치에 구현될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 지시들은 또한 예를 들어, CD-ROM, 플래시 드라이브 등과 같은 일시적이지 않은 다른 컴퓨터 판독 가능 매체에 저장 될 수 있다. 또한, 당업자는 다양한 컴퓨팅 장치들의 기능은 하나의 컴퓨팅 장치로 결합되거나 통합될 수 있거나, 본 발명의 예시적인 실시 예들의 사상 및 범위로부터 벗어나지 않고 특정 컴퓨팅 장치의 기능은 하나 이상의 다른 컴퓨팅 장치들에 걸쳐 분배될 수 있음을 인식해야 한다. In accordance with embodiments of the invention described herein, an associated device or component (or related devices or components, e.g., a deduplication engine) may be any suitable hardware (e.g., ASIC) (E. G., A DSP or FPGA), software, or any suitable combination of software, firmware, and hardware. For example, the various components of the associated device (s) may be formed on an integrated circuit (IC) chip or separate IC chips. The various components of the associated device (s) may also be implemented on a flexible printed circuit film (FPCF), a tape carrier package (TCP), a printed circuit board (PCB), or a combination of one or more circuits and / Can be formed on the same substrate. In addition, the various components of the associated device (s) may be implemented on one or more processors and may be, in one or more computing devices, configured to execute computer program instructions and interact with other system components to perform the various functions described herein. Lt; / RTI > may be a working process or thread. Computer program instructions are stored in a memory that can be implemented in a computing device using standard memory devices, such as, for example, RAM. The computer program instructions may also be stored on other non-volatile computer readable media, such as, for example, CD-ROMs, flash drives, and the like. Those skilled in the art will also appreciate that the functionality of the various computing devices may be combined or integrated into a single computing device or the functionality of a particular computing device may be implemented within one or more other computing devices without departing from the spirit and scope of the exemplary embodiments of the present invention ≪ / RTI >

또한, 하나의 요소, 구성 요소, 영역, 층, 및/또는 섹션이 2개의 요소들, 구성 요소들, 영역들, 층들, 및/또는 섹션들 “사이”에 있는 것으로 언급될 때, 그것은 단지 2개의 요소들, 구성 요소들, 영역들, 층들, 및/또는 섹션들 사이의 요소, 구성 요소, 영역, 층, 및/또는 섹션이거나, 또는 하나 이상의 중간 요소들, 구성 요소들, 영역들, 층들, 및/또는 섹션들이 존재할 수도 있다.Also, when referring to an element, element, region, layer, and / or section being "between" two elements, elements, regions, layers, and / Element, element, element, region, layer, and / or section between elements, elements, regions, layers, and / or sections of one or more intermediate elements, elements, , ≪ / RTI > and / or sections.

본 명세서에서 사용되는 용어는 특정 실시 예들을 설명하기 위한 것이고 본 발명을 제한하려는 것이 아니다. 본 명세서에서 사용된 단수 형태들은 문맥 상 다르게 나타내지 않는 한 복수 형태를 포함하는 것으로 의도된다. "포함한다", "포함하는" 용어들은 본 명세서에서 사용되는 경우, 명시된 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 구성 요소들을 명시하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들 및/또는 구성 요소들의 존재 또는 추가를 배제하지 않는 것으로 더 이해될 것이다.The terminology used herein is for the purpose of describing particular embodiments and is not intended to be limiting of the invention. The singular forms as used herein are intended to include the plural forms, unless the context clearly indicates otherwise. The terms "comprises" and "comprising", when used in this specification, specify specified features, integers, steps, operations, elements, and / or components but may include one or more other features, Steps, operations, elements, and / or components described in connection with the embodiments disclosed herein.

본 명세서에서 사용된 바와 같이, "및/또는" 용어는 하나 이상의 관련된 열거된 항목들의 임의의 조합 및 모든 조합을 포함한다. "적어도 하나", "하나" 및 "에서 선택"과 같은 표현들은, 요소 목록을 선행할 때, 요소들 전체 목록을 수정하고 목록의 개별 요소들을 수정하지 않는다. 또한, 본 발명의 실시 예들을 기술 할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예들"을 나타낸다. 또한, "예시적인" 용어는 예시 또는 설명을 나타내기 위해 의도된다.As used herein, the term "and / or" includes any and all combinations of one or more of the listed listed items. Expressions such as "at least one," "one, " and" select from "modify the entire list of elements and do not modify individual elements of the list, Further, the use of "can" when describing embodiments of the present invention represents "one or more embodiments of the present invention ". Also, the "exemplary" is intended to be illustrative or illustrative.

본 명세서에서 사용된 바와 같이, "사용", "사용하는", 및 "사용된"은 각각 "이용", "이용하는", 및 "이용된" 용어들과 동의어로 간주 될 수 있다.As used herein, "use", "use", and "used" may be considered synonymous with the terms "use", "use", and "used", respectively.

본 발명의 하나 이상의 실시 예들과 관련하여 설명된 특징들은 본 발명의 다른 실시 예들의 특징들과 함께 사용할 수 있다. 예를 들어, 제 1 실시 예에서 설명된 특징들은 제 3 실시 예가 본 명세서에서 구체적으로 설명되지 않을지라도, 제 3 실시 예를 형성하기 위해 제 2 실시 예에서 설명된 특징들과 결합될 수 있다.The features described in connection with one or more embodiments of the invention may be used with the features of other embodiments of the invention. For example, the features described in the first embodiment may be combined with the features described in the second embodiment to form the third embodiment, although the third embodiment is not specifically described herein.

당업자는 또한 프로세스는 하드웨어, 펌웨어(예를 들어, ASIC을 통해), 또는 소프트웨어, 펌웨어, 및/또는 하드웨어의 임의의 조합을 통해 실행될 수 있다는 것을 인식해야 한다. 또한, 프로세스의 단계들의 순서는 고정되어 있지 않지만, 당업자에 의해 인식되는 임의의 원하는 순서로 변경될 수 있다. 변경된 순서는 모든 단계들 또는 단계들의 일부를 포함할 수 있다.Those skilled in the art will also appreciate that the process may be executed through hardware, firmware (e.g., via an ASIC), or any combination of software, firmware, and / or hardware. In addition, the order of the steps of the process is not fixed, but may be changed in any desired order recognized by those skilled in the art. The altered order may include all steps or portions of steps.

비록 본 발명이 특정한 특정 실시 예들과 관련하여 설명되었지만, 당업자는 설명된 실시 예들의 변형을 고안하는데 어려움이 없을 것이며, 이는 본 발명의 범위 및 사상으로부터 벗어나지 않는다. 또한, 다양한 기술 분야의 당업자에게, 본 명세서에 기재된 본 발명 자체는 다른 애플리케이션에 대한 다른 과제들 및 적응들에 대한 해결책들을 제안할 것이다. 본 발명의 사상 및 범위에서 벗어나지 않고 개시 목적으로 선택된 본 발명의 실시 예들을 이룰 수 있는 본 발명의 모든 그러한 사용들 및 그것들의 변화들 및 수정들을 청구 범위로 포함하는 것이 출원인의 의도이다. 따라서, 본 발명의 본 실시 예들은 모든 측면에서 예시적인 것으로서 제한적이지는 않은 것으로 간주되어야 하며, 본 발명의 범위는 첨부된 청구 범위 및 그 균등물에 의해 표시되어야 한다.Although the present invention has been described in connection with specific embodiments thereof, it will be apparent to those skilled in the art that modifications will be apparent to those skilled in the art, without departing from the scope and spirit of the invention. In addition, those skilled in the art will appreciate that the invention itself as set forth herein will suggest solutions to other problems and adaptations to other applications. It is the intent of the applicants to include all such uses of the invention and variations and modifications thereof which may achieve embodiments of the invention selected for the purpose of disclosure without departing from the spirit and scope of the invention. Accordingly, the embodiments of the present invention are to be considered in all respects as illustrative and not restrictive, the scope of the invention being indicated by the appended claims and equivalents thereof.

100: 중복 제거 모듈
130: 브릿지
140: 메모리 컨트롤러
160: 호스트 인터페이스
170: 읽기 캐시
180: DIMM/플래시
200: 중복 제거 엔진
100: Deduplication module
130: Bridge
140: Memory controller
160: Host interface
170: Read Cache
180: DIMM / Flash
200: Deduplication engine

Claims (22)

중복 제거 모듈(dedupe module)과 연관된 메모리에 저장된 데이터를 회수하는 방법에 있어서, 상기 중복 제거 모듈은 읽기 캐시(read cache)를 포함하고, 상기 메모리는 변환 테이블(translation table) 및 결합된 데이터 구조를 포함하고, 상기 결합된 데이터 구조는 해시 테이블(hash table) 및 참조 카운터 테이블(reference counter table)을 포함하고, 상기 해시 테이블 및 상기 참조 카운터 테이블 각각은 상기 결합된 데이터 구조의 복수의 해시 원통(hash cylinder)에 저장되고, 상기 해시 테이블은 복수의 해시 버킷(bucket)을 포함하고 각 해시 버킷은 복수의 물리적 라인을 포함하고 각 물리적 라인은 데이터를 저장하고, 상기 참조 카운터 테이블은 복수의 참조 카운터 버킷을 포함하고 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하되, 상기 방법은:
상기 데이터의 논리적 주소(logical address)를 식별하는 단계;
상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하는 단계;
상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾는 단계; 및
상기 각각의 물리적 라인으로부터 상기 데이터를 회수하는 단계를 포함하되,
상기 회수하는 단계는 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 단계를 포함하고,
상기 각각의 해시 원통은:
상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 및
상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함하는 방법.
A method for recovering data stored in a memory associated with a dedupe module, the deduplication module comprising a read cache, the memory including a translation table and a combined data structure Wherein the combined data structure comprises a hash table and a reference counter table, wherein each of the hash table and the reference counter table comprises a plurality of hash cylinders of the combined data structure, cylinder, the hash table comprising a plurality of hash buckets, each hash bucket comprising a plurality of physical lines, each physical line storing data, the reference counter table comprising a plurality of reference counter buckets, Each reference counter bucket comprising a plurality of reference counters, the method comprising:
Identifying a logical address of the data;
Retrieving at least a portion of the logical address of the translation table to identify a physical line ID (PLID) of the data according to the logical address;
Finding a position of each physical line of the plurality of physical lines corresponding to the PLID; And
And recovering the data from each physical line,
Wherein the recovering step includes copying each hash cylinder of the plurality of hash cylinders into the read cache,
Each of the hash cylinders comprising:
A respective hash bucket of each of the plurality of hash buckets, the respective hash buckets comprising the respective physical lines; And
Each reference counter bucket of the plurality of reference counter buckets comprising a respective reference counter associated with each physical line.
제 1 항에 있어서,
상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하는 단계를 더 포함하는 방법.
The method according to claim 1,
Further comprising determining based on the PLID that the data is stored in the hash table.
제 1 항에 있어서,
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하는 방법.
The method according to claim 1,
The PLID is generated using a first hash function applied to the data, and
And the PLID includes an address indicating the location of the hash table.
제 3 항에 있어서,
상기 PLID는:
상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier);
상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및
상기 데이터가 저장된 열을 나타내는 제 3 식별자를 포함하는 방법.
The method of claim 3,
The PLID is:
A first identifier indicating whether the data is stored in the hash table or in an overflow memory region;
A second identifier indicating a row in which the data is stored; And
And a third identifier indicating a column in which the data is stored.
제 1 항에 있어서,
상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함하고, 그리고
상기 각각의 해시 원통은 상기 복수의 서명 버킷을 포함하는 각각의 서명 버킷을 더 포함하되, 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함하는 방법.
The method according to claim 1,
Wherein the combined data structure further comprises a signature table comprising a plurality of signature buckets, each signature bucket comprising a plurality of signatures, and
Wherein each hash cylinder further comprises a respective signature bucket comprising the plurality of signature buckets, wherein each signature bucket comprises a respective signature associated with the respective physical line.
제 5 항에 있어서,
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하되,
상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성되는 방법.
6. The method of claim 5,
The PLID is generated using a first hash function applied to the data, and
Wherein the PLID includes an address indicating a location of the hash table,
Wherein the plurality of signatures are generated using a second hash function less than the first hash function.
제 1 항에 있어서,
각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적하는 방법.
The method according to claim 1,
And each reference counter tracks the number of duplicates removed for the corresponding data stored in the hash table.
중복 제거 엔진(dedupe engine)과 연관된 메모리에 데이터를 저장하는 방법에 있어서,
저장될 상기 데이터를 식별하는 단계;
제 1 해시 함수(hash function)를 이용하여 상기 메모리의 해시 테이블(hash table)에 저장되어야 할 상기 데이터의 위치에 대응하는 제 1 해시 값(hash value)을 결정하는 단계;
상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계;
상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 상기 데이터가 저장되어야 할 위치에 또한 대응하는 제 2 해시 값을 결정하는 단계;
상기 메모리의 변환 테이블(translation table)에 상기 제 1 해시 값을 저장하는 단계; 및
상기 메모리의 서명 테이블에 상기 제 2 해시 값을 저장하는 단계를 포함하는 방법.
A method of storing data in a memory associated with a dedupe engine,
Identifying said data to be stored;
Determining a first hash value corresponding to a location of the data to be stored in a hash table of the memory using a first hash function;
Storing the data at a location of the hash table corresponding to the first hash value;
Determining a second hash value corresponding also to a location at which the data is to be stored using a second hash function less than the first hash function;
Storing the first hash value in a translation table of the memory; And
Storing the second hash value in a signature table of the memory.
제 8 항에 있어서,
상기 데이터에 대응하는, 참조 카운터 테이블(reference counter table)의 참조 카운터를 증가시키는 단계를 더 포함하는 방법.
9. The method of claim 8,
Further comprising increasing a reference counter of a reference counter table corresponding to the data.
제 8 항에 있어서,
상기 메모리는:
복수의 데이터를 저장하는 상기 해시 테이블;
상기 제 1 해시 함수를 이용하여 생성되는 복수의 PLID(physical line ID)를 저장하는 상기 변환 테이블;
상기 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 상기 서명 테이블;
복수의 참조 카운터를 저장하는 참조 카운터 테이블; 및
오버플로 메모리 영역(overflow memory region)을 포함하되,
각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적하는 방법.
9. The method of claim 8,
The memory comprising:
The hash table storing a plurality of data;
A conversion table storing a plurality of physical line IDs (PLIDs) generated using the first hash function;
The signature table storing a plurality of signatures generated using the second hash function;
A reference counter table storing a plurality of reference counters; And
An overflow memory region,
And each reference counter tracks the number of duplicates removed for the corresponding data stored in the hash table.
제 10 항에 있어서,
상기 복수의 PLID 각각은:
상기 데이터가 상기 해시 테이블에 저장되었는지 또는 상기 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(identifier);
상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및
상기 데이터가 저장된 열을 나타내는 제 3 식별자를 포함하는 방법.
11. The method of claim 10,
Wherein each of the plurality of PLIDs comprises:
A first identifier indicating whether the data is stored in the hash table or in the overflow memory area;
A second identifier indicating a row in which the data is stored; And
And a third identifier indicating a column in which the data is stored.
제 10 항에 있어서,
상기 해시 테이블, 상기 서명 테이블, 및 상기 참조 카운터 테이블은 결합된 데이터 구조로 통합되고, 그리고
상기 결합된 데이터 구조는 복수의 해시 원통(cylinder)을 포함하되, 각 해시 원통은:
복수의 물리적 라인을 포함하는 해시 버킷;
상기 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및
상기 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷을 포함하는 방법.
11. The method of claim 10,
The hash table, the signature table, and the reference counter table are merged into a combined data structure, and
The combined data structure comprising a plurality of hash cylinders, each hash cylinder comprising:
A hash bucket comprising a plurality of physical lines;
A signature bucket comprising respective signatures corresponding to the plurality of physical lines; And
And a reference counter bucket comprising respective reference counters corresponding to the plurality of physical lines.
제 12 항에 있어서,
상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계는 상기 제 1 해시 값에 대응하는 상기 해시 버킷에 상기 데이터를 저장하는 단계를 포함하고, 그리고
상기 메모리의 서명 테이블에 상기 제 2 해시 값을 저장하는 단계는 상기 데이터가 저장된 상기 해시 버킷에 대응하는 상기 서명 버킷에 상기 제 2 해시 값을 저장하는 단계를 포함하는 방법.
13. The method of claim 12,
Wherein storing the data at a location of the hash table corresponding to the first hash value comprises storing the data in the hash bucket corresponding to the first hash value,
Wherein storing the second hash value in a signature table of the memory comprises storing the second hash value in the signature bucket corresponding to the hash bucket where the data is stored.
읽기 캐시(read cache);
호스트 시스템으로부터 데이터 회수 요청을 수신하는 중복 제거 엔진(dedupe engine); 및
메모리를 포함하되,
상기 메모리는:
변환 테이블(translation table); 및
결합된 데이터 구조를 포함하되,
상기 결합된 데이터 구조는:
복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블(hash table);
복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및
복수의 해시 원통(cylinder)을 포함하되,
각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 각 해시 원통은 상기 해시 버킷들 중 하나 및 상기 참조 카운터 버킷들 중 하나를 포함하되,
상기 데이터 회수 요청은 상기 중복 제거 엔진으로 하여금:
상기 데이터의 논리적 주소를 식별하고;
상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하고;
상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾고; 그리고
상기 각각의 물리적 라인으로부터 상기 데이터를 회수하도록 야기하고, 상기 데이터를 회수하는 것은 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 것을 포함하고,
상기 각각의 해시 원통은:
상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 및
상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함하는 중복 제거 모듈.
Read cache;
A dedupe engine for receiving a data retrieval request from the host system; And
Memory,
The memory comprising:
A translation table; And
Include a combined data structure,
The combined data structure comprises:
A hash table containing a plurality of hash buckets;
A reference counter table including a plurality of reference counter buckets; And
A plurality of hash cylinders,
Wherein each hash bucket comprises a plurality of physical lines, each physical line storing data, each reference counter bucket comprising a plurality of reference counters, each hash cylinder having one of the hash buckets and the reference counter buckets ≪ / RTI >
Wherein the data retrieval request causes the deduplication engine to:
Identify a logical address of the data;
Searching at least a portion of the logical address of the translation table to identify a physical line ID (PLID) of the data according to the logical address;
Find a location of each physical line of the plurality of physical lines, corresponding to the PLID; And
And causing the data to be recovered from the respective physical lines, wherein recovering the data comprises copying each hash cylinder of the plurality of hash cylinders into the read cache,
Each of the hash cylinders comprising:
A respective hash bucket of each of the plurality of hash buckets, the respective hash buckets comprising the respective physical lines; And
Each reference counter bucket of each of the plurality of reference counter buckets, each reference counter associated with each physical line.
제 14 항에 있어서,
상기 데이터 회수 요청은 상기 중복 제거 엔진이 상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하도록 더 야기하는 중복 제거 모듈.
15. The method of claim 14,
Wherein the data retrieval request further causes the deduplication engine to determine, based on the PLID, that the data is stored in the hash table.
제 14 항에 있어서,
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하는 중복 제거 모듈.
15. The method of claim 14,
The PLID is generated using a first hash function applied to the data, and
And the PLID includes an address indicating the location of the hash table.
제 16 항에 있어서,
상기 PLID는:
상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier);
상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및
상기 데이터가 저장된 열을 나타내는 제 3 식별자를 포함하는 중복 제거 모듈.
17. The method of claim 16,
The PLID is:
A first identifier indicating whether the data is stored in the hash table or in an overflow memory region;
A second identifier indicating a row in which the data is stored; And
And a third identifier indicating a column in which the data is stored.
제 14 항에 있어서,
상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함하고, 그리고
상기 각각의 해시 원통은 상기 복수의 서명 버킷을 포함하는 각각의 서명 버킷을 더 포함하되, 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함하는 중복 제거 모듈.
15. The method of claim 14,
Wherein the combined data structure further comprises a signature table comprising a plurality of signature buckets, each signature bucket comprising a plurality of signatures, and
Wherein each hash cylinder further comprises a respective signature bucket comprising the plurality of signature buckets, wherein each signature bucket comprises a respective signature associated with each of the physical lines.
제 18 항에 있어서,
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하되,
상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성되는 중복 제거 모듈.
19. The method of claim 18,
The PLID is generated using a first hash function applied to the data, and
Wherein the PLID includes an address indicating a location of the hash table,
Wherein the plurality of signatures are generated using a second hash function smaller than the first hash function.
제 14 항에 있어서,
각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적하는 중복 제거 모듈.
15. The method of claim 14,
And each reference counter tracks the number of duplicates removed for the corresponding data stored in the hash table.
호스트 인터페이스;
상기 호스트 인터페이스를 통해 호스트 시스템으로부터 데이터 전송 요청들을 수신하는 전송 관리부; 및
복수의 파티션(partition)을 포함하되,
각 파티션은:
상기 전송 관리부로부터 파티션 데이터 요청들을 수신하는 중복 제거 엔진(dedupe engine);
복수의 메모리 컨트롤러;
상기 중복 제거 엔진 및 상기 복수의 메모리 컨트롤러 사이의 메모리 관리부; 및
복수의 메모리 모듈을 포함하되,
각 메모리 모듈은 상기 복수의 메모리 컨트롤러 중 하나와 연결되는 중복 제거 모듈.
Host interface;
A transmission management unit for receiving data transmission requests from the host system through the host interface; And
A plurality of partitions,
Each partition is:
A dedupe engine receiving the partition data requests from the transmission management unit;
A plurality of memory controllers;
A memory management unit between the de-duplication engine and the plurality of memory controllers; And
A plurality of memory modules,
Each memory module being coupled to one of the plurality of memory controllers.
읽기 캐시(read cache) 및 메모리를 포함하되,
상기 메모리는:
변환 테이블(translation table); 및
복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블;
복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및
상기 복수의 해시 버킷의 제 1 해시 버킷에 대한 V개 가상 버킷들을 식별하는 중복 제거 엔진을 포함하되,
각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 상기 가상 버킷은 상기 제 1 해시 버킷에 인접한 상기 복수의 해시 버킷 중 다른 것들이고, 상기 가상 버킷들은 상기 제 1 해시 버킷이 가득 찬 경우 상기 제 1 해시 버킷의 데이터의 일부를 저장하고, V는 제 1 해시 버킷의 가상 버킷들이 얼마나 가득 찼는지에 기초하여 동적으로 설정되는 정수인 중복 제거 모듈.
A read cache and memory,
The memory comprising:
A translation table; And
A hash table including a plurality of hash buckets;
A reference counter table including a plurality of reference counter buckets; And
A de-duplication engine for identifying V virtual buckets for a first hash bucket of the plurality of hash buckets,
Wherein each hash bucket comprises a plurality of physical lines, each physical line storing data, each reference counter bucket comprising a plurality of reference counters, said virtual bucket comprising a plurality of hash buckets adjacent to said first hash bucket, And the virtual buckets store a portion of the data of the first hash bucket when the first hash bucket is full and V is set dynamically based on how full the virtual buckets of the first hash bucket are A de-duplication module that is an integer that is an integer.
KR1020170062408A 2016-05-20 2017-05-19 Method and apparatus for enabling larger memory capacity than physical memory size KR102190403B1 (en)

Applications Claiming Priority (14)

Application Number Priority Date Filing Date Title
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
US15/162,517 US10496543B2 (en) 2016-03-31 2016-05-23 Virtual bucket multiple hash tables for efficient memory in-line deduplication application
US15/162,517 2016-05-23
US201662368775P 2016-07-29 2016-07-29
US62/368,775 2016-07-29
US201762450502P 2017-01-25 2017-01-25
US62/450,502 2017-01-25
US201762451157P 2017-01-27 2017-01-27
US62/451,157 2017-01-27
US201762453461P 2017-02-01 2017-02-01
US62/453,461 2017-02-01
US15/476,757 2017-03-31
US15/476,757 US10678704B2 (en) 2016-03-29 2017-03-31 Method and apparatus for enabling larger memory capacity than physical memory size

Publications (2)

Publication Number Publication Date
KR20170131274A true KR20170131274A (en) 2017-11-29
KR102190403B1 KR102190403B1 (en) 2020-12-11

Family

ID=60404742

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170062408A KR102190403B1 (en) 2016-05-20 2017-05-19 Method and apparatus for enabling larger memory capacity than physical memory size

Country Status (4)

Country Link
JP (1) JP6920107B2 (en)
KR (1) KR102190403B1 (en)
CN (1) CN107402889B (en)
TW (1) TWI804466B (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170112952A (en) * 2016-03-29 2017-10-12 삼성전자주식회사 Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
KR102467372B1 (en) * 2022-01-06 2022-11-14 삼성전자주식회사 Storage device and method of operating the same

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10705969B2 (en) * 2018-01-19 2020-07-07 Samsung Electronics Co., Ltd. Dedupe DRAM cache
KR102540964B1 (en) * 2018-02-12 2023-06-07 삼성전자주식회사 Memory Controller and Application Processor controlling utilization and performance of input/output device and Operating Method of Memory Controller
CN110765156A (en) 2018-07-09 2020-02-07 慧荣科技股份有限公司 Linked list searching device and method
US11023374B2 (en) 2018-07-09 2021-06-01 Silicon Motion, Inc. Apparatus and method and computer program product for controlling data access
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
CN109299215A (en) * 2018-09-28 2019-02-01 平安科技(深圳)有限公司 Resource allocation methods, device and storage medium, the server of inverted index inquiry
CN112181242B (en) * 2019-07-02 2021-11-02 北京百度网讯科技有限公司 Page display method and device
CN114253472B (en) * 2021-11-29 2023-09-22 郑州云海信息技术有限公司 Metadata management method, device and storage medium

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110258404A1 (en) * 2010-04-14 2011-10-20 Hitachi, Ltd. Method and apparatus to manage groups for deduplication
US20120102260A1 (en) * 2010-10-26 2012-04-26 Hitachi, Ltd. Storage apparatus and data control method
US20130024645A1 (en) * 2010-05-20 2013-01-24 Hicamp Systems, Inc. Structured memory coprocessor
US20160291891A1 (en) * 2014-01-15 2016-10-06 Intel Corporation Deduplication-based data security
KR20170112952A (en) * 2016-03-29 2017-10-12 삼성전자주식회사 Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
KR20170112953A (en) * 2016-03-31 2017-10-12 삼성전자주식회사 Virtual bucket multiple hash tables for efficient memory in-line deduplication application

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5796939A (en) * 1997-03-10 1998-08-18 Digital Equipment Corporation High frequency sampling of processor performance counters
JP2003030040A (en) * 2001-07-12 2003-01-31 Nec Commun Syst Ltd Hush indexes of object database system and non-unique index management system
JP5026213B2 (en) * 2007-09-28 2012-09-12 株式会社日立製作所 Storage apparatus and data deduplication method
CN101655861B (en) * 2009-09-08 2011-06-01 中国科学院计算技术研究所 Hashing method based on double-counting bloom filter and hashing device
US9047304B2 (en) * 2011-11-28 2015-06-02 International Business Machines Corporation Optimization of fingerprint-based deduplication
US8688661B2 (en) * 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US9069782B2 (en) * 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110258404A1 (en) * 2010-04-14 2011-10-20 Hitachi, Ltd. Method and apparatus to manage groups for deduplication
US20130024645A1 (en) * 2010-05-20 2013-01-24 Hicamp Systems, Inc. Structured memory coprocessor
US20120102260A1 (en) * 2010-10-26 2012-04-26 Hitachi, Ltd. Storage apparatus and data control method
US20160291891A1 (en) * 2014-01-15 2016-10-06 Intel Corporation Deduplication-based data security
KR20170112952A (en) * 2016-03-29 2017-10-12 삼성전자주식회사 Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
KR20170112953A (en) * 2016-03-31 2017-10-12 삼성전자주식회사 Virtual bucket multiple hash tables for efficient memory in-line deduplication application

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
John Peter Stevenson, Fine-Grain In-Memory Deduplication for Large-Scale Workloads, Stanford University, 2013 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170112952A (en) * 2016-03-29 2017-10-12 삼성전자주식회사 Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
KR102467372B1 (en) * 2022-01-06 2022-11-14 삼성전자주식회사 Storage device and method of operating the same

Also Published As

Publication number Publication date
KR102190403B1 (en) 2020-12-11
CN107402889A (en) 2017-11-28
CN107402889B (en) 2023-07-11
TWI804466B (en) 2023-06-11
JP6920107B2 (en) 2021-08-18
TW201741883A (en) 2017-12-01
JP2017208096A (en) 2017-11-24

Similar Documents

Publication Publication Date Title
KR102190403B1 (en) Method and apparatus for enabling larger memory capacity than physical memory size
US10318434B2 (en) Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
US10678704B2 (en) Method and apparatus for enabling larger memory capacity than physical memory size
US11010300B2 (en) Optimized record lookups
JP6764359B2 (en) Deduplication DRAM memory module and its memory deduplication method
US9471500B2 (en) Bucketized multi-index low-memory data structures
WO2019127104A1 (en) Method for resource adjustment in cache, data access method and device
US10496543B2 (en) Virtual bucket multiple hash tables for efficient memory in-line deduplication application
EP4287031A2 (en) Flexible dictionary sharing for compressed caches
US10528284B2 (en) Method and apparatus for enabling larger memory capacity than physical memory size
US20200225882A1 (en) System and method for compaction-less key-value store for improving storage capacity, write amplification, and i/o performance
US10366011B1 (en) Content-based deduplicated storage having multilevel data cache
US12010214B2 (en) Hash based key value to block translation methods and systems
US20220231836A1 (en) Hash based key value to block translation methods and systems
US20160103766A1 (en) Lookup of a data structure containing a mapping between a virtual address space and a physical address space
US20200167285A1 (en) Prefetching data to reduce cache misses
TW202340934A (en) Systems and methods for a cross-layer key-value store with a computational storage device

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant