KR20220077208A - 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법 - Google Patents

데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법 Download PDF

Info

Publication number
KR20220077208A
KR20220077208A KR1020200164583A KR20200164583A KR20220077208A KR 20220077208 A KR20220077208 A KR 20220077208A KR 1020200164583 A KR1020200164583 A KR 1020200164583A KR 20200164583 A KR20200164583 A KR 20200164583A KR 20220077208 A KR20220077208 A KR 20220077208A
Authority
KR
South Korea
Prior art keywords
data
hash value
hash
storage
storage node
Prior art date
Application number
KR1020200164583A
Other languages
English (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
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020200164583A priority Critical patent/KR20220077208A/ko
Priority to DE102021131101.2A priority patent/DE102021131101A1/de
Priority to US17/456,821 priority patent/US11947419B2/en
Priority to CN202111439968.0A priority patent/CN114579045A/zh
Publication of KR20220077208A publication Critical patent/KR20220077208A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • 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
    • 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/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
    • 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

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)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명의 실시 예에 따른 스토리지 장치는 데이터 중복 제거를 지원할 수 있다. 스토리지 장치의 동작 방법은 외부 장치로부터 제1 객체 식별자 및 제1 데이터를 포함하는 제1 쓰기 요청을 수신하는 단계, 제1 데이터에 대한 해시 연산을 수행하여 제1 해시 값을 생성하는 단계, 제1 해시 값에 대응하는 제1 엔트리가 제1 테이블에 존재하는 경우, 제1 데이터에 대한 저장 동작 없이, 제1 엔트리에 포함된 제1 참조 카운트를 증가시키는 단계를 포함하고, 제1 테이블은 복수의 엔트리들을 포함하고, 복수의 엔트리들 각각은 데이터에 대한 해시 값, 데이터에 대응하는 물리 어드레스, 및 데이터에 대한 참조 카운트에 대한 정보를 포함한다.

Description

데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법{STORAGE DEVICE WITH DATA DEDUPLICATION, OPERATION METHOD OF STORAGE DEVICE, AND OPERATION METHOD OF STORAGE SERVER}
본 발명은 서버 시스템에 관한 것으로, 좀 더 상세하게는 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법에 관한 것이다.
서버 시스템은 다양한 컴퓨팅 서버들이 네트워크를 통해 연결됨으로써, 다양한 서비스를 제공하는 시스템을 가리킨다. 서버 시스템은 방대한 데이터를 저장하고 관리하는 스토리지 서버를 포함한다. 최근 스토리지 서버에서는, 다양한 사용자들 또는 객체들이 특정 데이터를 참조하는 빈도가 증가하고 있으며, 이러한 데이터 참조 빈도의 증가는 데이터의 중복 저장 횟수를 증가시킨다. 이러한 데이터 중복 저장 횟수의 증가는 스토리지 서버에 포함된 스토리지 장치들의 저장 공간을 감소시키는 문제를 발생시킨다.
본 발명의 목적은 향상된 성능 및 감소된 비용을 갖는 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법을 제공하는데 있다.
본 발명의 실시 예에 따르면, 스토리지 장치의 동작 방법은 외부 장치로부터 제1 객체 식별자 및 제1 데이터를 포함하는 제1 쓰기 요청을 수신하는 단계; 제1 데이터에 대한 해시 연산을 수행하여 제1 해시 값을 생성하는 단계; 상기 제1 해시 값에 대응하는 제1 엔트리가 제1 테이블에 존재하는 경우, 상기 제1 엔트리가 비어 있다면, 제1 물리 어드레스에 대응하는 영역에 상기 제1 데이터를 저장하고, 상기 제1 엔트리가 상기 제1 해시 값, 상기 제1 물리 어드레스, 및 상기 제1 참조 카운트를 포함하도록 상기 제1 테이블을 갱신하고, 상기 제1 엔트리가 비어있지 않다면, 상기 제1 데이터에 대한 저장 동작 없이, 상기 제1 엔트리에 포함된 제1 참조 카운트를 증가시키는 단계; 및 상기 제1 엔트리가 상기 제1 테이블에서 존재하지 않는 경우, 상기 외부 장치로 에러를 리턴하는 단계를 포함하고, 상기 제1 테이블은 복수의 엔트리들을 포함하고, 상기 복수의 엔트리들 각각은 데이터에 대한 해시 값, 상기 데이터에 대응하는 물리 어드레스, 및 상기 데이터에 대한 참조 카운트에 대한 정보를 포함한다.
본 발명의 실시 예에 따르면, 복수의 스토리지 장치들 및 상기 복수의 스토리지 장치들을 관리하도록 구성된 스토리지 노드를 포함하는 스토리지 서버의 동작 방법은 상기 스토리지 노드에 의해, 외부 클라이언트 서버로부터 제1 객체 식별자 및 제1 데이터를 포함하는 제1 쓰기 요청을 수신하는 단계; 상기 스토리지 노드에 의해, 상기 제1 데이터에 대한 해시 연산을 수행하여, 제1 해시 값을 생성하는 단계; 상기 스토리지 노드에 의해, 상기 복수의 스토리지 장치들 각각에 할당된 복수의 해시 범위들 중 상기 제1 해시 값이 포함된 제1 해시 범위를 판별하는 단계; 상기 스토리지 노드에 의해, 상기 복수의 스토리지 장치들 중 상기 제1 해시 범위에 대응하는 제1 스토리지 장치로 상기 제1 객체 식별자, 상기 제1 데이터, 및 상기 제1 해시 값을 포함하는 제2 쓰기 요청을 전송하는 단계; 상기 제1 스토리지 장치에 의해, 상기 제2 쓰기 요청에 포함된 상기 제1 데이터에 대한 해시 연산을 수행하여, 제2 해시 값을 생성하는 단계; 상기 제1 해시 값 및 상기 제2 해시 값이 동일한 경우, 상기 제1 스토리지 장치에 의해, 상기 제1 해시 값에 대응하는 제1 엔트리가 제1 테이블에 존재하는 것에 응답하여, 상기 제1 데이터에 대한 저장 동작 없이, 상기 제1 엔트리의 제1 참조 카운트를 증가시키는 단계; 상기 제1 스토리지 장치에 의해, 상기 스토리지 노드로 상기 제2 쓰기 요청에 대한 완료 응답을 전송하는 단계; 상기 스토리지 노드에 의해, 상기 제1 객체 식별자 및 상기 제1 해시 값을 기반으로 제2 테이블을 갱신하는 단계를 포함하고, 상기 제1 테이블은 복수의 엔트리들을 포함하고, 상기 복수의 엔트리들 각각은 데이터에 대한 해시 값, 상기 데이터에 대응하는 물리 어드레스, 및 상기 데이터에 대한 참조 카운트에 대한 정보를 포함하고, 상기 제2 테이블은 복수의 객체 식별자들 및 대응하는 해시 값에 대한 정보를 포함한다.
본 발명의 실시 예에 따르면, 스토리지 장치는 불휘발성 메모리; 및 상기 불휘발성 메모리를 제어하도록 구성된 스토리지 컨트롤러를 포함하고, 상기 스토리지 컨트롤러는: 제1 테이블을 저장하도록 구성된 메모리; 외부 장치로부터 수신된 제1 데이터에 대한 해시 연산을 수행하여 제1 해시 값을 생성하도록 구성된 해시 모듈; 및 상기 제1 테이블에서 상기 제1 해시 값에 대응하는 제1 엔트리를 검색하고, 상기 검색 결과를 기반으로 상기 제1 데이터를 상기 불휘발성 메모리에 선택적으로 저장하도록 구성된 중복 제거 관리자를 포함하고, 상기 제1 엔트리가 상기 제1 테이블에 포함된 경우, 상기 중복 제거 관리자는 상기 제1 데이터를 상기 불휘발성 메모리에 저장하는 것 없이, 상기 제1 엔트리의 제1 참조 카운트를 증가시키고, 상기 제1 엔트리가 상기 제1 테이블에 포함되지 않은 경우, 상기 중복 제거 관리자는 상기 제1 데이터를 상기 불휘발성 메모리의 제1 물리 어드레스에 대응하는 영역에 저장하고, 상기 제1 해시 값, 상기 제1 물리 어드레스, 및 상기 제1 참조 카운트를 포함하는 상기 제1 엔트리를 상기 제1 테이블에 추가하도록 구성된다.
본 발명에 따르면, 향상된 성능 및 감소된 비용을 갖는 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법이 제공된다.
도 1은 본 발명의 실시 예에 따른 서버 시스템을 예시적으로 보여주는 블록도이다.
도 2는 도 1의 스토리지 노드를 예시적으로 보여주는 블록도이다.
도 3은 도 1의 복수의 스토리지 장치들 중 하나의 스토리지 장치를 예시적으로 보여주는 블록도이다.
도 4는 도 1의 스토리지 서버의 동작을 예시적으로 보여주는 순서도이다.
도 5는 도 1의 스토리지 장치에서 관리되는 해시-대-물리 테이블을 설명하기 위한 도면이다.
도 6은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 7 및 도 8은 도 6의 순서도에 따른 동작을 설명하기 위한 예시적인 도면들이다.
도 9는 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 10은 도 9의 순서도에 따른 읽기 동작을 설명하기 위한 도면이다.
도 11은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 12는 도 11의 순서도에 따른 삭제 동작을 설명하기 위한 도면이다.
도 13은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 블록도이다.
도 14는 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 15는 도 14의 순서도에 따른 동작을 설명하기 위한 도면이다.
도 16은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 17은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 블록도이다.
도 18 및 도 19는 도 16 및 도 17을 참조하여 설명된 데이터 분할의 예시를 보여주는 도면들이다.
도 20은 본 발명의 실시 예에 따른 서버 시스템을 예시적으로 보여주는 도면이다.
도 21은 도 20의 서버 시스템의 각 스토리지 노드에서 관리되는 해시 범위를 설명하기 위한 도면이다.
도 22는 도 20의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 23은 도 20의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 24는 본 발명의 실시 예에 따른 스토리지 장치가 적용된 데이터 센터를 예시적으로 보여주는 블록도이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
이하에서, 설명의 편의를 위해, 특정 실시 예들이 구분되어 설명되나, 본 발명의 범위가 이에 한정되는 것은 아니며, 다양한 실시 예들이 서로 결합되거나 또는 하나의 실시 예의 일부분이 다른 실시 예의 일 부분과 결합될 수 있음이 이해될 것이다.
도 1은 본 발명의 실시 예에 따른 서버 시스템을 예시적으로 보여주는 블록도이다. 도 1을 참조하면, 서버 시스템(100)은 클라이언트 서버(101) 및 스토리지 서버(102)를 포함할 수 있다. 서버 시스템(100)은 다양한 데이터를 유지 관리하고, 다양한 데이터에 대한 다양한 서비스를 제공하는 데이터 센서 또는 데이터 스토리지 센터일 수 있다. 서버 시스템(100)은 검색 엔진 또는 데이터 베이스 운용을 위한 시스템일 수 있으며, 다양한 기관에서 사용되는 컴퓨팅 시스템일 수 있다. 서버 시스템(100)은 클라우드 서비스 또는 On-premise 서비스를 제공하는 스토리지 시스템일 수 있다.
클라이언트 서버(101)는 다양한 데이터에 대한 다양한 서비스를 사용하는 사용자 또는 사용자의 단말기 또는 사용자의 컴퓨팅 시스템을 가리킬 수 있다. 클라이언트 서버(101)는 스토리지 서버(102)에 데이터를 저장하거나 또는 스토리지 서버(102)에 저장된 데이터를 읽을 수 있다.
스토리지 서버(102)는 클라이언트 서버(101)의 요청에 따라, 데이터를 저장하거나 또는 저장된 데이터를 클라이언트 서버(101)로 전송할 수 있다. 예시적인 실시 예에서, 클라이언트 서버(101) 및 스토리지 서버(102)는 네트워크(미도시)를 통해 통신할 수 있다.
스토리지 서버(102)는 스토리지 노드(110) 및 복수의 스토리지 장치들(120, 130)을 포함할 수 있다. 스토리지 노드(110)는 스토리지 서버(102)에 포함된 스토리지 장치들(120, 130)를 관리하도록 구성될 수 있다. 복수의 스토리지 장치들(120, 130) 각각은 스토리지 노드(110)의 제어에 따라 데이터를 저장하거나 또는 저장된 데이터를 출력할 수 있다. 복수의 스토리지 장치들(120, 130) 각각은 SSD(solid state drive)와 같은 대용량 저장 매체일 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다. 스토리지 노드(110) 및 복수의 스토리지 장치들(120, 130) 각각은 객체-기반 인터페이스를 통해 서로 통신할 수 있다. 예를 들어, 객체-기반 인터페이스는 종래의 블록-기반 인터페이스와 달리, 객체에 대한 정보를 기반으로 데이터를 관리하는 인터페이스 타입을 가리킬 수 있다. 예시적인 실시 예에서, 스토리지 노드(110)는 스토리지 서버(102)에 포함된 서버 컨트롤러를 가리킬 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다.
스토리지 서버(102)는 데이터에 대한 중복 제거(deduplication) 기능을 제공할 수 있다. 예를 들어, 클라이언트 서버(101) 상에서, 복수의 객체들(Objects)이 구동될 수 있다. 예시적인 실시 예에서, 객체는 스토리지 서버(102)에 저장된 데이터를 관리하기 위한 정보를 가리킬 수 있다. 예를 들어, 하나의 객체는 하나의 파일을 지칭할 수 있다. 예시적인 실시 예에서, 복수의 객체들 각각은 서로 다른 가상 머신 또는 서로 다른 애플리케이션 상에서 발생할 수 있으며, 복수의 객체들 각각은 서로 다른 파일에 대응될 수 있으나, 복수의 객체들 중 일부는 서로 동일한 파일에 대응될 수 있다.
좀 더 상세한 예로서, 제1 객체 및 제2 객체가 제2 파일과 대응되는 경우, 스토리지 서버(102)는 제1 객체에 대응하는 제1 파일 및 제2 객체에 대응하는 제2 파일을 저장할 것이다. 이 때, 제1 파일 및 제2 파일이 서로 동일한 경우, 2개의 동일한 파일이 저장된다면, 스토리지 서버(102)의 저장 공간이 낭비될 것이다. 따라서, 본 발명의 실시 예에 따른 스토리지 서버(102)는 동일한 파일에 대응하는 복수의 객체들에 대하여, 동일한 파일을 1개만 저장함으로써, 저장 공간의 낭비를 방지할 수 있다. 이러한 기술적 구성은 중복 제거(deduplication) 기능이라 불린다.
스토리지 노드(110)는 객체-대-해시 테이블(O2H Table)을 포함할 수 있다. 객체-대-해시 테이블(O2H)은 객체 식별자에 대한 정보 및 해시 값 사이의 매핑 정보를 가리킬 수 있다. 복수의 스토리지 장치들(120, 130) 각각은 해시-대-물리 어드레스 테이블(H2P Table)을 포함할 수 있다. 해시-대-물리 어드레스 테이블(H2P)은 해시 값에 할당된 물리 어드레스의 정보 및 대응하는 참조 카운트에 대한 정보를 포함할 수 있다. 스토리지 서버(102)는 상술된 객체-대-해시 테이블(O2H) 및 해시-대-물리 어드레스 테이블(H2P)을 기반으로, 상술된 중복 제거 기능을 제공할 수 있다. 본 발명의 실시 예에 따른 중복 제거 기능은 이하의 도면들을 참조하여 더욱 상세하게 설명된다.
도 2는 도 1의 스토리지 노드를 예시적으로 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 스토리지 노드(110)는 프로세서(111), 메모리(112), 해시 모듈(113), 에러 관리자(114), 네트워크 인터페이스 제어기(115), 호스트 인터페이스 회로(116), 및 객체-대-해시 테이블(O2H)을 포함할 수 있다.
프로세서(111)는 스토리지 노드(110)의 제반 동작을 제어할 수 있다. 메모리(112)는 스토리지 노드(110)의 버퍼 메모리, 캐시 메모리, 또는 동작 메모리로서 사용될 수 있다.
해시 모듈(113)은 데이터에 대한 해시 연산을 수행하여, 데이터에 대응하는 해시 값을 출력하도록 구성될 수 있다. 예를 들어, 클라이언트 서버(101)로부터 제1 객체에 대응하는 제1 데이터에 대한 쓰기 요청에 수신된 경우, 해시 모듈(113)은 제1 데이터에 대한 해시 연산을 수행하여, 제1 해시 값을 출력할 수 있다. 또는 클라이언트 서버(101)로부터 제2 객체에 대응하는 제2 데이터에 대한 쓰기 요청에 수신된 경우, 해시 모듈(113)은 제2 데이터에 대한 해시 연산을 수행하여, 제2 해시 값을 출력할 수 있다. 본 발명의 실시 예에 따르면, 제1 해시 값 및 제2 해시 값이 서로 동일한 것은, 제1 데이터 및 제2 데이터가 서로 동일한 것을 의미할 수 있다. 다시 말해서, 동일한 데이터에 대하여 해시 값이 서로 동일해지도록 해시 모듈의 해시 연산의 파라미터들일 설정될 수 있다.
에러 관리자(114)는 스토리지 노드(110)의 동작 중에 발생한 다양한 에러들을 관리하도록 구성될 수 있다. 에러 관리자(114)의 동작은 이하의 도면들을 참조하여 더욱 상세하게 설명된다.
네트워크 인터페이스 제어기(115)는 클라이언트 서버(101)와의 통신을 제공할 수 있다. 예시적인 실시 예에서, 클라이언트 서버(101) 및 스토리지 서버(102)가 이더넷 네트워크를 통해 통신하는 경우, 네트워크 인터페이스 제어기(115)는 TCP/IP 프로토콜에 기반된 통신 요청 또는 통신 패킷을 생성하거나 또는 처리하도록 구성될 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니며, 네트워크 인터페이스 제이거(115)는 다양한 통신 프로토콜을 기반으로 동작할 수 있다.
호스트 인터페이스 회로(116)는 복수의 스토리지 장치들(120, 130)과의 통신을 제공할 수 있다. 예시적인 실시 예에서, 호스트 인터페이스 회로(116)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스, KV(key-value) 인터페이스 등과 같은 다양한 인터페이스들 중 적어도 하나를 기반으로 복수의 스토리지 장치들(120, 130)과 통신할 수 있다.
객체-대-해시 테이블(O2H)은 객체 식별자 및 해시 값 사이의 매핑 정보를 포함할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 제1 객체에 대응하는 제1 데이터에 대한 해시 값이 제1 해시 값인 경우, 객체-대-해시 테이블(O2H)은 제1 객체 식별자 및 제1 해시 값 사이의 매핑 정보를 포함할 수 있다. 예시적인 실시 예에서, 객체-대-해시 테이블(O2H)에서 관리되는 정보는 스토리지 서버(102)에 대한 쓰기 동작 또는 소거 동작시 갱신될 수 있다. 객체-대-해시 테이블(O2H)은 버퍼 메모리(112) 또는 별도의 외부 메모리에 저장될 수 있다.
도 3은 도 1의 복수의 스토리지 장치들 중 하나의 스토리지 장치를 예시적으로 보여주는 블록도이다. 설명의 편의를 위해, 도 3을 참조하여 하나의 스토리지 장치(120)가 설명되나, 본 발명의 범위가 이에 한정되는 것은 아니며, 다른 스토리지 장치들 또한 유사한 구조를 가질 수 있다.
도 1 및 도 3을 참조하면, 스토리지 장치(120)는 스토리지 컨트롤러(121), 불휘발성 메모리들(122), 및 버퍼 메모리(123)을 포함할 수 있다. 스토리지 컨트롤러(121)는 스토리지 노드(110)로부터 수신된 요청에 응답하여, 불휘발성 메모리들(122)에 데이터를 저장하거나 또는 저장된 데이터를 출력할 수 있다.
스토리지 컨트롤러(121)는 프로세서(121a), 메모리(121b), 해시 모듈(121c), 중복 제거 관리자(121d), 플래시 변환 계층(121e), AES 엔진(121f), ECC 엔진(121h), 호스트 인터페이스 회로(121i), 메모리 인터페이스 회로(121j), 및 해시-대-물리 어드레스 테이블(H2P)(이하에서, 설명의 편의를 위해, 해시-대-물리 테이블이라 칭함.)을 포함할 수 있다.
프로세서(121a)는 스토리지 컨트롤러(121)의 제반 동작을 제어할 수 있다. 메모리(121b)는 스토리지 컨트롤러(121)의 버퍼 메모리, 캐시 메모리, 또는 동작 메모리로서 사용될 수 있다. 해시 모듈(121c)은 데이터에 대한 해시 값을 연산하도록 구성될 수 있다. 예시적인 실시 예에서, 도 3의 스토리지 컨트롤러(120)에 포함된 해시 모듈(121c)은 도 2의 스토리지 노드(110)에 포함된 해시 모듈(113)과 동일한 해시 함수를 사용할 수 있다. 즉, 동일한 데이터에 대한, 해시 모듈들(113, 121c)의 해시 값은 서로 동일할 수 있다.
중복 제거 관리자(121d)는 스토리지 장치(120)에 저장된 데이터에 대한 중복 제거를 수행하도록 구성될 수 있다. 예를 들어, 중복 제거 관리자(121d)는 해시-대-물리 테이블(H2P)을 기반으로, 서로 다른 객체들에 의해 참조되나 서로 동일한 값을 갖는 데이터를 탐색할 수 있고, 탐색된 데이터에 대하여, 불휘발성 메모리들(122)에 1개의 데이터만 저장할 수 있다. 중복 제거 관리자(121d)의 동작은 이하의 도면들을 참조하여 더욱 상세하게 설명된다.
플래시 변환 계층(121e)은 불휘발성 메모리들(122)에 대한 다양한 유지 관리 동작을 수행할 수 있다. 예시적인 실시 예에서, 다양한 유지 관리 동작은 불휘발성 메모리들(122)에 대한 웨어 레벨링 동작, 가비지 콜렉션 동작, 배드 블록 관리 동작 등을 포함할 수 있다.
예시적인 실시 예에서, 본 발명의 실시 예에 따른 플래시 변환 계층(121e)은 종래의 일반적인 논리 어드레스-대-물리 어드레스 사이의 매핑 동작을 수행하지 않을 수 있다.
예를 들어, 데이터가 저장되는 물리 어드레스는 해시-대-물리 테이블(H2P) 및 중복 제거 관리자(121d)에 의해 관리될 수 있다. 즉, 중복 제거 관리자(121d)는 데이터에 대한 논리 어드레스 대신에 데이터에 대한 해시 연산의 결과인 해시 값을 기반으로 데이터의 물리 어드레스를 관리할 수 있다. 이 경우, 플래시 변환 계층(121e)에 의한 별도의 논리 어드레스 및 물리 어드레스 사이의 매핑이 불필요할 수 있다.
예시적인 실시 예에서, 본 발명의 실시 예에 따른 해시 값은 종래의 논리 어드레스와 다른 정보이다. 예를 들어, 논리 어드레스는 스토리지 노드(110)에서 스토리지 장치들(120, 130)의 저장 공간을 논리적으로 관리하기 위한 위치 정보를 가리킬 수 있다. 즉, 논리 어드레스는 데이터의 논리적인 저장 위치를 가리키는 정보이다. 반면에, 해시 값은 데이터 자체에 대한 해시 연산을 통해 획득되는 값이며, 데이터의 논리적인 저장 위치를 가리키는 값이 아니다. 좀 더 상세한 예로서, 동일한 값을 제1 데이터 및 제2 데이터가 서로 다른 논리적 저장 위치를 갖는다면, 제1 데이터 및 제2 데이터 각각에 대한 논리 어드레스는 서로 다를 것이다. 반면에, 동일한 값을 제1 데이터 및 제2 데이터가 서로 다른 논리적 저장 위치를 갖더라도, 제1 데이터 및 제2 데이터에 대한 해시 연산의 결과, 즉, 해시 값은 서로 동일할 것이다. 즉, 본 발명에서 사용되는 해시 값은 종래의 논리 어드레스와 다른 특성을 갖는 정보이다.
AES 엔진(121f)(advanced encryption standard)는 스토리지 컨트롤러(121)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)를 이용하여 수행할 수 있다.
ECC 엔진(121h)은 불휘발성 메모리들(122)로부터 독출되는 독출 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 예를 들어, ECC 엔진(121h)은 불휘발성 메모리들(122)에 저장될 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 생성된 패리티 비트들은 데이터와 함께 불휘발성 메모리들(122)에 저장될 수 있다. 불휘발성 메모리들(122)로부터의 데이터 독출 시, ECC 엔진(121h)은 독출 데이터와 함께 불휘발성 메모리들(122)로부터 독출되는 패리티 비트들을 이용하여 독출 데이터의 에러를 정정하고, 에러가 정정된 독출 데이터를 출력할 수 있다.
호스트 인터페이스 회로(121i)는 스토리지 노드(110)와의 통신을 제공할 수 있다. 예시적인 실시 예에서, 호스트 인터페이스 회로(121i)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스, KV(key-value) 인터페이스 등과 같은 다양한 인터페이스 프로토콜들 중 적어도 하나를 기반으로 구현될 수 있다.
메모리 인터페이스 회로(121j)는 복수의 불휘발성 메모리들(122)과의 통신을 제공할 수 있다. 메모리 인터페이스 회로(121j)는 토글 인터페이스(toggle interface) 또는 오픈-낸드 플래시 인터페이스(ONFI; open nand flash interface) 등과 같은 다양한 인터페이스 프로토콜들 중 적어도 하나를 기반으로 동작할 수 있다.
버퍼 메모리(123)는 스토리지 장치(120)가 동작하는데 필요한 다양한 정보를 저장하도록 구성될 수 있다. 예를 들어, 버퍼 메모리(123)는 해시-대-물리 테이블(H2P)과 관련된 정보를 저장할 수 있다. 또는 버퍼 메모리(123)는 중복 제거 관리자(121d), 플래시 변환 계층(121e) 등과 같은 소프트웨어 구성들을 저장하도록 구성될 수 있다. 버퍼 메모리(123)에 저장된 소프트웨어 구성들은 메모리(121b)로 로드되어 프로세서(121a)에 의해 실행될 수 있다.
도 4는 도 1의 스토리지 서버의 동작을 예시적으로 보여주는 순서도이다. 도 1 및 도 4를 참조하면, S11 단계에서, 스토리지 노드(110)는 제1 스토리지 장치(120)로부터 제1 장치 크기에 대한 정보를 수신할 수 있다. 제1 장치 크기에 대한 정보는 제1 스토리지 장치(110)의 가용한 저장 공간에 대한 정보를 가리킬 수 있다. S12 단계에서, 스토리지 노드(110)는 제2 스토리지 장치(130)로부터 제2 장치 크기에 대한 정보를 수신할 수 있다. 제2 장치 크기에 대한 정보는 제2 스토리지 장치(130)의 가용한 저장 공간에 대한 정보를 가리킬 수 있다.
S13 단계에서, 스토리지 노드(110)는 제1 및 제2 스토리지 장치들(120, 130)로 해시 범위를 각각 할당할 수 있다. 예를 들어, 스토리지 노드(110)는 제1 장치 크기 정보에 대응하는 범위를 갖는 제1 해시 범위를 제1 스토리지 장치(120)로 할당하고, 제2 장치 크기 정보에 대응하는 범위를 갖는 제2 해시 범위를 제2 스토리지 장치(130)로 할당할 수 있다.
S14 단계에서, 스토리지 노드(110)는 제1 해시 범위에 대한 정보를 제1 스토리지 장치(120)로 전송할 수 있다. S15 단계에서, 제1 스토리지 장치(120)는 수신된 제1 해시 정보를 기반으로 제1 해시-대-물리 테이블을 생성할 수 있다.
S16 단계에서, 스토리지 노드(110)는 제2 해시 범위에 대한 정보를 제2 스토리지 장치(130)로 전송할 수 있다. S17 단계에서, 제2 스토리지 장치(130)는 수신된 제2 해시 정보를 기반으로 제2 해시-대-물리 테이블을 생성할 수 있다.
예시적인 실시 예에서, 제1 해시 범위 및 제2 해시 범위는 서로 중첩되지 않을 수 있다. 즉, 스토리지 노드(110)는, 제1 해시 범위에 포함된 해시 값을 갖는 데이터는 제1 스토리지 장치(120)에 저장되고, 제2 해시 범위에 포함된 해시 값을 갖는 데이터는 제2 스토리지 장치(130)에 저장되도록, 데이터를 관리할 수 있다.
예시적인 실시 예에서, 앞서 설명된 바와 같이, 본 발명에 따른 해시 값은 종래의 논리 어드레스와 다른 특성을 갖는 정보이며, 이는 앞서 설명되었으므로, 이에 대한 상세한 설명은 생략된다.
도 5는 도 1의 스토리지 장치에서 관리되는 해시-대-물리 테이블을 설명하기 위한 도면이다. 이하에서, 설명의 편의를 위해, 스토리지 노드(110) 및 제1 스토리지 장치(120) 사이의 통신을 기준으로 본 발명의 실시 예들이 설명된다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다. 도 1 및 도 5를 참조하면, 해시-대-물리 테이블(H2P)은 복수의 해시 값들(H1~Hn) 및 복수의 물리 어드레스들(PA1~PAn) 사이의 매핑 정보, 및 대응하는 참조 카운트들(RC1~RCn)에 대한 정보를 포함할 수 있다.
예를 들어, 제1 데이터에 대한 해시 값인 제1 해시 값(H1)인 경우, 제1 데이터(H1)는 제1 물리 어드레스(PA1)에 대응하는 영역에 저장될 수 있다. 이 경우, 제1 참조 카운트(RC1)는 제1 해시 값(H1)에 대응하는 제1 데이터를 참조하는 객체들의 개수를 가리킬 수 있다. 즉, 제1 참조 카운트(RC1)가 "a"인 것은, 제1 해시 값(H1)에 대응하는 제1 데이터 또는 제1 물리 어드레스(PA1)의 영역에 저장된 제1 데이터를 참조하는 객체들의 개수가 "a"개인 것을 의미할 수 있다.
예시적인 실시 예에서, 해시 값에 대응하는 데이터가 저장되지 않은 경우, 해시-대-물리 테이블(H2P)에서 대응하는 엔트리는 비어 있을 수 있다. 예를 들어, 제3 해시 값(H3)에 대응하는 데이터가 스토리지 장치(120)에 아직 저장되지 않은 경우, 제3 해시 값(H3)에 대응하는 엔트리는 비어 있을 수 있다.
예시적인 실시 예에서, 도 5에 도시된 해시-대-물리 테이블(H2P)이 제1 스토리지 장치(120)에 의해 관리되는 경우, 해시-대-물리 테이블(H2P)에 포함된 복수의 해시 값들(H1~Hn)은 스토리지 노드(110)에 의해 할당된 제1 해시 범위에 포함될 수 있다.
도 6은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 본 발명의 기술적 사상을 용이하게 설명하기 위해, 이하에서, 서버 시스템(100)의 클라이언트 서버(101), 스토리지 노드(110), 및 제1 스토리지 장치(120)를 기준으로 본 발명의 실시 예들이 설명된다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다. 예시적인 실시 예에서, 도 6을 참조하여, 특정 개체로부터의 데이터가 스토리지 장치에 저장되는 동작(즉, 쓰기 동작)이 설명된다.
도 1 및 도 6을 참조하면, S101 단계에서, 클라이언트 서버(101)는 스토리지 서버(110)로 쓰기 요청을 전송할 수 있다. 예시적인 실시 예에서, 쓰기 요청은 객체 식별자(ID), 데이터의 길이(len), 및 데이터(DT)를 포함하는 쓰기 요청(PUT)일 수 있다.
S102 단계에서, 스토리지 노드(110)는 해시 값을 연산할 수 있다. 예를 들어, 스토리지 노드(110)는 클라이언트 서버(101)로부터 수신된 데이터(DT)에 대한 해시 연산을 수행하여 해시 값(H)을 연산할 수 있다. 예시적인 실시 예에서, 스토리지 노드(110)의 해시 연산은 도 2를 참조하여 설명된 해시 모듈(113)에 의해 수행될 수 있다.
S103 단계에서, 스토리지 노드(110)는 쓰기 요청을 제1 스토리지 장치(120)로 전달할 수 있다. 예시적인 실시 예에서, 제1 스토리지 장치(120)로 전달되는 쓰기 요청은 객체 식별자(ID), 데이터의 길이(len), 및 데이터(DT)를 포함하는 쓰기 요청(PUTa)일 수 있다.
예시적인 실시 예에서, 비록 도면에 명확히 도시되지는 않았으나, 스토리지 노드(110)는 연산된 해시 값(H)을 기반으로 쓰기 요청이 전달될 스토리지 장치를 선택할 수 있다. 예를 들어, 도 4를 참조하여 설명된 바와 같이, 스토리지 노드(110)는 복수의 스토리지 장치들(120, 130) 각각에 대한 해시 범위를 할당할 수 있다. 스토리지 노드(110)는 연산된 해시 값이 포함된 해시 범위에 대응하는 스토리지 장치로 쓰기 요청을 전달할 수 있다. 예를 들어, 연산된 해시 값(H)이 제1 스토리지 장치(120)로 할당된 제1 해시 범위에 포함되는 경우, 쓰기 요청은 제1 스토리지 장치(120)로 전달되고, 연산된 해시 값(H)이 제2 스토리지 장치(120)로 할당된 제2 해시 범위에 포함되는 경우, 쓰기 요청은 제2 스토리지 장치(130)로 전달될 수 있다.
S104 단계에서, 제1 스토리지 장치(120)는 수신된 데이터(DT)에 대한 해시 연산을 통해 해시 값(H)을 연산할 수 있다. 예시적인 실시 예에서, 제1 스토리지 장치(120)의 해시 연산은 도 3을 참조하여 설명된 해시 모듈(121c)에 의해 수행될 수 있다.
S105 단계에서, 제1 스토리지 장치(120)는 연산된 해시 값(H')과 수신된 해시 값(H)을 비교할 수 있다. 연산된 해시 값(H')과 수신된 해시 값(H)이 서로 다른 것은, 수신된 정보에 에러가 포함되어 있음을 의미할 수 있다. 이 경우, 즉, 연산된 해시 값(H')과 수신된 해시 값(H)이 서로 다른 경우, S106 단계에서, 제1 스토리지 장치(120)는 에러 정보를 스토리지 노드(110)로 리턴할 수 있다.
S107 단계에서, 스토리지 노드(110)는 에러 관리를 수행할 수 있다. 예시적인 실시 예에서, S107 단계에서의 에러 관리는 데이터(DT)에 대한 해시 연산을 재수행하는 동작, 제1 스토리지 장치(120)로 쓰기 요청(즉, PUTa[ID, len, DT, H])을 다시 전송하는 동작 등을 포함할 수 있다. 또는, 에러 관리는 클라이언트 서버(101)로 에러 정보를 리턴하는 동작을 포함할 수 있다. 상술된 에러 관리는 도 2를 참조하여 설명된 에러 관리자(114)에 의해 수행될 수 있으며, 상술된 에러 관리는 예시적인 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다.
연산된 해시 값(H')과 수신된 해시 값(H)이 서로 동일한 경우, S108 단계에서, 제1 스토리지 장치(120)는 해시-대-물리 테이블(H2P)에서, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있는지 탐색할 수 있다.
해시-대-물리 테이블(H2P)에서, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있다는 것은, 수신된 해시 값(H)에 대응하는 데이터(DT)가 저장되어 있지 않음을 의미할 수 있다. 이 경우, 즉, 해시-대-물리 테이블(H2P)에서, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있는 경우, S109 단계에서, 제1 스토리지 장치(120)는 물리 어드레스(PA)를 할당할 수 있다. S110 단계에서, 제1 스토리지 장치(120)는 할당된 물리 어드레스(PA)에 대응하는 영역(즉, 불휘발성 메모리들(122)의 저장 영역)에 데이터(DT)를 기입할 수 있다. S111 단계에서, 제1 스토리지 장치(120)는 해시-대-물리 테이블(H2P)을 갱신할 수 있다. S112 단계에서, 제1 스토리지 장치(120)는 대응하는 참조 카운트(RC)를 증가시킬 수 있다.
예를 들어, 상술된 바와 같이, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있다는 것은, 대응하는 데이터(DT)가 저장되어 있지 않음을 의미하므로, 대응하는 데이터(DT)가 불휘발성 메모리들(122)에 저장되어야 할 것이다. 따라서, 제1 스토리지 장치(120)는 물리 어드레스(PA)를 할당하고, 할당된 물리 어드레스(PA)에 대응하는 영역에 데이터(DT)를 저장할 수 있다. 이후에, 제1 스토리지 장치(120)는 해시-대-물리 테이블(PA)에서, 수신된 해시 값(H)에 대한 물리 어드레스를 할당된 물리 어드레스로 갱신할 수 있다. 이후에, 해시 값(H)에 대응하는 데이터(DT)를 참조하는 객체가 "1"개이므로, 대응하는 참조 카운트(RC)를 "1"만큼 증가시킬 수 있다.
해시-대-물리 테이블(H2P)에서, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있지 않다는 것은, 수신된 해시 값(H)에 대응하는 데이터(DT)가 이미 저장되어 있음을 의미할 수 있다. 이 경우, 즉, 해시-대-물리 테이블(H2P)에서, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있지 않은 경우, 제1 스토리지 장치(120)는 S109 단계 내지 S111 단계의 동작들을 생략할 수 있다. 즉, 수신된 해시 값(H)에 대응하는 데이터(DT)가 불휘발성 메모리들(122)에 이미 저장되어 있기 때문에, 제1 스토리지 장치(120)는 데이터(DT)에 대한 저장 동작을 생략할 수 있다. 즉, 데이터(DT)에 대한 중복 제거가 수행될 수 있다.
해시-대-물리 테이블(H2P)에서, 수신된 해시 값(H)에 대응하는 엔트리가 비어 있지 않은 경우, S112 단계의 동작이 수행될 수 있다. 예를 들어, 수신된 해시 값(H)에 대응하는 데이터(DT)가 이미 저장되어 있다는 것은, 추가적인 객체가 이미 저장된 데이터(DT)를 참조하는 것을 의미할 수 있다. 따라서, 제1 스토리지 장치(120)는 참조 카운트(RC)를 증가시킬 수 있다.
S113 단계에서, 제1 스토리지 장치(120)는 완료 정보(Completion)를 스토리지 노드(110)로 전송할 수 있다.
S114 단계에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예를 들어, 스토리지 노드(110)는 S101 단계를 통해 수신된 객체 식별자(ID) 및 연산된 해시(H)에 대한 매핑 정보를 기반으로 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예시적인 실시 예에서, 객체-대-해시 테이블(O2H)을 기반으로, 객체 식별자에 대하여 어떤 해시 값이 대응되는지가 판별될 수 있으며, 이는 읽기 동작시 사용될 수 있다.
S115 단계에서, 스토리지 노드(110)는 클라이언트 서버(101)로 성공 정보(Success)를 전송할 수 있다.
도 7 및 도 8은 도 6의 순서도에 따른 동작을 설명하기 위한 예시적인 도면들이다. 이하에서, 도면의 간결성 및 설명의 편의를 위해, 도 6의 순서도에 따른 쓰기 동작을 설명하는데 불필요한 구성 요소들은 생략된다. 예시적인 실시 예에서, 도면의 간결성 및 설명의 편의를 위해, 도 6의 S104 단계 및 S105 단계와 대응되는 동작들(즉, 수신 요청에 대한 에러 검출 방안)과 관련된 구성 요소들은 생략된다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다.
먼저, 도 1, 도 6, 및 도 7을 참조하면, 클라이언트 서버(101)는 제1 쓰기 요청(PUT1)을 스토리지 노드(110)로 전송할 수 있다. 제1 쓰기 요청(PUT1)은 제1 객체 식별자(ID1)에 대응하는 객체가 참조하는 제1 데이터(DT1)에 대한 쓰기 요청일 수 있으며, 제1 객체 식별자(ID1) 및 제1 데이터(DT1)에 대한 정보를 포함할 수 있다.
스토리지 노드(110)의 해시 모듈(113)은 수신된 제1 데이터(DT1)에 대한 해시 연산을 수행하여, 제1 해시 값(H1)을 산출할 수 있다. 스토리지 노드(110)의 호스트 인터페이스 회로(116)는 제1 해시 값(H1)을 포함하는 제1 쓰기 요청(PUT1a)을 제1 스토리지 장치(120)로 전송할 수 있다.
예시적인 실시 예에서, 앞서 설명된 바와 같이, 스토리지 노드(110)는 연산된 제1 해시 값(H1) 및 복수의 스토리지 장치들(120, 130) 각각에 할당된 해시 범위들을 기반으로 제1 해시 값(H1)이 포함된 해시 범위에 대응하는 스토리지 장치를 선택할 수 있다. 스토리지 노드(110)는 선택된 스토리지 장치로 제1 해시 값(H1)을 포함하는 제1 쓰기 요청(PUT1a)을 전송할 수 있다.
제1 스토리지 장치(120)의 호스트 인터페이스 회로(121i)는 제1 해시 값(H1)을 포함하는 제1 쓰기 요청(PUT1a)을 수신할 수 있다. 제1 스토리지 장치(120)의 중복 제거 관리자(121d)는 제1 해시 값(H1)을 해시-대-물리 테이블(H2P)로부터 탐색할 수 있다. 도 7의 실시 예에서, 해시-대-물리 테이블(H2P)에서, 제1 해시 값(H1)에 대응하는 엔트리는 비어 있을 수 있다. 이 경우, 중복 제거 관리자(121d)는 제1 물리 어드레스(PA1)를 할당할 수 있다. 예시적인 실시 예에서, 물리 어드레스를 할당하는 동작은 플래시 변환 계층(도 3의 FTL, 121e)에 의해 수행될 수 있다.
제1 스토리지 장치(120)의 메모리 인터페이스 회로(121j)는 프로그램 커맨드(CMD_P), 제1 물리 어드레스(PA1), 및 제1 데이터(DT1)를 복수의 불휘발성 메모리 들(122) 중 적어도 하나로 전송할 수 있다. 복수의 불휘발성 메모리 들(122) 중 적어도 하나는 수신된 프로그램 커맨드(CMD_P)에 응답하여, 제1 물리 어드레스(PA1)에 대응하는 영역에 제1 데이터(DT1)를 저장할 수 있다.
중복 제거 관리자(121d)는 제1 해시 값(H1) 및 제1 물리 어드레스(PA1)를 기반으로 해시-대-물리 테이블(H2P)을 갱신할 수 있다. 예를 들어, 도 7에 도시된 바와 같이, 중복 제거 관리자(121d)는 제1 해시 값(H1) 및 제1 물리 어드레스(PA1) 사이의 매핑 정보 및 제1 참조 카운트(RC1)를 포함하는 엔트리를 해시-대-물리 테이블(H2P)에 추가함으로써, 제1 해시-대-물리 테이블(H2P-1)로 갱신할 수 있다.
예시적인 실시 예에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예를 들어, 스토리지 노드(110)는 제1 객체 식별자(ID1) 및 제1 해시 값(H1)의 매핑 정보를 객체-대-해시 테이블(O2H)에 추가할 수 있다.
다음으로, 도 1, 도 6, 및 도 8을 참조하면, 클라이언트 서버(101)는 제2 쓰기 요청(PUT2)을 스토리지 노드(110)로 전송할 수 있다. 제2 쓰기 요청(PUT2)은 제2 객체 식별자(ID2)에 대응하는 객체가 참조하는 제1 데이터(DT1)에 대한 쓰기 요청일 수 있으며, 제2 객체 식별자(ID2) 및 제1 데이터(DT1)에 대한 정보를 포함할 수 있다.
스토리지 노드(110)의 해시 모듈(113)은 수신된 제1 데이터(DT1)에 대한 해시 연산을 수행하여, 제1 해시 값(H1)을 산출할 수 있다. 예시적인 실시 예에서, 제2 객체 식별자(ID2)에 대응하는 제1 데이터(DT1)는 도 7을 참조하여 설명된 제1 객체 식별자(ID1)에 대응하는 제1 데이터(DT1)와 동일할 수 있다. 즉, 제1 및 제2 객체 식별자들(ID1, ID2)에 대응하는 객체들은 서로 동일한 제1 데이터(DT1)를 참조할 수 있다. 이 경우, 해시 모듈(113)에 의해 연산된 해시 값은 제1 해시 값(H1)으로 동일할 수 있다. 스토리지 노드(110)의 호스트 인터페이스 회로(116)는 제1 해시 값(H1)을 포함하는 제2 쓰기 요청(PUT2a)을 제1 스토리지 장치(120)로 전송할 수 있다.
제1 스토리지 장치(120)의 호스트 인터페이스 회로(121i)는 제1 해시 값(H1)을 포함하는 제2 쓰기 요청(PUT2a)을 수신할 수 있다. 중복 제거 관리자(121d)는 수신된 제1 해시 값(H1)을 기반으로 제1 해시-대-물리 테이블(H2P-1)을 탐색할 수 있다. 예를 들어, 제1 해시-대 물리 테이블(H2P-1)은 도 7을 참조하여 설명된 바와 같이, 제1 해시 값(H1) 및 제1 물리 어드레스(PA1) 사이의 매핑 관계 및 제1 참조 카운트(RC1)에 대한 정보를 포함할 수 있다.
이 경우, 중복 제거 관리자(121d)는 제1 해시 값(H1)에 대응하는 엔트리가 존재하는 것을 확인하고, 이에 응답하여, 제1 데이터(DT1)에 대한 저장 동작, 프로그램 동작, 또는 쓰기 동작 없이, 제1 해시-대-물리 테이블(H2P-1)을 갱신하여 제2 해시-대-물리 테이블(H2P-2)을 생성할 수 있다. 예를 들어, 중복 제거 관리자(121d)는, 제1 해시-대-물리 테이블(H2P-1)에서, 제1 해시 값(H1)에 대응하는 엔트리의 제1 참조 카운트(RC1)를 "1"만큼 증가시킴으로써, 제2 해시-대-물리 테이블(H2P-2)을 생성할 수 있다. 도 8의 실시 예에서, 제1 참조 카운트(RC1)는 "2"로 갱신될 수 있으며, 이는 제1 해시 값(H1)에 대한 제1 데이터(DT1)를 2개의 객체들(예를 들어, 제1 및 제2 객체 식별자들(ID1, ID2)에 대응하는 객체들)에 의해 참조됨을 의미한다.
즉, 도 8을 참조하여 설명된 바와 같이, 제1 스토리지 장치(120)는 해시-대-물리 테이블(H2P)을 기반으로 수신된 데이터를 불휘발성 메모리들(122)에 저장하거나 또는 저장하는 동작을 생략할 수 있다.
예시적인 실시 예에서, 스토리지 노드(110)는 제2 객체 식별자(ID2) 및 제1 해시 값(H1) 사이의 매핑 정보를 기반으로 객체-대-해시 테이블(O2H)을 갱신할 수 있다.
상술된 바와 같이, 본 발명의 실시 예들에 따르면, 스토리지 서버(102)는 데이터(DT)에 대한 해시 값을 기반으로 데이터를 관리할 수 있다. 이 경우, 다수의 객체들이 동일한 제1 데이터를 참조하더라도, 스토리지 서버(102)에는 제1 데이터 1개만 불휘발성 메모리에 저장될 수 있다. 따라서, 불휘발성 메모리들 또는 스토리지 장치에서의 저장 공간의 활용도가 향상될 수 있다.
도 9는 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 예시적인 실시 예에서, 도 9를 참조하여, 특정 개체가 스토리지 장치로부터 특정 데이터를 읽는 동작(즉, 쓰기 동작)이 설명된다. 도 1 및 도 9를 참조하면, S201 단계에서, 클라이언트 서버(101)는 스토리지 노드(110)로 읽기 요청(GET)을 전송할 수 있다. 예시적인 실시 예에서, 읽기 요청(GET)은 객체 식별자(ID)에 대한 정보를 포함할 수 있다.
S202 단계에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)에서, 수신된 객체 식별자(ID)에 대응하는 해시 값(H)을 탐색할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 스토리지 노드(110)의 객체-대-해시 테이블(O2H)은 객체 식별자(ID) 및 해시 값(H) 사이의 매핑 정보를 관리할 수 있다. 스토리지 노드(110)는 객체-대-해시 테이블(O2H)에서 수신된 객체 식별자(ID)에 대응하는 해시 값(H)을 탐색할 수 있다.
S203 단계에서, 스토리지 노드(110)는 탐색된 해시 값(H)을 포함하는 읽기 요청(GETa)을 제1 스토리지 장치(110)로 전송할 수 있다. 예시적인 실시 예에서, 앞서 설명된 바와 유사하게, 스토리지 노드(110)는 탐색된 해시 값(H)을 기반으로 읽기 요청이 전달될 스토리지 장치를 선택할 수 있으며, 이는 도 6을 참조하여 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다.
S204 단계에서, 제1 스토리지 장치(120)는 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는지 판별할 수 있다. 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하지 않는 것은 해시 값(H)에 대응하는 데이터가 불휘발성 메모리들(122)에 저장되어 있지 않음을 의미할 수 있다. 이 경우, 즉, 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하지 않는 경우, S205 단계에서, 제1 스토리지 장치(120)는 스토리지 노드(110)로 에러를 리턴하고, S206 단계에서, 스토리지 노드(110)는 에러 관리를 수행할 수 있다.
수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는 경우, S207 단계에서, 제1 스토리지 장치(120)는 불휘발성 메모리들(122)로부터 데이터(DT)를 읽을 수 있다. 예를 들어, 제1 스토리지 장치(120)는 해시-대-물리 테이블(H2P)로부터 해시 값(H)에 대응하는 물리 어드레스(PA)를 탐색할 수 있다. 제1 스토리지 장치(120)는 탐색된 물리 어드레스(PA)에 대응하는 영역으로부터 데이터(DT)를 읽을 수 있다.
S208 단계에서, 제1 스토리지 장치(120)는 읽은 데이터(DT)에 대한 해시 연산을 수행할 수 있다. S209 단계에서, 제1 스토리지 장치(120)는 연산된 해시 값 및 수신된 해시 값을 비교할 수 있다. 연산된 해시 값 및 수신된 해시 값이 동일하지 않은 것은 요청한 데이터 및 읽은 데이터가 서로 다름을 의미할 수 있다. 이 경우, 즉, 연산된 해시 값 및 수신된 해시 값이 동일하지 않은 경우, S210 단계에서, 제1 스토리지 장치(120)는 스토리지 노드(110)로 에러를 리턴하고, S211 단계에서, 스토리지 노드(110)는 에러 관리를 수행할 수 있다. 예시적인 실시 예에서, 비록 도면에 명시적으로 도시되지는 않았으나, 연산된 해시 값 및 수신된 해시 값이 서로 다른 경우, 제1 스토리지 장치(120)는 다양한 읽기 방식들을 기반으로 데이터에 대한 읽기를 다시 수행할 수 있다.
연산된 해시 값 및 수신된 해시 값이 동일한 경우, S212 단계에서, 제1 스토리지 장치(120)는 데이터(DT)를 스토리지 노드(110)로 전송하고, S213 단계에서, 스토리지 노드(110)는 데이터(DT)를 클라이언트 서버(101)로 전송할 수 있다.
도 10은 도 9의 순서도에 따른 읽기 동작을 설명하기 위한 도면이다. 도면의 간결성 및 설명의 편의를 위해, 도 9의 순서도에 따른 쓰기 동작을 설명하는데 불필요한 구성 요소들은 생략된다. 예시적인 실시 예에서, 도면의 간결성 및 설명의 편의를 위해, 도 9의 S204 단계, S205 단계, S209 단계, 및 S210 단계와 대응되는 동작들(즉, 에러 검출 방안)과 관련된 구성 요소들은 생략된다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다.
도 1, 도 9, 및 도 10을 참조하면, 클라이언트 서버(101)는 제1 객체 식별자(ID1)를 포함하는 제1 읽기 요청(GET1)을 스토리지 노드(110)로 전송할 수 있다. 제1 읽기 요청(GET1)은 제1 객체 식별자(ID1)에 대응하는 객체에 의해 참조되는 제1 데이터(DT1)를 읽기 위한 요청일 수 있다.
스토리지 노드(110)의 해시 모듈(113)은 수신된 제1 객체 식별자(ID1)에 대응하는 해시 값(H)을 객체-대-해시 테이블(O2H)로부터 탐색할 수 있다. 예를 들어, 객체-대-해시 테이블(O2H)은 제1 해시 값(H1)에 대하여 제1 및 제2 객체 식별자들(ID1, ID2)이 매핑된 정보를 포함할 수 있다. 이 경우, 해시 모듈(113)은, 객체-대-해시 테이블(O2H)을 기반으로, 수신된 제1 객체 식별자(ID1)에 대응하는 해시 값으로서, 제1 해시 값(H1)을 선택할 수 있다. 스토리지 노드(110)의 호스트 인터페이스 회로(116)는 제1 해시 값(H1)을 포함하는 제1 읽기 요청(GET1a)을 제1 스토리지 장치(120)로 전송할 수 있다.
제1 스토리지 장치(120)의 호스트 인터페이스 회로(121i)는 제1 해시 값(H1)을 포함하는 제1 읽기 요청(GET1a)을 수신할 수 있다. 중복 제거 관리자(121d)는 제2 해시-대-물리 테이블(H2P-2)로부터 제1 해시 값(H1)에 대응하는 제1 물리 어드레스(PA1)를 탐색할 수 있다. 제1 물리 어드레스(PA1)에 대한 정보는 제1 스토리지 장치(120)의 메모리 인터페이스 회로(121j)로 전달될 수 있다.
제1 스토리지 장치(120)의 메모리 인터페이스 회로(121j)는 읽기 커맨드(CMD_R) 및 제1 물리 어드레스(PA1)를 불휘발성 메모리들(122) 중 대응하는 적어도 하나의 불휘발성 메모리로 전송할 수 있다. 불휘발성 메모리들(122) 중 대응하는 적어도 하나의 불휘발성 메모리는 제1 물리 어드레스(PA1)의 영역에 저장된 제1 데이터(DT1)를 출력할 수 있다.
제1 스토리지 장치(120)의 메모리 인터페이스 회로(121j)는 불휘발성 메모리들(122) 중 대응하는 적어도 하나의 불휘발성 메모리로부터 제1 데이터(DT1)를 수신할 수 있고, 수신된 제1 데이터(DT1)는 호스트 인터페이스들(121i, 116)을 통해 클라이언트 서버(101)로 제공될 수 있다.
도 11은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 예시적인 실시 예에서, 도 11을 참조하여, 특정 개체의 데이터가 스토리지 장치에서 삭제되는 동작(즉, 삭제 동작)이 설명된다.
도 1 및 도 11을 참조하면, S301 단계에서, 클라이언트 서버(101)는 객체 식별자(ID)를 포함하는 삭제 요청(DEL)을 스토리지 노드(110)로 전송할 수 있다. 삭제 요청(DEL)은 객체 식별자(ID)에 대응하는 객체에 의해 참조되는 데이터를 삭제하기 위한 요청일 수 있다.
S302 단계에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)에서, 수신된 객체 식별자(ID)와 대응되는 해시 값(H)을 탐색할 수 있다. S302 단계의 동작은 앞서 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다. S303 단계에서, 스토리지 노드(110)는 탐색된 해시 값(H)을 포함하는 삭제 요청(DELa)을 제1 스토리지 장치(110)로 전송할 수 있다.
S304 단계에서, 제1 스토리지 장치(120)는 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는지 판별할 수 있다. 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하지 않는 것은 해시 값(H)에 대응하는 데이터가 불휘발성 메모리들(122)에 저장되어 있지 않음을 의미할 수 있다. 예시적인 실시 예에서, 해시-대-물리 테이블(H2P)에서, 해시 값(H)에 대응하는 엔트리의 참조 카운트가 "0"인 것은 해시 값(H)에 대응하는 엔트리가 존재하지 않는 것과 동일한 의미를 가질 수 있다.
이 경우, 즉, 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하지 않는 경우, S305 단계에서, 제1 스토리지 장치(120)는 스토리지 노드(110)로 에러를 리턴하고, S306 단계에서, 스토리지 노드(110)는 에러 관리를 수행할 수 있다.
수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는 경우, S307 단계에서, 제1 스토리지 장치(120)는 해시-대-물리 테이블(H2P)에서, 해시 값(H)과 대응하는 엔트리의 참조 카운트(RC)를 미리 정해진 값(예를 들어, "1")만큼 감소시킬 수 있다.
S308 단계에서, 제1 스토리지 장치(120)는 쓰기 요청(DELa)에 대한 완료(completion)를 스토리지 노드(110)로 전송하고, S309 단계에서, 스토리지 노드(110)는 쓰기 요청(DEL)에 대한 완료(completion)를 클라이언트 서버(101)로 전송할 수 있다.
도 12는 도 11의 순서도에 따른 삭제 동작을 설명하기 위한 도면이다. 도면의 간결성 및 설명의 편의를 위해, 도 12의 순서도에 따른 쓰기 동작을 설명하는데 불필요한 구성 요소들은 생략된다. 예시적인 실시 예에서, 도 11의 S304 단계 및 S305 단계에 대응하는 동작들은 생략된다.
도 1, 도 11, 및 도 12를 참조하면, 클라이언트 서버(101)는 제1 객체 식별자(ID1)를 포함하는 제1 삭제 요청(DEL1)을 스토리지 노드(110)로 전송할 수 있다. 제1 삭제 요청(GET1)은 제1 객체 식별자(ID1)에 대응하는 객체에 의해 참조되는 제1 데이터(DT1)를 삭제하기 위한 요청일 수 있다.
스토리지 노드(110)의 해시 모듈(113)은 수신된 제1 객체 식별자(ID1)에 대응하는 제1 해시 값(H1)을 객체-대-해시 테이블(O2H)로부터 탐색할 수 있다. 이는 앞서 설명되었으므로, 이에 대한 상세한 설명은 생략된다. 스토리지 노드(110)의 호스트 인터페이스 회로(116)는 제1 해시 값(H1)을 포함하는 제1 삭제 요청(DEL1a)을 제1 스토리지 장치(120)로 전송할 수 있다.
제1 스토리지 장치(120)의 호스트 인터페이스 회로(121i)는 제1 해시 값(H1)을 포함하는 제1 삭제 요청(DEL1a)을 수신할 수 있다. 중복 제거 관리자(121d)는 제2 해시-대-물리 테이블(H2P-2)로부터 제1 해시 값(H1)에 대응하는 제1 참조 카운트(RC1)를 탐색할 수 있다. 중복 제거 관리자(121d)는 제1 삭제 요청(DEL1a)에 응답하여, 제1 해시 값(H1)에 대응하는 제1 참조 카운트(RC1)를 감소시킴으로써, 제2 해시-대-물리 테이블(H2P-2)을 제3 해시-대-물리 테이블(H2P-3)로 갱신할 수 있다.
예시적인 실시 예에서, 해시-대-물리 테이블(H2P-2)에서, 제1 참조 카운트(RC1)가 "2"인 것은 제1 참조 카운트(RC1)에 대응하는 제1 해시 값(H1)과 연관된 제1 데이터(DT1)를 참조하는 객체들의 개수가 2개인 것을 의미한다. 이후에, 제1 객체 식별자(ID1)의 객체에 의해 참조되는 제1 데이터(DT1)가 삭제되었으므로, 제1 해시 값(H1)과 연관된 제1 데이터(DT1)를 참조하는 객체들의 개수가 1개로 변경되며, 이에 따라, 제1 참조 카운트(RC1)의 값이 "1"로 감소된다.
예시적인 실시 예에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예를 들어, 도 12에 도시된 바와 같이, 제1 해시 값(H1)에 대응하는 제1 및 제2 객체 식별자들(ID1, ID2) 중 삭제 요청된 제1 객체 식별자(ID1)의 매핑을 해제함으로써, 객체-대-해시 테이블(O2H)이 갱신될 수 있다.
도 13은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 블록도이다. 예시적인 실시 예에서, 도 13을 참조하여, 제1 스토리지 장치(120)의 가비지 콜렉션 동작이 설명된다. 예시적인 실시 예에서, 도 13의 가비지 콜렉션 동작은 도 3을 참조하여 설명된 플래시 변환 계층(FTL)에 의해 수행될 수 있다.
도 1, 도 5, 및 도 13을 참조하면, S401 단계에서, 제1 스토리지 장치(120)는 소스 블록 및 목표 블록을 선택할 수 있다. 예를 들어, 불휘발성 메모리들(122) 각각은 복수의 메모리 블록들을 포함할 수 있다. 제1 스토리지 장치(120)의 스토리지 컨트롤러(121)는 복수의 메모리 블록들 중 소스 블록 및 목표 블록을 선택할 수 있다.
S402 단계에서, 변수(k)가 1로 설정된다. 변수(k)는 본 발명의 실시 예에 따른 반복 동작을 설명하기 위한 것이며, 본 발명의 범위를 제한하지 않는다.
S403 단계에서, 제1 스토리지 장치(120)는 제k 참조 카운트(RC_k)가 "0"인지 판별할 수 있다. 예를 들어, 제k 참조 카운트(RC_k)는 소스 블록의 k-번째 물리 페이지의 물리 어드레스에 대응하는 참조 카운트를 가리킬 수 있다. 제1 스토리지 장치(120)는 해시-대-물리 테이블(H2P)에서, 제k 참조 카운트(RC_k)가 "0"인지 판별할 수 있다.
제k 참조 카운트(RC_k)가 "0"인 것은 제k 참조 카운트(RC_k)와 관련된 물리 페이지(즉, 소스 블록의 k-번째 물리 페이지)에 저장된 데이터를 참조하는 객체가 없음을 의미할 수 있다. 이 경우, 즉, 제k 참조 카운트(RC_k)가 "0"인 경우, S404 단계에서, 제1 스토리지 장치(120)는 소스 블록의 k-번째 물리 페이지를 무효 페이지로 결정할 수 있다.
제k 참조 카운트(RC_k)가 "0"이 아닌 것은 제k 참조 카운트(RC_k)와 관련된 물리 페이지(즉, 소스 블록의 k-번째 물리 페이지)에 저장된 데이터를 참조하는 객체가 존재함을 의미할 수 있다. 이 경우, 제k 참조 카운트(RC_k)가 "0"이 아닌 경우, S405 단계에서, 제1 스토리지 장치(120)는 소스 블록의 k-번째 물리 페이지를 유효 페이지로 결정할 수 있다.
S406 단계에서, 변수(k)가 최대인지 판별된다. 예를 들어, 소스 블록에 포함된 모든 페이지들에 대하여, 상술된 유효/무효 판별 동작이 완료되었는지 판별된다. 변수(k)가 최대가 아닌 경우, S407 단계에서, 변수(k)는 "1"만큼 증가하고, 제1 스토리지 장치(120)는 S403 단계를 수행한다.
변수(k)가 최대인 경우, S408 단계에서, 제1 스토리지 장치(120)는 유효 페이지로 설정된 물리 페이지들을 소스 블록으로부터 목표 블록으로 마이그레이션할 수 있다. S409 단계에서, 제1 스토리지 장치(120)는 소스 블록을 자유 블록으로서 사용할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 장치는 참조 카운트를 기반으로 데이터를 참조하는 객체들의 개수를 확인할 수 있다. 따라서, 스토리지 장치에서의 데이터 중복 제거 기능이 제공될 수 있다.
도 14는 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 설명의 편의를 위해 앞서 설명된 구성 요소들에 대한 상세한 설명은 생략된다. 도 1 및 도 14를 참조하면, S501 단계에서, 클라이언트 서버(101)는 쓰기 요청(PUT)을 스토리지 노드(110)로 전송할 수 있다. 쓰기 요청(PUT)은 객체 식별자(ID), 데이터의 길이(len), 데이터(DT), 및 플래그(FG)를 포함할 수 있다. 예시적인 실시 예에서, 플래그(FG)는 스토리지 장치(120)에서의 중복 제거 기능을 활성화/비활성화시키는 정보일 수 있다.
스토리지 노드(110) 및 제1 스토리지 장치(120)는 S502 단계, S503 단계, S504 단계, S505 단계, S506 단계, 및 S507 단계의 동작들을 수행할 수 있으며, 이는 플래그(FG)의 구성을 제외하면, 도 6의 S102 단계, S103 단계, S104 단계, S105 단계, S106 단계, 및 S107 단계의 동작들과 유사하므로, 이에 대한 상세한 설명은 생략된다.
S505 단계의 결과가 매칭인 경우, S508 단계에서, 제1 스토리지 장치(120)는 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는지 판별할 수 있다. 수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하지 않는 경우, 제1 스토리지 장치(120)는 S510 단계, S511 단계, S512 단계, 및 S513 단계의 동작들을 수행할 수 있으며, 이는 도 6의 S109 단계, S110 단계, S111 단계, 및 S112 단계의 동작들과 유사하므로, 이에 대한 상세한 설명은 생략된다.
수신된 해시 값(H)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는 경우, S509 단계에서, 제1 스토리지 장치(120)는 플래그(FG)가 설정되었는지 판별할 수 있다. 예를 들어, 플래그(FG)는 특정 객체가 참조하는 데이터에 대한 중복 제거 기능을 비활성화시키는 정보일 수 있다. 즉, 특정 쓰기 요청에 대하여, 플래그(FG)가 설정된 경우, 대응하는 데이터의 저장 유무와 무관하게, 대응하는 데이터가 불휘발성 메모리들(122)에 저장(즉, 중복 저장)될 수 있다. 특정 쓰기 요청에 대하여, 플래그(FG)가 설정되지 않은 경우, 도 6을 참조하여 설명된 바와 유사하게, 동일한 데이터가 중복 저장되지 않을 수 있다.
즉, 플래그(FG)가 설정되지 않은 경우, 제1 스토리지 장치(120)는 데이터(DT)에 대한 저장 동작 없이, S513 단계를 수행할 수 있다. 반면에, 플래그(FG)가 설정된 경우, 제1 스토리지 장치(120)는 S510 단계 내지 S512 단계의 동작들을 통해 데이터(DT)에 대한 저장 동작을 수행할 수 있다. 이 경우, 데이터(DT)는 불휘발성 메모리들(122)에 중복 저장될 수 있다. 예시적인 실시 예에서, 플래그(FG)는 I/O 단위로 설정될 수 있다. 플래그(FG)는 특정 객체가 참조하는 데이터에 대하여, 데이터 신뢰성을 보장하기 위해 설정될 수 있다.
이후에, 제1 스토리지 장치(120), 스토리지 노드(110), 및 클라이언트 서버(101)는 S515 단계, S516 단계, 및 S517 단계의 동작들을 수행할 수 있으며, 이는 도 6을 참조하여 설명된 S113 단계, S114 단계, 및 S115 단계의 동작들과 유사하므로, 이에 대한 상세한 설명은 생략된다.
도 15는 도 14의 순서도에 따른 동작을 설명하기 위한 도면이다. 도면의 간결성 및 설명의 편의를 위해, 도 14의 순서도에 따른 쓰기 동작을 설명하는데 불필요한 구성 요소들은 생략된다. 예시적인 실시 예에서, 도면의 간결성 및 설명의 편의를 위해, 도 14의 순서도에 따른 동작 중 데이터 중복 제거 기능이 비활성화된 구성이 설명된다.
도 1, 도 14, 및 도 15를 참조하면, 클라이언트 서버(101)는 제2 쓰기 요청(PUT2)을 스토리지 노드(110)로 전송할 수 있다. 제2 쓰기 요청(PUT2)은 제2 객체 식별자(ID2), 제1 데이터(DT1), 및 플래그(FG)를 포함할 수 있다.
스토리지 노드(110)의 해시 모듈(113)은 제1 데이터(DT1)에 대한 해시 연산을 통해, 제1 해시 값(H1)을 산출할 수 있다. 스토리지 노드(110)의 호스트 인터페이스 회로(116)는 제1 해시 값(H1)을 포함하는 제2 쓰기 요청(PUTa)을 제1 스토리지 장치(120)로 전송할 수 있다.
제1 스토리지 장치(120)의 호스트 인터페이스 회로(121i)는 제1 해시 값(H1)을 포함하는 제2 쓰기 요청(PUTa)을 수신할 수 있다. 제1 스토리지 장치(120)의 중복 제거 관리자(121d)는 제1 해시 값(H1)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는지 판별할 수 있다. 도 15의 실시 예에서, 제1 해시 값(H1)에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재할 수 있다. 이 경우, 중복 제거 관리자(121d)는 플래그(FG)가 설정된 것에 응답하여, 제2 물리 어드레스(PA2)를 할당할 수 있다. 예를 들어, 도 8의 실시 예에서, 데이터 중복 제거를 위해, 특정 해시 값에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하는 경우, 데이터에 대한 쓰기 동작이 생략된다. 반면에, 도 15의 실시 예에서, 플래그(FG) 설정을 통해 데이터 중복 기능이 비활성화되었으므로, 특정 해시 값에 대응하는 엔트리가 해시-대-물리 테이블(H2P)에 존재하더라도, 중복 제거 관리자(121d)는 데이터에 대한 쓰기 동작을 수행할 수 있다.
제1 스토리지 장치(120)의 메모리 인터페이스 회로(121j)는 프로그램 커맨드(CMD_P), 제2 물리 어드레스(PA2), 및 제1 데이터(DT1)를 불휘발성 메모리들(122) 중 적어도 하나의 불휘발성 메모리로 전송할 수 있다. 불휘발성 메모리들(122) 중 적어도 하나의 불휘발성 메모리는 제2 물리 어드레스(PA2)에 대응하는 영역에 제1 데이터(DT1)를 저장할 수 있다. 이 경우, 동일한 제1 데이터(DT1)가 서로 다른 영역에 중복 저장될 수 있다.
중복 제거 관리자(121d)는 제1 해시 값(H1)에 대응하는 엔트리를 해시-대-물리 테이블(H2P-3)에 추가함으로써, 제4 해시-대-물리 테이블(H2P-4)를 생성할 수 있다. 예시적인 실시 예에서, 추가된 엔트리의 참조 카운트는 객체 식별자에 대한 정보를 대체될 수 있다.
예시적인 실시 예에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)을 갱신할 수 있으며, 이는 앞서 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다.
상술된 바와 같이, 본 발명의 실시 예들에 따르면, 특정 객체들이 참조하는 데이터에 대하여, 데이터 중복 기능을 비활성화시킴으로써, 데이터 신뢰성을 위한 데이터 중복 저장 기능을 제공할 수 있다.
도 16은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 설명의 편의를 위해, 앞서 설명된 구성 요소들에 대한 상세한 설명은 생략된다. 도 1 및 도 16을 참조하면, S601 단계에서, 클라이언트 서버(101)는 객체 식별자(ID), 데이터 길이(len), 및 데이터(DT)를 포함하는 쓰기 요청(PUT)을 스토리지 노드(110)로 전송할 수 있다.
예시적인 실시 예에서, 클라이언트 서버(101)로부터 수신된, 하나의 객체가 참조하는, 데이터의 길이는 다양하게 가변될 수 있다. 이 경우, 다양한 길이의 데이터에 대하여 적절한 해시 값을 연산하기 위해서는, 연산량이 큰 해시 모듈이 필요하다. 이는 해시 모듈로 인한 성능 저하 또는 면적 증가를 유발시킬 수 있다. 따라서, 클라이언트 서버(101)로부터 수신된 데이터는 미리 정해진 기준 값(REF)의 크기로 분할되어 처리될 수 있다.
예를 들어, S602 단계에서, 스토리지 노드(110)는 수신된 데이터 길이(len)가 기준 크기(REF)보다 큰지 판별할 수 있다. 수신된 데이터 길이(len)가 기준 크기(REF)보다 크지 않은 경우, S603 단계에서, 스토리지 노드(110) 및 제1 스토리지 장치(120)는 데이터(DT)에 대한 쓰기 동작을 수행할 수 있다. 예시적인 실시 예에서, S603 단계의 쓰기 동작은 도 1 내지 도 15를 참조하여 설명된 스토리지 노드(110) 및 제1 스토리지 장치(120) 사이의 쓰기 동작과 유사할 수 있다.
수신된 데이터 길이(len)가 기준 크기(REF)보다 큰 경우, S604 단계에서, 스토리지 노드(110)는 데이터(DT)를 기준 크기(REF)로 분할할 수 있다. 이후에, S605a 내지 S605n 단계들 각각에서, 스토리지 노드(110) 및 제1 스토리지 장치(120)는 분할된 데이터 각각에 대한 쓰기 동작들을 수행할 수 있다. S605a 내지 S605n 단계들 각각에서의 쓰기 동작은 도 1 내지 도 15를 참조하여 설명된 스토리지 노드(110) 및 제1 스토리지 장치(120) 사이의 쓰기 동작과 유사할 수 있다. 예시적인 실시 예에서, 동일한 데이터로부터 분할된 데이터라도, 연산된 해시 값에 따라 서로 다른 스토리지 장치에 저장될 수 있다. 예를 들어, 제1 데이터로부터 분할된 제1 분할 데이터는 연산된 해시 값에 따라 제1 스토리지 장치(120) 또는 제2 스토리지 장치(130)에 저장될 수 있다.
이후에, S607 단계에서, 스토리지 노드(110)는 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예를 들어, 스토리지 노드(110)는 분할된 객체들 각각에 대한 객체 식별자를 재설정하고, 분할된 데이터 각각에 대한 해시 값을 연산하고, 재설정된 객체 식별자 및 연산된 해시 값 사이의 매핑 관계를 기반으로 객체-대-해시 테이블(O2H)을 갱신할 수 있다. S608 단계에서, 스토리지 노드(110)는 완료 정보를 클라이언트 서버(101)로 전송할 수 있다.
상술된 바와 같이, 클라이언트 서버(101)로부터 수신된 데이터의 크기가 기준 크기(REF)보다 큰 경우, 스토리지 노드(110)는 데이터를 기준 크기(REF) 단위로 분할시킬 수 있다. 이 경우, 해시 값 산출을 위한 해시 모듈의 크기 및 연산량이 감소될 수 있기 때문에, 향상된 성능을 갖는 서버 시스템이 제공된다.
도 17은 도 1의 서버 시스템의 동작을 예시적으로 보여주는 블록도이다. 설명의 편의를 위해, 앞서 설명된 구성 요소들에 대한 상세한 설명은 생략된다. 도 1 및 도 17을 참조하면, S701 단계에서, 클라이언트 서버(101)는 객체 식별자(ID)를 포함하는 읽기 요청(GET)을 스토리지 노드(110)로 전송할 수 있다.
S702 단계에서, 스토리지 노드(110)는 수신된 객체 식별자(ID)에 대응하는 데이터가 분할되었는지 판별할 수 있다. 예를 들어, 스토리지 노드(110)는 도 16을 참조하여 설명된 쓰기 방법을 기반으로 특정 데이터를 분할하고, 분할된 데이터를 스토리지 장치들에 저장할 수 있다.
수신된 객체 식별자(ID)에 대응하는 데이터가 분할되지 않은 경우, S703 단계에서, 스토리지 노드(110) 및 제1 스토리지 장치(120)는 읽기 동작을 수행할 수 있다. 읽기 동작은 도 1 내지 도 15를 참조하여 설명된 읽기 동작과 유사할 수 있으며, 이에 대한 상세한 설명은 생략된다.
수신된 객체 식별자(ID)에 대응하는 데이터가 분할된 경우, S704 단계에서, 스토리지 노드(110)는 객체 식별자(ID)에 대하여 재설정된 객체 식별자를 기반으로 해시 값들을 검색할 수 있다. S705a 내지 S705n 단계에서, 스토리지 노드(110) 및 제1 스토리지 장치(120)는 검색된 해시 값들(H1~Hn) 각각에 대한 읽기 동작을 수행할 수 있다. S705a 내지 S705n 단계의 동작들 각각은 도 1 내지 도 15를 참조하여 설명된 읽기 동작과 유사할 수 있으며, 이에 대한 상세한 설명은 생략된다.
S706 단계에서, 스토리지 노드(110)는 읽기 동작을 통해 수신된 복수의 데이터를 병합할 수 있다. S707 단계에서, 스토리지 노드(110)는 병합된 데이터를 객체 식별자(ID)에 대응하는 데이터(DT)로서 클라이언트 서버(101)로 전송할 수 있다.
도 18 및 도 19는 도 16 및 도 17을 참조하여 설명된 데이터 분할의 예시를 보여주는 도면들이다. 도 18 및 도 19를 참조하면, 제1 객체 식별자(ID1)에 대응하는 데이터는 10KB의 크기를 가질 수 있다. 이 때, 기준 크기(REF)가 4KB인 경우, 제1 객체 식별자(ID1)에 대응하는 데이터는 4KB 단위로 분할될 수 있으며, 각 분할된 데이터 각각에 대해, ID1a, ID1b, 및 ID1c의 객체 식별자들이 부여될 수 있다.
이 때, 데이터 분할 방식은 분할된 데이터가 기준 크기보다 작도록 분할하는 방식일 수 있다. 예를 들어, 도 18에 도시된 바와 같이, ID1a에 대응하는 분할 데이터는 4KB의 크기를 갖고, ID1b에 대응하는 분할 데이터의 크기는 4KB의 크기를 갖고, ID1c에 대응하는 분할 데이터의 크기는 2KB를 가질 수 있다.
반면에, 데이터 분할 방식은 분할된 데이터가 기준 크기와 같도록 분할하는 방식일 수 있다. 예를 들어, 도 19에 도시된 바와 같이, ID1a, ID1b, 및 ID1c에 대응하는 분할 데이터 각각은 4KB를 가질 수 있다. 이 경우, ID1c에 대응하는 분할 데이터 중 2KB는 실제 데이터일 수 있고, 나머지 2KB는 더미 데이터 또는 패딩 데이터일 수 있다.
상술된 바와 같이, 데이터의 크기가 가변되는 통신 환경에서, 해시 연산에 대한 부담을 경감시키기 위해, 본 발명에 따른 스토리지 노드는 기준 크기(REF)를 기반으로 데이터를 분할하여 관리할 수 있다.
도 20은 본 발명의 실시 예에 따른 서버 시스템을 예시적으로 보여주는 도면이다. 도 21은 도 20의 서버 시스템의 각 스토리지 노드에서 관리되는 해시 범위를 설명하기 위한 도면이다. 도 20을 참조하면, 서버 시스템(200)은 클라이언트 서버(101) 및 복수의 스토리지 서버들(202, 203, 204)을 포함할 수 있다. 클라이언트 서버(101) 및 복수의 스토리지 서버들(202, 203, 204)은 네트워크(NT)를 통해 서로 통신할 수 있다.
복수의 스토리지 서버들(202, 203, 204) 각각은 복수의 스토리지 노드들(211, 212, 213), 및 복수의 스토리지 장치들(221, 222, 223, 224, 225, 226)을 포함할 수 있다. 복수의 스토리지 서버들(202, 203, 204) 각각의 구성 요소들(예를 들어, 복수의 스토리지 노드들(211, 212, 213), 및 복수의 스토리지 장치들(221, 222, 223, 224, 225, 226))은 앞서 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다.
예시적인 실시 예에서, 도면에 도시된 클라이언트 서버(201)의 개수, 스토리지 서버들(202, 203, 204)의 개수, 스토리지 노드들(211, 212, 213)의 개수, 및 스토리지 장치들(221~226)의 개수는 예시적인 것이며, 각 구성 요소들의 개수는 다양하게 증가/감소될 수 있다.
각 스토리지 노드들(211, 212, 213)은 서로 다른 객체 식별자에 대응하는 데이터를 관리하도록 구성될 수 있다. 예를 들어, 클라이언트 서버(201)는 제1 객체 식별자에 대응하는 데이터를 제1 스토리지 노드(211)를 통해 액세스하고, 제2 객체 식별자에 대응하는 데이터를 제2 스토리지 노드(212)를 통해 액세스하고, 제3 객체 식별자에 대응하는 데이터를 제3 스토리지 노드(213)를 통해 액세스할 수 있다.
제1 스토리지 서버(202)에 포함된 제1 스토리지 노드(211)는 스토리지 장치들(221, 222)을 관리하도록 구성될 수 있다. 제2 스토리지 서버(203)에 포함된 제2 스토리지 노드(212)는 스토리지 장치들(223, 224)을 관리하도록 구성될 수 있다. 제3 스토리지 서버(204)에 포함된 제3 스토리지 노드(213)는 스토리지 장치들(225, 226)을 관리하도록 구성될 수 있다.
예시적인 실시 예에서, 제1 스토리지 노드(211)는 다른 스토리지 노드들(212, 213)에 관리되는 스토리지 장치들(223, 224, 225, 226)을 액세스하도록 구성될 수 있다. 예를 들어, 제1 스토리지 노드(211)는, 네트워크(NT)를 통해 또는 다른 별도의 통신 인터페이스를 통해, 다른 스토리지 노드들(212, 213)에 관리되는 스토리지 장치들(223, 224, 225, 226)을 액세스할 수 있다. 마찬가지로, 제2 스토리지 노드(212)는, 네트워크(NT)를 통해 또는 다른 별도의 통신 인터페이스를 통해, 다른 스토리지 노드들(211, 213)에 관리되는 스토리지 장치들(221, 222, 225, 226)을 액세스할 수 있다. 마찬가지로, 제3 스토리지 노드(213)는, 네트워크(NT)를 통해 또는 다른 별도의 통신 인터페이스를 통해, 다른 스토리지 노드들(211, 212)에 관리되는 스토리지 장치들(221, 222, 223, 224)을 액세스할 수 있다.
제1 내지 제3 스토리지 노드들(211, 212, 213) 각각은 대응하는 스토리지 장치들(221~226)에 대한 해시 범위를 관리하도록 구성될 수 있다. 예를 들어, 도 21에 도시된 바와 같이, 제1 스토리지 노드(211)는 스토리지 장치들(221, 222) 각각에 대한 해시 범위(HR_11, HR_12)를 관리할 수 있고, 제2 스토리지 노드(212)는 스토리지 장치들(223, 224) 각각에 대한 해시 범위(HR_21, HR_22)를 관리할 수 있고, 제3 스토리지 노드(213)는 스토리지 장치들(225, 226) 각각에 대한 해시 범위(HR_31, HR_32)를 관리할 수 있다. 예시적인 실시 예에서, 스토리지 장치들(221~226) 각각에 대한 해시 범위(HR_11, HR_12, HR_21, HR_22, HR_31, HR_32)는 서로 다를 수 있다.
본 발명의 실시 예에 따르면, 서버 시스템(200)은 동일한 데이터를 참조하는 복수의 객체들에 대하여, 데이터 중복 제거 기능을 제공할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 클라이언트 서버(201)는 제1 스토리지 노드(211)를 통해 제1 객체 식별자에 대한 데이터를 액세스하고, 제2 스토리지 노드(212)를 통해 제2 객체 식별자에 대한 데이터를 액세스하고, 제3 스토리지 노드(213)를 통해 제3 객체 식별자에 대한 데이터를 액세스하는 것으로 가정한다.
예시적인 실시 예에서, 쓰기 동작시, 클라이언트 서버(201)는 제1 객체 식별자(ID1) 및 제1 데이터(DT1)에 대한 쓰기 요청을 제1 스토리지 노드(211)로 전송할 수 있다. 제1 스토리지 노드(211)는 제1 데이터(DT1)에 대한 해시 연산을 통해 제1 해시 값(H1)을 연산할 수 있다. 제1 스토리지 노드(211)는 제1 해시 값(H1)이 어떤 해시 범위에 포함되는지 판별할 수 있다. 제1 스토리지 노드(211)는 제1 해시 값(H1)이 포함된 해시 범위를 갖는 스토리지 장치로 제1 데이터(DT1) 및 제1 해시(H1)를 포함하는 쓰기 요청을 전송할 수 있다. 예를 들어, 제1 해시 값(H1)이 제2 스토리지 노드(212)에 의해 관리되는 스토리지 장치(223)의 해시 범위(HR_21)에 포함되는 경우, 제1 스토리지 노드(211)는 제1 데이터(DT1) 및 제1 해시(H1)를 포함하는 쓰기 요청을 스토리지 장치(223)로 전송할 수 있다. 제1 스토리지 노드(211)는 제1 객체(ID1) 및 제1 해시 값(H1)을 기반으로 객체-대-해시 테이블(O2H)을 갱신할 수 있다.
예시적인 실시 예에서, 읽기 동작시, 클라이언트 서버(201)는 제1 객체 식별자(ID1)를 포함하는 읽기 요청을 제1 스토리지 노드(211)로 전송할 수 있다. 제1 스토리지 노드(211)는 객체-대-해시 테이블(O2H)을 기반으로 제1 객체 식별자(ID1)에 대응하는 제1 해시 값(H1)을 검색할 수 있다. 제1 스토리지 노드(211)는 쓰기 동작을 참조하여 설명된 바와 유사하게, 제1 해시 값(H1)이 포함된 해시 범위를 판별하고, 판별된 해시 범위와 대응하는 스토리지 장치로 제1 해시 값(H1)이 포함된 읽기 요청을 전송할 수 있다.
즉, 클라이언트 서버(201)는 객체 식별자를 기반으로 복수의 스토리지 노드들(211~213)을 분할하여 관리할 수 있고, 복수의 스토리지 노드들(211~213)은 데이터에 대한 해시 값을 기반으로 데이터가 저장된 스토리지 장치를 관리할 수 있다. 스토리지 장치는 앞서 설명된 바와 같이, 해시 값 및 참조 카운터를 기반으로 데이터 중복 제거 기능을 제공할 수 있다.
도 22는 도 20의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 설명의 편의를 위해, 앞서 설명된 구성 요소들에 대한 상세한 설명은 생략된다. 도 20 및 도 22를 참조하면, S801 단계에서, 클라이언트 서버(201)는 제1 객체 식별자(ID1), 데이터 길이(len), 및 제1 데이터(DT1)를 포함하는 쓰기 요청(PUT)을 제1 스토리지 노드(211)로 전송할 수 있다. 예를 들어, 클라이언트 서버(201)는 객체 식별자를 기반으로 액세스할 스토리지 서버 또는 스토리지 노드를 선택할 수 있다.
S802 단계에서, 제1 스토리지 노드(211)는 제1 데이터(DT1)에 대한 해시 연산을 수행하여, 제1 해시 값(H1)을 산출할 수 있다. S803 단계에서, 제1 스토리지 노드(211)는 제1 해시 값(H1)이 자신에 의해 관리되는 해시 범위에 포함되는지 판별할 수 있다. 예를 들어, 도 21을 참조하여 설명된 바와 같이, 제1 스토리지 노드(211)에 의해 관리되는 해시 범위는 HR_11 및 HR_12일 수 있다. 제1 스토리지 노드(211)는 제1 해시 값(H1)이 HR_11 및 HR_12의 해시 범위들에 포함되는지 판별할 수 있다.
제1 해시 값(H1)이 제1 스토리지 노드(211)에 의해 관리되는 해시 범위에 포함된 경우, S804 단계에서, 제1 스토리지 노드(211) 및 제1 스토리지 장치(221 또는 222)는 쓰기 동작을 수행할 수 있다.
제1 해시 값(H1)이 제1 스토리지 노드(211)에 의해 관리되는 해시 범위에 포함되지 않는 경우, S805 단계에서, 제1 스토리지 노드(211)는 제1 해시 값(H1)이 어떤 해시 범위에 포함되는지 판별할 수 있다. 예를 들어, 제1 해시 값(H1)이 HR_21 또는 HR_22의 해시 범위에 포함되는 경우, 제1 스토리지 노드(211)는 제1 해시 값(H1)이 제2 스토리지 노드(212)에 대응하는 것으로 결정할 수 있다. 제1 해시 값(H1)이 HR_31 또는 HR_32의 해시 범위에 포함되는 경우, 제1 스토리지 노드(211)는 제1 해시 값(H1)이 제3 스토리지 노드(312)에 대응하는 것으로 결정할 수 있다.
제1 해시 값(H1)이 제2 스토리지 노드(212)의 해시 범위(HR21, HR22)에 포함되는 것으로 결정된 경우, S806 단계에서, 제1 스토리지 노드(211)는 제2 스토리지 노드(212)로 쓰기 요청(PUT)을 전송할 수 있다. S807 단계에서, 제2 스토리지 노드(212)는 제1 해시 값(H1)을 연산할 수 있다. S808 단계에서, 제2 스토리지 노드(212) 및 제2 스토리지 장치(223 또는 224)는 쓰기 동작을 수행할 수 있다.
제1 해시 값(H1)이 제3 스토리지 노드(213)의 해시 범위(HR31, HR32)에 포함되는 것으로 결정된 경우, S809 단계에서, 제1 스토리지 노드(211)는 제3 스토리지 노드(213)로 쓰기 요청(PUT)을 전송할 수 있다. S810 단계에서, 제3 스토리지 노드(213)는 제1 해시 값(H1)을 연산할 수 있다. S811 단계에서, 제3 스토리지 노드(213) 및 제3 스토리지 장치(225 또는 226)는 쓰기 동작을 수행할 수 있다.
예시적인 실시 예에서, S804 단계의 쓰기 동작, S808 단계의 쓰기 동작, 및 S811 단계의 쓰기 동작은 도 1 내지 도 15를 참조하여 설명된 쓰기 동작(해시 값, 참조 카운트를 사용한 중복 제거 기능을 제공하는 쓰기 동작)과 유사하므로, 이에 대한 상세한 설명은 생략된다.
S808 단계의 쓰기 동작이 완료된 이후에, S812 단계에서, 제2 스토리지 노드(212)는 완료 정보(completion)를 제1 스토리지 노드(211)로 전송할 수 있다. S811 단계의 쓰기 동작이 완료된 이후에, S813 단계에서, 제3 스토리지 노드(213)는 완료 정보(completion)를 제1 스토리지 노드(211)로 전송할 수 있다.
S804 단계의 쓰기 동작이 완료되거나, 또는 S812 단계 또는 S813 단계를 통해 완료 정보가 수신된 경우, S814 단계에서, 제1 스토리지 노드(211)는 완료 정보(completion)를 클라이언트 서버(201)로 전송할 수 있다.
S815 단계에서, 제1 스토리지 서버(211)는 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예를 들어, 제1 스토리지 서버(211)는 제1 객체 식별자(ID1) 및 제1 해시 값(H1)에 대한 매핑 정보를 기반으로 객체-대-해시 테이블(O2H)을 갱신할 수 있다. 예시적인 실시 예에서, 이후에, 제1 스토리지 노드(211)가 제1 객체 식별자(ID1)에 대한 읽기 요청을 수신한 경우, 제1 스토리지 노드(211)는 갱신된 객체-대-해시 테이블(O2H)을 기반으로 제1 해시 값(H1)을 검색하고, 검색된 제1 해시 값(H1)을 기반으로 읽기 동작을 수행할 수 있다.
도 23은 도 20의 서버 시스템의 동작을 예시적으로 보여주는 순서도이다. 설명의 편의를 위해, 앞서 설명된 구성 요소들에 대한 상세한 설명은 생략된다. 도 20 및 도 23을 참조하면, S901 단계에서, 클라이언트 서버(201)는 제1 객체 식별자(ID1)를 포함하는 읽기 요청(GET)을 제1 스토리지 노드(211)로 전송할 수 있다.
S902 단계에서, 제1 스토리지 노드(211)는 객체-대-해시 테이블(O2H)을 기반으로 제1 객체 식별자(ID1)에 대응하는 제1 해시 값(H1)을 검색할 수 있다.
S903 단계에서, 제1 스토리지 노드(211)는 제1 해시 값(H1)이 자신에 의해 관리되는 해시 범위에 포함되는지 판별할 수 있다. S903 단계의 동작은 도 22의 S803 단계의 동작과 유사하므로, 이에 대한 상세한 설명은 생략된다.
제1 해시 값(H1)이 제1 스토리지 노드(211)에 의해 관리되는 해시 범위에 포함된 경우, S904 단계에서, 제1 스토리지 노드(211) 및 제1 스토리지 장치(221 또는 222)는 읽기 동작을 수행할 수 있다.
제1 해시 값(H1)이 제1 스토리지 노드(211)에 의해 관리되는 해시 범위에 포함되지 않는 경우, S905 단계에서, 제1 스토리지 노드(211)는 제1 해시 값(H1)이 어떤 해시 범위에 포함되는지 판별할 수 있다. S905 단계의 동작은 도 22의 S805 단계의 동작과 유사하므로, 이에 대한 상세한 설명은 생략된다.
제1 해시 값(H1)이 제2 스토리지 노드(212)의 해시 범위(HR21, HR22)에 포함되는 것으로 결정된 경우, S906 단계에서, 제1 스토리지 노드(211)는 제2 스토리지 노드(212)로 제1 해시 값(H1)을 포함하는 읽기 요청(GETa)을 전송할 수 있다. S907 단계에서, 제2 스토리지 노드(212) 및 제2 스토리지 장치(223 또는 224)는 읽기 동작을 수행할 수 있다.
제1 해시 값(H1)이 제3 스토리지 노드(213)의 해시 범위(HR31, HR32)에 포함되는 것으로 결정된 경우, S908 단계에서, 제1 스토리지 노드(211)는 제3 스토리지 노드(213)로 제1 해시 값(H1)을 포함하는 읽기 요청(GETa)을 전송할 수 있다. S909 단계에서, 제3 스토리지 노드(213) 및 제3 스토리지 장치(225 또는 226)는 읽기 동작을 수행할 수 있다.
예시적인 실시 예에서, S904 단계의 읽기 동작, S907 단계의 읽기 동작, 및 S909 단계의 읽기 동작은 도 1 내지 도 15를 참조하여 설명된 읽기 동작(해시 값을 읽기 동작)과 유사하므로, 이에 대한 상세한 설명은 생략된다.
S907 단계의 읽기 동작이 완료된 이후에, S910 단계에서, 제2 스토리지 노드(212)는 읽은 제1 데이터(DT1)를 제1 스토리지 노드(211)로 전송할 수 있다. S909 단계의 읽기 동작이 완료된 이후에, S911 단계에서, 제3 스토리지 노드(213)는 읽은 제1 데이터(DT1)를 제1 스토리지 노드(211)로 전송할 수 있다.
S904 단계의 읽기 동작이 완료되거나, 또는 S910 단계 또는 S911 단계를 통해 제1 데이터(DT1)가 수신된 경우, S912 단계에서, 제1 스토리지 노드(211)는 제1 데이터(DT1)를 클라이언트 서버(201)로 전송할 수 있다.
예시적인 실시 예에서, 클라이언트 서버(201)가 제1 스토리지 노드(211)를 통해 제1 객체 식별자(ID1)에 대한 액세스(예를 들어, 쓰기/읽기)를 수행하는 실시 예가 설명되었으나, 본 발명의 범위가 이에 한정되는 것은 아니다. 예를 들어, 클라이언트 서버(201)가 제2 객체 식별자(ID2)에 대하여 제2 스토리지 노드(212)를 통해 액세스하는 경우, 클라이언트 서버(201)는 제2 객체 식별자(ID2)에 대응하는 요청을 제2 스토리지 서버(212)로 전송할 수 있다. 제2 스토리지 서버(212)는 제2 해시 값(즉, 쓰기 동작의 경우, 제2 데이터에 대한 해시 값 또는 읽기 동작의 경우, 제2 객체 식별자에 대한 해시 값)을 기반으로 액세스될 스토리지 노드 또는 스토리지 장치를 선택할 수 있다.
도 20 및 도 22를 참조하여, 특정 스토리지 노드가 다른 스토리지 노드를 경유하여 다른 스토리지 장치를 액세스하는 실시 예가 설명되었으나, 본 발명이 이에 한정되는 것은 아니다. 예를 들어, 특정 스토리지 노드는 다른 스토리지 노드와 연결된 다른 스토리지 장치를 다른 스토리지 노드를 경유하지 않고 액세스할 수 있다. 또는, 특정 스토리지 노드는 다른 스토리지 노드와 연결된 다른 스토리지 장치를 다른 스토리지 노드의 일부 구성(예를 들어, 스위치)만 경유하여 액세스할 수 있다.
상술된 바와 같이, 본 발명의 실시 예들에 따르면, 데이터에 대한 해시 값을 기반으로 데이터에 대한 중복 제거 기능을 구현하는 스토리지 장치 및 스토리지 서버가 제공된다. 이 경우, 스토리지 노드에서 관리되는 정보가 감소될 수 있으며, 향상된 성능이 제공될 수 있다.
도 24는 본 발명의 실시 예에 따른 스토리지 장치가 적용된 데이터 센터를 예시적으로 보여주는 블록도이다. 데이터 센터(2000)는 다양한 데이터를 유지 관리하고, 다양한 데이터에 대한 다양한 서비스를 제공하는 시설로서, 데이터 스토리지 센터로 불릴 수 있다. 데이터 센터(200)는 검색 엔진 또는 데이터 베이스 운용을 위한 시스템일 수 있으며, 다양한 기관에서 사용된 컴퓨팅 시스템일 수 있다. 데이터 센터(2000)는 복수의 애플리케이션 서버들(2100_1~2100_n) 및 복수의 스토리지 서버들(2200_1~2200_m)을 포함할 수 있다. 복수의 애플리케이션 서버들(2100_1~2100_n)의 개수 및 복수의 스토리지 서버들(2200_1~2200_m)의 개수는 다양하게 변형될 수 있다.
이하에서, 설명의 편의를 위해, 제1 스토리지 서버(2200_1)의 예시가 설명된다. 나머지 스토리지 서버들(2200_2~2200_m) 및 복수의 애플리케이션 서버들(2100_1~2100_n) 각각은 제1 스토리지 서버(2200_1)와 유사한 구조를 가질 수 있다.
제1 스토리지 서버(2200_1)는 프로세서(2210_1), 메모리(2220_1), 스위치(2230_1), 네트워크 인터페이스 커넥터(NIC; network interface connector)(2240_1), 및 스토리지 장치(2250_1)를 포함할 수 있다. 프로세서(2210_1)는 제1 스토리지 서버(2200_1)의 전반적인 동작을 제어할 수 있다. 메모리(2220_1)는 프로세서(2210_1)의 제어에 따라 다양한 명령어 또는 데이터를 저장할 수 있다. 프로세서(2210_1)는 메모리(2220_1)를 액세스하여 다양한 명령어를 실행하거나 또는 데이터를 처리하도록 구성될 수 있다. 예시적인 실시 예에서, 메모리(2220_1)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 또는 NVDIMM(Non-Volatile DIMM)과 같은 다양한 종류의 메모리 장치들 중 적어도 하나를 포함할 수 있다.
예시적인 실시 예에서, 제1 스토리지 서버(2200_1)에 포함된 프로세서(2210_1)의 개수 및 메모리(2220_1)의 개수는 다양하게 변형될 수 있다. 예시적인 실시 예에서, 제1 스토리지 서버(2200_1)에 포함된 프로세서(2210_1) 및 메모리(2220_1)는 프로세서-메모리 페어를 구성할 수 있으며, 제1 스토리지 서버(2200_1)에 포함된 프로세서-메모리 페어의 개수는 다양하게 변형될 수 있다. 예시적인 실시 예에서, 제1 스토리지 서버(2200_1)에 포함된 프로세서(2210_1)의 개수 및 메모리(2220_1)의 개수는 서로 다를 수 있다. 프로세서(2210_1)는 싱글 코어 프로세서 또는 멀티 코어 프로세서를 포함할 수 있다.
스위치(2230_1)는 프로세서(2210_1)의 제어에 따라 프로세서(2210_1) 및 스스토리지 장치(2250_1) 사이를 선택적으로 연결시키거나 또는 NIC(2240_1) 및 스토리지 장치(2250_1) 사이를 선택적으로 연결시킬 수 있다.
NIC(2240_1)는 제1 스토리지 서버(2200_1)를 네트워크(NT)와 연결시키도록 구성될 수 있다. NIC(2240_1)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(2240_1)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(NT)에 연결될 수 있다. NIC(2240_1)는 내부 메모리, DSP, 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(2210_1) 또는 스위치(2230_1) 등과 연결될 수 있다. 호스트 버스 인터페이스는, ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스들 중 적어도 하나를 포함할 수 있다. 예시적인 실시 예에서, NIC(2240_1)는 프로세서(2210_1), 스위치(2230_1), 및 스토리지 장치(2250_1) 중 적어도 하나와 통합될 수도 있다.
스토리지 장치(2250_1)는 프로세서(2210_1)의 제어에 따라 데이터를 저장하거나 또는 저장된 데이터를 출력할 수 있다. 스토리지 장치(2250_1)는 컨트롤러(2251_1), 불휘발성 메모리(2252_1), DRAM(2253_1), 및 인터페이스(2254_1)를 포함할 수 있다. 예시적인 실시 예에서, 스토리지 장치(2250_1)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 더 포함할 수 있다.
컨트롤러(2251_1)는 스토리지 장치(2250_1)의 제반 동작을 제어할 수 있다. 예시적인 실시 예에서, 컨트롤러(2250_1)는 SRAM을 포함할 수 있다. 컨트롤러(2251_1)는 인터페이스(2254_1)를 통해 수신된 신호들에 응답하여 불휘발성 메모리(2252_1)에 데이터를 저장하거나 또는 불휘발성 메모리(2252_1)에 저장된 데이터를 출력할 수 있다. 예시적인 실시 예에서, 컨트롤러(2251_1)는 토글 인터페이스 또는 ONFI 인터페이스를 기반으로 불휘발성 메모리(2252_1)를 제어하도록 구성될 수 있다.
DRAM(2253_1)은 불휘발성 메모리(2252_1)에 저장될 데이터 또는 불휘발성 메모리(2252_1)로부터 읽어진 데이터를 임시 저장하도록 구성될 수 있다. DRAM(2253_1)은 컨트롤러(2251_1)가 동작하는데 필요한 다양한 데이터(예를 들어, 메타 데이터, 매핑 데이터 등)를 저장하도록 구성될 수 있다. 인터페이스(2254_1)는 프로세서(2210_1), 스위치(2230_1), 또는 NIC(2240_1)와 컨트롤러(2251_1) 사이의 물리적 연결을 제공할 수 있다. 예시적인 실시 예에서, 인터페이스(2254_1)는 스토리지 장치(2250_1)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 예시적인 실시 예에서, 인터페이스(2254_1)는 앞서 호스트 인터페이스 버스를 통해 설명된 다양한 인터페이스들 중 적어도 하나를 기반으로 구성될 수 있다.
상술된 제1 스토리지 서버(2200_1)의 구성들은 예시적인 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다. 상술된 제1 스토리지 서버(2200_1)의 구성들은 다른 스토리지 서버들 또는 복수의 애플리케이션 서버들 각각에 적용될 수 있다. 예시적인 실시 예에서, 복수의 애플리케이션 서버들(2100_1~2100_n) 각각에서, 스토리지 장치(2150_1)는 선택적으로 생략될 수 있다.
복수의 애플리케이션 서버들(2100_1~2100_n) 및 복수의 스토리지 서버들(2200_1~2200_m)은 네트워크(NT)를 통해 서로 통신할 수 있다. 네트워크(NT)는 FC(Fibre Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(NT)의 액세스 방식에 따라 스토리지 서버들(2200_1~2200_m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
예시적인 실시 예에서, 네트워크(NT)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 또는, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 예시적인 실시 예에서, 네트워크(NT)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(NT)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
예시적인 실시 예에서, 복수의 애플리케이션 서버들(2100_1~2100_n) 중 적어도 하나는 네트워크(NT)를 통해 복수의 애플리케이션 서버들(2100_1~2100_n) 중 적어도 다른 하나 또는 복수의 스토리지 서버들(2200_1~2200_m) 중 적어도 하나를 액세스하도록 구성될 수 있다.
예를 들어, 제1 애플리케이션 서버(2100_1)는 사용자 또는 클라이언트가 요청한 데이터를 네트워크(NT)를 통해 복수의 스토리지 서버들(2200_1~2200_m) 중 적어도 하나에 저장할 수 있다. 또는 제1 애플리케이션 서버(2100_1)는 사용자 또는 클라이언트가 요청한 데이터를 네트워크(NT)를 통해 복수의 스토리지 서버들(2200_1~2200_m) 중 적어도 하나로부터 획득할 수 있다. 이 경우, 제1 애플리케이션 서버(2100_1)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
즉, 제1 애플리케이션 서버(2100_1)의 프로세서(2110_1)는 네트워크(NT)를 통해, 다른 애플리케이션 서버(예를 들어, 2100_n)의 메모리(2120_n) 또는 스토리지 장치(2150_n)을 액세스할 수 있다. 또는 제1 애플리케이션 서버(2100_1)의 프로세서(2110_1)는 네트워크(NT)를 통해, 제1 스토리지 서버(2200_1)의 메모리(2220_1) 또는 스토리지 장치(2250_1)를 액세스할 수 있다. 이를 통해, 제1 애플리케이션 서버(2100_1)는 다른 애플리케이션 서버들(2100_2~2100_n) 또는 복수의 스토리지 서버들(2200_1~2200_m)에 저장된 데이터에 대한 다양한 동작들을 수행할 수 있다. 예를 들어, 제1 애플리케이션 서버(2100_1)는 다른 애플리케이션 서버들(2100_2~2100_n) 또는 복수의 스토리지 서버들(2200_1~2200_m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행하거나 또는 발행할 수 있다. 이 경우, 이동 또는 카피되는 데이터는 스토리지 서버들(2200_1~2200_m)의 스토리지 장치들(2250_1~2250_m)로부터 스토리지 서버들(2200_1~2200_m)의 메모리들(2220_1~2220_m)를 거치거나 또는 직접 애플리케이션 서버들(2100_1~2100_n)의 메모리들(2120_1~2120_n)로 이동될 수 있다. 네트워크(NT)를 통해 전달되는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
예시적인 실시 예에서, 스토리지 서버들(2200_1~2200_m)은 도 1 내지 도 23을 참조하여 설명된 스토리지 노드들일 수 있고, 스토리지 서버들(2200_1~2200_m)에 포함된 스토리지 장치들(2250_1~2250_m)은 도 1 내지 도 23을 참조하여 설명된 스토리지 장치들일 수 있다. 즉, 도 24에 도시된 데이터 센터(2000) 스토리지 서버들(2200_1~2200_m), 또는 스토리지 장치들(2250_1~2250_m)은 도 1 내지 도 23을 참조하여 설명된 쓰기 동작, 읽기 동작, 및 소거 동작을 지원하도록 구성될 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.

Claims (20)

  1. 스토리지 장치의 동작 방법에 있어서,
    외부 장치로부터 제1 객체 식별자 및 제1 데이터를 포함하는 제1 쓰기 요청을 수신하는 단계;
    제1 데이터에 대한 해시 연산을 수행하여 제1 해시 값을 생성하는 단계;
    상기 제1 해시 값에 대응하는 제1 엔트리가 제1 테이블에 존재하는 경우:
    상기 제1 엔트리가 비어 있다면, 제1 물리 어드레스에 대응하는 영역에 상기 제1 데이터를 저장하고, 상기 제1 엔트리가 상기 제1 해시 값, 상기 제1 물리 어드레스, 및 상기 제1 참조 카운트를 포함하도록 상기 제1 테이블을 갱신하고;
    상기 제1 엔트리가 비어있지 않다면, 상기 제1 데이터에 대한 저장 동작 없이, 상기 제1 엔트리에 포함된 제1 참조 카운트를 증가시키는 단계; 및
    상기 제1 엔트리가 상기 제1 테이블에서 존재하지 않는 경우, 상기 외부 장치로 에러를 리턴하는 단계를 포함하고,
    상기 제1 테이블은 복수의 엔트리들을 포함하고,
    상기 복수의 엔트리들 각각은 데이터에 대한 해시 값, 상기 데이터에 대응하는 물리 어드레스, 및 상기 데이터에 대한 참조 카운트에 대한 정보를 포함하는 동작 방법.
  2. 제 1 항에 있어서,
    상기 제1 쓰기 요청은 상기 제1 데이터에 대한 제2 해시 값을 더 포함하고,
    상기 외부 장치로부터 수신된 상기 제2 해시 값 및 상기 해시 연산을 통해 연산된 상기 제1 해시 값이 서로 동일하지 않은 경우, 상기 외부 장치로 에러를 리턴하는 단계를 더 포함하는 동작 방법.
  3. 제 1 항에 있어서,
    상기 외부 장치로부터 상기 제1 객체 식별자 및 상기 제1 해시 값을 포함하는 제1 읽기 요청을 수신하는 단계;
    상기 제1 해시 값에 대응하는 상기 제1 엔트리의 상기 제1 물리 어드레스를 기반으로 상기 제1 데이터를 읽는 단계;
    상기 제1 데이터에 대한 해시 연산을 통해 제3 해시 값을 생성하는 단계; 및
    상기 제1 해시 값 및 상기 제3 해시 값이 동일한 경우, 상기 제1 데이터를 상기 외부 장치로 전송하는 단계를 더 포함하는 동작 방법.
  4. 제 3 항에 있어서,
    상기 제1 읽기 요청을 수신한 이후에, 상기 제1 해시 값에 대응하는 상기 제1 엔트리가 상기 제1 테이블이 포함되지 않는 경우, 상기 외부 장치로 에러를 리턴하는 단계를 더 포함하는 동작 방법.
  5. 제 1 항에 있어서,
    상기 외부 장치로부터 상기 제1 객체 식별자 및 상기 제1 해시 값을 포함하는 제1 삭제 요청을 수신하는 단계; 및
    상기 제1 해시 값에 대응하는 상기 제1 엔트리의 상기 제1 참조 카운트를 미리 정해진 값만큼 감소시키는 단계를 더 포함하는 동작 방법.
  6. 제 5 항에 있어서,
    상기 제1 엔트리의 상기 제1 참조 카운트가 0(zero)으로 감소된 경우, 상기 제1 엔트리의 상기 제1 물리 어드레스에 대응하는 영역에 저장된 상기 제1 데이터는 가비지 콜렉션 동작시, 무효 데이터로 선택되는 동작 방법.
  7. 제 1 항에 있어서,
    상기 제1 참조 카운트는 상기 제1 데이터를 참조하는 객체들의 개수를 가리키는 동작 방법.
  8. 제 1 항에 있어서,
    외부 장치로부터 제1 객체 식별자, 제1 데이터, 및 플래그를 포함하는 제2 쓰기 요청을 수신하는 단계;
    상기 제1 데이터에 대한 상기 해시 연산을 수행하여 상기 제1 해시 값을 생성하는 단계; 및
    상기 플래그를 기반으로, 상기 제1 해시 값에 대응하는 상기 제1 엔트리가 상기 제1 테이블에 포함되는지와 무관하게, 상기 제1 데이터를 제2 물리 어드레스에 대응하는 영역에 저장하고, 상기 상기 제1 해시 값 및 상기 제2 물리 어드레스를 포함하는 제2 엔트리를 상기 제2 테이블에 추가하는 단계를 포함하는 동작 방법.
  9. 복수의 스토리지 장치들 및 상기 복수의 스토리지 장치들을 관리하도록 구성된 스토리지 노드를 포함하는 스토리지 서버의 동작 방법에 있어서,
    상기 스토리지 노드에 의해, 외부 클라이언트 서버로부터 제1 객체 식별자 및 제1 데이터를 포함하는 제1 쓰기 요청을 수신하는 단계;
    상기 스토리지 노드에 의해, 상기 제1 데이터에 대한 해시 연산을 수행하여, 제1 해시 값을 생성하는 단계;
    상기 스토리지 노드에 의해, 상기 복수의 스토리지 장치들 각각에 할당된 복수의 해시 범위들 중 상기 제1 해시 값이 포함된 제1 해시 범위를 판별하는 단계;
    상기 스토리지 노드에 의해, 상기 복수의 스토리지 장치들 중 상기 제1 해시 범위에 대응하는 제1 스토리지 장치로 상기 제1 객체 식별자, 상기 제1 데이터, 및 상기 제1 해시 값을 포함하는 제2 쓰기 요청을 전송하는 단계;
    상기 제1 스토리지 장치에 의해, 상기 제2 쓰기 요청에 포함된 상기 제1 데이터에 대한 해시 연산을 수행하여, 제2 해시 값을 생성하는 단계;
    상기 제1 해시 값 및 상기 제2 해시 값이 동일한 경우, 상기 제1 스토리지 장치에 의해, 상기 제1 해시 값에 대응하는 제1 엔트리가 제1 테이블에 존재하는 것에 응답하여, 상기 제1 데이터에 대한 저장 동작 없이, 상기 제1 엔트리의 제1 참조 카운트를 증가시키는 단계;
    상기 제1 스토리지 장치에 의해, 상기 스토리지 노드로 상기 제2 쓰기 요청에 대한 완료 응답을 전송하는 단계;
    상기 스토리지 노드에 의해, 상기 제1 객체 식별자 및 상기 제1 해시 값을 기반으로 제2 테이블을 갱신하는 단계를 포함하고,
    상기 제1 테이블은 복수의 엔트리들을 포함하고,
    상기 복수의 엔트리들 각각은 데이터에 대한 해시 값, 상기 데이터에 대응하는 물리 어드레스, 및 상기 데이터에 대한 참조 카운트에 대한 정보를 포함하고,
    상기 제2 테이블은 복수의 객체 식별자들 및 대응하는 해시 값에 대한 정보를 포함하는 동작 방법.
  10. 제 9 항에 있어서,
    상기 스토리지 노드에 의한 해시 연산 및 상기 제1 스토리지 장치에 의한 해시 연산은 서로 동일한 연산인 동작 방법.
  11. 제 9 항에 있어서,
    상기 제1 해시 값 및 상기 제2 해시 값이 동일하지 않은 경우, 상기 제1 스토리지 장치에 의해, 상기 스토리지 노드로 에러 정보를 리턴하는 단계; 및
    상기 스토리지 노드에 의해, 상기 에러 정보에 응답하여 에러 관리를 수행하는 단계를 더 포함하는 동작 방법.
  12. 제 11 항에 있어서,
    상기 에러 관리는 상기 제1 데이터에 대한 해시 연산을 재수행하여 상기 제1 해시 값을 재생성하는 동작 및 상기 제2 쓰기 요청을 상기 제1 스토리지 장치로 재전송하는 동작을 포함하는 동작 방법.
  13. 제 9 항에 있어서,
    상기 스토리지 노드에 의해, 상기 복수의 스토리지 장치들 각각으로부터 장치 크기 정보를 수신하는 단계; 및
    상기 스토리지 노드에 의해, 상기 복수의 스토리지 장치들 각각으로부터의 상기 장치 크기 정보를 기반으로 상기 복수의 스토리지 장치들로 상기 복수의 해시 범위들을 각각 할당하는 단계를 더 포함하고,
    상기 복수의 해시 범위들 각각은 서로 중첩되지 않는 동작 방법.
  14. 제 13 항에 있어서,
    상기 스토리지 노드에 의해, 상기 제1 해시 값이 상기 복수의 해시 범위들에 포함되지 않는 것에 응답하여, 상기 외부 장치로 에러를 리턴하는 단계를 더 포함하는 동작 방법.
  15. 제 14 항에 있어서,
    상기 스토리지 노드에 의해, 상기 외부 클라이언트 서버로부터 상기 제1 객체 식별자를 포함하는 제1 읽기 요청을 수신하는 단계;
    상기 스토리지 노드에 의해, 상기 제2 테이블을 기반으로 상기 제1 객체 식별자에 대응하는 상기 제1 해시 값을 검출하는 단계;
    상기 스토리지 노드에 의해, 상기 제1 객체 식별자 및 상기 제1 해시 값을 포함하는 제2 읽기 요청을 상기 제1 스토리지 장치로 전송하는 단계;
    상기 제1 스토리지 장치에 의해, 상기 제1 해시 값에 대응하는 상기 제1 엔트리의 제1 물리 어드레스를 기반으로 상기 제1 데이터를 읽는 단계;
    상기 제1 스토리지 장치에 의해 상기 제1 데이터를 상기 스토리지 노드로 전송하는 단계; 및
    상기 스토리지 노드에 의해, 상기 제1 데이터를 상기 외부 클라이언트 서버로 전송하는 단계를 포함하는 동작 방법.
  16. 제 9 항에 있어서,
    상기 외부 장치로부터 수신된 상기 제1 데이터의 크기가 기준 크기보다 큰 경우, 상기 스토리지 노드에 의해, 상기 제1 데이터를 상기 기준 크기 단위로 분할하는 단계; 및
    상기 분할된 데이터 각각에 대한 객체 식별자를 재설정하는 단계를 더 포함하는 동작 방법.
  17. 스토리지 장치에 있어서,
    불휘발성 메모리; 및
    상기 불휘발성 메모리를 제어하도록 구성된 스토리지 컨트롤러를 포함하고,
    상기 스토리지 컨트롤러는:
    제1 테이블을 저장하도록 구성된 메모리;
    외부 장치로부터 수신된 제1 데이터에 대한 해시 연산을 수행하여 제1 해시 값을 생성하도록 구성된 해시 모듈; 및
    상기 제1 테이블에서 상기 제1 해시 값에 대응하는 제1 엔트리를 검색하고, 상기 검색 결과를 기반으로 상기 제1 데이터를 상기 불휘발성 메모리에 선택적으로 저장하도록 구성된 중복 제거 관리자를 포함하고,
    상기 제1 엔트리가 상기 제1 테이블에 포함된 경우, 상기 중복 제거 관리자는 상기 제1 데이터를 상기 불휘발성 메모리에 저장하는 것 없이, 상기 제1 엔트리의 제1 참조 카운트를 증가시키고,
    상기 제1 엔트리가 상기 제1 테이블에 포함되지 않은 경우, 상기 중복 제거 관리자는 상기 제1 데이터를 상기 불휘발성 메모리의 제1 물리 어드레스에 대응하는 영역에 저장하고, 상기 제1 해시 값, 상기 제1 물리 어드레스, 및 상기 제1 참조 카운트를 포함하는 상기 제1 엔트리를 상기 제1 테이블에 추가하도록 구성된 스토리지 장치.
  18. 제 17 항에 있어서,
    상기 스토리지 컨트롤러는 상기 불휘발성 메모리와 통신하도록 구성된 메모리 인터페이스 회로를 더 포함하고,
    상기 제1 엔트리가 상기 제1 테이블에 포함된 경우, 상기 제1 데이터는 상기 메모리 인터페이스 회로를 통해 상기 불휘발성 메모리로 전송되지 않는 스토리지 장치.
  19. 제 17 항에 있어서,
    상기 스토리지 컨트롤러는 상기 불휘발성 메모리에 대한 가비지 콜렉션을 수행하도록 구성된 플래시 변환 계층을 더 포함하고,
    상기 가비지 콜렉션 중, 상기 플래시 변환 계층은 상기 제1 테이블에 포함된 복수의 참조 카운트들 중 0(zero)의 값을 갖는 참조 카운트와 대응되는 물리 어드레스에 저장된 데이터를 무효 데이터로 결정하는 스토리지 장치.
  20. 제 17 항에 있어서,
    상기 스토리지 컨트롤러는 상기 외부 장치와 통신하도록 구성된 호스트 인터페이스 회로를 더 포함하고,
    상기 호스트 인터페이스 회로는 객체-기반 인터페이스를 기반으로 동작하는 스토리지 장치.
KR1020200164583A 2020-11-30 2020-11-30 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법 KR20220077208A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020200164583A KR20220077208A (ko) 2020-11-30 2020-11-30 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법
DE102021131101.2A DE102021131101A1 (de) 2020-11-30 2021-11-26 Speichereinrichtung mit Datendeduplizierung, Betriebsverfahren der Speichereinrichtung und Betriebsverfahren eines Speicherservers
US17/456,821 US11947419B2 (en) 2020-11-30 2021-11-29 Storage device with data deduplication, operation method of storage device, and operation method of storage server
CN202111439968.0A CN114579045A (zh) 2020-11-30 2021-11-30 存储装置、存储装置的操作方法和存储服务器的操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200164583A KR20220077208A (ko) 2020-11-30 2020-11-30 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법

Publications (1)

Publication Number Publication Date
KR20220077208A true KR20220077208A (ko) 2022-06-09

Family

ID=81586227

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200164583A KR20220077208A (ko) 2020-11-30 2020-11-30 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법

Country Status (4)

Country Link
US (1) US11947419B2 (ko)
KR (1) KR20220077208A (ko)
CN (1) CN114579045A (ko)
DE (1) DE102021131101A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102599116B1 (ko) * 2023-02-20 2023-11-07 서강대학교산학협력단 데이터 중복 제거 방법 및 데이터 중복 제거를 수행하는 스토리지 장치

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117762336B (zh) * 2023-12-22 2024-07-26 柏域信息科技(上海)有限公司 针对Ceph对象的定期删除方法、装置及设备

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3823089B2 (ja) * 2003-01-27 2006-09-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 固定長データ検索装置、及び固定長データ検索方法、及びコンピュータプログラム、並びにコンピュータ読み取り可能な記録媒体
US7930559B1 (en) 2006-06-30 2011-04-19 Emc Corporation Decoupled data stream and access structures
US8458233B2 (en) * 2009-11-25 2013-06-04 Cleversafe, Inc. Data de-duplication in a dispersed storage network utilizing data characterization
US8738860B1 (en) * 2010-10-25 2014-05-27 Tilera Corporation Computing in parallel processing environments
US10162553B2 (en) 2010-11-24 2018-12-25 Western Digital Technologies, Inc. Methods and systems for object level de-duplication for solid state devices
US20120159098A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Garbage collection and hotspots relief for a data deduplication chunk store
US9141554B1 (en) * 2013-01-18 2015-09-22 Cisco Technology, Inc. Methods and apparatus for data processing using data compression, linked lists and de-duplication techniques
KR20140114515A (ko) 2013-03-15 2014-09-29 삼성전자주식회사 불휘발성 메모리 장치 및 그것의 중복 데이터 제거 방법
US9323610B2 (en) * 2014-01-30 2016-04-26 Sandisk Technologies Inc. Non-blocking commands
US8850108B1 (en) * 2014-06-04 2014-09-30 Pure Storage, Inc. Storage cluster
US10437784B2 (en) 2015-01-30 2019-10-08 SK Hynix Inc. Method and system for endurance enhancing, deferred deduplication with hardware-hash-enabled storage device
JP5976980B1 (ja) * 2015-08-25 2016-08-24 株式会社東芝 階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法
US10761758B2 (en) 2015-12-21 2020-09-01 Quantum Corporation Data aware deduplication object storage (DADOS)
JP2018041248A (ja) 2016-09-07 2018-03-15 富士通株式会社 ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム
JP6805816B2 (ja) 2016-12-27 2020-12-23 富士通株式会社 情報処理装置、情報処理システム、情報処理方法及びプログラム
US10409518B1 (en) 2017-04-20 2019-09-10 Seagate Technology Llc Reordered local data deduplication in storage devices
US10691340B2 (en) 2017-06-20 2020-06-23 Samsung Electronics Co., Ltd. Deduplication of objects by fundamental data identification
US11307804B2 (en) * 2019-12-16 2022-04-19 Samsung Electronics Co., Ltd. Enhanced SSD reliability
US11288212B2 (en) * 2019-12-18 2022-03-29 Samsung Electronics Co., Ltd. System, apparatus, and method for secure deduplication
JP2021128699A (ja) * 2020-02-17 2021-09-02 株式会社日立製作所 分散ストレージ装置および分散ストレージ装置のデータ管理方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102599116B1 (ko) * 2023-02-20 2023-11-07 서강대학교산학협력단 데이터 중복 제거 방법 및 데이터 중복 제거를 수행하는 스토리지 장치

Also Published As

Publication number Publication date
US20220171676A1 (en) 2022-06-02
CN114579045A (zh) 2022-06-03
US11947419B2 (en) 2024-04-02
DE102021131101A1 (de) 2022-06-02

Similar Documents

Publication Publication Date Title
US20200019516A1 (en) Primary Data Storage System with Staged Deduplication
US10248623B1 (en) Data deduplication techniques
CN107111452B (zh) 应用于计算机系统的数据迁移方法和装置、计算机系统
JP2014525073A (ja) エクステント・ベース・アーキテクチャにおける重複排除
US11409454B1 (en) Container ownership protocol for independent node flushing
US9558232B1 (en) Data movement bulk copy operation
US10860481B2 (en) Data recovery method, data recovery system, and computer program product
US11573928B2 (en) Techniques for data deduplication
US11340829B1 (en) Techniques for log space management involving storing a plurality of page descriptor (PDESC) page block (PB) pairs in the log
US11947419B2 (en) Storage device with data deduplication, operation method of storage device, and operation method of storage server
US10963177B2 (en) Deduplication using fingerprint tries
US11514001B2 (en) Concurrent computations operating on same data for CPU cache efficiency
US11281390B2 (en) Techniques for data migration
CN113918088A (zh) Raid存储设备、主机及raid系统
US11068299B1 (en) Managing file system metadata using persistent cache
CN104426965B (zh) 自管理存储方法和系统
CN117112219A (zh) 主机内存数据访问的方法和装置
EP3889752B1 (en) Data storage method and apparatus in distributed storage system, and computer program product
US11115490B2 (en) Host based read cache for san supporting NVMEF with E2E validation
US11803527B2 (en) Techniques for efficient data deduplication
US11868256B2 (en) Techniques for metadata updating and retrieval
US12032849B2 (en) Distributed storage system and computer program product
US11662949B2 (en) Storage server, a method of operating the same storage server and a data center including the same storage server
US11327895B1 (en) Protocol for processing requests that assigns each request received by a node a sequence identifier, stores data written by the request in a cache page block, stores a descriptor for the request in a cache page descriptor, and returns a completion acknowledgement of the request
US11615063B2 (en) Similarity deduplication