KR102403477B1 - 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템 - Google Patents

스토리지 장치와 이를 포함하는 호스트-스토리지 시스템 Download PDF

Info

Publication number
KR102403477B1
KR102403477B1 KR1020210155301A KR20210155301A KR102403477B1 KR 102403477 B1 KR102403477 B1 KR 102403477B1 KR 1020210155301 A KR1020210155301 A KR 1020210155301A KR 20210155301 A KR20210155301 A KR 20210155301A KR 102403477 B1 KR102403477 B1 KR 102403477B1
Authority
KR
South Korea
Prior art keywords
data
original data
storage device
storage
host
Prior art date
Application number
KR1020210155301A
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 KR1020210155301A priority Critical patent/KR102403477B1/ko
Application granted granted Critical
Publication of KR102403477B1 publication Critical patent/KR102403477B1/ko
Priority to US17/810,323 priority patent/US11893270B2/en
Priority to CN202211410082.8A priority patent/CN116126584A/zh

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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • 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
    • 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
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • 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/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1032Simple parity
    • 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/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • 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/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • 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/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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Software Systems (AREA)

Abstract

스토리지 장치와 이를 포함하는 호스트-스토리지 시스템이 제공된다. 스토리지 장치는, 제1 원본 데이터와 제1 패리티 데이터를 저장하는 비휘발성 메모리, 외부의 다른 스토리지 장치로부터 제1 원본 데이터와 다른 제2 원본 데이터를 수신하고, 비휘발성 메모리와 연결된 스토리지 인터페이스를 통해 비휘발성 메모리로부터 제1 패리티 데이터를 수신하는 스토리지 컨트롤러, 및 스토리지 컨트롤러로부터 제1 패리티 데이터와 제2 원본 데이터를 수신하고 연산하여, 제1 원본 데이터 및 제2 원본 데이터와 다른 제3 원본 데이터를 복원하는 연산 엔진을 포함하고, 스토리지 컨트롤러는 제3 원본 데이터를 연산 엔진으로부터 수신하여 호스트와, 외부의 다른 스토리지 장치에 전송한다.

Description

스토리지 장치와 이를 포함하는 호스트-스토리지 시스템 {Storage device, and host-storage system including the storage device}
본 발명은 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템에 관한 것이다.
이레이져 코드(erasure code)는 데이터 저장 시 원본 데이터뿐만 아니라 부가적인 패리티 데이터(parity data)를 함께 저장하여, 스토리지 장치의 일부에서 일부의 원본 데이터 손실이 발생한 경우 원본 데이터의 복원을 가능하게 할 수 있다.
한편, 기존의 RAID(Redundant Array of Independent Disk) 등에 활용되는 많은 이레이져 코드에서는 일반적으로 호스트가 디코딩 연산을 수행하고, 이로 인해 여러 문제점들이 존재할 수 있다. 예를 들어, 호스트는 스토리지 장치의 일부에서 데이터 손실이 발생한 경우 원본 데이터를 복원하기 위하여, 잔존하는 원본 데이터 및 패리티 데이터를 리드하여 연산을 수행할 수 있는데, 이 과정에서 호스트의 연산 자원이 과다하게 이용될 수 있다. 이는 전체 시스템의 대역폭 및 레이턴시(latency)를 악화시키는 요인이 될 수 있다.
한편, 최근에는 연산 수행이 가능한 연산 스토리지 장치(computational storage device)의 등장으로 인하여, 상기와 같이 호스트만이 수행하던 연산을 스토리지 장치에서 자체적으로 수행할 수 있고, 이에 따라 호스트의 부담을 줄일 수 있다. 하지만, 이레이져 코드의 특성상 하나의 스토리지 장치 내부에 저장된 데이터만으로는 연산이 불가능하며, 복수의 스토리지 장치 간의 데이터 교환이 필요한데, 연산 스토리지 장치 내부에 연산된, 혹은 저장된 데이터를 연산 스토리지 장치 상호간에 P2P(Peer to peer) 방식으로 교환하는 경우에는 네트워크의 오버헤드 증가를 초래하는 문제를 유발할 수 있다.
본 발명이 해결하고자 하는 기술적 과제는 호스트의 연산 자원을 사용하지 않고 스토리지 내부의 연산 자원을 활용한 디코딩 방법을 실행할 수 있는 스토리지 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 호스트의 연산 자원을 사용하지 않고 스토리지 내부의 연산 자원을 활용한 디코딩 방법을 실행할 수 있는 호스트-스토리지 시스템을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 장치는, 제1 원본 데이터와 제1 패리티 데이터를 저장하는 비휘발성 메모리, 외부의 다른 스토리지 장치로부터 제1 원본 데이터와 다른 제2 원본 데이터를 수신하고, 비휘발성 메모리와 연결된 스토리지 인터페이스를 통해 비휘발성 메모리로부터 제1 패리티 데이터를 수신하는 스토리지 컨트롤러, 및 스토리지 컨트롤러로부터 제1 패리티 데이터와 제2 원본 데이터를 수신하고 연산하여, 제1 원본 데이터 및 제2 원본 데이터와 다른 제3 원본 데이터를 복원하는 연산 엔진을 포함하고, 스토리지 컨트롤러는 제3 원본 데이터를 연산 엔진으로부터 수신하여 호스트와, 외부의 다른 스토리지 장치에 전송한다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 장치는, 제1 원본 데이터 내지 제4 원본 데이터를 포함하는 원본 데이터 중 제1 원본 데이터와, 제1 패리티 데이터를 저장하는 제1 스토리지 장치, 및 제2 원본 데이터와, 제1 패리티 데이터와 다른 제2 패리티 데이터를 저장하는 제2 스토리지 장치를 포함하고, 제1 스토리지 장치는 제1 패리티 데이터와, 제2 스토리지 장치로부터 수신한 제2 원본 데이터를 연산하여 제3 원본 데이터를 복원하고, 제2 스토리지 장치는 제2 원본 데이터를 제1 스토리지 장치와 호스트에 동시에 전송한다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 호스트-스토리지 시스템은, 호스트, 제1 데이터를 저장하는 제1 스토리지 장치와, 제2 데이터를 저장하는 제2 스토리지 장치를 포함하는 스토리지 장치, 및 호스트와 스토리지 장치를 연결하는 호스트 인터페이스를 포함하고, 호스트는 리드 커맨드를 제1 스토리지 장치와 제2 스토리지 장치에 전송하고, 제1 스토리지 장치는 리드 커맨드에 응답하여 제1 데이터의 적어도 일부인 제3 데이터를 호스트와 제2 스토리지 장치에 동시에 전송하고, 제2 스토리지 장치는 제1 스토리지 장치로부터 수신한 제3 데이터와, 제2 데이터를 이용하여 연산을 실행한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 몇몇 실시예에 따른 호스트-스토리지 시스템을 도시한 블록도이다.
도 2는 도 1의 스토리지 컨트롤러, 메모리 인터페이스 및 비휘발성 메모리를 재구성하여 도시한 도면이다.
도 3은 몇몇 실시예에 따른 이레이져 코드에 의한 인코딩 방법을 개략적으로 도시한 도면이다.
도 4는 몇몇 실시예에 따른 이레이져 코드를 기초로 디코딩 연산을 수행하는 스토리지 장치를 개략적으로 도시한 도면이다.
도 5는 몇몇 실시예에 따른 이레이져 코드를 기초로 디코딩 연산을 수행하는 호스트-스토리지 시스템을 개략적으로 도시한 도면이다.
도 6은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 7은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 8은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 9는 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 10은 몇몇 실시예에 따른 이레이져 코드를 기초로 컴퓨팅 엔진이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 11은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 12는 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 13은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 14는 몇몇 실시예에 따른 이레이져 코드를 기초로 컴퓨팅 엔진이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 15는 다른 몇몇 실시예에 따른 이레이져 코드에 의한 인코딩 방법을 개략적으로 도시한 도면이다.
도 16은 다른 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 17은 또 다른 몇몇 실시예에 따른 이레이져 코드에 의한 인코딩 방법을 개략적으로 도시한 도면이다.
도 18은 또 다른 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 19는 몇몇 실시예에 따른 호스트-스토리지 시스템의 데이터 리드 및 디코딩 연산을 설명하기 위한 예시적인 흐름도이다.
도 20은 몇몇 실시예에 따른 스토리지 장치가 적용된 데이터 센터를 나타낸 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 기술적 사상에 따른 실시예들에 대해 설명한다.
도 1은 몇몇 실시예에 따른 호스트-스토리지 시스템을 도시한 블록도이다.
호스트-스토리지 시스템(10)은 호스트(100) 및 스토리지 장치(200)를 포함할 수 있다. 또한, 스토리지 장치(200)는 스토리지 컨트롤러(210) 및 비휘발성 메모리 (NVM, 220)를 포함할 수 있다. 또한, 몇몇 실시예에서, 호스트(100)는 호스트 컨트롤러(110) 및 호스트 메모리(120)를 포함할 수 있다. 호스트 메모리(120)는 스토리지 장치(200)로 전송될 데이터, 혹은 스토리지 장치(200)로부터 전송된 데이터를 임시로 저장하기 위한 버퍼 메모리로서 기능할 수 있다.
스토리지 장치(200)는 호스트(100)로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 예를 들어, 스토리지 장치(200)는 SSD(Solid State Drive), 임베디드(embedded) 메모리 및 착탈 가능한 외장(external) 메모리 중 적어도 하나를 포함할 수 있다. 스토리지 장치(200)가 SSD인 경우, 스토리지 장치(200)는 NVMe(non-volatile memory express) 표준을 따르는 장치일 수 있다.
스토리지 장치(200)가 임베디드 메모리 혹은 외장(external) 메모리인 경우, 스토리지 장치(200)는 UFS(universal flash storage) 혹은 eMMC(embedded multi-media card) 표준을 따르는 장치일 수 있다. 호스트(100)와 스토리지 장치(200)는 각각 채용된 표준 프로토콜에 따른 패킷을 생성하고 이를 전송할 수 있다.
스토리지 장치(200)의 비휘발성 메모리(220)가 플래시 메모리를 포함할 때, 이러한 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 다른 예로서, 스토리지 장치(200)는 다른 다양한 종류의 비휘발성 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 장치(200)는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torque MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM) 및 다른 다양한 종류의 메모리가 적용될 수 있다.
몇몇 실시예에서, 호스트 컨트롤러(110)와 호스트 메모리(120)는 별도의 반도체 칩으로 구현될 수 있다. 또는, 몇몇 실시예에서, 호스트 컨트롤러(110)와 호스트 메모리(120)는 동일한 반도체 칩에 집적될 수 있다. 일 예로서, 호스트 컨트롤러(110)는 어플리케이션 프로세서(Application Processor)에 구비되는 다수의 모듈들 중 어느 하나일 수 있으며, 이러한 어플리케이션 프로세서는 시스템 온 칩(System on Chip, SoC)으로 구현될 수 있다. 또한, 호스트 메모리(120)는 어플리케이션 프로세서 내에 구비되는 임베디드 메모리이거나, 또는 어플리케이션 프로세서의 외부에 배치되는 비휘발성 메모리 또는 메모리 모듈일 수 있다.
호스트 컨트롤러(110)는 버퍼 영역의 데이터(예컨대, 라이트 데이터)를 비휘발성 메모리(220)에 저장하거나, 비휘발성 메모리(220)의 데이터(예컨대, 리드 데이터)를 버퍼 영역에 저장하는 동작을 관리할 수 있다.
스토리지 컨트롤러(210)는 호스트 인터페이스(211), 메모리 인터페이스(212) 및 CPU(central processing unit, 213)를 포함할 수 있다. 또한, 스토리지 컨트롤러(210)는 플래시 변환 레이어(Flash Translation Layer(FTL), 214), 패킷 매니저(215), 버퍼 메모리(216), ECC(error correction code, 217) 엔진, AES(advanced encryption standard, 218) 엔진을 더 포함할 수 있다.
스토리지 컨트롤러(210)는 플래시 변환 레이어(FTL, 214)가 로딩되는 워킹 메모리(미도시)를 더 포함할 수 있으며, CPU(213)가 플래시 변환 레이어(214)를 실행하는 것에 의해 비휘발성 메모리에 대한 데이터 라이트 및 리드 동작이 제어될 수 있다.
호스트 인터페이스(211)는 호스트(100)와 패킷(packet)을 송수신할 수 있다. 호스트(100)로부터 호스트 인터페이스(211)로 전송되는 패킷은 커맨드(command) 혹은 비휘발성 메모리(220)에 라이트될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(211)로부터 호스트(100)로 전송되는 패킷은 커맨드에 대한 응답(response) 혹은 비휘발성 메모리(220)로부터 리드된 데이터 등을 포함할 수 있다.
메모리 인터페이스(212)는 비휘발성 메모리(220)에 라이트될 데이터를 비휘발성 메모리(220)로 송신하거나, 비휘발성 메모리(220)로부터 리드된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(212)는 토글(Toggle) 혹은 온파이(ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
플래시 변환 레이어(214)는 어드레스 매핑(address mapping), 웨어-레벨링(wear-leveling), 가비지 콜렉션(garbage collection)과 같은 여러 기능을 수행할 수 있다. 어드레스 매핑 동작은 호스트로부터 수신한 논리 어드레스(logical address)를, 비휘발성 메모리(220) 내에 데이터를 실제로 저장하는 데 사용되는 물리 어드레스(physical address)로 바꾸는 동작이다. 웨어-레벨링은 비휘발성 메모리(220) 내의 블록(block)들이 균일하게 사용되도록 하여 특정 블록의 과도한 열화를 방지하기 위한 기술로, 예시적으로 물리 블록(physical block)들의 소거 카운트들을 밸런싱하는 펌웨어 기술을 통해 구현될 수 있다. 가비지 콜렉션은, 블록의 유효 데이터를 새 블록에 복사한 후 기존 블록을 소거(erase)하는 방식을 통해 비휘발성 메모리(220) 내에서 사용 가능한 용량을 확보하기 위한 기술이다.
패킷 매니저(215)는 호스트(100)와 협의된 인터페이스의 프로토콜에 따른 패킷(Packet)을 생성하거나, 호스트(100)로부터 수신된 패킷(Packet)으로부터 각종 정보를 파싱할 수 있다. 또한, 버퍼 메모리(216)는 비휘발성 메모리(220)에 라이트될 데이터 혹은 비휘발성 메모리(220)로부터 리드될 데이터를 임시로 저장할 수 있다. 버퍼 메모리(216)는 스토리지 컨트롤러(210) 내에 구비되는 구성일 수 있으나, 스토리지 컨트롤러(210)의 외부에 배치되어도 무방하다.
ECC 엔진(217)은 비휘발성 메모리(220)로부터 리드되는 리드 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 보다 구체적으로, ECC 엔진(217)은 비휘발성 메모리(220)에 기입될 기입 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 라이트 데이터와 함께 비휘발성 메모리(220) 내에 저장될 수 있다. 비휘발성 메모리(220)로부터의 데이터 리드 시, ECC 엔진(217)은 리드 데이터와 함께 비휘발성 메모리(220)로부터 리드되는 패리티 비트들을 이용하여 리드 데이터의 에러를 정정하고, 에러가 정정된 리드 데이터를 출력할 수 있다.
AES 엔진(218)은 스토리지 컨트롤러(210)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)을 이용하여 수행할 수 있다.
연산 엔진(Computational Engine, 230)은 비휘발성 메모리(220)로부터 리드되는 데이터에 대하여 연산을 수행할 수 있다. 예를 들어, 연산 엔진(230)은 FPGA(Field Programmable Gate Array)를 포함할 수 있다. 연산 엔진(230)은 일부 원본 데이터가 손실된 경우 전체 원본 데이터를 복원하기 위하여 XOR 연산을 수행할 수 있다. 구체적인 내용은 후술한다.
한편, 도 1에서는 연산 엔진(230)이 스토리지 컨트롤러(210)에 포함되지 않고 독립적인 구성으로 도시되었으나 이에 제한되지 않으며, 실시예에 따라 연산 엔진(230)은 스토리지 컨트롤러(210)에 포함될 수도 있음은 자명하다.
또한, 도 1에서는 연산 엔진(230)이 비휘발성 메모리(220)에 저장된 데이터를 스토리지 컨트롤러(210)로부터 수신하는 것으로 도시되었으나 이에 제한되지 않으며, 실시예에 따라 연산 엔진(230)은 비휘발성 메모리(220)로부터 저장된 데이터를 수신할 수도 있음은 자명하다.
도 2는 도 1의 스토리지 컨트롤러, 메모리 인터페이스 및 비휘발성 메모리를 재구성하여 도시한 도면이다.
도 1의 메모리 인터페이스(212)는 도 2의 컨트롤러 인터페이스 회로(212a)와 메모리 인터페이스 회로(212b)를 포함할 수 있다.
비휘발성 메모리(220)는 제1 내지 제8 핀들(P11~P18), 메모리 인터페이스 회로(212b), 제어 로직 회로(510), 및 메모리 셀 어레이(520)를 포함할 수 있다.
메모리 인터페이스 회로(212b)는 제1 핀(P11)을 통해 스토리지 컨트롤러(210)로부터 칩 인에이블 신호(nCE)를 수신할 수 있다. 메모리 인터페이스 회로(212b)는 칩 인에이블 신호(nCE)에 따라 제2 내지 제8 핀들(P12~P18)을 통해 스토리지 컨트롤러(210)와 신호들을 송수신할 수 있다. 예를 들어, 칩 인에이블 신호(nCE)가 인에이블 상태(예를 들어, 로우 레벨)인 경우, 메모리 인터페이스 회로(212b)는 제2 내지 제8 핀들(P12~P18)을 통해 스토리지 컨트롤러(210)와 신호들을 송수신할 수 있다.
메모리 인터페이스 회로(212b)는 제2 내지 제4 핀들(P12~P14)을 통해 스토리지 컨트롤러(210)로부터 커맨드 래치 인에이블 신호(CLE), 어드레스 래치 인에이블 신호(ALE), 및 쓰기 인에이블 신호(nWE)를 수신할 수 있다. 메모리 인터페이스 회로(212b)는 제7 핀(P17)을 통해 스토리지 컨트롤러(210)로부터 데이터 신호(DQ)를 수신하거나, 스토리지 컨트롤러(210)로 데이터 신호(DQ)를 전송할 수 있다. 데이터 신호(DQ)를 통해 커맨드(CMD), 어드레스(ADDR), 및 데이터(DATA)가 전달될 수 있다. 예를 들어, 데이터 신호(DQ)는 복수의 데이터 신호 라인들을 통해 전달될 수 있다. 이 경우, 제7 핀(P17)은 복수의 데이터 신호들에 대응하는 복수 개의 핀들을 포함할 수 있다.
메모리 인터페이스 회로(212b)는 쓰기 인에이블 신호(nWE)의 토글 타이밍들에 기초하여 커맨드 래치 인에이블 신호(CLE)의 인에이블 구간(예를 들어, 하이 레벨 상태)에서 수신되는 데이터 신호(DQ)로부터 커맨드(CMD)를 획득할 수 있다. 메모리 인터페이스 회로(212b)는 쓰기 인에이블 신호(nWE)의 토글 타이밍들에 기초하여 어드레스 래치 인에이블 신호(ALE)의 인에이블 구간(예를 들어, 하이 레벨 상태)에서 수신되는 데이터 신호(DQ)로부터 어드레스(ADDR)를 획득할 수 있다.
몇몇 실시 예에서, 쓰기 인에이블 신호(nWE)는 고정된(static) 상태(예를 들어, 하이(high) 레벨 또는 로우(low) 레벨)를 유지하다가 하이 레벨과 로우 레벨 사이에서 토글할 수 있다. 예를 들어, 쓰기 인에이블 신호(nWE)는 커맨드(CMD) 또는 어드레스(ADDR)가 전송되는 구간에서 토글할 수 있다. 이에 따라, 메모리 인터페이스 회로(212b)는 쓰기 인에이블 신호(nWE)의 토글 타이밍들에 기초하여 커맨드(CMD) 또는 어드레스(ADDR)를 획득할 수 있다.
메모리 인터페이스 회로(212b)는 제5 핀(P15)을 통해 스토리지 컨트롤러(210)로부터 읽기 인에이블 신호(nRE)를 수신할 수 있다. 메모리 인터페이스 회로(212b)는 제6 핀(P16)을 통해 스토리지 컨트롤러(210)로부터 데이터 스트로브 신호(DQS)를 수신하거나, 스토리지 컨트롤러(210)로 데이터 스트로브 신호(DQS)를 전송할 수 있다.
비휘발성 메모리(220)의 데이터(DATA) 출력 동작에서, 메모리 인터페이스 회로(212b)는 데이터(DATA)를 출력하기 전에 제5 핀(P15)을 통해 토글하는 읽기 인에이블 신호(nRE)를 수신할 수 있다. 메모리 인터페이스 회로(212b)는 읽기 인에이블 신호(nRE)의 토글링에 기초하여 토글하는 데이터 스트로브 신호(DQS)를 생성할 수 있다. 예를 들어, 메모리 인터페이스 회로(212b)는 읽기 인에이블 신호(nRE)의 토글링 시작 시간을 기준으로 미리 정해진 딜레이(예를 들어, tDQSRE) 이후에 토글하기 시작하는 데이터 스트로브 신호(DQS)를 생성할 수 있다. 메모리 인터페이스 회로(212b)는 데이터 스트로브 신호(DQS)의 토글 타이밍에 기초하여 데이터(DATA)를 포함하는 데이터 신호(DQ)를 전송할 수 있다. 이에 따라, 데이터(DATA)는 데이터 스트로브 신호(DQS)의 토글 타이밍에 정렬되어 스토리지 컨트롤러(210)로 전송될 수 있다.
비휘발성 메모리(220)의 데이터(DATA) 입력 동작에서, 스토리지 컨트롤러(210)로부터 데이터(DATA)를 포함하는 데이터 신호(DQ)가 수신되는 경우, 메모리 인터페이스 회로(212b)는 스토리지 컨트롤러(210)로부터 데이터(DATA)와 함께 토글하는 데이터 스트로브 신호(DQS)를 수신할 수 있다. 메모리 인터페이스 회로(212b)는 데이터 스트로브 신호(DQS)의 토글 타이밍에 기초하여 데이터 신호(DQ)로부터 데이터(DATA)를 획득할 수 있다. 예를 들어, 메모리 인터페이스 회로(212b)는 데이터 스트로브 신호(DQS)의 상승 에지 및 하강 에지에서 데이터 신호(DQ)를 샘플링함으로써 데이터(DATA)를 획득할 수 있다.
메모리 인터페이스 회로(212b)는 제8 핀(P18)을 통해 레디/비지 출력 신호(nR/B)를 스토리지 컨트롤러(210)로 전송할 수 있다. 메모리 인터페이스 회로(212b)는 레디/비지 출력 신호(nR/B)를 통해 비휘발성 메모리(220)의 상태 정보를 스토리지 컨트롤러(210)로 전송할 수 있다. 비휘발성 메모리(220)가 비지 상태인 경우(즉, 비휘발성 메모리(220) 내부 동작들이 수행 중인 경우), 메모리 인터페이스 회로(212b)는 비지 상태를 나타내는 레디/비지 출력 신호(nR/B)를 스토리지 컨트롤러(210)로 전송할 수 있다. 비휘발성 메모리(220)가 레디 상태인 경우(즉, 비휘발성 메모리(220) 내부 동작들이 수행되지 않거나 완료된 경우), 메모리 인터페이스 회로(212b)는 레디 상태를 나타내는 레디/비지 출력 신호(nR/B)를 스토리지 컨트롤러(210)로 전송할 수 있다.
예를 들어, 비휘발성 메모리(220)가 페이지 리드 명령에 응답하여 메모리 셀 어레이(520)로부터 데이터(DATA)를 리드하는 동안, 메모리 인터페이스 회로(212b)는 비지 상태(예를 들어, 로우 레벨)를 나타내는 레디/비지 출력 신호(nR/B)를 스토리지 컨트롤러(210)로 전송할 수 있다. 예를 들어, 비휘발성 메모리(220)가 프로그램 명령에 응답하여 메모리 셀 어레이(520)로 데이터(DATA)를 프로그램하는 동안, 메모리 인터페이스 회로(212b)는 비지 상태를 나타내는 레디/비지 출력 신호(nR/B)를 스토리지 컨트롤러(210)로 전송할 수 있다.
제어 로직 회로(510)는 비휘발성 메모리(220)의 각종 동작을 전반적으로 제어할 수 있다. 제어 로직 회로(510)는 메모리 인터페이스 회로(212b)로부터 획득된 커맨드/어드레스(CMD/ADDR)를 수신할 수 있다. 제어 로직 회로(510)는 수신된 커맨드/어드레스(CMD/ADDR)에 따라 비휘발성 메모리(220)의 다른 구성 요소들을 제어하기 위한 제어 신호들을 생성할 수 있다. 예를 들어, 제어 로직 회로(510)는 메모리 셀 어레이(520)에 데이터(DATA)를 프로그램하거나, 또는 메모리 셀 어레이(520)로부터 데이터(DATA)를 리드하기 위한 각종 제어 신호들을 생성할 수 있다.
메모리 셀 어레이(520)는 제어 로직 회로(510)의 제어에 따라 메모리 인터페이스 회로(212b)로부터 획득된 데이터(DATA)를 저장할 수 있다. 메모리 셀 어레이(520)는 제어 로직 회로(510)의 제어에 따라 저장된 데이터(DATA)를 메모리 인터페이스 회로(212b)로 출력할 수 있다.
메모리 셀 어레이(520)는 복수의 메모리 셀들을 포함할 수 있다. 예를 들어, 복수의 메모리 셀들은 플래시 메모리 셀들일 수 있다. 그러나, 본 발명은 이에 한정되지 않으며, 메모리 셀들은 RRAM(Resistive Random Access Memory) 셀, FRAM(Ferroelectric Random Access Memory) 셀, PRAM(Phase Change Random Access Memory) 셀, TRAM(Thyristor Random Access Memory) 셀, MRAM(Magnetic Random Access Memory) 셀들일 수 있다. 이하에서는, 메모리 셀들이 낸드(NAND) 플래시 메모리 셀들인 실시 예를 중심으로 본 발명의 실시 예들이 설명될 것이다.
스토리지 컨트롤러(210)는 제1 내지 제8 핀들(P21~P28), 및 컨트롤러 인터페이스 회로(212a)를 포함할 수 있다. 제1 내지 제8 핀들(P21~P28)은 비휘발성 메모리(220)의 제1 내지 제8 핀들(P11~P18)에 대응할 수 있다.
컨트롤러 인터페이스 회로(212a)는 제1 핀(P21)을 통해 비휘발성 메모리(220)로 칩 인에이블 신호(nCE)를 전송할 수 있다. 컨트롤러 인터페이스 회로(212a)는 칩 인에이블 신호(nCE)를 통해 선택한 비휘발성 메모리(220)와 제2 내지 제8 핀들(P22~P28)을 통해 신호들을 송수신할 수 있다.
컨트롤러 인터페이스 회로(212a)는 제2 내지 제4 핀들(P22~P24)을 통해 커맨드 래치 인에이블 신호(CLE), 어드레스 래치 인에이블 신호(ALE), 및 쓰기 인에이블 신호(nWE)를 비휘발성 메모리(220)로 전송할 수 있다. 컨트롤러 인터페이스 회로(212a)는 제7 핀(P27)을 통해 비휘발성 메모리(220)로 데이터 신호(DQ)를 전송하거나, 비휘발성 메모리(220)로부터 데이터 신호(DQ)를 수신할 수 있다.
컨트롤러 인터페이스 회로(212a)는 토글하는 쓰기 인에이블 신호(nWE)와 함께 커맨드(CMD) 또는 어드레스(ADDR)를 포함하는 데이터 신호(DQ)를 비휘발성 메모리(220)로 전송할 수 있다. 컨트롤러 인터페이스 회로(212a)는 인에이블 상태를 가지는 커맨드 래치 인에이블 신호(CLE)를 전송함에 따라 커맨드(CMD)를 포함하는 데이터 신호(DQ)를 비휘발성 메모리(220)로 전송하고, 인에이블 상태를 가지는 어드레스 래치 인에이블 신호(ALE)를 전송함에 따라 어드레스(ADDR)를 포함하는 데이터 신호(DQ)를 비휘발성 메모리(220)로 전송할 수 있다.
컨트롤러 인터페이스 회로(212a)는 제5 핀(P25)을 통해 비휘발성 메모리(220)로 읽기 인에이블 신호(nRE)를 전송할 수 있다. 컨트롤러 인터페이스 회로(212a)는 제6 핀(P26)을 통해 비휘발성 메모리(220)로부터 데이터 스트로브 신호(DQS)를 수신하거나, 비휘발성 메모리(220)로 데이터 스트로브 신호(DQS)를 전송할 수 있다.
비휘발성 메모리(220)의 데이터(DATA) 출력 동작에서, 컨트롤러 인터페이스 회로(212a)는 토글하는 읽기 인에이블 신호(nRE)를 생성하고, 읽기 인에이블 신호(nRE)를 비휘발성 메모리(220)로 전송할 수 있다. 예를 들어, 컨트롤러 인터페이스 회로(212a)는 데이터(DATA)가 출력되기 전에 고정된 상태(예를 들어, 하이 레벨 또는 로우 레벨)에서 토글 상태로 변경되는 읽기 인에이블 신호(nRE)를 생성할 수 있다. 이에 따라, 비휘발성 메모리(220)에서 읽기 인에이블 신호(nRE)에 기초하여 토글하는 데이터 스트로브 신호(DQS)가 생성될 수 있다. 컨트롤러 인터페이스 회로(212a)는 비휘발성 메모리(220)로부터 토글하는 데이터 스트로브 신호(DQS)와 함께 데이터(DATA)를 포함하는 데이터 신호(DQ)를 수신할 수 있다. 컨트롤러 인터페이스 회로(212a)는 데이터 스트로브 신호(DQS)의 토글 타이밍에 기초하여 데이터 신호(DQ)로부터 데이터(DATA)를 획득할 수 있다.
비휘발성 메모리(220)의 데이터(DATA) 입력 동작에서, 컨트롤러 인터페이스 회로(212a)는 토글하는 데이터 스트로브 신호(DQS)를 생성할 수 있다. 예를 들어, 컨트롤러 인터페이스 회로(212a)는 데이터(DATA)를 전송하기 전에 고정된 상태(예를 들어, 하이 레벨 또는 로우 레벨)에서 토글 상태로 변경되는 데이터 스트로브 신호(DQS)를 생성할 수 있다. 컨트롤러 인터페이스 회로(212a)는 데이터 스트로브 신호(DQS)의 토글 타이밍들에 기초하여 데이터(DATA)를 포함하는 데이터 신호(DQ)를 비휘발성 메모리(220)로 전송할 수 있다.
컨트롤러 인터페이스 회로(212a)는 제8 핀(P28)을 통해 비휘발성 메모리(220)로부터 레디/비지 출력 신호(nR/B)를 수신할 수 있다. 컨트롤러 인터페이스 회로(212a)는 레디/비지 출력 신호(nR/B)에 기초하여 비휘발성 메모리(220)의 상태 정보를 판별할 수 있다.
도 3은 몇몇 실시예에 따른 이레이져 코드에 의한 인코딩 방법을 개략적으로 도시한 도면이다.
도 3을 참조하면, (A)에서 제1 스토리지 장치(200_1)는 2개의 원본 데이터(OD1, OD2)를 저장할 수 있고, 제2 스토리지 장치(200_2)도 동일하게 2개의 원본 데이터(OD3, OD4)를 저장할 수 있다. 여기서, 각각의 원본 데이터(OD1~OD4)는 1bit의 크기를 가질 수 있으며, 하나의 스토리지 장치에 저장되는 데이터 전체를 데이터 블록으로 정의할 수 있다.
(A)에서 전체 원본 데이터의 크기는 원본 데이터가 4개 존재하므로 4bit일 수 있다. 하지만 실시예가 이에 제한되는 것은 아니며, 전체 원본 데이터의 크기 및 하나의 스토리지 장치에 저장되는 데이터 블록의 크기는 실시예에 따라 달라질 수 있음은 자명하다.
몇몇 실시예에 따른 인코딩 방법은, 전체 원본 데이터를 유지하면서 원본 데이터의 연산을 통해 생성된 패리티 데이터를 복수의 스토리지 장치에 함께 저장할 수 있다.
구체적으로, (B)에서 원본 데이터(OD1~OD4)와 추가적으로 생성된 패리티 데이터(PD1~PD4)를 저장하기 위하여, 추가적인 스토리지 장치들이 요구될 수 있다. 즉, 기존의 원본 데이터(OD1~OD4)와 추가적으로 생성된 패리티 데이터(PD1~PD4)를 저장하기 위하여 제3 스토리지 장치(200_3) 및 제4 스토리지 장치(200_4)가 요구될 수 있다.
인코딩 과정에서, 복수의 스토리지 장치(200_1~200_4) 각각은 원본 데이터(OD1~OD4)를 균등하게 분배하여 저장할 수 있다. 또한, 복수의 스토리지 장치(200_1~200_4) 각각은 패리티 데이터(PD1~PD4)를 균등하게 분배하여 저장할 수 있다.
구체적으로, 제1 스토리지 장치(200_1)는 1개의 원본 데이터(OD1)와 1개의 패리티 데이터(PD1)를 저장할 수 있다. 제2 스토리지 장치(200_2)는 1개의 원본 데이터(OD2)와 1개의 패리티 데이터(PD2)를 저장할 수 있다. 제3 스토리지 장치(200_3)는 1개의 원본 데이터(OD3)와 1개의 패리티 데이터(PD3)를 저장할 수 있다. 제4 스토리지 장치(200_4)는 1개의 원본 데이터(OD4)와 1개의 패리티 데이터(PD4)를 저장할 수 있다.
패리티 데이터는 원본 데이터를 복원하기 위하여, 전체 원본 데이터 중 임의의 원본 데이터에 대해 XOR 연산을 수행하여 생성된 데이터를 의미할 수 있다. 구체적으로, 패리티 데이터는 4개의 스토리지 장치(200_1~200_4) 중 임의의 2개의 스토리지 장치만을 이용하더라도 4개의 원본 데이터 모두를 복원할 수 있도록, 4개의 전체 원본 데이터 중 2개의 원본 데이터에 대해 XOR 연산을 수행하여 생성된 데이터를 의미할 수 있다.
패리티 데이터(PD1~PD4) 각각의 크기는 원본 데이터(OD1~OD4) 각각의 크기와 동일하게 1bit일 수 있다. 따라서, 복수의 스토리지 장치(200_1~200_4)에 저장되는 데이터 블록의 크기는 2bit로 인코딩 전후로 동일하게 유지될 수 있다.
한편, 도 3에서는 원본 데이터(OD1~OD4)가 4개 존재하여 4개의 복수의 스토리지 장치(200_1~200_4)에 1개씩 균등하게 배분되는 것을 도시하였으나, 실시예가 이에 제한되는 것은 아니다. 구체적으로, 원본 데이터가 예를 들어 3개 존재하는 경우에는 데이터 패딩(Data Padding) 등의 과정을 통하여 새로운 데이터를 생성하여 복수의 스토리지 장치(200_1~200_4)에 균등하게 배분될 수 있다.
도 4는 몇몇 실시예에 따른 이레이져 코드를 기초로 디코딩 연산을 수행하는 스토리지 장치를 개략적으로 도시한 도면이다.
도 4를 참조하면, 스토리지 장치(200)는 복수의 스토리지 장치(200_1~200_4)를 포함할 수 있다. 복수의 스토리지 장치(200_1~200_4) 각각은 도 1에서 설명한 바와 같이 스토리지 컨트롤러(210_1~210_4)와, 비휘발성 메모리(220_1~220_4)와, 연산 엔진(230_1~230_4)을 포함할 수 있다.
한편 도 4에서, 연산 엔진(230_1~230_4)이 독립적인 구성으로 도시되고, 비휘발성 메모리(220_1~220_4)에 저장된 데이터를 스토리지 컨트롤러(210_1~210_4)로부터 수신하는 것으로 도시되었으나, 이에 제한되지 않으며 내부 구성에 따라 연산 엔진(230_1~230_4)은 스토리지 컨트롤러(210_1~210_4)에 포함될 수도 있고, 비휘발성 메모리(220_1~220_4)에 저장된 데이터를 직접 수신할 수도 있음은 도 1에서 설명한 바와 동일하다.
도 5는 몇몇 실시예에 따른 이레이져 코드를 기초로 디코딩 연산을 수행하는 호스트-스토리지 시스템을 개략적으로 도시한 도면이다.
도 5를 참조하면, 호스트-스토리지 시스템(10)은 호스트(100)와 복수의 스토리지 장치(200_1~200_4), 및 스위치(SW)를 포함할 수 있다.
도 5에 도시된 호스트-스토리지 시스템(10)은 도 1에 도시된 호스트-스토리지 시스템(10)과 비교했을 때, 복수의 스토리지 장치(200_1~200_4)를 포함하는 것에 차이가 있을 뿐, 실질적인 동작은 서로 동일할 수 있다.
한편, 스위치(SW)는 도 1에 도시된 호스트 인터페이스(211)에 포함되는 구성일 수 있다. 스위치(SW)는 이더넷(Ethernet) 혹은 PCIe 등의 방법으로 구현될 수 있으나, 실시예가 이에 제한되는 것은 아니다.
복수의 스토리지 장치(200_1~200_4)와 호스트(100)는 스위치(SW)와 연결되어 데이터를 공유할 수 있다. 예를 들어, 복수의 스토리지 장치(200_1~200_4) 중 어느 하나에 저장된 데이터는 복수의 스토리지 장치(200_1~200_4) 중 다른 어느 하나에 전송되거나, 호스트(100)로 전송될 수 있다.
구체적으로, 복수의 스토리지 장치(200_1~200_4)에 저장된 데이터는 도 3에서 설명한 바와 같이 원본 데이터와 패리티 데이터를 포함할 수 있다. 이 중 원본 데이터만이 복수의 스토리지 장치(200_1~200_4) 중 어느 하나에서 호스트(100)로 전송될 수 있다. 즉, 호스트(100)로의 전체 전송량은 전체 원본 데이터의 용량과 동일할 수 있다.
더욱 구체적으로, 복수의 스토리지 장치(200_1~200_4) 중 어느 하나에 저장된 원본 데이터는, 호스트(100)로 전송되는 시점에 복수의 스토리지 장치(200_1~200_4) 중 다른 어느 하나에 전송될 수 있다. 즉, 복수의 스토리지 장치(200_1~200_4) 중 어느 하나에 저장된 원본 데이터는 멀티캐스트(multicast) 혹은 브로드캐스트(broadcast) 방식을 통해서 복수의 스토리지 장치(200_1~200_4) 중 다른 어느 하나에 전송될 수 있다.
다만, 복수의 스토리지 장치(200_1~200_4) 중 어느 하나에 저장된 원본 데이터가 호스트(100)로 전송되는 동시에 반드시 복수의 스토리지 장치(200_1~200_4) 중 다른 어느 하나에 전송될 필요는 없다. 구체적으로, 저장된 원본 데이터는 다수의 목적지에 전송되어 전체 네트워크의 오버헤드가 감소되도록 하는 시점에 전송될 수도 있다.
상기와 같은 조건을 통하여, 호스트(100)는 원본 데이터만을 전송받으므로 디코딩 연산에 관여할 필요가 없고, 이에 따라 호스트(100)의 연산 자원 소모를 감소시킬 수 있다. 또한, 복수의 스토리지 장치(200_1~200_4) 간에 P2P(Peer to peer) 방식이 아닌, 멀티캐스트 혹은 브로드캐스트 방식으로 데이터를 공유하므로, 통신 자원 소모를 감소시킬 수 있다. 이에 따라, 네트워크의 오버헤드를 방지할 수 있다.
도 6은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 6을 참조하면, 제1 비휘발성 메모리(220_1)는 제1 원본 데이터(X1)와 제1 패리티 데이터(X2+X3)를 저장할 수 있다. 즉, 제1 원본 데이터(X1)와 제1 패리티 데이터(X2+X3)는 도 3에 도시된 OD1과 PD1에 각각 대응될 수 있다.
제2 비휘발성 메모리(220_2)는 제2 원본 데이터(X2)와 제2 패리티 데이터(X3+X4)를 저장할 수 있다. 즉, 제2 원본 데이터(X2)와 제2 패리티 데이터(X3+X4)는 도 3에 도시된 OD2와 PD2에 각각 대응될 수 있다.
제3 비휘발성 메모리(220_3)는 제3 원본 데이터(X3)와 제3 패리티 데이터(X1+X4)를 저장할 수 있다. 즉, 제3 원본 데이터(X3)와 제3 패리티 데이터(X1+X4)는 도 3에 도시된 OD3과 PD3에 각각 대응될 수 있다.
제4 비휘발성 메모리(220_4)는 제4 원본 데이터(X4)와 제4 패리티 데이터(X1+X2)를 저장할 수 있다. 즉, 제4 원본 데이터(X4)와 제4 패리티 데이터(X1+X2)는 도 3에 도시된 OD4와 PD4에 각각 대응될 수 있다.
도 7 내지 도 9 및 도 11 내지 도 13은 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이며, 도 10 및 도 14는 몇몇 실시예에 따른 이레이져 코드를 기초로 컴퓨팅 엔진이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다. 이하에서는 도 7 내지 도 14를 참조하여 설명한다.
먼저 도 7을 참조하면, 예를 들어 제3 스토리지 장치(200_3)와 제4 스토리지 장치(200_4)가 불능 상태인 것으로 가정하자. 이 경우, 호스트(100)는 제3 스토리지 장치(200_3)에 저장된 제3 원본 데이터(X3)와, 제4 스토리지 장치(200_4)에 저장된 제4 원본 데이터(X4)를 리드하지 못할 수 있다.
본 발명의 몇몇 실시예에 따른 분산 디코딩을 수행할 수 있는 스토리지 장치는, 복수의 스토리지 장치 중 임의의 스토리지 장치 몇몇이 불능 상태인 경우, 저장된 원본 데이터와 패리티 데이터를 이용하여 원본 데이터를 복원할 수 있고, 호스트의 리드 커맨드에 대응하여 전체 원본 데이터를 제공할 수 있다.
도 8을 참조하면, 제2 스토리지 장치(200_2)의 제2 비휘발성 메모리(220_2)에 저장된 제2 원본 데이터(X2)가 스위치(SW)를 통해 제1 스토리지 장치(200_1)의 제1 연산 엔진(230_1)으로 전송될 수 있다. 또한, 제2 원본 데이터(X2)는 멀티캐스트 전송방법을 통해 호스트(100)로도 전송될 수 있다.
한편, 도 5에서 설명한 바와 같이 원본 데이터만이 복수의 스토리지 장치(200_1~200_4) 및 호스트(100)로 이동할 수 있으므로, 도 8에서 제2 비휘발성 메모리(220_2)에 저장된 제2 패리티 데이터(X3+X4)는 스위치(SW)를 통하여 전송될 수 없다.
이어서 도 9를 참조하면, 제1 연산 엔진(230_1)은 제1 비휘발성 메모리(220_1)에 저장된 제1 패리티 데이터(X2+X3)와, 제2 스토리지 장치(200_2)로부터 제공받은 제2 원본 데이터(X2)를 기초로 연산을 수행하여 제3 원본 데이터(X3)를 복원할 수 있다. 구체적으로, 제1 연산 엔진(230_1)은 제1 패리티 데이터(X2+X3)와 제2 원본 데이터(X2)에 대하여 XOR 연산을 수행하여 제3 원본 데이터(X3)를 복원할 수 있다.
도 10을 함께 참조하여 설명하면, 표 Ⅰ에서 예를 들어 제1 원본 데이터(X1)는 1의 값을 가지고, 제2 원본 데이터(X2)는 0의 값을 가지며, 제3 원본 데이터(X3)는 0의 값을 가지고, 제4 원본 데이터(X4)는 1의 값을 가진다고 가정하자.
이 때, 패리티 데이터는 도 3에서 설명한 바와 같이 원본 데이터를 기초로 XOR 연산을 수행한 데이터를 의미할 수 있다. 이에 따라, 도 9에서 제1 패리티 데이터(X2+X3)는 0의 값을 가지고, 제2 패리티 데이터(X3+X4)는 1의 값을 가지며, 제3 패리티 데이터(X1+X4)는 0의 값을 가지고, 제4 패리티 데이터(X1+X2)는 1의 값을 가질 수 있다.
표 Ⅱ를 참조하면, 도 9의 제1 연산 엔진(230_1)은 제1 패리티 데이터(X2+X3)와 제2 원본 데이터(X2)를 기초로 XOR 연산을 수행할 수 있고, 해당 결과값은 0일 수 있다. 즉, 제1 연산 엔진(230_1)은 제1 패리티 데이터(X2+X3)와 제2 원본 데이터(X2)의 XOR 연산을 통해, 제3 원본 데이터(X3)를 복원할 수 있다.
이어서 도 11을 참조하면, 제1 연산 엔진(230_1)에 의해 복원된 제3 원본 데이터(X3)가 스위치(SW)를 통해 제2 스토리지 장치(200_2)의 제2 연산 엔진(230_2)으로 전송될 수 있다. 제2 원본 데이터(X2)와 동일하게, 제3 원본 데이터(X3)는 멀티캐스트 전송방법을 통해 호스트(100)로도 전송될 수 있다.
한편, 도 5에서 설명한 바와 같이 원본 데이터만이 복수의 스토리지 장치(200_1~200_4) 및 호스트(100)로 이동할 수 있으므로, 제1 스토리지 장치(200_1)의 제1 비휘발성 메모리(220_1)에 저장된 제1 패리티 데이터(X2+X3)는 스위치(SW)를 통하여 전송될 수 없다.
이어서 도 12를 참조하면, 제2 연산 엔진(230_2)은 제2 비휘발성 메모리(220_2)에 저장된 제2 패리티 데이터(X3+X4)와, 제1 스토리지 장치(200_1)로부터 제공받은 제3 원본 데이터(X3)를 기초로 연산을 수행하여 제4 원본 데이터(X4)를 복원할 수 있다. 구체적으로, 제2 연산 엔진(230_2)은 제2 패리티 데이터(X3+X4)와 제3 원본 데이터(X3)에 대하여 XOR 연산을 수행하여 제4 원본 데이터(X4)를 복원할 수 있다.
도 10을 함께 참조하여 설명하면, 표 Ⅱ에서 제1 스토리지 장치(200_1)에서 복원된 제3 원본 데이터(X3)는 0의 값을 가질 수 있고, 제2 비휘발성 메모리(220_2)에 저장된 제2 패리티 데이터(X3+X4)는 1의 값을 가질 수 있다. 따라서, 도 12의 제2 연산 엔진(230_2)은 제2 패리티 데이터(X3+X4)와 제3 원본 데이터(X3)를 기초로 XOR 연산을 수행할 수 있고, 해당 결과값은 1일 수 있다. 즉, 제2 연산 엔진(230_2)은 제2 패리티 데이터(X3+X4)와 제3 원본 데이터(X3)의 XOR 연산을 통해, 제4 원본 데이터(X4)를 복원할 수 있다.
이어서 도 13을 참조하면, 호스트(100)의 리드 커맨드에 대응하여 제1 스토리지 장치(200_1)는 제1 원본 데이터(X1)를 호스트로 전송하고, 제2 스토리지 장치(200_2)는 복원된 제4 원본 데이터(X4)를 호스트로 전송할 수 있다.
이 때, 복수의 스토리지 장치 간에 원본 데이터의 전송은, 호스트로 원본 데이터를 전송할 때 동시에 수행되지만, 복수의 스토리지 장치 중 어느 하나에서 호스트로 원본 데이터를 전송할 때에는, 반드시 복수의 스토리지 장치 중 다른 어느 하나로 원본 데이터를 전송할 필요는 없을 수 있다. 따라서, 제1 스토리지 장치(200_1)에 저장된 제1 원본 데이터(X1)는 제2 스토리지 장치(200_2)로 전송되지 않을 수 있고, 제2 스토리지 장치(200_2)에서 복원된 제4 원본 데이터(X4) 또한 제1 스토리지 장치(200_1)로 전송되지 않을 수 있다.
제1 연산 엔진(230_1)에 존재하는 제2 원본 데이터(X2)와 제3 원본 데이터(X3)는 호스트의 리드 커맨드에 대응한 디코딩 동작이 완료되면 제1 연산 엔진(230_1)에서 삭제될 수 있다. 유사하게, 제2 연산 엔진(230_2)에 존재하는 제3 원본 데이터(X3)와 제4 원본 데이터(X4) 또한 디코딩 동작이 완료되면 제2 연산 엔진(230_2)에서 삭제될 수 있다.
한편 도 14를 참조하면, 도 10과 달리 표 Ⅲ에서 예를 들어 제1 원본 데이터(X1)는 1의 값을 가지고, 제2 원본 데이터(X2)는 1의 값을 가지며, 제3 원본 데이터(X3)는 0의 값을 가지고, 제4 원본 데이터(X4)는 1의 값을 가진다고 가정하자.
또한, 도 6 내지 도 9 및 도 10 내지 도 13에 도시된 바와 같이 제1 내지 제4 원본 데이터와 제1 내지 제4 패리티 데이터가 저장되어 있고, 제3 스토리지 장치(200_3) 및 제4 스토리지 장치(200_4)가 불능 상태라고 가정하자.
이 경우 도 6 내지 도 13에서 설명한 바와 같이, 제1 연산 엔진(230_1)은 제1 패리티 데이터(X2+X3)와 제2 원본 데이터(X2)를 기초로 제3 원본 데이터(X3)를 복원할 수 있고, 제2 연산 엔진(230_3)은 제2 패리티 데이터(X3+X4)와 복원된 제3 원본 데이터(X3)를 기초로 제4 원본 데이터(X4)를 복원할 수 있다.
구체적으로 도 14의 표 Ⅳ를 참조하면, 제1 연산 엔진(230_1)은 1의 값을 가지는 제1 패리티 데이터(X2+X3)와 1의 값을 가지는 제2 원본 데이터(X2)의 XOR 연산을 통하여, 0의 값을 가지는 제3 원본 데이터(X3)를 복원할 수 있다. 유사하게, 제2 연산 엔진(230_2)은 1의 값을 가지는 제2 패리티 데이터(X3+X4)와 0의 값을 가지는 복원된 제3 원본 데이터(X3)의 XOR 연산을 통하여 1의 값을 가지는 제4 원본 데이터(X4)를 복원할 수 있다.
즉, 몇몇 실시예에 따른 이레이져 코드 및 스토리지 장치에 의한 분산 디코딩 방법을 통해, 원본 데이터가 어떤 값을 가지더라도 모든 원본 데이터들을 복원할 수 있다.
또한, 도 7 내지 도 13에서는 제3 스토리지 장치(200_3) 및 제4 스토리지 장치(200_4)가 불능 상태인 것으로 도시되었으나, 예를 들어 제1 스토리지 장치(200_1) 및 제2 스토리지 장치(200_2)가 불능 상태인 것으로 가정하자.
도 7 내지 도 13에서 설명한 방법과 동일하게, 먼저 제4 스토리지 장치(200_4)는 제4 원본 데이터(X4)를 호스트(100) 및 제3 스토리지 장치(200_3)에 전송할 수 있다.
제3 연산 엔진(230_3)은 제3 비휘발성 메모리(220_3)에 저장된 제3 패리티 데이터(X1+X4)와, 제4 스토리지 장치(200_4)로부터 수신한 제4 원본 데이터(X4)를 기초로 연산을 수행하여, 제1 원본 데이터(X1)를 복원할 수 있다.
구체적으로 도 14의 표 Ⅳ를 참조하면, 제3 연산 엔진(230_3)은 0의 값을 가지는 제3 패리티 데이터(X1+X4)와 1의 값을 가지는 제4 원본 데이터(X4)의 XOR 연산을 통하여, 1의 값을 가지는 제1 원본 데이터(X1)를 복원할 수 있다.
이어서, 제3 스토리지 장치(200_3)는 복원된 제1 원본 데이터(X1)를 호스트(100) 및 제4 스토리지 장치(200_4)에 전송할 수 있다.
제4 연산 엔진(230_4)은 제4 비휘발성 메모리(220_4)에 저장된 제4 패리티 데이터(X1+X2)와, 제3 스토리지 장치(200_3)로부터 수신한 복원된 제1 원본 데이터(X1)를 기초로 연산을 수행하여, 제2 원본 데이터(X2)를 복원할 수 있다.
구체적으로 도 14의 표 Ⅳ를 참조하면, 제4 연산 엔진(230_4)은 0의 값을 가지는 제4 패리티 데이터(X1+X2)와 1의 값을 가지는 제1 원본 데이터(X1)의 XOR 연산을 통하여, 1의 값을 가지는 제2 원본 데이터(X2)를 복원할 수 있다.
이후, 제3 스토리지 장치(200_3)는 저장하고 있는 제3 원본 데이터(X3)를 호스트(100)로 전송하고, 제4 스토리지 장치(200_4)는 복원된 제2 원본 데이터(X2)를 호스트(100)로 전송하여, 호스트(100)는 모든 원본 데이터를 리드할 수 있다.
즉, 몇몇 실시예에 따른 이레이져 코드 및 스토리지 장치에 의한 분산 디코딩 방법을 통해, 도 7 내지 도 13에서 도시된 4개의 스토리지 장치(200_1~200_4) 중 임의의 두 개의 스토리지 장치만을 통해서 모든 원본 데이터를 복원할 수 있다. 구체적으로, 4C2=6가지의 모든 경우에 대해서 모든 원본 데이터를 복원할 수 있다.
또한, 도 7 내지 도 13에서 도시된 바와 달리 패리티 데이터를 생성하여 디코딩을 수행할 수 있다.
예를 들어, 제1 패리티 데이터가 X2+X4이고, 제2 패리티 데이터가 X1+X3이며, 제3 패리티 데이터가 X1+X4이고, 제4 패리티 데이터가 X2+X3이라고 가정하자. 또한, 제2 스토리지 장치(200_2) 및 제3 스토리지 장치(200_3)가 불능 상태인 것으로 가정하자.
도 7 내지 도 13에서 설명한 방법과 동일하게, 먼저 제4 스토리지 장치(200_4)는 제4 원본 데이터(X4)를 호스트(100) 및 제1 스토리지 장치(200_1)에 전송할 수 있다.
제1 연산 엔진(230_1)은 제1 비휘발성 메모리(220_1)에 저장된 제1 패리티 데이터(X2+X4)와, 제4 스토리지 장치(200_4)로부터 수신한 제4 원본 데이터(X4)를 기초로 연산을 수행하여, 제2 원본 데이터(X2)를 복원할 수 있다.
구체적으로 도 14의 표 Ⅳ를 참조하면, 제1 연산 엔진(230_1)은 0의 값을 가지는 제1 패리티 데이터(X2+X4)와 1의 값을 가지는 제4 원본 데이터(X4)의 XOR 연산을 통하여, 1의 값을 가지는 제2 원본 데이터(X2)를 복원할 수 있다.
이어서, 제1 스토리지 장치(200_1)는 복원된 제2 원본 데이터(X2)를 호스트(100) 및 제4 스토리지 장치(200_4)에 전송할 수 있다.
제4 연산 엔진(230_4)은 제4 비휘발성 메모리(220_4)에 저장된 제4 패리티 데이터(X2+X3)와, 제1 스토리지 장치(200_1)로부터 수신한 복원된 제2 원본 데이터(X2)를 기초로 연산을 수행하여, 제3 원본 데이터(X3)를 복원할 수 있다.
구체적으로 도 14의 표 Ⅳ를 참조하면, 제4 연산 엔진(230_4)은 1의 값을 가지는 제4 패리티 데이터(X2+X3)와 1의 값을 가지는 제2 원본 데이터(X2)의 XOR 연산을 통하여, 0의 값을 가지는 제3 원본 데이터(X3)를 복원할 수 있다.
이후, 제1 스토리지 장치(200_1)는 저장하고 있는 제1 원본 데이터(X1)를 호스트(100)로 전송하고, 제4 스토리지 장치(200_4)는 복원된 제3 원본 데이터(X3)를 호스트(100)로 전송하여, 호스트(100)는 모든 원본 데이터를 리드할 수 있다.
즉, 도 7 내지 도 13에서 도시된 패리티 데이터의 조합뿐만 아니라, 2개의 임의의 스토리지 장치에 저장된 원본 데이터 및 패리티 데이터를 이용하여 모든 원본 데이터의 복원이 가능하도록 하는, 다양한 패리티 데이터의 조합이 존재할 수 있다.
도 15는 다른 몇몇 실시예에 따른 이레이져 코드에 의한 인코딩 방법을 개략적으로 도시한 도면이다. 이하에서는 도 3에서 설명한 내용과 차이점을 위주로 설명한다.
도 15를 참조하면, 도 3에서와 달리 (A)에서 제1 스토리지 장치(200_1)는 5개의 원본 데이터(OD1~OD5)를 저장할 수 있고, 제2 스토리지 장치(200_2)도 동일하게 5개의 원본 데이터(OD6~OD10)를 저장할 수 있으며, 제3 스토리지 장치(200_3)도 동일하게 5개의 원본 데이터(OD11~OD15)를 저장할 수 있다. (A)에서 전체 원본 데이터의 크기는 원본 데이터가 15개 존재하므로 15bit일 수 있다.
(B)에서 원본 데이터(OD1~OD15)와 추가적으로 생성된 패리티 데이터(PD1~PD10)를 저장하기 위하여, 추가적인 스토리지 장치들이 요구될 수 있다. 즉, 기존의 원본 데이터(OD1~OD15)와 추가적으로 생성된 패리티 데이터(PD1~PD10)를 저장하기 위하여 제4 스토리지 장치(200_4) 및 제5 스토리지 장치(200_5)가 요구될 수 있다.
인코딩 과정에서, 복수의 스토리지 장치(200_1~200_5) 각각은 원본 데이터(OD1~OD15)를 균등하게 분배하여 저장할 수 있다. 또한, 복수의 스토리지 장치(200_1~200_5) 각각은 패리티 데이터(PD1~PD10)를 균등하게 분배하여 저장할 수 있다.
구체적으로, 제1 스토리지 장치(200_1)는 3개의 원본 데이터(OD1~OD3)와 2개의 패리티 데이터(PD1, PD2)를 저장할 수 있다. 제2 스토리지 장치(200_2)는 3개의 원본 데이터(OD4~OD6)와 2개의 패리티 데이터(PD3, PD4)를 저장할 수 있다. 제3 스토리지 장치(200_3)는 3개의 원본 데이터(OD7~OD9)와 2개의 패리티 데이터(PD5, PD6)를 저장할 수 있다. 제4 스토리지 장치(200_4)는 3개의 원본 데이터(OD10~OD12)와 2개의 패리티 데이터(PD7, PD8)를 저장할 수 있다. 제5 스토리지 장치(200_5)는 3개의 원본 데이터(OD13~OD15)와 2개의 패리티 데이터(PD9, PD10)를 저장할 수 있다.
도 3에서 설명한 바와 동일하게, 패리티 데이터는 원본 데이터를 복원하기 위하여, 전체 원본 데이터 중 임의의 원본 데이터에 대해 XOR 연산을 수행하여 생성된 데이터를 의미할 수 있다. 구체적으로, 패리티 데이터는 5개의 스토리지 장치(200_1~200_5) 중 임의의 3개의 스토리지 장치만을 이용하더라도 15개의 원본 데이터 모두를 복원할 수 있도록, 15개의 전체 원본 데이터 중 3개의 원본 데이터에 대해 XOR 연산을 수행하여 생성된 데이터를 의미할 수 있다.
패리티 데이터(PD1~PD10) 각각의 크기는 원본 데이터(OD1~OD15) 각각의 크기와 동일하게 1bit일 수 있다. 따라서, 복수의 스토리지 장치(200_1~200_5)에 저장되는 데이터 블록의 크기는 5bit로 인코딩 전후로 동일하게 유지될 수 있다.
도 16은 다른 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 16을 참조하면, 5개의 스토리지 장치(200_1~200_5) 중 임의의 3개의 스토리지 장치를 이용하여 모든 원본 데이터(X1~X15)를 복원할 수 있다. 구체적인 방법은 도 7 내지 도 13에서 설명한 바와 실질적으로 동일하므로 이하 생략한다.
또한 도 7 내지 도 13에서 설명한 바와 같이, 도 16에 도시된 패리티 데이터의 조합뿐만 아니라, 3개의 임의의 스토리지 장치에 저장된 원본 데이터 및 패리티 데이터를 이용하여 모든 원본 데이터의 복원이 가능하도록 하는, 다양한 패리티 데이터의 조합이 존재할 수 있음은 자명하다.
도 17은 또 다른 몇몇 실시예에 따른 이레이져 코드에 의한 인코딩 방법을 개략적으로 도시한 도면이다.
도 17을 참조하면, 도 3 및 도 15에서와 달리 (A)에서 제1 스토리지 장치(200_1)는 6개의 원본 데이터(OD1~OD6)를 저장할 수 있고, 제2 스토리지 장치(200_2)도 동일하게 6개의 원본 데이터(OD7~OD12)를 저장할 수 있으며, 제3 스토리지 장치(200_3)도 동일하게 6개의 원본 데이터(OD13~OD18)를 저장할 수 있으며, 제4 스토리지 장치(200_4)도 동일하게 6개의 원본 데이터(OD19~OD24)를 저장할 수 있다. (A)에서 전체 원본 데이터의 크기는 원본 데이터가 24개 존재하므로 24bit일 수 있다.
(B)에서 원본 데이터(OD1~OD24)와 추가적으로 생성된 패리티 데이터(PD1~PD12)를 저장하기 위하여, 추가적인 스토리지 장치들이 요구될 수 있다. 즉, 기존의 원본 데이터(OD1~OD24)와 추가적으로 생성된 패리티 데이터(PD1~PD12)를 저장하기 위하여 제5 스토리지 장치(200_5) 및 제6 스토리지 장치(200_6)가 요구될 수 있다.
인코딩 과정에서, 복수의 스토리지 장치(200_1~200_6) 각각은 원본 데이터(OD1~OD24)를 균등하게 분배하여 저장할 수 있다. 또한, 복수의 스토리지 장치(200_1~200_6) 각각은 패리티 데이터(PD1~PD12)를 균등하게 분배하여 저장할 수 있다.
구체적으로, 제1 스토리지 장치(200_1)는 4개의 원본 데이터(OD1~OD4)와 2개의 패리티 데이터(PD1, PD2)를 저장할 수 있다. 제2 스토리지 장치(200_2)는 4개의 원본 데이터(OD5~OD8)와 2개의 패리티 데이터(PD3, PD4)를 저장할 수 있다. 제3 스토리지 장치(200_3)는 4개의 원본 데이터(OD9~OD12)와 2개의 패리티 데이터(PD5, PD6)를 저장할 수 있다. 제4 스토리지 장치(200_4)는 4개의 원본 데이터(OD13~OD16)와 2개의 패리티 데이터(PD7, PD8)를 저장할 수 있다. 제5 스토리지 장치(200_5)는 4개의 원본 데이터(OD17~OD20)와 2개의 패리티 데이터(PD9, PD10)를 저장할 수 있다. 제6 스토리지 장치(200_6)는 4개의 원본 데이터(OD21~OD24)와 2개의 패리티 데이터(PD11, PD12)를 저장할 수 있다.
도 3 및 도 15에서 설명한 바와 동일하게, 패리티 데이터는 원본 데이터를 복원하기 위하여, 전체 원본 데이터 중 임의의 원본 데이터에 대해 XOR 연산을 수행하여 생성된 데이터를 의미할 수 있다. 구체적으로, 패리티 데이터는 6개의 스토리지 장치(200_1~200_6) 중 임의의 4개의 스토리지 장치만을 이용하더라도 24개의 원본 데이터 모두를 복원할 수 있도록, 24개의 전체 원본 데이터 중 4개의 원본 데이터에 대해 XOR 연산을 수행하여 생성된 데이터를 의미할 수 있다.
패리티 데이터(PD1~PD12) 각각의 크기는 원본 데이터(OD1~OD4) 각각의 크기와 동일하게 1bit일 수 있다. 따라서, 복수의 스토리지 장치(200_1~200_6)에 저장되는 데이터 블록의 크기는 6bit로 인코딩 전후로 동일하게 유지될 수 있다.
도 18은 또 다른 몇몇 실시예에 따른 이레이져 코드를 기초로 호스트-스토리지 시스템이 디코딩 연산을 수행하는 방법을 설명하기 위한 예시적인 도면이다.
도 18을 참조하면, 6개의 스토리지 장치(200_1~200_6) 중 임의의 4개의 스토리지 장치를 이용하여 모든 원본 데이터(X1~X24)를 복원할 수 있다. 구체적인 방법은 도 7 내지 도 13에서 설명한 바와 실질적으로 동일하므로 이하 생략한다.
또한 도 7 내지 도 13에서 설명한 바와 같이, 도 18에 도시된 패리티 데이터의 조합뿐만 아니라, 4개의 임의의 스토리지 장치에 저장된 원본 데이터 및 패리티 데이터를 이용하여 모든 원본 데이터의 복원이 가능하도록 하는, 다양한 패리티 데이터의 조합이 존재할 수 있음은 자명하다.
설명의 편의를 위하여 원본 데이터 블록의 수를 K이라 하고 인코딩 후의 데이터 블록의 수를 N라고 하면, 도 7 내지 도 13에서는 (N, K)=(4, 2)를 예시적으로 설명하고, 도 15 내지 도 16에서는 (N, K)=(5, 3)을 예시적으로 설명하고, 도 17 내지 도 18에서는 (N, K)=(6, 4)를 예시적으로 설명하였으나 실시예가 이에 제한되는 것은 아니다.
또한, 도 7 내지 도 18에서는 (N, K) = (K+2, K)의 관계를 가지며, 임의의 K개의 스토리지 장치에 저장된 데이터만으로 원본 데이터를 복구할 수 있는 호스트-스토리지 시스템을 예시적으로 설명하였으나 실시예가 이에 제한되는 것은 아니다.
예를 들어, (N, K)=(4, 3)의 관계를 가질 수도 있으며, 또는 (N, K)=(10, 2)의 관계를 가질 수도 있다.즉, 실시예에 따라 N과 K의 관계를 달리하여 호스트-스토리지 시스템이 구성되고 이에 따라 스토리지 장치에서 분산 디코딩이 수행될 수 있음은 자명하다. 또한, 특정 N-K개 미만의 스토리지 장치를 사용할 수 없는 경우에는 K+1개 이상의 스토리지 장치에 저장된 데이터를 사용하여 분산 디코딩을 진행할 수도 있다.
한편 N/K의 값이 1에 가까울수록 원본 데이터 블록 대비 추가되는 패리티 블록의 비율이 작은 것을 의미할 수 있다. 즉, N/K의 값이 1에 가까울수록 상술한 디코딩 방법이 저장 공간을 효율적으로 사용하면서 실행될 수 있음을 의미할 수 있다.
도 19는 몇몇 실시예에 따른 호스트-스토리지 시스템의 데이터 리드 및 디코딩 연산을 설명하기 위한 예시적인 흐름도이다.
도 19를 참조하면, 호스트는 원본 데이터를 리드하기 위하여 제1 스토리지 컨트롤러와 제2 스토리지 장치에 리드 커맨드를 제공할 수 있다(S10). 구체적으로, 호스트는 제1 스토리지 장치에 포함된 제1 스토리지 컨트롤러와, 제2 스토리지 장치에 포함된 제2 스토리지 컨트롤러에 리드 커맨드를 제공할 수 있다.
이어서, 제2 스토리지 장치는 제2 비휘발성 메모리에 저장된 제2 원본 데이터를 리드할 수 있다(S11). 제2 원본 데이터를 호스트 및 제1 스토리지 컨트롤러로 전송할 수 있다(S12). 즉, 제2 원본 데이터는 멀티캐스트 또는 브로드캐스트 방식을 통하여 제1 스토리지 컨트롤러 및 호스트로 동시에 전송될 수 있음은 상기 설명한 바와 동일하다.
제1 스토리지 컨트롤러는 제공받은 리드 커맨드를 제1 비휘발성 메모리로 제공할 수 있다(S13). 이에 대응하여 제1 비휘발성 메모리는 제1 패리티 데이터를 리드할 수 있다(S14). 또한, 제1 비휘발성 메모리는 리드한 제1 패리티 데이터를 제1 스토리지 컨트롤러에 제공할 수 있다(S15).
도 19에서는 제2 스토리지 장치의 제2 원본 데이터 리드 동작이 제1 비휘발성 메모리의 제1 패리티 데이터의 리드 동작보다 먼저 실행되는 것으로 도시되었으나 이는 설명의 편의를 위한 것일 뿐 실시예가 이에 제한되지 않음은 자명하다. 즉, 상기 두 동작은 서로 순서를 달리하여 실행될 수도 있고, 동시에 실행될 수도 있다.
제1 스토리지 컨트롤러는 제공받은 제2 원본 데이터와 제1 패리티 데이터를 제1 연산 엔진에 제공할 수 있다(S16). 제1 연산 엔진은 제공받은 제2 원본 데이터와 제1 패리티 데이터의 XOR 연산을 수행할 수 있다(S17). 제1 연산 엔진은 제1 원본 데이터를 생성하여 제1 스토리지 컨트롤러에 제공할 수 있다(S18). 상기 원본 데이터의 전송 및 연산 엔진의 XOR 연산을 통한 원본 데이터의 복원은 도 7 내지 도 13에서 설명한 바와 동일하므로 이하 생략한다.
제1 스토리지 컨트롤러는 제공받은 제1 원본 데이터를 호스트에 전송할 수 있다(S19). 이에 따라, 호스트의 리드 커맨드에 대응한 제1 스토리지 장치 및 제2 스토리지 장치의 디코딩 동작 및 호스트의 리드 요청이 완료될 수 있다.
도 20은 몇몇 실시예에 따른 스토리지 장치가 적용된 데이터 센터를 나타낸 도면이다.
도 20을 참조하면, 데이터 센터(3000)는 각종 데이터를 모아두고 서비스를 제공하는 시설로서, 데이터 스토리지 센터라고 지칭될 수도 있다. 데이터 센터(3000)는 검색 엔진 및 데이터 베이스 운용을 위한 시스템일 수 있으며, 은행 등의 기업 또는 정부기관에서 사용되는 컴퓨팅 시스템일 수 있다. 데이터 센터(3000)는 어플리케이션 서버들(3100 내지 3100n) 및 스토리지 서버들(3200 내지 3200m)을 포함할 수 있다. 어플리케이션 서버들(3100 내지 3100n)의 개수 및 스토리지 서버들(3200 내지 3200m)의 개수는 실시예에 따라 다양하게 선택될 수 있고, 어플리케이션 서버들(3100 내지 3100n)의 개수 및 스토리지 서버들(3200 내지 3200m)의 개수는 서로 다를 수 있다.
어플리케이션 서버(3100) 또는 스토리지 서버(3200)는 프로세서(3110, 3210) 및 메모리(3120, 3220) 중 적어도 하나를 포함할 수 있다. 스토리지 서버(3200)를 예시로 설명하면, 프로세서(3210)는 스토리지 서버(3200)의 전반적인 동작을 제어할 수 있고, 메모리(3220)에 액세스하여 메모리(3220)에 로딩된 명령어 및/또는 데이터를 실행할 수 있다. 메모리(3220)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 또는 NVMDIMM(Non-Volatile DIMM)일 수 있다. 실시예에 따라, 스토리지 서버(3200)에 포함되는 프로세서(3210)의 개수 및 메모리(3220)의 개수는 다양하게 선택될 수 있다.
일 실시예에서, 프로세서(3210)와 메모리(3220)는 프로세서-메모리 페어를 제공할 수 있다. 일 실시예에서, 프로세서(3210)와 메모리(3220)의 개수는 서로 다를 수도 있다. 프로세서(3210)는 단일 코어 프로세서 또는 다중 코어 프로세서를 포함할 수 있다. 스토리지 서버(3200)에 대한 상기 설명은, 어플리케이션 서버(3100)에도 유사하게 적용될 수 있다. 실시예에 따라, 어플리케이션 서버(3100)는 스토리지 장치(3150)를 포함하지 않을 수도 있다. 스토리지 서버(3200)는 적어도 하나 이상의 스토리지 장치(3250)를 포함할 수 있다. 스토리지 서버(3200)에 포함되는 스토리지 장치(3250)의 개수는 실시예에 따라 다양하게 선택될 수 있다.
어플리케이션 서버들(3100 내지 3100n) 및 스토리지 서버들(3200 내지 3200m)은 네트워크(3300)를 통해 서로 통신할 수 있다. 네트워크(3300)는 FC(Fibre Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(3300)의 액세스 방식에 따라 스토리지 서버들(3200 내지 3200m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
일 실시예에서, 네트워크(3300)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 다른 예를 들어, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 다른 실시예에서, 네트워크(1300)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(1300)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
이하에서는, 어플리케이션 서버(3100) 및 스토리지 서버(3200)를 중심으로 설명하기로 한다. 어플리케이션 서버(3100)에 대한 설명은 다른 어플리케이션 서버(3100n)에도 적용될 수 있고, 스토리지 서버(3200)에 대한 설명은 다른 스토리지 서버(3200m)에도 적용될 수 있다.
어플리케이션 서버(3100)는 사용자 또는 클라이언트가 저장 요청한 데이터를 네트워크(3300)를 통해 스토리지 서버들(3200 내지 3200m) 중 하나에 저장할 수 있다. 또한, 어플리케이션 서버(3100)는 사용자 또는 클라이언트가 독출 요청한 데이터를 스토리지 서버들(3200 내지 3200m) 중 하나로부터 네트워크(3300)를 통해 획득할 수 있다. 예를 들어, 어플리케이션 서버(3100)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
어플리케이션 서버(3100)는 네트워크(3300)를 통해 다른 어플리케이션 서버(3100n)에 포함된 메모리(3120n) 또는 스토리지 장치(3150n)에 액세스할 수 있고, 또는 네트워크(3300)를 통해 스토리지 서버(3200-3200m)에 포함된 메모리(3220-3220m) 또는 스토리지 장치(3250-3250m)에 액세스할 수 있다. 이로써, 어플리케이션 서버(3100)는 어플리케이션 서버들(3100-3100n) 및/또는 스토리지 서버들(3200-3200m)에 저장된 데이터에 대해 다양한 동작들을 수행할 수 있다. 예를 들어, 어플리케이션 서버(3100)는 어플리케이션 서버들(3100-3100n) 및/또는 스토리지 서버들(3200-3200m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행할 수 있다. 이 때 데이터는 스토리지 서버들(3200-3200m)의 스토리지 장치로(3250-3250m)부터 스토리지 서버들(3200-3200m)의 메모리들(3220-3220m)을 거쳐서, 또는 바로 어플리케이션 서버들(3100-3100n)의 메모리(3120-3120n)로 이동될 수 있다. 네트워크(3300)를 통해 이동하는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 서버(3200)를 예시로 설명하면, 인터페이스(3254)는 프로세서(3210)와 컨트롤러(3251)의 물리적 연결 및 NIC(3240)와 컨트롤러(3251)의 물리적 연결을 제공할 수 있다. 예를 들어, 인터페이스(3254)는 스토리지 장치(3250)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 또한, 예를 들어, 인터페이스(3254)는 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) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
스토리지 서버(3200)는 스위치(3230) 및 NIC(3240)을 더 포함할 수 있다. 스위치(3230)는 프로세서(3210)의 제어에 따라 프로세서(3210)와 스토리지 장치(3250)를 선택적으로 연결시키거나, NIC(3240)과 스토리지 장치(3250)를 선택적으로 연결시킬 수 있다.
일 실시예에서 NIC(3240)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(3240)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(3300)에 연결될 수 있다. NIC(3240)는 내부 메모리, DSP, 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(3210) 및/또는 스위치(3230) 등과 연결될 수 있다. 호스트 버스 인터페이스는, 앞서 설명한 인터페이스(3254)의 예시들 중 하나로 구현될 수도 있다. 일 실시예에서, NIC(3240)는 프로세서(3210), 스위치(3230), 스토리지 장치(3250) 중 적어도 하나와 통합될 수도 있다.
스토리지 서버(3200-3200m) 또는 어플리케이션 서버(3100-3100n)에서 프로세서는 스토리지 장치(3130-3130n, 3250-3250m) 또는 메모리(3120-3120n, 3220-3220m)로 커맨드를 전송하여 데이터를 프로그램하거나 리드할 수 있다. 이 때 데이터는 ECC(Error Correction Code) 엔진을 통해 에러 정정된 데이터일 수 있다. 데이터는 데이터 버스 변환(Data Bus Inversion: DBI) 또는 데이터 마스킹(Data Masking: DM) 처리된 데이터로서, CRC(Cyclic Redundancy Code) 정보를 포함할 수 있다. 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 장치(3150-3150m, 3250-3250m)는 프로세서로부터 수신된 리드 커맨드에 응답하여, 제어 신호 및 커맨드/어드레스 신호를 NAND 플래시 메모리 장치(3252-3252m)로 전송할 수 있다. 이에 따라 NAND 플래시 메모리 장치(3252-3252m)로부터 데이터를 독출하는 경우, RE(Read Enable) 신호는 데이터 출력 제어 신호로 입력되어, 데이터를 DQ 버스로 출력하는 역할을 할 수 있다. RE 신호를 이용하여 DQS(Data Strobe)를 생성할 수 있다. 커맨드와 어드레스 신호는 WE(Write Enable) 신호의 상승 엣지 또는 하강 엣지에 따라 페이지 버퍼에 래치될 수 있다.
컨트롤러(3251)는 스토리지 장치(3250)의 동작을 전반적으로 제어할 수 있다. 일 실시예에서, 컨트롤러(3251)는 SRAM(Static Random Access Memory)을 포함할 수 있다. 컨트롤러(3251)는 기입 커맨드에 응답하여 낸드 플래시(3252)에 데이터를 기입할 수 있고, 또는 독출 커맨드에 응답하여 낸드 플래시(3252)로부터 데이터를 독출할 수 있다. 예를 들어, 기입 커맨드 및/또는 독출 커맨드는 스토리지 서버(3200) 내의 프로세서(3210), 다른 스토리지 서버(3200m) 내의 프로세서(3210m) 또는 어플리케이션 서버(3100, 3100n) 내의 프로세서(3110, 3110n)로부터 제공될 수 있다. DRAM(3253)은 낸드 플래시(3252)에 기입될 데이터 또는 낸드 플래시(3252)로부터 독출된 데이터를 임시 저장(버퍼링)할 수 있다. 또한, DRAM(3253)은 메타 데이터를 저장할 수 있다. 여기서, 메타 데이터는 사용자 데이터 또는 낸드 플래시(3252)를 관리하기 위해 컨트롤러(3251)에서 생성된 데이터이다. 스토리지 장치(3250)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 포함할 수 있다.
몇몇 실시예에서, 스토리지 서버(3200)의 스토리지 장치(3250) 내지 스토리지 서버(3200m)의 스토리지 장치(3250m)는 앞서 설명한 스토리지 장치들을 채용할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
10: 호스트-스토리지 시스템
100 : 호스트
200 : 스토리지 장치
210 : 스토리지 컨트롤러
220 : 비휘발성 메모리
230 : 연산 엔진
OD : 원본 데이터
PD : 패리티 데이터

Claims (10)

  1. 제1 원본 데이터와 제1 패리티 데이터를 저장하는 비휘발성 메모리;
    외부의 다른 스토리지 장치로부터 상기 제1 원본 데이터와 다른 제2 원본 데이터를 수신하고, 상기 비휘발성 메모리와 연결된 스토리지 인터페이스를 통해 상기 비휘발성 메모리로부터 상기 제1 패리티 데이터를 수신하는 스토리지 컨트롤러; 및
    상기 스토리지 컨트롤러로부터 상기 제1 패리티 데이터와 상기 제2 원본 데이터를 수신하고 연산하여, 상기 제1 원본 데이터 및 상기 제2 원본 데이터와 다른 제3 원본 데이터를 복원하는 연산 엔진을 포함하고,
    상기 스토리지 컨트롤러는 상기 제3 원본 데이터를 상기 연산 엔진으로부터 수신하여 호스트와, 상기 외부의 다른 스토리지 장치에 전송하는 스토리지 장치.
  2. 제1항에 있어서,
    상기 연산은 XOR 연산을 포함하는 스토리지 장치.
  3. 제1항에 있어서,
    상기 스토리지 컨트롤러는 상기 제1 패리티 데이터를 상기 호스트와 상기 외부의 다른 스토리지 장치에 전송하지 않는 것을 포함하는 스토리지 장치.
  4. 제1 원본 데이터 내지 제4 원본 데이터를 포함하는 원본 데이터 중 상기 제1 원본 데이터와, 제1 패리티 데이터를 저장하는 제1 스토리지 장치; 및
    상기 제2 원본 데이터와, 상기 제1 패리티 데이터와 다른 제2 패리티 데이터를 저장하는 제2 스토리지 장치를 포함하고,
    상기 제1 스토리지 장치는 상기 제1 패리티 데이터와, 상기 제2 스토리지 장치로부터 수신한 상기 제2 원본 데이터를 연산하여 상기 제3 원본 데이터를 복원하고,
    상기 제2 스토리지 장치는 상기 제2 원본 데이터를 상기 제1 스토리지 장치와 호스트에 동시에 전송하는 스토리지 장치.
  5. 제4항에 있어서,
    상기 연산은 XOR 연산을 포함하는 스토리지 장치.
  6. 제4항에 있어서,
    상기 제2 스토리지 장치는,
    상기 제1 스토리지 장치로부터 복원된 상기 제3 원본 데이터를 수신하고,
    상기 제2 패리티 데이터와 상기 제3 원본 데이터를 연산하여 상기 제4 원본 데이터를 복원하는 것을 포함하는 스토리지 장치.
  7. 제4항에 있어서,
    상기 제1 원본 데이터 내지 상기 제4 원본 데이터의 크기는 서로 동일한 스토리지 장치.
  8. 호스트;
    제1 데이터를 저장하는 제1 스토리지 장치와, 제2 데이터를 저장하는 제2 스토리지 장치를 포함하는 스토리지 장치; 및
    상기 호스트와 상기 스토리지 장치를 연결하는 호스트 인터페이스를 포함하고,
    상기 호스트는 리드 커맨드를 상기 제1 스토리지 장치와 상기 제2 스토리지 장치에 전송하고,
    상기 제1 스토리지 장치는 상기 리드 커맨드에 응답하여 상기 제1 데이터의 적어도 일부인 제3 데이터를 상기 호스트와 상기 제2 스토리지 장치에 동시에 전송하고,
    상기 제2 스토리지 장치는 상기 제1 스토리지 장치로부터 수신한 상기 제3 데이터와, 상기 제2 데이터를 이용하여 연산을 실행하는 호스트-스토리지 시스템.
  9. 제8항에 있어서,
    상기 연산은 XOR 연산을 포함하는 호스트-스토리지 시스템.
  10. 제8항에 있어서,
    상기 제1 데이터는 제1 원본 데이터와 제1 패리티 데이터를 포함하고,
    상기 제1 스토리지 장치는 상기 제1 원본 데이터와 상기 제1 패리티 데이터 중 상기 제1 원본 데이터만을 상기 호스트와 상기 제2 스토리지 장치에 전송하는 것을 포함하는 호스트-스토리지 시스템.
KR1020210155301A 2021-11-12 2021-11-12 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템 KR102403477B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020210155301A KR102403477B1 (ko) 2021-11-12 2021-11-12 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템
US17/810,323 US11893270B2 (en) 2021-11-12 2022-06-30 Storage device, and host-storage system including the storage device
CN202211410082.8A CN116126584A (zh) 2021-11-12 2022-11-11 存储装置和包括该存储装置的主机存储系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210155301A KR102403477B1 (ko) 2021-11-12 2021-11-12 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템

Publications (1)

Publication Number Publication Date
KR102403477B1 true KR102403477B1 (ko) 2022-05-30

Family

ID=81800151

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210155301A KR102403477B1 (ko) 2021-11-12 2021-11-12 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템

Country Status (3)

Country Link
US (1) US11893270B2 (ko)
KR (1) KR102403477B1 (ko)
CN (1) CN116126584A (ko)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09258911A (ja) * 1996-03-25 1997-10-03 Hitachi Ltd ディスクアレイ装置
JP2011221981A (ja) * 2010-04-08 2011-11-04 Hitachi Ltd 外部ストレージシステムに結合されたストレージシステムのエラーコード管理方法及び装置
KR20180008219A (ko) * 2016-07-15 2018-01-24 삼성전자주식회사 Raid 리커버리를 수행하는 메모리 시스템 및 그 동작방법
KR20200085519A (ko) * 2019-01-07 2020-07-15 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20200116808A (ko) * 2019-04-02 2020-10-13 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
KR102318478B1 (ko) * 2014-04-21 2021-10-27 삼성전자주식회사 스토리지 컨트롤러, 스토리지 시스템 및 상기 스토리지 컨트롤러의 동작 방법

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8626820B1 (en) 2003-01-21 2014-01-07 Peer Fusion, Inc. Peer to peer code generator and decoder for digital systems
US7546483B1 (en) 2005-10-18 2009-06-09 Nvidia Corporation Offloading RAID functions to a graphics coprocessor
US9923970B2 (en) 2014-08-22 2018-03-20 Nexenta Systems, Inc. Multicast collaborative erasure encoding and distributed parity protection
JP6228347B2 (ja) 2015-02-25 2017-11-08 株式会社日立製作所 ストレージ装置及び記憶デバイス
KR102533389B1 (ko) * 2016-02-24 2023-05-17 삼성전자주식회사 장치 수명을 향상시키는 데이터 저장 장치 및 이를 포함하는 raid 시스템
US9940196B2 (en) 2016-04-21 2018-04-10 Netapp, Inc. Methods and systems for offloading RAID parity reconstruction
CN109086000B (zh) 2018-06-22 2021-08-03 浙江工业大学 一种raid存储系统中的三容错数据布局方法
US11171666B2 (en) 2019-11-26 2021-11-09 Paul Joseph Nowoczynski Method for efficient erasure coded group management in shared nothing storage clusters

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09258911A (ja) * 1996-03-25 1997-10-03 Hitachi Ltd ディスクアレイ装置
JP2011221981A (ja) * 2010-04-08 2011-11-04 Hitachi Ltd 外部ストレージシステムに結合されたストレージシステムのエラーコード管理方法及び装置
KR102318478B1 (ko) * 2014-04-21 2021-10-27 삼성전자주식회사 스토리지 컨트롤러, 스토리지 시스템 및 상기 스토리지 컨트롤러의 동작 방법
KR20180008219A (ko) * 2016-07-15 2018-01-24 삼성전자주식회사 Raid 리커버리를 수행하는 메모리 시스템 및 그 동작방법
KR20200085519A (ko) * 2019-01-07 2020-07-15 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20200116808A (ko) * 2019-04-02 2020-10-13 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법

Also Published As

Publication number Publication date
US20230153017A1 (en) 2023-05-18
CN116126584A (zh) 2023-05-16
US11893270B2 (en) 2024-02-06

Similar Documents

Publication Publication Date Title
US11243837B2 (en) Data storage drive rebuild with parity generation offload using peer-to-peer data transfers
TWI814975B (zh) 用於利用自我調整寫緩衝區釋放的存儲介質編程方法與裝置、以及其系統單晶片
US10725859B2 (en) Parity generation offload using peer-to-peer data transfers in data storage system
US11741034B2 (en) Memory device including direct memory access engine, system including the memory device, and method of operating the memory device
US11556279B2 (en) System device, and method for memory interface including reconfigurable channel
US20230325277A1 (en) Memory controller performing selective and parallel error correction, system including the same and operating method of memory device
US20240037027A1 (en) Method and device for storing data
KR102403477B1 (ko) 스토리지 장치와 이를 포함하는 호스트-스토리지 시스템
US20230153006A1 (en) Data processing method and data processing device
US20220147470A1 (en) System, device, and method for accessing memory based on multi-protocol
KR20220080915A (ko) 스토리지 장치와 호스트 장치의 구동 방법 및 스토리지 장치
KR20220067282A (ko) 스토리지 장치, 스토리지 장치를 포함하는 서버 장치 및 스토리지 장치의 구동 방법
EP4148572B1 (en) Computational storage device and storage system including the computational storage device
US12008270B2 (en) System, device, and method for memory interface including reconfigurable channel
KR102435910B1 (ko) 스토리지 장치 및 그것의 동작 방법
KR102477051B1 (ko) 네트워크를 이용한 스토리지 장치의 데이터 복구 방법 및 이를 수행하는 스토리지 장치
US20230135891A1 (en) Storage device including storage controller and operating method
US20230325110A1 (en) Operation method of host device and operation method of storage device
US20240045597A1 (en) Storage device and operation method thereof
EP4246330A1 (en) Storage device and operating method thereof
US20230153237A1 (en) Method and device for storing data
US20240069814A1 (en) Storage server and operation method of storage server
US20220011939A1 (en) Technologies for memory mirroring across an interconnect
KR20230169885A (ko) 영구 메모리 장치 및 컴퓨팅 시스템
KR20230144434A (ko) 호스트 장치의 동작 방법 및 스토리지 장치의 동작 방법

Legal Events

Date Code Title Description
GRNT Written decision to grant