KR102190403B1 - 물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치 - Google Patents

물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR102190403B1
KR102190403B1 KR1020170062408A KR20170062408A KR102190403B1 KR 102190403 B1 KR102190403 B1 KR 102190403B1 KR 1020170062408 A KR1020170062408 A KR 1020170062408A KR 20170062408 A KR20170062408 A KR 20170062408A KR 102190403 B1 KR102190403 B1 KR 102190403B1
Authority
KR
South Korea
Prior art keywords
hash
data
bucket
memory
stored
Prior art date
Application number
KR1020170062408A
Other languages
English (en)
Other versions
KR20170131274A (ko
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/ko
Application granted granted Critical
Publication of KR102190403B1 publication Critical patent/KR102190403B1/ko

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/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/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/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

중복 제거 모듈과 연관된 메모리에 저장된 데이터를 회수하는 방법이 제공된다. 방법은 포함한다: 데이터의 논리적 주소를 식별하는 단계; 변환 테이블의 논리적 주소의 적어도 일부를 검색하여 논리적 주소에 따른 데이터의 PLID를 식별하는 단계; 각각의 물리적 라인의 위치를 찾는 단계, 각각의 물리적 라인은 PLID에 대응하고; 그리고 각각의 물리적 라인으로부터 데이터를 회수하는 단계, 회수하는 단계는 각각의 해시 원통을 읽기 캐시로 복사하는 단계를 포함하고, 각각의 해시 원통은 포함한다: 각각의 물리적 라인을 포함하는 각각의 해시 버킷; 및 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는 각각의 참조 카운터 버킷.

Description

물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치{METHOD AND APPARATUS FOR ENABLING LARGER MEMORY CAPACITY THAN PHYSICAL MEMORY SIZE}
본 발명의 실시 예들의 하나 이상의 측면들은 시스템 메모리 및 저장 장치에 관한 것이고, 좀 더 구체적으로, 고용량 저 대기시간(high capacity low latency)의 메모리 및 저장 장치에 관한 것이다.
데이터베이스들(databases), 데스크톱 가상화(virtual desktop infrastructure), 및 데이터 분석(data analytics)과 같은 전형적인 최신 컴퓨터 애플리케이션(applications)은 대용량 메인 메모리(main memory)를 필요로 한다. 컴퓨터 시스템들이 더 복잡한 데이터 및 저장 집약형 애플리케이션들을 수행하기 위해 확장함에 따라, 보다 큰 메모리 용량에 대한 요구는 비례해서 증가한다.
전형적인 RAM(random-access memory)은 RAM의 물리적 설계에 의해 저장될 수 있는 데이터의 양이 제한된다. 예를 들어, 8GB DRAM은 전형적으로 최대 8GB 데이터를 갖는다. 또한, 미래 데이터 센터(data center) 애플리케이션은 고용량 저 대기시간(high capacity low latency) 메모리를 사용할 것이다.
이러한 배경 기술 부분에서 개시된 상술한 정보는 본 발명의 배경의 이해를 돕기 위한 것이고, 그러므로 종래 기술을 구성하지 않는 정보를 포함할 수 있다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치를 제공할 수 있다.
본 명세서의 실시 예들의 측면들은 RAM의 물리적 메모리 크기보다 큰 RAM 내의 메모리 용량을 가능하게 하는 방법들 및 연관된 구조들에 관한 것이다. 본 발명의 실시 예들에 따라, 중복 제거 알고리즘들(deduplication algorithms)은 데이터 메모리 감소 및 문맥 주소 지정(context addressing)을 달성하기 위해 사용된다. 본 발명의 실시 예들에 따라, 유저 데이터(user data)는 유저 데이터의 해시 값(hash value)에 의해 색인된 해시 테이블(hash table)에 저장된다.
본 발명의 실시 예에 따라, 중복 제거 모듈(dedupe module)과 연관된 메모리에 저장된 데이터를 회수하는 방법이 제공되고, 상기 중복 제거 모듈은 읽기 캐시(read cache)를 포함하고, 상기 메모리는 변환 테이블(translation table) 및 결합된 데이터 구조를 포함하고, 상기 결합된 데이터 구조는 해시 테이블(hash table) 및 참조 카운터 테이블(reference counter table)을 포함하고, 상기 해시 테이블 및 상기 참조 카운터 테이블 각각은 상기 결합된 데이터 구조의 복수의 해시 원통(hash cylinder)에 저장되고, 상기 해시 테이블은 복수의 해시 버킷(bucket)을 포함하고 각 해시 버킷은 복수의 물리적 라인을 포함하고 각 물리적 라인은 데이터를 저장하고, 상기 참조 카운터 테이블은 복수의 참조 카운터 버킷을 포함하고 각 참조 카운터 버킷은 복수의 참조 카운터를 포함한다. 상기 방법은: 상기 데이터의 논리적 주소(logical address)를 식별하는 단계; 상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하는 단계; 상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾는 단계; 및 상기 각각의 물리적 라인으로부터 상기 데이터를 회수하는 단계를 포함하되, 상기 회수하는 단계는 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 단계를 포함하고, 상기 각각의 해시 원통은: 상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 및 상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함한다.
방법은 상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하는 단계를 더 포함할 수 있다.
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다.
상기 PLID는 포함할 수 있다: 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier); 상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및 상기 데이터가 저장된 열을 나타내는 제 3 식별자.
상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함할 수 있다. 상기 각각의 해시 원통은 상기 복수의 서명 버킷을 포함하는 각각의 서명 버킷을 더 포함할 수 있고, 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함한다.
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다. 상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성될 수 있다.
각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적할 수 있다.
본 발명의 실시 예에 따라, 중복 제거 엔진(dedupe engine)과 연관된 메모리에 데이터를 저장하는 방법이 제공된다. 방법은 포함한다: 저장될 상기 데이터를 식별하는 단계; 제 1 해시 함수(hash function)를 이용하여 상기 메모리의 해시 테이블(hash table)에 저장되어야 할 상기 데이터의 위치에 대응하는 제 1 해시 값(hash value)을 결정하는 단계; 상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계; 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 상기 데이터가 저장되어야 할 위치에 또한 대응하는 제 2 해시 값을 결정하는 단계; 상기 메모리의 변환 테이블(translation table)에 상기 제 1 해시 값을 저장하는 단계; 및 상기 메모리의 서명 테이블에 상기 제 2 해시 값을 저장하는 단계.
방법은 상기 데이터에 대응하는, 참조 카운터 테이블(reference counter table)의 참조 카운터를 증가시키는 단계를 더 포함할 수 있다.
상기 메모리는 포함할 수 있다: 복수의 데이터를 저장하는 상기 해시 테이블; 상기 제 1 해시 함수를 이용하여 생성되는 복수의 PLID(physical line ID)를 저장하는 상기 변환 테이블; 상기 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 상기 서명 테이블; 복수의 참조 카운터를 저장하는 참조 카운터 테이블; 및 오버플로 메모리 영역(overflow memory region), 각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적한다.
상기 복수의 PLID 각각은 포함할 수 있다: 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 상기 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(identifier); 상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및 상기 데이터가 저장된 열을 나타내는 제 3 식별자.
상기 해시 테이블, 상기 서명 테이블, 및 상기 참조 카운터 테이블은 결합된 데이터 구조로 통합될 수 있다. 상기 결합된 데이터 구조는 복수의 해시 원통(cylinder)을 포함할 수 있다. 각 해시 원통은 포함한다: 복수의 물리적 라인을 포함하는 해시 버킷; 상기 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및 상기 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷.
상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계는 상기 제 1 해시 값에 대응하는 상기 해시 버킷에 상기 데이터를 저장하는 단계를 포함할 수 있다. 상기 서명 테이블에 상기 제 2 해시 값을 저장하는 단계는 상기 데이터가 저장된 상기 해시 버킷에 대응하는 상기 서명 버킷에 상기 제 2 해시 값을 저장하는 단계를 포함할 수 있다.
본 발명의 실시 예에 따라, 읽기 캐시(read cache); 호스트 시스템으로부터 데이터 회수 요청을 수신하는 중복 제거 엔진(dedupe engine); 및 메모리를 포함하되, 상기 메모리는: 변환 테이블(translation table); 및 결합된 데이터 구조를 포함하되, 상기 결합된 데이터 구조는: 복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블(hash table); 복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및 복수의 해시 원통(cylinder)을 포함하되, 각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 각 해시 원통은 상기 해시 버킷들 중 하나 및 상기 참조 카운터 버킷들 중 하나를 포함하되, 상기 데이터 회수 요청은 상기 중복 제거 엔진으로 하여금: 상기 데이터의 논리적 주소를 식별하고; 상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하고; 상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾고; 그리고 상기 각각의 물리적 라인으로부터 상기 데이터를 회수하도록 야기하고, 상기 데이터를 회수하는 것은 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 것을 포함하고, 상기 각각의 해시 원통은: 상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함하는 중복 제거 모듈이 제공된다.
상기 데이터 회수 요청은 상기 중복 제거 엔진이 상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하도록 한다.
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다.
상기 PLID는 포함할 수 있다: 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier); 상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및 상기 데이터가 저장된 열을 나타내는 제 3 식별자.
상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함할 수 있다. 상기 각각의 해시 원통은 상기 복수의 서명 버킷을 포함하는 각각의 서명 버킷을 더 포함할 수 있다. 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함한다.
상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. 상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함할 수 있다. 상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성될 수 있다.
각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적할 수 있다.
본 발명의 실시 예에 따라, 호스트 인터페이스; 상기 호스트 인터페이스를 통해 호스트 시스템으로부터 데이터 전송 요청들을 수신하는 전송 관리부; 및 복수의 파티션(partition)을 포함하되, 각 파티션은: 상기 전송 관리부로부터 파티션 데이터 요청들을 수신하는 중복 제거 엔진(dedupe engine); 복수의 메모리 컨트롤러; 상기 중복 제거 엔진 및 상기 복수의 메모리 컨트롤러 사이의 메모리 관리부; 및 복수의 메모리 모듈을 포함하되, 각 메모리 모듈은 상기 복수의 메모리 컨트롤러 중 하나와 연결되는 중복 제거 모듈이 제공된다.
본 발명의 실시 예에 따라, 읽기 캐시(read cache) 및 메모리를 포함하되, 상기 메모리는: 변환 테이블(translation table); 및 복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블; 복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및 상기 복수의 해시 버킷의 제 1 해시 버킷에 대한 V개 가상 버킷들을 식별하는 중복 제거 엔진을 포함하되, 각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 상기 가상 버킷은 상기 제 1 해시 버킷에 인접한 상기 복수의 해시 버킷 중 다른 것들이고, 상기 가상 버킷들은 상기 제 1 해시 버킷이 가득 찬 경우 상기 제 1 해시 버킷의 데이터의 일부를 저장하고, V는 제 1 해시 버킷의 가상 버킷들이 얼마나 가득 찼는지에 기초하여 동적으로 설정되는 정수인 중복 제거 모듈이 제공된다.
본 발명의 실시 예들은 동일한 데이터로 구성되는 복수의 데이터 블록을 하나의 저장된 데이터 블록에 연관시켜, 데이터 블록들의 중복 복사본들은 컴퓨터 메모리(computer memory)에 의해 감소되거나 제거될 수 있고, 그렇게 함으로써 메모리 장치 내 불필요한 데이터 복사본들의 전체 양이 감소하게 된다. 불필요한 데이터 복사본들(redundant copies of data)의 감소는 읽기 대기시간을 줄일 수 있고, 메모리 대역폭(bandwidth)을 증가시킬 수 있고, 잠재적으로 전력 절감을 야기할 수 있다.
본 발명의 이들 및 다른 특징들 및 측면들은 명세서, 청구 범위, 및 첨부 도면들을 참조하여 인식되고 이해될 것이다.
도 1은 본 발명의 실시 예에 따른 중복 제거 모듈의 블록도이다.
도 2는 본 발명의 다른 실시 예에 따른 중복 제거 모듈의 블록도이다.
도 3은 본 발명의 실시 예에 따른 중복 제거 엔진의 논리적 관점의 블록도이다.
도 4는 본 발명의 실시 예에 따른 레벨-1 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다.
도 5는 본 발명의 실시 예에 따른 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다.
도 6은 본 발명의 실시 예에 따른, 동적 L2 맵 테이블, 서명 및 참조 카운터 테이블들, 및 오버플로 메모리 영역을 갖는 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다.
도 7은 본 발명의 실시 예에 따른 해시 원통(hash cylinder)의 논리적 관점의 블록도이다.
도 8은 본 발명의 실시 예에 따른 결합된 데이터 구조의 논리적 관점의 블록도이다.
도 9는 본 발명의 실시 예에 따른 가상 버킷들과 연관된 해시 버킷 및 해당 참조 카운터 버킷의 논리적 관점의 블록도이다.
도 10은 본 발명의 실시 예에 따른 RAM에 저장된 데이터를 회수하는 방법을 도시하는 순서도이다.
도 11은 본 발명의 실시 예에 따른 RAM에 데이터를 저장하는 방법을 도시하는 순서도이다.
본 명세서의 실시 예들은 물리적 메모리 크기보다 큰 메모리(예를 들면, RAM(random-access memory)) 내의 메모리 용량을 가능하게 하는 방법들 및 연관된 구조들에 관한 것이다. 본 발명의 실시 예들에 따라, 중복 제거 알고리즘들(deduplication algorithms)은 데이터 메모리 감소 및 문맥 주소 지정(context addressing)을 달성하기 위해 사용된다. 본 발명의 실시 예들에 따라, 유저 데이터(user data)는 유저 데이터의 해시 값(hash value)에 의해 색인된 해시 테이블(hash table)에 저장된다.
DRAM(dynamic random access memory) 기술이 메모리 용량에 대한 이러한 증가하는 요구를 충족시키기 위해 20nm 공정 기술을 넘어 공격적으로 확장하는 동안, 중복 제거와 같은 기법들(techniques)은 시스템 메모리의 물리적 메모리 용량보다 2-3배 또는 그 이상만큼 시스템 메모리의 가상 메모리 용량을 증가시키기 위해 적용될 수 있다. 또한, 본 발명의 실시 예들은 다른 유형의 메모리(예를 들면, 플래시 메모리(flash memory))를 사용할 수 있다.
보조 압축(auxiliary compaction) 방법들을 사용하여, 본 발명의 실시 예들은 모든 메모리 자원을 충분히 이용하여 높은 중복 제거 비율을 지속적으로 달성하기 위해 고급의 중복 제거된 메모리 및 데이터 구조들을 제공할 수 있다.
고용량(high capacity) 및 저 대기시간(low latency)을 갖는 메모리는 데이터 센터 애플리케이션(data center applications)을 위해 크게 요구된다. 이러한 메모리 장치는 그들의 물리적 메모리 크기(size)보다 큰 메모리 용량을 제공하기 위해 데이터 압축 방식(scheme)뿐만 아니라 중복 제거 방식도 채용할 수 있다. 중복 제거된 메모리 장치들은 중복된 유저 데이터를 줄이고 사용 가능한 메모리 자원을 완전히 이용하여 높은 중복 제거 비율을 지속적으로 달성할 수 있다. 또한, 중복 제거된 메모리 장치들에 의해 이용되는 중복 제거 방식은 중복 제거된 데이터에 대한 효과적인 주소 지정을 달성할 수 있다.
데이터 중복 제거(data deduplication, or data duplication elimination)는 메모리 장치 내 불필요한 데이터(redundant data)의 감소를 나타내고 그렇게 함으로써 메모리 장치의 용량 비용이 감소한다. 데이터 중복 제거에서, 데이터 객체/아이템(object/item, 예를 들면, 데이터 파일)은 하나 이상의 데이터 라인들/청크들/블록들(lines/chunks/blocks)로 분할된다. 동일한 데이터로 구성되는 복수의 데이터 블록을 하나의 저장된 데이터 블록에 연관시켜, 데이터 블록들의 중복 복사본들은 컴퓨터 메모리(computer memory)에 의해 감소되거나 제거될 수 있고, 그렇게 함으로써 메모리 장치 내 불필요한 데이터 복사본들의 전체 양이 감소한다. 불필요한 데이터 복사본들(redundant copies of data)의 감소는 읽기 대기시간을 줄일 수 있고, 메모리 대역폭(bandwidth)을 증가시킬 수 있고, 잠재적으로 전력 절감을 야기할 수 있다.
따라서, 중복된 데이터 복사본들이 하나의 데이터 복사본으로 감소될 수 있으면, 동일한 물리적 자원량을 사용하면서도 메모리 장치의 전체 사용 가능한 용량이 증가한다. 그 결과로 생긴 메모리 장치의 경제적 사용은 데이터 다시 쓰기 횟수(data re-write count)를 감소시키게 하고, 그리고 메모리에 이미 저장된 중복된 데이터 블록들에 대한 쓰기 요청들을 버릴 수 있으므로, 데이터 중복 제거를 실행하는 메모리 장치의 수명은 효과적으로 쓰기 내구성이 증가되는 것에 의해 연장될 수 있다.
데이터 중복 제거의 관련 분야의 방법들은 메모리 내(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)를 구현할 수 있다.
중복 제거는 하드 드라이브들(hard drives)을 위해 가장 보편적으로 사용된다. 그러나, DRAM과 같은 휘발성 메모리의 영역에서 미세한(fine grain) 중복 제거를 가능하게 하는데 관심이 있다.
첨부 도면들과 관련하여 이하에서 설명되는 상세한 설명은 본 발명의 실시 예에 따라 제공되는 RAM(또는 다른 메모리 저장 장치)의 물리적 메모리 크기보다 큰 RAM(또는 다른 메모리 저장 장치) 내의 메모리 용량을 가능하게 하기 위한 방법들 및 연관된 구조들의 예시적인 실시 예들의 설명으로서 의도된 것이고 본 발명이 구성되거나 이용될 수 있는 유일한 형태를 표현하기 위해 의도된 것은 아니다. 설명은 도시된 실시 예들과 관련하여 본 발명의 특징들을 설명한다. 그러나, 동일하거나 동등한 기능들 및 구조들은 본 발명의 사상 및 범위 내에서 포함되는 것으로 의도된 다른 실시 예들에 의해 달성될 수 있음은 이해된다. 본 명세서의 다른 곳에서 언급된 바와 같이, 동일한 참조 번호들은 동일한 구성 요소들 또는 특징들을 나타내기 위한 것으로 의도된다.
도 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)을 포함한다.
브릿지(130)는 중복 제거 엔진(200) 및 읽기 캐시(170)가 메모리 컨트롤러(140)와 통신하게 할 수 있는 인터페이스를 제공한다. 메모리 컨트롤러(140)는 통신하기 위해 브릿지(130) 및 메모리 모듈들(180)에 대한 인터페이스를 제공할 수 있다. 읽기 캐시(170)는 메모리 모듈들(180)의 일부일 수 있다.
몇몇 실시 예들에 있어서, 브릿지(180)는 존재하지 않을 수 있다. 이 경우, 메모리 컨트롤러(140)는 중복 제거 엔진(200) 및 읽기 캐시(170)와 직접적으로 통신할 수 있다.
중복 제거 엔진(200)은 메모리 모듈들(180)에 데이터를 저장하거나 메모리 모듈들(180)의 데이터에 접근하기 위해 호스트 인터페이스(160)를 통해 호스트 시스템과 통신할 수 있다. 중복 제거 엔진(200)은 호스트 인터페이스(160)를 통해 호스트 시스템의 다른 구성 요소들과 더 통신할 수 있다.
메모리 모듈들(180)은 DRAM 연결을 위한 DIMM(dual in-line memory module) 슬롯들(slots)이거나 플래시 메모리(flash memory), 다른 유형의 메모리 연결을 위한 슬롯들 등일 수 있다.
도 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) 등)을 포함할 수 있다.
중복 제거 엔진들(202) 각각은 전송 관리부(230) 또는 호스트 인터페이스(162)를 통해 호스트 시스템 중 어느 하나와 직접적으로 통신할 수 있다. 전송 관리부(230)는 호스트 인터페이스(162)를 통해 호스트 시스템과 통신할 수 있다.
전송 관리부(230)는 호스트 인터페이스(162)를 통해 호스트 시스템으로부터 데이터 전송 요청들을 수신할 수 있다. 전송 관리부(230)는 중복 제거 모듈(150)의 하나 이상의 파티션들(250)로의 데이터 전송 및 중복 제거 모듈(150)의 하나 이상의 파티션들(250)로부터의 데이터 전송을 더 관리할 수 있다. 몇몇 실시 예들에 있어서, 전송 관리부(230)는 저장될 데이터(예를 들면, RAM에 저장)를 저장하는 파티션(250)을 결정할 수 있다. 다른 실시 예들에 있어서, 전송 관리부(230)는 데이터가 저장되어야 할 파티션(250)에 관해서 호스트 시스템으로부터 지시들을 수신한다. 몇몇 실시 예들에 있어서, 전송 관리부(230)는 호스트 시스템으로부터 수신된 데이터를 분리할 수 있고 그것을 둘 이상의 파티션들로 보낼 수 있다.
중복 제거 모듈(150)은 호스트 인터페이스(162)를 통해 호스트 시스템의 구성 요소들과 통신할 수 있다.
중복 제거 엔진(202)은 전송 관리부(230)로부터 그것의 각각의 파티션(250)에 대한 파티션 데이터 요청들을 수신할 수 있다. 중복 제거 엔진(202)은 메모리 모듈들 내 데이터의 접근 및 저장을 더 제어할 수 있다. 메모리 관리부(210)는 하나 이상의 메모리 모듈들 중에서 데이터가 저장되거나 데이터가 저장되어야 하는 메모리 모듈을 결정할 수 있다. 하나 이상의 메모리 컨트롤러들은 그들 각각의 메모리 모듈들 상의 데이터의 저장 또는 접근을 제어할 수 있다.
몇몇 실시 예들에 있어서, 중복 제거 엔진(202) 및 메모리 관리부(210)는 메모리 관리부(210) 및 중복 제거 엔진(202) 모두의 기능들을 수행할 수 있는 하나의 메모리 관리부로서 구현될 수 있다.
하나 이상의 메모리 컨트롤러들, 메모리 관리부(210), 및 중복 제거 엔진(202) 각각은 임의의 적합한 하드웨어(예를 들면, ASIC(application-specific integrated circuit)), 펌웨어(firmware, 예를 들면, DSP 또는 FPGA), 소프트웨어, 또는 소프트웨어, 펌웨어, 및 하드웨어의 적합한 조합을 이용하여 구현될 수 있다. 또한, 중복 제거 엔진(202)은 이하에서 보다 상세하게 설명될 것이다.
몇몇 실시 예들에 따라, 메모리가 고용량을 가지면, 파티션들은 변환 테이블 크기(translation table size)를 줄이기 위해 사용될 수 있다.
도 3은 본 발명의 실시 예에 따른 중복 제거 엔진의 논리적 관점의 블록도이다. 도 3을 참조하면, 중복 제거 엔진(200)은 복수의 테이블을 포함할 수 있다. 중복 제거 엔진(200)은 해시 테이블(hash table, 220), 변환 테이블(translation table, 240), 서명 및 참조 카운터 테이블들(signature and reference counter tables, 260), 및 오버플로 메모리 영역(overflow memory region, 280)을 포함할 수 있다.
해시 테이블(220)은 복수의 물리적 라인(physical lines; PLs)을 포함할 수 있다. 각 물리적 라인은 데이터(예를 들면, 유저 데이터)를 포함할 수 있다. 해시 테이블(220) 내 데이터는 중복 제거된다(즉, 중복된 데이터는 저장 장치의 공간 사용량을 줄이기 위해 하나의 위치로 통합된다).
변환 테이블(240)은 그 안에 저장된 복수의 물리적 라인 ID를 포함한다. 해시 테이블의 각 물리적 라인은 변환 테이블(240)에 저장된 연관된 물리적 라인 ID(PLID)을 가진다. 변환 테이블(240)에 저장된 PLID는 논리적 주소에서 물리적 주소로의 변환이다. 예를 들어, 중복 제거 엔진(200)이 특정 논리적 주소와 연관된 데이터 위치를 찾아낼 필요가 있는 경우, 중복 제거 엔진(200)은 변환 테이블(240)을 이용하여 논리적 주소에 저장된 데이터를 문의할 수 있고 데이터가 저장된 해시 테이블(220)의 물리적 라인에 대응하는 데이터의 PLID를 수신할 수 있다. 그 다음에 중복 제거 엔진(200)은 해시 테이블(220) 내의 해당 물리적 라인에 저장된 데이터에 접근할 수 있다.
PLID는 제 1 해시 함수를 이용하여 생성될 수 있다. 예를 들어, 데이터가 해시 테이블 내에 저장될 필요가 있는 경우, 제 1 해시 함수는 데이터가 저장되어야 할 물리적 라인에 대응하는 제 1 해시 값을 결정하기 위해 데이터에 대해 실행된다. 제 1 해시 값은 데이터의 PLID로서 저장된다.
각 PLID는 표적(targeting) 데이터 라인의 물리적 위치를 나타낸다. 데이터 라인들은 해시 테이블(220) 또는 오버플로 메모리 영역(280) 중 어느 하나에 있을 수 있으므로, PLID들은 해시 테이블(220) 또는 오버플로 메모리 영역(280) 내 위치들일 수 있다.
해시 테이블(220)은 행(row)-열(column) 구조의 테이블로서 간주될 수 있다. 이 경우, PLID는 영역 비트(region bit), 행 비트, 및 열 비트로 구성된다(예를 들면, 도 4 및 그에 대한 설명 참조). 제 1 해시 함수는 데이터를 저장하기 위해 사용할 수 있는 물리적 라인을 찾기 위한 시작 지점인 행 비트를 생성할 수 있다. 다른 비트들은 사용할 수 있는 물리적 라인이 발견되면 결정될 수 있다.
상술한 단계에서 해시 테이블(220) 내 사용 가능한 물리적 라인을 발견하지 못하면, 데이터는 오버플로 메모리 영역(280)에 쓰여질 수 있다. 이 경우, PLID는 오버플로 메모리 영역 엔트리(entry)의 물리적 위치일 것이다.
제 2 해시 함수를 이용하여 계산되는 데이터의 제 2 해시 값(예를 들면, 서명)은 서명 테이블에 저장된다. 제 2 해시 함수는 제 1 해시 함수보다 작을 수 있다. 제 1 및 제 2 해시 함수들은 임의의 적합한 해시 함수일 수 있고 상이한 해시 함수들일 수 있다.
서명은 2개 데이터 라인들간의 빠른 비교를 위해 사용될 수 있다. 새로운 데이터 라인이 해시 테이블(220)에 쓰여지는 경우, 해시 테이블에 동일한 데이터 라인이 이미 있는지 알기 위한 검사가 이루어질 수 있다. 이 검사를 수행하는 것은 동일한 데이터를 여러 번 저장하는 것을 방지할 수 있다.
검사가 서명들을 이용하지 않고 이루어지면, 메모리의 특정 영역 내 모든 데이터(전체 버킷(bucket) 또는 전체 가상 버킷)가 중복을 감지하기 위해 읽혀진다. 검사가 서명들을 통해 이루어지면, 특정 영역에 대한 데이터의 서명들만이 메모리로부터 읽혀져서 대역폭을 절약할 수 있다.
일치하는 서명이 없으면, 새로운 데이터 라인과 일치하는 데이터 라인은 없다. 그렇지 않고, 일치하는 서명이 발견되는 경우, 서명 비교가 잘못된 긍정일 수 있기 때문에, 일치하는 서명들을 갖는 데이터 라인들이 추가 비교를 수행하기 위해 메모리로부터 읽혀진다.
해시 테이블의 각 데이터 라인은 서명 테이블 내에 해당 서명을 갖고 그리고 각 데이터 라인은 참조 카운터 테이블 내에 해당 참조 카운터를 갖는다.
참조 카운터 테이블은 해시 테이블(220)의 물리적 라인들 각각에 대한 중복 제거 수(예를 들면, 데이터가 복제된 횟수)를 추적한다. 중복 제거된 데이터의 인스턴스(instance)가 해시 테이블에 추가되면, 이전에 저장된 유저 데이터와 동일한 새로운 유저 데이터를 추가하기 보다는, 참조 카운터 테이블의 해당 참조 카운터는 증가될 수 있고, 그리고 해시 테이블로부터 중복 제거된 데이터의 인스턴스가 삭제되면, 참조 카운터 테이블의 해당 참조 카운터는 1만큼 감소할 수 있다.
또한, (해시 테이블로도 알려진) 중복 제거된 메모리는 고정된 비트 폭을 갖는 유저 데이터 C인 물리적 라인들(physical lines; PLs)로 구성된다. 기본(default) 물리적 라인의 길이는 64 바이트일 수 있으나, 본 발명은 이에 제한되지 않는다. PL 길이는 다른 크기로 구성될 수 있고, 예를 들면, PL 크기는 64 바이트보다 크거나 작을 수 있다. 예를 들어, PL 크기는 32 바이트일 수 있다.
큰 PL 크기는 변환 테이블의 크기를 감소시킬 수 있지만 또한 중복되는 데이터의 양을 감소시킬 수 있다(즉, 더 큰 비트 패턴과 일치할 필요가 있기 대문에 중복 제거들의 수가 감소한다). 작은 PL 크기는 변환 테이블의 크기를 증가시킬 수 있지만 또한 중복되는 데이터의 양을 증가시킬 수 있다(즉, 중복 제거들의 횟수가 증가한다).
변환 테이블은 물리적 라인 ID(PLID)로 불리는 논리적 주소들에서 물리적 주소들로의 변환들을 저장한다. PLID는 해시 함수 h1(C)에 의해 생성된다. 또한, 각 물리적 라인에 대해, 서명 테이블에 저장된 물리적 라인에 연관된 서명이 있다. 서명은 유저 데이터의 훨씬 작은 해시 결과이고, 해시 함수 h2(C)에 의해 생성된다. 참조 카운터는 또한 물리적 라인과 연관되고, 참조 카운터 테이블에 저장된다. 참조 카운터는 (중복 제거 비율로도 알려진) 유저 데이터가 PL 콘텐츠와 일치하는 횟수를 카운트한다.
해시 테이블, 서명 테이블, 및 참조 카운터 테이블들은 모두 동일한 데이터 구조를 가질 수 있지만 다른 세분성(granularity)을 가질 수 있다.
복수의 테이블은 중복 제거 모듈의 일부로서 도시되었지만, 본 발명은 이에 제한되지 않는다. 본 발명의 몇몇 실시 예들에 따라, 복수의 테이블은 중복 제거 모듈 내에 있는 메모리(예를 들면, RAM)에 저장될 수 있고 다른 실시 예들에 따라 복수의 테이블은 중복 제거 모듈 외부에 있는 메모리(예를 들면, RAM)에 저장되고 본 명세서에서 설명된 방식으로 중복 제거 모듈에 의해 제어된다.
본 발명의 상술한 특징들의 추가적인 설명은 미국 특허 출원(No. 15/473,311)에서 찾을 수 있고 그 전체 내용은 본 명세서에서 참고 문헌으로 인용된다.
도 4는 본 발명의 실시 예에 따른 레벨-1 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다. 변환 테이블은 그것의 크기 및 그것을 사용하는데 걸리는 시간으로 인해 중복 제거 비율, 시스템 용량, 및/또는 시스템 대기시간에 영향을 줄 수 있는 주요 메타 데이터(metadata) 테이블이다. 도 4를 참조하면, 논리적 주소(310)는 시스템 메모리(예를 들면, 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)이다.
변환 테이블 색인(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이다.
또한, 오버플로 메모리 영역(280)은 해시 테이블에 배치되지 않는 데이터를 저장한다.
도 5는 본 발명의 실시 예에 따른 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다. 변환 테이블은 중복 제거 비율, 시스템 용량, 및 시스템 대기시간에 영향을 줄 수 있는 주요 메타 데이터 테이블이다. 도 5의 중복 제거 엔진에서, 변환 테이블은 레벨-2, 페이지 색인 테이블(242) 및 레벨2 (L2) 맵 테이블(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)이다.
페이지 색인(316)은 페이지 색인 테이블(242) 내 페이지에 대응한다. 페이지 색인 테이블(242) 내의 페이지는 L2 맵 테이블(244) 내의 엔트리 0 위치에 대응한다. 페이지 엔트리(318)는 엔트리 0 이후 어느 엔트리가 논리적 주소(310')에 대응하는 저장된 데이터의 물리적 주소(320')를 저장하는지를 나타낸다.
다시 말해, 페이지 색인(316)은 L2 맵 엔트리들의 집합 및 그 세트의 엔트리로 지정된 페이지 엔트리(318)과 연관된다. 페이지 색인(316)은 집합 내의 첫 번째 엔트리로 이어지고, 그리고 페이지 엔트리(318)는 엔트리들의 그 집합의 어느 특정 엔트리가 물리적 주소(320')를 포함하는지를 보여준다. 페이지 색인 테이블(242) 내 각 페이지는 영역 비트(RGN)를 포함할 수 있다. 영역 비트(RGN, 322')는 1개 비트일 수 있고 데이터가 해시 테이블(220')에 저장되었는지 또는 오버플로 메모리 영역(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이다.
또한, 오버플로 메모리 영역(280)은 해시 테이블에 배치되지 않은 데이터를 저장한다.
도 6은 본 발명의 실시 예에 따른, 동적 L2 맵 테이블 및 오버플로 메모리 영역을 갖는 레벨-2 변환 테이블을 포함하는 중복 제거 엔진의 논리적 관점의 블록도이다. 도 6을 참조하면, 레벨-2 변환 테이블은 오버플로 메모리 영역에 대한 추가 공간을 만들 수 있다.
몇몇 실시 예들에 있어서, 서명 및 참조 카운터 테이블들(260') 그리고 페이지 색인 테이블(242')의 크기들은 고정되나 L2 맵 테이블(244') 및 오버플로 메모리 영역(280'')의 크기들은 동적이다.
L2 맵 테이블(244') 및 오버플로 메모리 영역 (280'')의 크기들이 증가함에 따라, 이들은 서로를 향하여 커진다. 이러한 방식으로, 저장 공간은 L2 맵 테이블(244') 또는 오버플로 메모리 영역(280'') 중 어느 하나가 사용되지 않은 공간을 향해 커지게 할 수 있게 하여 효율적으로 사용될 수 있다.
도 7은 본 발명의 실시 예에 따른 해시 원통(hash cylinder)의 논리적 관점의 블록도이다. 도 8은 본 발명의 실시 예에 따른 결합된 데이터 구조의 논리적 관점의 블록도이다. 도 7 및 도 8을 참조하면, 서명 테이블, 참조 카운터 테이블, 및 해시 테이블은 결합된 데이터 구조(600, 예를 들면, 결합된 구조(600) 또는 결합된 테이블(600))의 해시 원통들(500, 예를 들면 해시 원통(500-i)) 내의 버킷들(buckets, 예를 들면, 해시 버킷(i)) 내에 분배되고 정렬된다. 각 해시 원통(500)은 해시 테이블의 해시 버킷(560, 예를 들면, 해시 버킷(560-i)), 서명 테이블의 서명 버킷(520, 예를 들면, 서명 버킷(520-i)), 및 참조 카운터 테이블의 참조 카운터 버킷(540, 예를 들면, 참조 카운터 버킷(i))을 포함한다.
해시 버킷(560)은 물리적 라인들의 복수의 엔트리(예를 들면, 엔트리(0)부터 엔트리(N-1))를 포함한다.
서명 버킷(520)은 동일 해시 원통(500)의 해시 버킷(560) 내의 물리적 라인들에 저장된 데이터에 대응하는 복수의 서명을 포함한다.
참조 카운터 버킷(540)은 동일 해시 원통(500)의 해시 버킷(560) 내의 물리적 라인들에 저장된 데이터가 중복 제거된 횟수에 대응하는 복수의 참조 카운터를 포함한다.
다시 말해, 해시 테이블은 복수의 해시 버킷(560)으로 나누어지고, 각 해시 버킷(560)은 복수의 엔트리를 포함한다. 서명 테이블은 복수의 서명 버킷(520)으로 나누어지고, 각 서명 버킷(520)은 복수의 서명을 포함한다. 참조 카운터 테이블은 복수의 참조 카운터 버킷(540)으로 나누어지고, 각 참조 카운터 버킷(540)은 복수의 참조 카운터를 포함한다.
결합된 데이터 구조(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) 등.
이 배열에서, 제 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)을 포함한다.
이 방식에서, 각 해시 원통(500)은 데이터 및 동일 해시 버킷(500) 내에 저장된 데이터와 연관된 서명들 및 참조 카운터들을 포함한다.
결합된 데이터 구조(600)의 해시 원통(500-i) 내에 저장된 데이터에 대한 요청이 이루어지면, 전체 해시 원통(500-i)은 읽기 캐시(170')로 복사된다. 전체 해시 원통(500-i)이 읽기 캐시(170')로 복사되므로, 요청된 데이터, 해당 서명(또는 각 서명), 및 해당 참조 카운터(또는 각 참조 카운터) 전부를 회수하는데 필요한 시간은 감소할 수 있다.
몇몇 실시 예들에 따라, 읽기 데이터 캐시는 해시 원통과 동일한 크기일 수 있다.
또한, 중복 제거 엔진이 (중복을 방지하기 위해) 데이터가 이미 해시 테이블 내에 존재하는 것으로 결정하면, 전체 해시 원통(500)은 읽기 캐시(170')로 복사될 수 있다. 중복 제거 엔진은 중복 제거가 가능할지를 결정하고 데이터를 저장할 때 서명들, 참조 카운터들, 및 데이터에 접근하므로, 읽기 캐시가 전체 해시 원통을 복사하게 하는 것은 접근 시간을 감소시킬 수 있고 전체 계산 속도를 증가시킬 수 있다.
다시 말해, 대기시간 및 성능을 향상시키기 위해, 해시 엔트리들, 서명, 및 참조 카운터 엔트리들의 통합 단위인 해시 원통(500)이 생성될 수 있다. 통합된 해시 원통(500)은 시스템 메모리 접근 주기를 줄여서 시스템 대기시간을 향상시킬 수 있다. 간결한(compacted) 데이터 구조는 메모리 접근 횟수를 줄일 수 있다. 각 해시 원통(500)은 중복 제거 엔진이 계산을 수행하는데 필요한 모든 정보를 포함한다. 결합된 데이터 구조(600)는 또한 캐싱(caching)을 쉽게 할 수 있다.
도 9는 본 발명의 실시 예에 따른 가상 버킷들과 연관된 해시 버킷 및 해당 참조 카운터 버킷의 논리적 관점의 블록도이다. 도 9를 참조하면, 각 해시 버킷(560')은 하나 이상의 가상 버킷들(VBs, 예를 들면, VB(0)부터 VB(V-1))과 연관될 수 있다. 각 해시 버킷(560')은 N개 웨이들(ways, 예를 들면, WAY(0)부터 WAY(N-1))을 포함할 수 있다.
관련 분야의 해시 테이블들과 달리, 본 실시 예의 해시 테이블들은 각각 복수의 가상 해시 버킷 또는 가상 버킷들을 포함하고, 가상 버킷들은 복수의 물리적 해시 버킷 또는 물리적 버킷들로 이루어진다. 이하, “물리적 버킷” 용어는 이전에 설명된 해시 버킷들을 나타낼 것이고, 이전에 설명된 해시 버킷들과 가상 버킷들을 구별하기 위해 사용될 것이다.
각 가상 버킷은 해시 테이블의 물리적 버킷들의 일부를 포함할 수 있다. 그러나, 가상 버킷들의 다른 것들은 하나 이상의 물리적 버킷들을 공유할 수 있음을 유의해야 한다. 이하에서 설명될 바와 같이, 본 발명의 실시 예들에 따라 가상 버킷들을 이용하여, 추가 치수(dimension)가 해시 테이블에 더해진다. 따라서, 데이터를 배열하고 배치하는데 보다 큰 유연성이 제공될 수 있고, 그렇게 함으로써 중복 제거 DRAM 시스템의 효율이 증가하고 압축 비율이 증가한다.
본 실시 예는 다른 가상 버킷들에 의해 공유되는 다른 물리적 버킷들을 확보하기 위해, 해시 버킷들 중 하나에 저장된 데이터의 블록이 대응하는 가상 버킷 내에서 또는 다른 물리적 버킷으로 이동될 수 있게 하여, 다른 레벨의 데이터 배치의 유연성을 증가시키기 위해 가상 버킷들을 이용한다. 해시 테이블 내에서 공간을 확보함으로써, 중복 제거는 쓸모 없는/중복된 데이터를 제거함으로써 달성될 수 있다. 즉, 본 발명의 실시 예들에 따른 가상 버킷들을 이용하는 것에 의해, 해시 함수를 이용하여 데이터의 라인을 제한된 해당 위치로 해싱(hashing)하는 것에 의해 기인하는 엄격한 제한은 없고, 데이터는 인근의/”근접한” 물리적 버킷에 배치될 수 있고, 이 물리적 버킷은 초기에 의도된 (그러나 점유된) 물리적 해시 버킷을 포함하는 동일한 가상 버킷 내에 있는 물리적 버킷을 나타낸다.
예시로서, 콘텐츠(예를 들면, 데이터 라인)는 물리적 버킷들 중 하나에 배치된다. 만약 데이터 라인이 첫 번째 물리적 버킷에 배치되면, 데이터 라인이 물리적 버킷 내에 배치되는 것을 요구하는 대신에, 본 실시 예는 단일 물리적 버킷보다 크고, 물리적 버킷 뿐만 아니라 다른 물리적 버킷들도 포함하는 가상 버킷도 가능하다. 즉, 가상 버킷은 해시 테이블 내에서 정렬된 근접한, 또는 인접한 물리적 버킷들의 총합을 포함한다.
따라서, 가상 버킷들은 장래의 쓰기 동작들을 위한 공간을 확보하기 위해 해시 테이블 내에서 데이터 블록들이 움직이게 할 수 있다.
가상 버킷들에 대한 추가 설명에 대해서는, 2016년 5월 23에 출원된 미국 특허 출원(No. 15/162,512) 및 2016년 5월 23에 출원된 미국 특허 출원(No. 15/162,517)을 확인하면 되고, 그 전체 내용은 본 명세서에서 참고 문헌으로 인용된다.
또한, 가상 버킷들은 동적 높이 또는 크기를 가질 수 있다. 동적 가상 버킷 높이(virtual bucket height; VBH)를 갖는 것은 제한된 대기시간 영향에서의 메모리 사용을 향상시킬 수 있다.
물리적 버킷과 연관된 가상 버킷들의 수는 가상 버킷(virtual bucket; VB)의 높이 색인에 의해 나타난다. 가상 버킷 높이 정보는 해시 버킷(560')과 연관된 참조 카운터 버킷(540')의 마지막 참조 카운터에 저장된다. 참조 카운터의 비트의 일부분은 VB 높이 색인으로서 사용된다(예를 들면, VBH[1:0]).
해시 버킷(i)을 예시로 사용하여, VB 높이가 V이면, 해시 버킷(i)의 가상 버킷들은 해시 버킷(i+1)부터 해시 버킷(i+V)을 나타낼 수 있다. 해시 버킷(i)이 가득 차면, 중복 제거 엔진은 가상 버킷들에 유저 데이터를 넣을 것이다.
플래그(flag, 1개 RC 비트의 일부분, 예를 들면, 해시 버킷(M)의 마지막 RC 카운터)는 얼마나 많은 가상 버킷들이 현재 해시 버킷(i)에 의해 사용되고 있는지를 나타낸다. 이 방식에서, 필요한 것보다 더 많은 가상 버킷들을 검색할 필요가 없으므로 대기시간은 감소할 수 있다. 관련 분야의 가상 버킷은 고정된 VB 높이를 사용한다. 고정된 가상 버킷 높이를 사용하면, 검색 로직은 해시 버킷(i)에 의해 실제로 사용되는 가상 버킷들의 수와 상관없이 모든 가상 버킷들을 검색하고, 이는 증가된 대기시간을 야기할 수 있다.
가상 버킷들은 추가 메모리 공간을 요구하지 않는다. 이들은 해시 버킷들 근처에서 사용되지 않은 엔트리들을 사용한다. 예를 들어, 해시 버킷(i+1)에 대해, 그것의 가상 버킷들은 해시 버킷(i+2)부터 해시 버킷(i+V'+1)을 나타낸다.
또한, 해시 버킷(i)의 가상 버킷들(예를 들면, 해시 버킷(i+1)부터 해시 버킷(i+V))이 가득 차면, 본 발명의 실시 예에 따른, 중복 제거 엔진은 해시 버킷 근처에서 이용할 수 있는 공간을 사용하기 위해 가상 버킷의 높이(V)를 증가시킨다. 관련 분야의 가상 버킷의 높이들은 (동적이기 보다는) 미리 결정되었기 때문에, 증가될 수 없다. 이와 같이, 해시 버킷(i)의 가상 버킷들(예를 들어, 해시 버킷들(i+1)부터 해시 버킷들(i+V)까지의 해시 버킷들)이 가득 차면, 관련 분야의 중복 제거 엔진은 높이(V)를 증가시킬 수 없다.
또한, 가상 버킷들의 높이를 동적으로 조정하는 것에 의해, 중복 제거 엔진이 (중복을 방지하기 위해) 데이터가 이미 해시 테이블 내에 있는지를 확인하는 경우, 중복 제거 엔진은 미리 결정된 수의 가상 버킷들 대신에 사용 중인 가상 버킷들만을 확인하면 된다. 이것은 접근 시간을 감소시킬 수 있고 전체 연산 속도를 증가시킬 수 있다.
도 10은 본 발명의 실시 예에 따른 RAM에 저장된 데이터를 회수하는 방법을 도시하는 순서도이다. 도 10은 RAM을 이용하여 도시되었으나, 본 발명은 이에 제한되지 않고 임의의 다른 적합한 메모리 유형이 본 방법들과 함께 사용될 수 있다.
도 10을 참조하면, 컴퓨터 시스템의 CPU는 RAM에 저장된 데이터를 요청할 수 있다. CPU는 RAM 내 데이터의 위치에 대한 주소를 제공할 수 있다. 본 발명은 이에 제한되지 않고, 예를 들어, 다른 구성 요소들이 RAM으로부터 데이터를 요청할 수 있고 논리적 주소를 제공할 수 있다.
본 발명의 실시 예에 따라 RAM 내에 저장된 데이터를 회수하는 방법은 RAM에 저장된 데이터의 논리적 주소를 식별하는 단계를 포함한다(1000 단계). 논리적 주소는 변환 테이블의 위치에 대응할 수 있다.
방법은 변환 테이블의 논리적 주소를 검색하여 논리적 주소에 따른 데이터의 PLID(물리적 라인 ID)를 식별하는 단계를 더 포함한다(1010 단계).
방법은 PLID에 기초하여, 데이터가 RAM의 해시 테이블에 저장되는지 또는 RAM의 오버플로 메모리 영역에 저장되는지를 확인하는 단계를 더 포함한다(1020 단계).
데이터가 해시 테이블에 저장되면, 방법은 PLID에 대응하는 해시 테이블의 물리적 라인의 위치를 찾는 단계(1030 단계) 및 해시 테이블의 물리적 라인으로부터 데이터를 회수하는 단계(1040 단계)를 더 포함한다. 데이터를 회수하는 단계는 서명 테이블 및 참조 카운터 테이블로부터 해당 데이터를 회수하는 단계를 포함한다.
데이터가 오버플로 메모리에 저장되면, 방법은 PLID에 대응하는 오버플로 메모리 영역의 물리적 라인의 위치를 찾는 단계(1050 단계) 및 오버플로 메모리 영역의 물리적 라인으로부터 데이터를 회수하는 단계(1060 단계)를 더 포함한다.
PLID는 데이터에 적용된 제 1 해시 함수를 이용하여 생성될 수 있다. PLID는 RAM의 해시 테이블의 또는 RAM의 오버플로 메모리 영역의 위치를 나타내는 주소를 포함할 수 있다.
PLID는 포함할 수 있다: 데이터가 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(identifier, 예를 들면, 도 4의 RGN 참조); 데이터가 저장된 행을 나타내는 제 2 식별자(예를 들면, 도 4의 R_INDX 참조); 및 데이터가 저장된 열을 나타내는 제 3 식별자(예를 들면, 도 4의 COL_INDX 참조).
방법은 서명 테이블로부터 데이터와 연관된 서명을 회수하는 단계를 더 포함할 수 있다.
RAM은 복수의 데이터를 저장하는 해시 테이블; 제 1 해시 함수를 이용하여 생성되는 복수의 PLID를 저장하는 변환 테이블; 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 서명 테이블; 복수의 참조 카운터를 포함하는 참조 카운터 테이블, 각 참조 카운터는 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적한다; 및 오버플로 메모리 영역을 포함할 수 있다.
해시 테이블, 서명 테이블, 및 참조 카운터 테이블은 결합된 데이터 구조로 통합될 수 있다. 결합된 데이터 구조는 복수의 해시 원통을 포함할 수 있고 각 해시 원통은 포함할 수 있다: 복수의 물리적 라인을 포함하는 해시 버킷; 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷.
물리적 라인 또는 오버플로 메모리 영역으로부터 데이터를 회수하는 단계는 물리적 라인, 해당 서명, 및 해당 참조 카운터를 포함하는 전체 해시 원통을 읽기 캐시로 복사하는 단계를 포함할 수 있다.
도 11은 본 발명의 실시 예에 따른 RAM에 데이터를 저장하는 방법을 도시하는 순서도이다. 도 11은 RAM을 이용하여 도시되었으나, 본 발명은 이에 제한되지 않고 임의의 다른 적합한 메모리 유형이 본 방법들과 함께 사용될 수 있다.
도 11을 참조하면, 컴퓨터 시스템의 CPU는 RAM에 데이터가 저장되도록 요청할 수 있다. CPU는 RAM 내에 저장될 데이터를 제공할 수 있다. 본 발명은 이에 제한되지 않고, 예를 들어, 다른 구성 요소들이 RAM에 데이터가 저장되도록 요청할 수 있고 데이터를 제공할 수 있다.
본 발명의 실시 예들에 따른 RAM 내에 데이터를 저장하는 방법은 RAM에 저장될 데이터를 식별하는 단계를 포함한다(1100 단계).
방법은 제 1 해시 함수를 이용하여 데이터가 RAM의 해시 테이블에 저장되어야 하는 위치에 대응하는 제 1 해시 값을 결정하는 단계를 더 포함한다(1110 단계).
방법은 제 1 해시 값에 대응하는 해시 테이블의 위치에 데이터를 저장하는 단계를 더 포함한다(1120 단계).
방법은 제 2 해시 함수를 이용하여 데이터가 저장되어야 하는 위치에 또한 대응하는 제 2 해시 값도 결정하는 단계를 더 포함한다(1130 단계). 제 2 해시 함수는 제 1 해시 함수보다 작을 수 있다.
방법은 제 1 해시 값을 변환 테이블에 저장하는 단계를 더 포함한다(1140 단계).
방법은 제 2 해시 값을 서명 테이블에 저장하는 단계를 더 포함한다(1150 단계).
방법은 참조 카운터 테이블 내에서, 데이터에 대응하는, 참조 카운터를 증가시키는 단계를 더 포함할 수 있다.
RAM은 포함할 수 있다: 복수의 데이터를 저장하는 해시 테이블; 제 1 해시 함수를 이용하여 생성되는 복수의 PLID를 저장하는 변환 테이블; 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 서명 테이블; 복수의 참조 카운터를 저장하는 참조 카운터 테이블, 각 참조 카운터는 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적한다; 및 오버플로 메모리 영역.
PLID들 각각은 포함할 수 있다: 데이터가 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(예를 들면, 도 4의 RGN 참조); 데이터가 저장된 행을 나타내는 제 2 식별자(예를 들면, 도 4의 R_INDX 참조); 및 데이터가 저장된 열을 나타내는 제 3 식별자(예를 들면, 도 4의 COL_INDX 참조).
해시 테이블, 서명 테이블, 및 참조 카운터 테이블은 결합된 데이터 구조로 통합될 수 있다. 결합된 데이터 구조는 복수의 해시 원통을 포함할 수 있다. 각 해시 원통은 포함할 수 있다: 복수의 물리적 라인을 포함하는 해시 버킷; 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷.
제 1 해시 값에 대응하는 해시 테이블의 위치에 데이터를 저장하는 단계는 제 1 해시 값에 대응하는 해시 버킷에 데이터를 저장하는 단계를 포함할 수 있다. 서명 테이블에 제 2 해시 값을 저장하는 단계는 데이터가 저장되는 해시 버킷에 대응하는 서명 버킷에 제 2 해시 값을 저장하는 단계를 포함할 수 있다.
그러므로, 본 명세서의 실시 예들은 물리적 메모리 크기보다 큰 메모리(예를 들면, RAM(random-access memory)) 내의 메모리 용량을 가능하게 하는 방법들 및 연관 구조들에 관한 것이다. 본 발명의 실시 예들에 따라, 중복 제거는 데이터 메모리 감소 및 문맥 주소 지정을 달성하기 위해 사용된다. 본 발명의 실시 예들에 따라, 유저 데이터는 유저 데이터의 해시 값에 의해 색인된 해시 테이블에 저장된다.
비록 여기에서 제 1, 제 2, 제3 등의 용어들은 다양한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들을 설명하기 위해 사용되지만, 이러한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들은 이러한 용어들로 인해 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 성분, 영역, 층, 또는 섹션으로부터 하나의 요소, 구성, 영역, 층 또는 섹션을 구별하기 위해 사용된다. 따라서, 후술하는 제 1 구성 요소, 성분, 영역, 층, 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않고, 제 2 구성 요소, 성분, 영역, 층, 또는 섹션을 지칭 할 수 있다.
본 명세서에 기술된 본 발명의 실시 예들에 따라, 관련 장치 또는 구성 요소(또는 관련 장치들 또는 구성 요소들, 예를 들어, 중복 제거 엔진)는 임의의 적합한 하드웨어(예를 들어, ASIC), 펌웨어(예를 들어, DSP 또는 FPGA), 소프트웨어, 또는 소프트웨어, 펌웨어, 및 하드웨어의 적절한 조합을 이용하여 구현될 수 있다. 예를 들어, 관련 디바이스(들)의 다양한 구성 요소들은 하나의 집적 회로(integrated circuit; IC) 칩 또는 분리된 IC 칩들 상에 형성될 수 있다. 또한, 관련 장치(들)의 다양한 구성 요소들은 FPCF(flexible printed circuit film), TCP(tape carrier package), PCB(printed circuit board) 상에 구현되거나, 또는 하나 이상의 회로들 및/또는 다른 장치들과 동일한 기판 상에 형성 될 수 있다. 또한, 관련 장치(들)의 다양한 구성 요소들은 하나 이상의 프로세서들 상에서 실행되고, 하나 이상의 컴퓨팅 장치들에서, 컴퓨터 프로그램 지시들을 실행하고 여기에서 설명된 다양한 기능들을 수행하기 위해 다른 시스템 구성 요소들과 상호 작용하는 프로세스 또는 스레드(thread)일 수 있다. 컴퓨터 프로그램 지시들은 예를 들어, RAM과 같은 표준 메모리 장치를 사용하여 컴퓨팅 장치에 구현될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 지시들은 또한 예를 들어, CD-ROM, 플래시 드라이브 등과 같은 일시적이지 않은 다른 컴퓨터 판독 가능 매체에 저장 될 수 있다. 또한, 당업자는 다양한 컴퓨팅 장치들의 기능은 하나의 컴퓨팅 장치로 결합되거나 통합될 수 있거나, 본 발명의 예시적인 실시 예들의 사상 및 범위로부터 벗어나지 않고 특정 컴퓨팅 장치의 기능은 하나 이상의 다른 컴퓨팅 장치들에 걸쳐 분배될 수 있음을 인식해야 한다.
또한, 하나의 요소, 구성 요소, 영역, 층, 및/또는 섹션이 2개의 요소들, 구성 요소들, 영역들, 층들, 및/또는 섹션들 “사이”에 있는 것으로 언급될 때, 그것은 단지 2개의 요소들, 구성 요소들, 영역들, 층들, 및/또는 섹션들 사이의 요소, 구성 요소, 영역, 층, 및/또는 섹션이거나, 또는 하나 이상의 중간 요소들, 구성 요소들, 영역들, 층들, 및/또는 섹션들이 존재할 수도 있다.
본 명세서에서 사용되는 용어는 특정 실시 예들을 설명하기 위한 것이고 본 발명을 제한하려는 것이 아니다. 본 명세서에서 사용된 단수 형태들은 문맥 상 다르게 나타내지 않는 한 복수 형태를 포함하는 것으로 의도된다. "포함한다", "포함하는" 용어들은 본 명세서에서 사용되는 경우, 명시된 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 구성 요소들을 명시하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들 및/또는 구성 요소들의 존재 또는 추가를 배제하지 않는 것으로 더 이해될 것이다.
본 명세서에서 사용된 바와 같이, "및/또는" 용어는 하나 이상의 관련된 열거된 항목들의 임의의 조합 및 모든 조합을 포함한다. "적어도 하나", "하나" 및 "에서 선택"과 같은 표현들은, 요소 목록을 선행할 때, 요소들 전체 목록을 수정하고 목록의 개별 요소들을 수정하지 않는다. 또한, 본 발명의 실시 예들을 기술 할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예들"을 나타낸다. 또한, "예시적인" 용어는 예시 또는 설명을 나타내기 위해 의도된다.
본 명세서에서 사용된 바와 같이, "사용", "사용하는", 및 "사용된"은 각각 "이용", "이용하는", 및 "이용된" 용어들과 동의어로 간주 될 수 있다.
본 발명의 하나 이상의 실시 예들과 관련하여 설명된 특징들은 본 발명의 다른 실시 예들의 특징들과 함께 사용할 수 있다. 예를 들어, 제 1 실시 예에서 설명된 특징들은 제 3 실시 예가 본 명세서에서 구체적으로 설명되지 않을지라도, 제 3 실시 예를 형성하기 위해 제 2 실시 예에서 설명된 특징들과 결합될 수 있다.
당업자는 또한 프로세스는 하드웨어, 펌웨어(예를 들어, ASIC을 통해), 또는 소프트웨어, 펌웨어, 및/또는 하드웨어의 임의의 조합을 통해 실행될 수 있다는 것을 인식해야 한다. 또한, 프로세스의 단계들의 순서는 고정되어 있지 않지만, 당업자에 의해 인식되는 임의의 원하는 순서로 변경될 수 있다. 변경된 순서는 모든 단계들 또는 단계들의 일부를 포함할 수 있다.
비록 본 발명이 특정한 특정 실시 예들과 관련하여 설명되었지만, 당업자는 설명된 실시 예들의 변형을 고안하는데 어려움이 없을 것이며, 이는 본 발명의 범위 및 사상으로부터 벗어나지 않는다. 또한, 다양한 기술 분야의 당업자에게, 본 명세서에 기재된 본 발명 자체는 다른 애플리케이션에 대한 다른 과제들 및 적응들에 대한 해결책들을 제안할 것이다. 본 발명의 사상 및 범위에서 벗어나지 않고 개시 목적으로 선택된 본 발명의 실시 예들을 이룰 수 있는 본 발명의 모든 그러한 사용들 및 그것들의 변화들 및 수정들을 청구 범위로 포함하는 것이 출원인의 의도이다. 따라서, 본 발명의 본 실시 예들은 모든 측면에서 예시적인 것으로서 제한적이지는 않은 것으로 간주되어야 하며, 본 발명의 범위는 첨부된 청구 범위 및 그 균등물에 의해 표시되어야 한다.
100: 중복 제거 모듈
130: 브릿지
140: 메모리 컨트롤러
160: 호스트 인터페이스
170: 읽기 캐시
180: DIMM/플래시
200: 중복 제거 엔진

Claims (22)

  1. 중복 제거 모듈(dedupe module)과 연관된 메모리에 저장된 데이터를 회수하는(retrieving) 방법에 있어서:
    상기 데이터의 논리적 주소(logical address)를 식별하는 단계;
    변환 테이블(translation table)의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하되, 상기 PLID는 상기 데이터가 해시 테이블(hash table)에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier)를 포함하는 단계;
    상기 데이터가 상기 해시 테이블 또는 상기 오버플로 메모리 영역에 저장되어 있다는 것을 상기 제 1 식별자를 사용하여 판단하는 단계;
    상기 PLID에 대응하는 물리적 라인의 위치를 찾는 단계; 및
    상기 물리적 라인으로부터 상기 데이터를 회수하는 단계를 포함하되,
    상기 회수하는 단계는 해시 원통(hash cylinder)을 읽기 캐시로 복사하는 단계를 포함하고,
    상기 해시 원통은:
    각각의 물리적 라인을 포함하는 해시 버킷 (bucket); 및
    상기 물리적 라인과 연관된 각각의 참조 카운터를 포함하는 참조 카운터 버킷을 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
    상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 더 포함하는 방법.
  3. 제 2 항에 있어서,
    상기 PLID는:
    상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및
    상기 데이터가 저장된 열을 나타내는 제 3 식별자를 더 포함하는 방법.
  4. 제 1 항에 있어서,
    상기 참조 카운터 버킷은 참조 카운터 테이블(reference counter table)의 일부이고,
    상기 해시 테이블 및 상기 참조 카운터 테이블은 결합된 데이터 구조의 일부이고,
    상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함하고, 그리고
    상기 해시 원통은 상기 복수의 서명 버킷의 각각의 서명 버킷을 더 포함하되, 상기 각각의 서명 버킷은 상기 물리적 라인과 연관된 서명을 포함하는 방법.
  5. 제 4 항에 있어서,
    상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
    상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하되,
    상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성되는 방법.
  6. 제 1 항에 있어서,
    상기 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적하는 방법.
  7. 중복 제거 엔진(dedupe engine)과 연관된 메모리에 데이터를 저장하는 방법에 있어서:
    저장될 상기 데이터를 식별하는 단계;
    상기 데이터가 제 1 해시 함수(hash function)를 이용하여 상기 메모리의 해시 테이블(hash table)에 저장되어야 하는 물리적 라인에 대응하는 제 1 해시 값(hash value)을 결정하는 단계;
    상기 물리적 라인이 사용 가능할 때는 상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 그리고 상기 물리적 라인이 사용 가능하지 않을 때는 오버플로 메모리 영역(overflow memory region)에 대응하는 위치에 상기 데이터를 저장하는 단계;
    상기 위치에 따라 상기 데이터의 PLID(physical line ID)를 설정하되, 상기 PLID는 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 상기 오버플로 메모리 영역에 저장되었는지 여부를 나타내는 제 1 식별자(identifier)를 포함하는 단계;
    상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 상기 데이터가 저장되어야 할 위치에 또한 대응하는 제 2 해시 값을 결정하는 단계;
    상기 메모리의 변환 테이블(translation table)에 상기 제 1 해시 값을 저장하는 단계; 및
    상기 메모리의 서명 테이블에 상기 제 2 해시 값을 저장하는 단계를 포함하는 방법.
  8. 제 7 항에 있어서,
    상기 데이터에 대응하는, 참조 카운터 테이블(reference counter table)의 참조 카운터를 증가시키는 단계를 더 포함하는 방법.
  9. 제 7 항에 있어서,
    상기 메모리는:
    복수의 데이터를 저장하는 상기 해시 테이블;
    상기 제 1 해시 함수를 이용하여 생성되는 복수의 PLID를 저장하는 상기 변환 테이블;
    상기 제 2 해시 함수를 이용하여 생성되는 복수의 서명을 저장하는 상기 서명 테이블;
    복수의 참조 카운터를 저장하는 참조 카운터 테이블; 및
    상기 오버플로 메모리 영역(overflow memory region)을 포함하되,
    각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적하는 방법.
  10. 제 9 항에 있어서,
    상기 복수의 PLID 각각은:
    상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및
    상기 데이터가 저장된 열을 나타내는 제 3 식별자를 더 포함하는 방법.
  11. 제 9 항에 있어서,
    상기 해시 테이블, 상기 서명 테이블, 및 상기 참조 카운터 테이블은 결합된 데이터 구조로 통합되고, 그리고
    상기 결합된 데이터 구조는 복수의 해시 원통(cylinder)을 포함하되, 각 해시 원통은:
    복수의 물리적 라인을 포함하는 해시 버킷;
    상기 복수의 물리적 라인에 대응하는 각각의 서명들을 포함하는 서명 버킷; 및
    상기 복수의 물리적 라인에 대응하는 각각의 참조 카운터들을 포함하는 참조 카운터 버킷을 포함하는 방법.
  12. 제 11 항에 있어서,
    상기 제 1 해시 값에 대응하는 상기 해시 테이블의 위치에 상기 데이터를 저장하는 단계는 상기 제 1 해시 값에 대응하는 상기 해시 버킷에 상기 데이터를 저장하는 단계를 포함하고, 그리고
    상기 메모리의 서명 테이블에 상기 제 2 해시 값을 저장하는 단계는 상기 데이터가 저장된 상기 해시 버킷에 대응하는 상기 서명 버킷에 상기 제 2 해시 값을 저장하는 단계를 포함하는 방법.
  13. 중복 제거 모듈에 있어서:
    읽기 캐시(read cache);
    호스트 시스템으로부터 데이터 회수 요청을 수신하는 중복 제거 엔진(dedupe engine); 및
    메모리를 포함하되,
    상기 메모리는:
    변환 테이블(translation table); 및
    결합된 데이터 구조를 포함하되,
    상기 결합된 데이터 구조는:
    복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블(hash table);
    복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및
    복수의 해시 원통(cylinder)을 포함하되,
    각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 각 해시 원통은 상기 해시 버킷들 중 하나 및 상기 참조 카운터 버킷들 중 하나를 포함하되,
    상기 데이터 회수 요청은 상기 중복 제거 엔진으로 하여금:
    상기 데이터의 논리적 주소를 식별하고;
    상기 변환 테이블의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하되, 상기 PLID는 상기 데이터가 상기 해시 테이블에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier)를 포함하고;
    상기 데이터가 상기 해시 테이블 또는 상기 오버플로 메모리 영역에 저장되어 있다는 것을 상기 제 1 식별자를 사용하여 판단하고;
    상기 PLID에 대응하는, 상기 복수의 물리적 라인의 각각의 물리적 라인의 위치를 찾고; 그리고
    상기 해시 테이블 또는 상기 오버플로 메모리 영역의 상기 각각의 물리적 라인으로부터 상기 데이터를 회수하도록 야기하고, 상기 데이터를 회수하는 것은 상기 복수의 해시 원통의 각각의 해시 원통을 상기 읽기 캐시로 복사하는 것을 포함하고,
    상기 각각의 해시 원통은:
    상기 각각의 물리적 라인을 포함하는, 상기 복수의 해시 버킷의 각각의 해시 버킷; 및
    상기 각각의 물리적 라인과 연관된 각각의 참조 카운터를 포함하는, 상기 복수의 참조 카운터 버킷의 각각의 참조 카운터 버킷을 포함하는 중복 제거 모듈.
  14. 제 13 항에 있어서,
    상기 데이터 회수 요청은 상기 중복 제거 엔진이 상기 PLID에 기초하여, 상기 데이터가 상기 해시 테이블에 저장되어 있다는 것을 판단하도록 더 야기하는 중복 제거 모듈.
  15. 제 13 항에 있어서,
    상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
    상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하는 중복 제거 모듈.
  16. 제 15 항에 있어서,
    상기 PLID는:
    상기 데이터가 저장된 행을 나타내는 제 2 식별자; 및
    상기 데이터가 저장된 열을 나타내는 제 3 식별자를 더 포함하는 중복 제거 모듈.
  17. 제 13 항에 있어서,
    상기 결합된 데이터 구조는 복수의 서명 버킷을 포함하는 서명 테이블을 더 포함하되, 각 서명 버킷은 복수의 서명을 포함하고, 그리고
    상기 각각의 해시 원통은 상기 복수의 서명 버킷의 각각의 서명 버킷을 더 포함하되, 상기 각각의 서명 버킷은 상기 각각의 물리적 라인과 연관된 각각의 서명을 포함하는 중복 제거 모듈.
  18. 제 17 항에 있어서,
    상기 PLID는 상기 데이터에 적용된 제 1 해시 함수를 이용하여 생성되고, 그리고
    상기 PLID는 상기 해시 테이블의 위치를 나타내는 주소를 포함하되,
    상기 복수의 서명은 상기 제 1 해시 함수보다 작은 제 2 해시 함수를 이용하여 생성되는 중복 제거 모듈.
  19. 제 13 항에 있어서,
    각 참조 카운터는 상기 해시 테이블에 저장된 해당 데이터에 대한 중복 제거 횟수를 추적하는 중복 제거 모듈.
  20. 호스트 인터페이스;
    상기 호스트 인터페이스를 통해 호스트 시스템으로부터 데이터 전송 요청들을 수신하는 전송 관리부; 및
    복수의 파티션(partition)을 포함하되,
    각 파티션은:
    상기 전송 관리부로부터 파티션 데이터 요청들 및 상기 호스트 시스템으로부터 데이터 회수 요청을 수신하는 중복 제거 엔진(dedupe engine);
    복수의 메모리 컨트롤러;
    상기 중복 제거 엔진 및 상기 복수의 메모리 컨트롤러 사이의 메모리 관리부; 및
    복수의 메모리 모듈을 포함하되,
    각 메모리 모듈은 상기 복수의 메모리 컨트롤러 중 하나와 연결되고, 그리고
    상기 데이터 회수 요청은 상기 중복 제거 엔진으로 하여금:
    상기 메모리 모듈의 상기 데이터의 논리적 주소를 식별하고;
    변환 테이블(translation table)의 상기 논리적 주소의 적어도 일부를 검색하여 상기 논리적 주소에 따른 상기 데이터의 PLID(physical line ID)를 식별하되, 상기 PLID는 상기 데이터가 해시 테이블(hash table)에 저장되었는지 또는 오버플로 메모리 영역(overflow memory region)에 저장되었는지 여부를 나타내는 제 1 식별자(identifier)를 포함하고;
    물리적 라인의 위치를 찾고; 그리고
    상기 PLID에 대응하는 상기 해시 테이블 또는 상기 오버플로 메모리 영역의 물리적 라인으로부터 상기 데이터를 회수하도록 야기하는 중복 제거 모듈.
  21. 읽기 캐시(read cache) 및 메모리를 포함하되,
    상기 메모리는:
    변환 테이블(translation table); 및
    복수의 해시 버킷(hash bucket)을 포함하는 해시 테이블;
    복수의 참조 카운터 버킷(reference counter bucket)을 포함하는 참조 카운터 테이블; 및
    상기 복수의 해시 버킷의 제 1 해시 버킷에 대한 V개 가상 버킷들을 식별하는 중복 제거 엔진을 포함하되,
    각 해시 버킷은 복수의 물리적 라인을 포함하고, 각 물리적 라인은 데이터를 저장하고, 각 참조 카운터 버킷은 복수의 참조 카운터를 포함하고, 상기 가상 버킷은 상기 제 1 해시 버킷에 인접한 상기 복수의 해시 버킷 중 다른 것들이고, 상기 가상 버킷들은 상기 제 1 해시 버킷이 가득 찬 경우 상기 제 1 해시 버킷의 데이터의 일부를 저장하고, V는 제 1 해시 버킷의 가상 버킷들이 얼마나 가득 찼는지에 기초하여 동적으로 설정되는 정수인 중복 제거 모듈.
  22. 삭제
KR1020170062408A 2016-05-20 2017-05-19 물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치 KR102190403B1 (ko)

Applications Claiming Priority (14)

Application Number Priority Date Filing Date Title
US15/161,136 2016-05-20
US15/161,136 US9983821B2 (en) 2016-03-29 2016-05-20 Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
US15/162,517 2016-05-23
US15/162,517 US10496543B2 (en) 2016-03-31 2016-05-23 Virtual bucket multiple hash tables for efficient memory in-line deduplication application
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 KR20170131274A (ko) 2017-11-29
KR102190403B1 true KR102190403B1 (ko) 2020-12-11

Family

ID=60404742

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170062408A KR102190403B1 (ko) 2016-05-20 2017-05-19 물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치

Country Status (4)

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

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9983821B2 (en) * 2016-03-29 2018-05-29 Samsung Electronics Co., Ltd. Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
US10705969B2 (en) * 2018-01-19 2020-07-07 Samsung Electronics Co., Ltd. Dedupe DRAM cache
KR102540964B1 (ko) * 2018-02-12 2023-06-07 삼성전자주식회사 입출력 장치의 활용도 및 성능을 조절하는 메모리 컨트롤러, 애플리케이션 프로세서 및 메모리 컨트롤러의 동작
US11023374B2 (en) 2018-07-09 2021-06-01 Silicon Motion, Inc. Apparatus and method and computer program product for controlling data access
CN110765156A (zh) 2018-07-09 2020-02-07 慧荣科技股份有限公司 链表搜索装置及方法
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
CN109299215B (zh) * 2018-09-28 2024-06-18 平安科技(深圳)有限公司 倒排索引查询的资源分配方法、装置及存储介质、服务器
CN112181242B (zh) * 2019-07-02 2021-11-02 北京百度网讯科技有限公司 页面展示方法及装置
CN114253472B (zh) * 2021-11-29 2023-09-22 郑州云海信息技术有限公司 一种元数据管理方法、设备及存储介质
KR102467372B1 (ko) * 2022-01-06 2022-11-14 삼성전자주식회사 스토리지 장치 및 이의 동작 방법

Citations (4)

* 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

Family Cites Families (9)

* 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 (ja) * 2001-07-12 2003-01-31 Nec Commun Syst Ltd オブジェクトデータベースシステムの複数ハッシュインデックスおよび非ユニークインデックス管理方式
JP5026213B2 (ja) * 2007-09-28 2012-09-12 株式会社日立製作所 ストレージ装置及びデータ重複排除方法
CN101655861B (zh) * 2009-09-08 2011-06-01 中国科学院计算技术研究所 基于双计数布鲁姆过滤器的哈希方法和哈希装置
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
US9983821B2 (en) * 2016-03-29 2018-05-29 Samsung Electronics Co., Ltd. Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
US10496543B2 (en) * 2016-03-31 2019-12-03 Samsung Electronics Co., Ltd. Virtual bucket multiple hash tables for efficient memory in-line deduplication application

Patent Citations (4)

* 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

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

Also Published As

Publication number Publication date
TW201741883A (zh) 2017-12-01
CN107402889A (zh) 2017-11-28
JP2017208096A (ja) 2017-11-24
KR20170131274A (ko) 2017-11-29
CN107402889B (zh) 2023-07-11
TWI804466B (zh) 2023-06-11
JP6920107B2 (ja) 2021-08-18

Similar Documents

Publication Publication Date Title
KR102190403B1 (ko) 물리적 메모리 크기보다 큰 메모리 용량을 가능하게 하기 위한 방법 및 장치
JP6764362B2 (ja) メモリの重複除去方法及び重複除去dramメモリモジュール
US10678704B2 (en) Method and apparatus for enabling larger memory capacity than physical memory size
US11010300B2 (en) Optimized record lookups
JP6764359B2 (ja) 重複除去dramメモリモジュール及びそのメモリ重複除去方法
US9471500B2 (en) Bucketized multi-index low-memory data structures
WO2019127104A1 (zh) 高速缓存中资源调整方法、数据访问方法及装置
JP2018133086A (ja) ハイブリッドメモリーモジュール及びその動作方法
US10496543B2 (en) Virtual bucket multiple hash tables for efficient memory in-line deduplication application
US10528284B2 (en) Method and apparatus for enabling larger memory capacity than physical memory size
US10366011B1 (en) Content-based deduplicated storage having multilevel data cache
Guo et al. HP-mapper: A high performance storage driver for docker containers
US10802957B2 (en) Control modules, multi-level data storage devices, multi-level data storage methods, and computer readable media
US10795596B1 (en) Delayed deduplication using precalculated hashes
US12010214B2 (en) Hash based key value to block translation methods and systems
US20240202116A1 (en) Method and Apparatus for Increasing Memory Level Parallelism by Reducing Miss Status Holding Register Allocation in Caches
US20160103766A1 (en) Lookup of a data structure containing a mapping between a virtual address space and a physical address space
Boggavarapu Deduplication-aware Page Cache in Linux Kernel for Improved Read Performance
TW202340934A (zh) 用於具有計算儲存裝置的跨層鍵值儲存體的系統和方法

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