KR20180040767A - Raid 방식으로 데이터를 저장하는 스토리지 장치 - Google Patents
Raid 방식으로 데이터를 저장하는 스토리지 장치 Download PDFInfo
- Publication number
- KR20180040767A KR20180040767A KR1020160132205A KR20160132205A KR20180040767A KR 20180040767 A KR20180040767 A KR 20180040767A KR 1020160132205 A KR1020160132205 A KR 1020160132205A KR 20160132205 A KR20160132205 A KR 20160132205A KR 20180040767 A KR20180040767 A KR 20180040767A
- Authority
- KR
- South Korea
- Prior art keywords
- parity
- data
- data chunk
- memory
- intermediate parity
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 285
- 238000000034 method Methods 0.000 claims description 32
- 230000004044 response Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 26
- 230000008569 process Effects 0.000 description 21
- 230000015556 catabolic process Effects 0.000 description 2
- 239000004020 conductor Substances 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/1096—Parity calculation or recalculation after configuration or reconfiguration of the system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1748—De-duplication implemented within the file system, e.g. based on file segments
- G06F16/1752—De-duplication implemented within the file system, e.g. based on file segments based on file chunks
-
- G06F17/30159—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/109—Sector level checksum or ECC, i.e. sector or stripe level checksum or ECC in addition to the RAID parity calculation
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)
- Techniques For Improving Reliability Of Storages (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
Abstract
본 발명은 복수의 제 1 메모리, 컨트롤러, 및 제 2 메모리를 포함하는 스토리지 장치를 제공한다. 컨트롤러는 제 1 및 제 2 데이터 청크들이 복수의 제 1 메모리에 분산하여 저장되도록 복수의 제 1 메모리를 제어한다. 컨트롤러는 제 2 데이터 청크 직전에 처리되는 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성한다. 제 2 데이터 청크가 마지막으로 처리되는 데이터 청크가 아니고 제 1 중간 패리티가 제 2 메모리에서 버퍼링되는 경우, 컨트롤러는 제 2 메모리에서 버퍼링되는 제 1 중간 패리티 및 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성하고, 제 2 중간 패리티가 컨트롤러 내부의 제 3 메모리에 저장되지 않고 제 2 메모리에서 버퍼링되도록 제 2 중간 패리티를 제 2 메모리로 출력한다. 본 발명에 따르면, 패리티를 생성하는 데에 대한 레이턴시가 감소할 수 있다.
Description
본 발명은 전자 장치에 관한 것으로, 좀 더 구체적으로는 데이터를 저장하는 스토리지 장치의 구성들 및 동작들에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그것에 포함되는 다양한 전자 회로의 동작들에 따라 고유의 기능들을 수행한다. 전자 장치의 전자 회로들은 전자 장치의 기능들을 제공하기 위해 신호들/데이터를 처리하고 연산들을 수행할 수 있다.
스토리지 장치는 전자 장치의 한 예이고, 사용자를 위해 데이터를 저장한다. 스토리지 장치는 그것에 포함되는 메모리 장치, 컨트롤러 등과 같은 다양한 전자 회로의 동작들에 따라 스토리지 서비스를 제공한다. 이를 위해, 스토리지 장치는 호스트(Host) 장치로부터 수신되는 신호들/데이터를 처리하고 다양한 연산을 수행한다.
안정적이고 신뢰성 있게 스토리지 장치에 데이터를 저장하기 위해 다양한 방법론이 제안되어 왔다. RAID(Redundant Array of Independent Disks) 방식은 이러한 방법론들 중 하나이다. RAID 방식은 복수의 스토리지 장치 또는 복수의 컴퓨팅 장치를 포함하는 스토리지 시스템에서 널리 채용되고, 근래에는 단일 스토리지 장치에서도 채용되고 있다.
RAID 방식에 따르면, 데이터는 스트라이프(Stripe) 단위로 관리된다. 하나의 스트라이프는 복수의 데이터 청크(Chunk)로 분할되고, 분할된 데이터 청크들은 복수의 별개의 스토리지 영역에 분산하여 저장된다. 나아가, 분할된 데이터 청크들에 기초하여 패리티가 생성되고, 패리티 역시 스토리지 영역들 중 하나에 저장된다. 데이터 청크들 중 일부가 손실되거나 손상되는 경우, 패리티는 손실 또는 손상된 데이터 청크를 복구 또는 복원하기 위해 이용된다.
RAID 방식이 채용되는 경우, 하나의 스트라이프를 복수의 데이터 청크로 분할하거나 패리티를 생성하기 위해 다양한 연산이 수행된다. 데이터의 양이 많아질수록, 이러한 연산들을 수행하는 데에 대한 부하 및 레이턴시(Latency)가 증가하고, 이는 스토리지 장치 또는 스토리지 시스템의 성능의 저하를 야기한다.
본 발명의 몇몇 실시 예들은 RAID 방식을 채용하는 스토리지 장치 또는 스토리지 시스템에서 성능이 저하되는 것을 방지하기 위한 구성들 및 동작들을 제공할 수 있다.
본 발명의 몇몇 실시 예는 복수의 제 1 메모리, 컨트롤러, 및 제 2 메모리를 포함하는 스토리지 장치를 제공할 수 있다. 복수의 제 1 메모리는 대상 데이터와 관련되는 제 1 및 제 2 데이터 청크들을 분산하여 저장할 수 있다. 컨트롤러는 제 1 및 제 2 데이터 청크들이 분산하여 저장되도록 복수의 제 1 메모리를 제어할 수 있다. 제 2 메모리는 제 1 및 제 2 데이터 청크들을 버퍼링할 수 있다. 컨트롤러는 대상 데이터와 관련하여 제 2 데이터 청크 직전에 처리되는 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성할 수 있다.
몇몇 실시 예에서, 제 2 데이터 청크가 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크가 아니고 제 1 중간 패리티가 제 2 메모리에서 버퍼링되는 경우, 컨트롤러는 제 2 메모리에서 버퍼링되는 제 1 중간 패리티 및 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성할 수 있고, 제 2 중간 패리티가 컨트롤러 내부의 제 3 메모리에 저장되지 않고 제 2 메모리에서 버퍼링되도록 제 2 중간 패리티를 제 2 메모리로 출력할 수 있다.
몇몇 실시 예에서, 제 1 중간 패리티가 제 2 메모리에서 버퍼링되는 경우, 컨트롤러는 제 2 메모리에서 버퍼링되는 제 1 중간 패리티를 컨트롤러 내부의 제 3 메모리에 저장하지 않고 그 버퍼링되는 제 1 중간 패리티 및 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성할 수 있다.
본 발명의 몇몇 실시 예들에 따르면, 최종 패리티가 생성되는 동안 상이한 메모리들 사이에서 데이터를 로드(Load)하고 저장하는 처리들의 일부가 생략될 수 있다. 따라서, 패리티를 생성하는 데에 대한 레이턴시가 감소할 수 있고, 이는 스토리지 서비스의 성능을 향상시킬 수 있다.
도 1은 본 발명의 실시 예들에 따른 스토리지 장치를 포함하는 전자 시스템을 보여주는 블록도이다.
도 2는 도 1의 스토리지 장치에서 채용되는 RAID 방식을 설명하기 위한 개념도이다.
도 3은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 4는 도 3의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도이다.
도 5는 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 6a 내지 도 6d는 도 5의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다.
도 7은 도 5의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다.
도 8은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 9a 내지 도 9c는 도 8의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다.
도 10은 도 8의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다.
도 11은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 12a 내지 도 12c는 도 11의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다.
도 13은 도 11의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다.
도 14는 본 발명의 실시 예들에 따른 RAID 컨트롤러 및 스토리지 장치들을 포함하는 전자 시스템을 보여주는 블록도이다.
도 2는 도 1의 스토리지 장치에서 채용되는 RAID 방식을 설명하기 위한 개념도이다.
도 3은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 4는 도 3의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도이다.
도 5는 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 6a 내지 도 6d는 도 5의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다.
도 7은 도 5의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다.
도 8은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 9a 내지 도 9c는 도 8의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다.
도 10은 도 8의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다.
도 11은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 12a 내지 도 12c는 도 11의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다.
도 13은 도 11의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다.
도 14는 본 발명의 실시 예들에 따른 RAID 컨트롤러 및 스토리지 장치들을 포함하는 전자 시스템을 보여주는 블록도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자(이하, 통상의 기술자)들이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 본 발명의 실시 예들이 명확하고 상세하게 설명될 것이다.
도 1은 본 발명의 실시 예들에 따른 스토리지 장치를 포함하는 전자 시스템을 보여주는 블록도이다. 전자 시스템(1000)은 호스트(Host, 1100) 및 스토리지 장치(1300)를 포함할 수 있다.
호스트(1100)는 스토리지 장치(1300)와 데이터(DAT)를 교환할 수 있다. 스토리지 장치(1300)는 호스트(1100)로부터 수신되는 커맨드에 응답하여, 호스트(1100)로 스토리지 서비스를 제공할 수 있다.
예로서, 데이터(DAT)가 쓰기 데이터를 포함하는 경우, 호스트(1100)는 쓰기 커맨드, 및 쓰기 데이터를 포함하는 데이터(DAT)를 스토리지 장치(1300)로 제공할 수 있다. 스토리지 장치(1300)는 쓰기 커맨드에 응답하여, 데이터(DAT)에 포함되는 요청된 쓰기 데이터를 저장할 수 있다. 예로서, 데이터(DAT)가 읽기 데이터를 포함하는 경우, 호스트(1100)는 읽기 커맨드를 스토리지 장치(1300)로 제공할 수 있다. 스토리지 장치(1300)는 읽기 커맨드에 응답하여, 요청된 읽기 데이터를 포함하는 데이터(DAT)를 호스트(1100)로 출력할 수 있다.
예로서, 호스트(1100)는 하나 이상의 프로세서 코어들을 포함하도록 구현될 수 있다. 예로서, 호스트(1100)는 범용(General-purpose) 프로세서, 전용(Special-purpose) 프로세서, 또는 어플리케이션 프로세서(Application Processor)를 포함할 수 있다. 호스트(1100)는 프로세서 그 자체이거나, 프로세서(들)를 포함하는 전자 장치 또는 시스템일 수 있다.
스토리지 장치(1300)는 복수의 불휘발성 메모리(1310), 컨트롤러(1330), 및 버퍼 메모리(1350)를 포함할 수 있다.
복수의 불휘발성 메모리(1310)에 포함되는 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각은 호스트(1100)에 의해 요청되는 쓰기 데이터를 저장하거나 읽기 데이터를 출력할 수 있다. 이를 위해, 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각은 데이터를 저장하기 위한 메모리 영역(들)을 포함할 수 있다. 도 1은 네 개의 불휘발성 메모리들(1311, 1312, 1313, 1314)을 보여주지만, 본 발명은 이에 한정되지 않고, 불휘발성 메모리들의 개수는 다양하게 변경 또는 수정될 수 있다.
예로서, 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각이 낸드 플래시 메모리(NAND-type Flash Memory)를 포함하는 경우, 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각은 복수의 워드 라인 및 복수의 비트 라인을 따라 형성되는 메모리 셀 어레이를 포함할 수 있다. 그러나, 본 발명은 이 예로 한정되지 않고, 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각은 PRAM(Phase-change Random Access Memory), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 다양한 불휘발성 메모리 중 하나 이상을 포함할 수 있다. 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각의 구성은 다양하게 변경 또는 수정될 수 있다.
불휘발성 메모리들(1311, 1312, 1313, 1314)이 설명됨에도 불구하고, 몇몇 실시 예에서 불휘발성 메모리들(1311, 1312, 1313, 1314) 중 일부 또는 전부가 SRAM(Static RAM), DRAM(Dynamic RAM), SDRAM(Synchronous DRAM) 등과 같은 휘발성 메모리로 대체될 수 있음이 통상의 기술자에 의해 잘 이해될 수 있을 것이다. "불휘발성"이라는 용어는 단지 예시적인 구현을 제공하기 위해 이용되고, 본 발명은 이에 한정되지 않는다.
컨트롤러(1330)는 스토리지 장치(1300)의 전반적인 동작들을 제어할 수 있다. 예로서, 컨트롤러(1330)는 불휘발성 메모리들(1311, 1312, 1313, 1314)의 동작들을 스케줄링하거나, 스토리지 장치(1300)에서 처리되는 신호들/데이터를 인코딩 및 디코딩할 수 있다.
컨트롤러(1330)는 이러한 다양한 동작 및 뒤에서 설명될 동작들을 수행하기 위해, 하드웨어 구성, 소프트웨어 구성, 또는 그것들의 하이브리드(Hybrid) 구성을 포함할 수 있다. 예로서, 컨트롤러(1330)는 특정 동작을 수행하도록 구성되는 전용 하드웨어 회로를 포함할 수 있다. 추가로 또는 대안적으로, 컨트롤러(1330)는 특정 동작을 수행하도록 구성되는 프로그램 코드(Program Code)의 명령어 집합(Instruction Set)을 실행할 수 있는 하나 이상의 프로세서 코어들을 포함할 수 있다.
컨트롤러(1330)는 캐시 메모리(1331)를 포함할 수 있다. 캐시 메모리(1331)는 컨트롤러(1330)의 동작들에 이용되는 데이터를 저장할 수 있다. 이를 위해, 캐시 메모리(1331)는 다양한 불휘발성/휘발성 메모리 중 하나 이상을 포함할 수 있다.
컨트롤러(1330)는 RAID(Redundant Array of Independent Disks) 엔진(1333)을 포함할 수 있다. RAID 엔진(1333)은 데이터를 RAID 방식으로 불휘발성 메모리들(1311, 1312, 1313, 1314)에 저장하기 위해 채용될 수 있다. RAID 방식의 기본적인 개념은 도 2를 참조하여 설명될 것이다.
RAID 엔진(1333) 및 뒤에서 설명될 그것의 구성 요소들 각각은 도 2 내지 도 13을 참조하여 설명될 다양한 예시적인 동작을 수행하기 위해, 하드웨어 구성, 소프트웨어 구성, 또는 그것들의 하이브리드 구성을 포함할 수 있다. 예로서, RAID 엔진(1333) 및 그것의 구성 요소들 각각은 특정 동작을 수행하도록 구성되는 전용 하드웨어 회로를 포함할 수 있다. 추가로 또는 대안적으로, RAID 엔진(1333) 및 그것의 구성 요소들 각각은 특정 동작을 수행하도록 구성되는 프로그램 코드의 명령어 집합을 실행할 수 있는 하나 이상의 프로세서 코어들을 포함할 수 있다.
버퍼 메모리(1350)는 스토리지 장치(1300)의 동작들에 이용되는 데이터를 버퍼링할 수 있다. 이를 위해, 버퍼 메모리(1350)는 다양한 불휘발성/휘발성 메모리 중 하나 이상을 포함할 수 있다,.
이 명세서에서, 복수의 불휘발성 메모리(1310)는 복수의 제 1 메모리로 불릴 수 있다. 나아가, 컨트롤러 외부의 버퍼 메모리(1350)는 제 2 메모리로 불릴 수 있고, 컨트롤러(1330) 내부의 캐시 메모리(1331)는 제 3 메모리로 불릴 수 있다. 몇몇 실시 예에서, 캐시 메모리(1331)는 컨트롤러(1330)의 높은 성능을 제공하기 위해, 버퍼 메모리(1350)보다 빠른 속도로 동작할 수 있다(예컨대, SRAM을 포함할 수 있다). 몇몇 실시 예에서, 버퍼 메모리(1350)는 스토리지 장치(1300)의 전반적인 데이터 흐름을 관리하기 위해, 캐시 메모리(1331)보다 많은 용량(Capacity)을 가질 수 있다(예컨대, DRAM을 포함할 수 있다). 그러나, 이 실시 예들은 단지 가능한 구현들 중 일부를 제공하기 위해 설명되고, 본 발명은 이에 한정되지 않는다.
몇몇 실시 예에서, 전자 시스템(1000)은 하나의 전자 장치로 구현될 수 있다. 예로서, 전자 시스템(1000)은 호스트(1100) 및 스토리지 장치(1300)를 포함하는 가전 기기, 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console) 등과 같은 다양한 전자 장치 중 하나일 수 있다. 몇몇 실시 예에서, 전자 시스템(1000)은 복수의 전자 장치로 구현될 수 있다. 예로서, 호스트(1100) 및 스토리지 장치(1300)는 서로 별개의 전자 장치들일 수 있고, 전자 시스템(1000)을 구현하기 위해 로컬 또는 원격으로 연결될 수 있다.
도 2는 도 1의 스토리지 장치에서 채용되는 RAID 방식을 설명하기 위한 개념도이다.
RAID 방식에 따르면, 데이터는 스트라이프(Stripe) 단위로 관리될 수 있다. 예로서, 스토리지 장치(1300)는 호스트(1100)로부터 데이터(D0)를 수신할 수 있다. 더 나은 이해를 돕기 위해, 데이터(D0) 및 뒤에서 설명될 다른 데이터 각각이 하나의 스트라이프에 대응하는 크기를 갖는 것으로 가정될 것이다. 그러나, 본 발명은 이 가정으로 한정되지 않는다. 몇몇 데이터는 하나의 스트라이프보다 작은 크기를 갖거나, 복수의 스트라이프에 대응하는 크기를 가질 수 있다.
하나의 스트라이프는 복수의 데이터 청크(Chunk)로 분할될 수 있다. 예로서, 컨트롤러(1330)의 RAID 엔진(1333)은 데이터(D0)를 데이터 청크들(D01, D02, D03)로 분할할 수 있다. 본 발명은 도 2에 의해 한정되지 않고, 하나의 스트라이프에 대응하는 데이터 크기, 하나의 데이터 청크에 대응하는 데이터 크기, 하나의 스트라이프에 포함되는 데이터 청크들의 개수 등과 같은 RAID 파라미터들은 성능, 신뢰성, 스토리지 용량 등과 같은 다양한 요인에 의존하여 변경 또는 수정될 수 있다.
분할된 데이터 청크들에 기초하여 패리티가 생성될 수 있다. 예로서, 컨트롤러(1330)의 RAID 엔진(1333)은 데이터 청크들(D01, D02, D03)과 관련되는 패리티(P03)를 생성할 수 있다. 데이터 청크들(D01, D02, D03) 중 일부가 손실되거나 손상되는 경우, 패리티(P03)는 손실 또는 손상된 데이터 청크를 복원 또는 복구하기 위해 이용될 수 있다.
데이터(D0)를 데이터 청크들(D01, D02, D03)로 분할하고 패리티(P03)를 생성하기 위해 다양한 연산이 수행될 수 있다. 캐시 메모리(1331) 및/또는 버퍼 메모리(1350)는 이러한 연산들이 수행되는 동안 생성/처리되는 중간 결과들을 저장하거나 버퍼링할 수 있다.
분할된 데이터 청크들 및 패리티는 복수의 별개의 스토리지 영역에 분산하여저장될 수 있다. 예로서, 불휘발성 메모리들(1311, 1312, 1313, 1314)은 컨트롤러(1330)의 제어에 따라, 각각 데이터 청크들(D01, D02, D03) 및 패리티(P03)를 분산하여 저장할 수 있다. 그러나, 본 발명은 이 예로 한정되지 않고, 데이터 청크들(D01, D02, D03) 및 패리티(P03)는 상이한 채널들에 연결된 불휘발성 메모리들로 분배되거나, 하나의 불휘발성 메모리의 상이한 메모리 영역들로 분배될 수 있다.
불휘발성 메모리들(1311, 1312, 1313, 1314)이 동시에 문제를 야기하는 경우는 거의 발생하지 않기 때문에, 데이터 청크들(D01, D02, D03) 및 패리티(P03)가 동시에 손실 또는 손상될 가능성은 매우 작다. 게다가, 특정 불휘발성 메모리가 문제를 야기하고 몇몇 데이터 청크들이 손실 또는 손상되더라도, 손실 또는 손상된 데이터 청크는 패리티(P03)에 기초하여 복원 또는 복구될 수 있다. 따라서, RAID 방식은 스토리지 장치(1300)의 신뢰성을 향상시킬 수 있다.
도 3은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다. 도 4는 도 3의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도이다. 더 나은 이해를 돕기 위해, 도 3 및 도 4가 함께 참조될 것이다.
도 3을 참조하면, 몇몇 실시 예에서, 도 1의 스토리지 장치(1300)는 도 3의 스토리지 장치(1300a)를 포함할 수 있다. 스토리지 장치(1300a)에서, RAID 엔진(1333)은 RAID 관리기(1333a) 및 패리티 연산기(1333b)를 포함할 수 있다.
RAID 관리기(1333a)는 데이터(D0)를 수신할 수 있다. RAID 관리기(1333a)는 스토리지 장치(1300a)의 정책 및/또는 사용자에 의해 설정되는 RAID 파라미터에 기초하여, 데이터(D0)를 데이터 청크들(D01, D02, D03)로 분할할 수 있다.
데이터 청크들(D01, D02, D03)은 데이터 청크(D01), 데이터 청크(D02), 및 데이터 청크(D03)의 순서에 따라 순차적으로 처리될 수 있다. 예로서, 데이터 청크들(D01, D02, D03)은 데이터 청크(D01), 데이터 청크(D02), 및 데이터 청크(D03)의 순서에 따라 버퍼 메모리(1350)에서 버퍼링될 수 있다. 예로서, 데이터 청크들(D01, D02, D03)은 패리티(P03)를 생성하기 위해 데이터 청크(D01), 데이터 청크(D02), 및 데이터 청크(D03)의 순서에 따라 참조될 수 있다.
버퍼 메모리(1350)는 데이터 영역(1350a)을 포함할 수 있다. 예로서, 데이터 청크들(D01, D02, D03)은 데이터 영역(1350a) 상에서 버퍼링될 수 있다. 데이터 영역(1350a)의 위치 및 크기는 버퍼 메모리(1350)의 동작 및 버퍼링되는 데이터 청크들의 양에 의존하여 가변(Vary)할 수 있다. 데이터 청크들(D01, D02, D03)은 버퍼 메모리(1350)에서 버퍼링된 후 불휘발성 메모리들(1310)에 저장될 수 있다.
패리티 연산기(1333b)는 데이터 청크들(D01, D02, D03)에 기초하여 패리티(P03)를 생성하기 위해, 패리티 연산을 수행할 수 있다. 예로서, 패리티 연산은 비트 단위의(Bitwise) 배타적 논리 합(Exclusive Logical OR) 연산을 포함할 수 있으나, 본 발명은 이 예로 한정되지 않는다. 패리티 연산은 손실 또는 손상된 데이터 청크를 복원하는 데에 이용되는 패리티를 생성하기 위해 다양하게 변경 또는 수정될 수 있다.
캐시 메모리(1331)는 패리티 연산기(1333b)의 연산 결과들을 저장할 수 있다. 예로서, 캐시 메모리(1331)는 패리티 연산기(1333b)에 의해 산출되는 최종 패리티 및 중간 패리티를 저장하기 위해 할당되는 패리티 영역들(1331a, 1331b)을 포함할 수 있다. 여기서, 최종 패리티는 불휘발성 메모리들(1310)에 데이터 청크들과 함께 분산하여 저장되는 패리티를 의미할 수 있고, 중간 패리티는 최종 패리티가 산출되는 동안 얻어지는 중간 결과를 의미할 수 있다.
도 3은 두 개의 패리티 영역들(1331a, 1331b)을 보여주지만, 패리티 영역들의 개수는 변경 또는 수정될 수 있다. 다만, 캐시 메모리(1331)는 상대적으로 비싸고 적은 용량을 가질 수 있기 때문에, 캐시 메모리(1331)는 한정된 개수의 패리티 영역들만을 포함할 수 있다. 따라서, 캐시 메모리(1331)의 패리티 영역들의 크기는 가변하지 않고 고정될 수 있다. 이 명세서에서, 더 나은 이해를 돕기 위해, 두 개의 패리티 영역들(1331a, 1331b)이 설명될 것이고, 캐시 메모리(1331)의 하나의 패리티 영역이 하나의 패리티를 저장할 수 있는 것으로 가정될 것이다.
패리티 연산기(1333b)는 경로 A를 따라, 데이터 영역(1350a)에서 버퍼링되는 데이터 청크를 수신할 수 있다. 패리티 연산기(1333b)는 경로 B를 따라 캐시 메모리(1331)에 저장된 중간 패리티를 수신할 수 있다. 패리티 연산기(1333b)는 수신되는 데이터 청크 및 중간 패리티에 대해 패리티 연산을 수행할 수 있고, 따라서 최종 패리티 또는 다음 중간 패리티를 생성할 수 있다.
도 4를 도 3과 함께 참조하면, 시각 t1에서, 데이터 청크(D01)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 데이터 청크(D01)는 데이터(D0)와 관련하여 처음으로 처리되기 때문에, 패리티 영역들(1331a, 1331b)은 아직 비어있을 수 있다. 시각 t2에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D01)를 수신할 수 있고, 데이터 청크(D01)에 기초하여 중간 패리티(P01)를 생성할 수 있다. 중간 패리티(P01)는 데이터 청크(D01)와 실질적으로 동일할 수 있다. 시각 t3에서, 중간 패리티(P01)는 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D01)는 불휘발성 메모리들(1310)로 출력될 수 있다.
시각 t4에서, 데이터 청크(D02)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t5에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D02)를 수신할 수 있고, 경로 B를 따라 중간 패리티(P01)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D02) 및 중간 패리티(P01)에 대해 패리티 연산을 수행하여, 다음 중간 패리티(P02)를 생성할 수 있다. 시각 t6에서, 중간 패리티(P02)는 패리티 영역(1331a)에 저장(또는, 갱신)될 수 있고, 데이터 청크(D02)는 불휘발성 메모리들(1310)로 출력될 수 있다.
시각 t7에서, 데이터 청크(D03)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t8에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D03)를 수신할 수 있고, 경로 B를 따라 중간 패리티(P02)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D03) 및 중간 패리티(P02)에 대해 패리티 연산을 수행하여, 패리티(P03)를 생성할 수 있다. 시각 t9에서, 패리티(P03)는 패리티 영역(1331a)에 저장(또는, 갱신)될 수 있고, 데이터 청크(D03)는 불휘발성 메모리들(1310)로 출력될 수 있다.
예로서, 데이터 청크(D03)는 데이터(D0)와 관련하여 마지막으로 처리되는 데이터 청크임을 지시하는 메타 또는 헤더 정보를 포함할 수 있다. RAID 엔진(1333)은 이 정보에 기초하여, 패리티(P03)가 최종 패리티임을 판별할 수 있다. 시각 t10에서, 캐시 메모리(1331)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티(P03)를 불휘발성 메모리들(1310)로 출력할 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터 청크들(D01, D02, D03) 및 최종 패리티(P03)를 분산하여 저장할 수 있다.
도 5는 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다. 도 6a 내지 도 6d는 도 5의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다. 더 나은 이해를 돕기 위해, 도 5 내지 도 6d가 함께 참조될 것이다.
도 5를 참조하면, 몇몇 실시 예에서, 도 1의 스토리지 장치(1300)는 도 5의 스토리지 장치(1300b)를 포함할 수 있다. 스토리지 장치(1300b)는 도 3의 스토리지 장치(1300a)와 유사하게 구성될 수 있다. 다만, 도 5 내지 도 6d의 예에서, RAID 관리기(1333a)는 하나의 데이터(D0)만 수신하는 대신, 여러 데이터(D1, D2, D3)를 수신할 수 있다.
예로서, 호스트(1100)가 많은 양의 데이터를 저장할 것을 요청한 경우 또는 스토리지 장치(1300b) 내부에서 복수의 스트라이프가 동시에 생성되는 경우, 여러 데이터(D1, D2, D3)가 다루어질 수 있다. 다른 예로서, 네임스페이스(Namespace) 또는 LUN(Logical Unit Number)에 기반하는 스토리지 서비스가 구현되는 경우, 여러 데이터(D1, D2, D3)가 다루어질 수 있다.
RAID 관리기(1333a)는 RAID 파라미터에 기초하여, 데이터(D1)를 데이터 청크들(D11, D12, D13)로 분할할 수 있고, 데이터(D2)를 데이터 청크들(D21, D22, D23)로 분할할 수 있고, 데이터(D3)를 데이터 청크들(D31, D32, D33)로 분할할 수 있다. 도 5 내지 도 6d의 예에서, 데이터 청크들(D11, D12, D13, D21, D22, D23, D31, D32, D33)은 데이터 청크(D11), 데이터 청크(D21), 데이터 청크(D31), 데이터 청크(D12), 데이터 청크(D22), 데이터 청크(D32), 데이터 청크(D13), 데이터 청크(D23), 및 데이터 청크(D33)의 순서에 따라 순차적으로 처리될 수 있다.
예로서, 데이터 청크들(D11, D12, D13, D21, D22, D23, D31, D32, D33) 각각은 그것이 어떤 데이터로부터 분할되었는지를 나타내는 메타 또는 헤더 정보를 포함할 수 있다. 예로서, 데이터 청크들(D11, D12, D13, D21, D22, D23, D31, D32, D33)로부터 생성되는 패리티들 각각은 그것이 어떤 데이터와 관련되는지를 나타내는 메타 또는 헤더 정보를 포함할 수 있다.
도 6a를 도 5와 함께 참조하면, 시각 t11에서, 데이터 청크(D11)가 버퍼 메모리(1350)의 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t12에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D11)를 수신할 수 있고, 데이터 청크(D11)에 기초하여 중간 패리티(P11)를 생성할 수 있다. 시각 t13에서, 중간 패리티(P11)는 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D11)는 불휘발성 메모리들(1310)로 출력될 수 있다.
시각 t14에서, 데이터 청크(D21)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t15에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D21)를 수신할 수 있다. 한편, RAID 엔진(1333)은 데이터 청크(D21)에 포함되는 메타 또는 헤더 정보에 기초하여, 데이터 청크(D21)와 관련되는 중간 패리티가 아직 생성되지 않았음을 판별할 수 있다. 따라서, 패리티 연산기(1333b)는 데이터 청크(D21)에 기초하여 중간 패리티(P21)를 생성할 수 있다.
중간 패리티(P11)는 데이터(D1)와 관련되고 중간 패리티(P21)는 데이터(D2)와 관련되기 때문에, 시각 t16에서, 중간 패리티(P21)는 중간 패리티(P11)와 별개로 패리티 영역(1331b)에 저장될 수 있다. 데이터 청크(D21)는 불휘발성 메모리들(1310)로 출력될 수 있다.
예로서, RAID 엔진(1333)은 패리티 영역들(1331a, 1331b) 각각이 중간 또는 최종 패리티로 채워지는지 여부에 관하여 메타 정보를 관리할 수 있다. RAID 엔진(1333)은 메타 정보에 기초하여, 캐시 메모리(1331)에서 최종 패리티 및 중간 패리티를 위해 할당되는 메모리 영역의 잔여 용량이 기준 용량 미만인지(예컨대, 패리티 영역들(1331a, 1331b) 모두가 채워졌는지) 여부를 판별할 수 있다.
시각 t17에서, 데이터 청크(D31)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 그러나, RAID 엔진(1333)은 패리티 영역들(1331a, 1331b) 모두가 채워졌음을 판별할 수 있다. 데이터 청크(D31)와 관련되는 패리티 연산을 수행하기 위해, 시각 t18에서, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(P11)가 캐시 메모리(1331)로부터 버퍼 메모리(1350)로 저장될 수 있다. 따라서, 패리티 영역(1331a)이 비워질 수 있다. 도 6a는 데이터 청크(D31)가 수신된 후에 패리티 영역(1331a)이 비워지는 것을 보여주지만, 몇몇 실시 예에서, 데이터 청크(D31)가 수신되기 전에 미리 패리티 영역(1331a)이 비워질 수 있다.
버퍼 메모리(1350)는 중간 패리티를 버퍼링하기 위한 패리티 영역(1350b)을 더 포함할 수 있다. 버퍼 메모리(1350)는 상대적으로 큰 용량을 가질 수 있다. 따라서, 패리티 영역들(1331a, 1331b)과 달리, 패리티 영역(1350b)의 위치 및 크기는 버퍼 메모리(1350)의 동작 및 버퍼링되는 중간 패리티들의 양에 의존하여 가변할 수 있다. 예로서, RAID 엔진(1333)은 특정 데이터와 관련되는 중간 패리티가 캐시 메모리(1331)에 저장되는지 또는 버퍼 메모리(1350)에서 버퍼링되는지 여부에 관하여 메타 정보를 관리할 수 있다.
시각 t19에서, 데이터 청크(D31)와 관련되는 패리티 연산이 수행될 수 있다. 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D31)를 수신할 수 있고, 데이터 청크(D31)에 기초하여 제 3 데이터(D3)와 관련되는 중간 패리티(P31)를 생성할 수 있다. 시각 t20에서, 중간 패리티(P31)는 빈 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D31)는 불휘발성 메모리들(1310)로 출력될 수 있다.
도 6b를 도 5와 함께 참조하면, 시각 t21에서, 데이터 청크(D12)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 패리티 영역들(1331a, 1331b) 모두가 채워졌기 때문에, 시각 t22에서, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(P21)가 패리티 영역(1331b)으로부터 패리티 영역(1350b)으로 저장될 수 있다.
한편, RAID 엔진(1333)은 메타 정보에 기초하여, 데이터(D1)와 관련되는 데이터 청크(D12)가 제공되었고 데이터(D1)와 관련되는 중간 패리티(P11)가 버퍼 메모리(1350)에서 버퍼링됨을 판별할 수 있다. 따라서, 시각 t23에서, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(P11)가 패리티 영역(1350b)으로부터 빈 패리티 영역(1331b)으로 로드(Load)될 수 있다.
시각 t24에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D12)를 수신할 수 있고, 경로 B를 따라 중간 패리티(P11)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D12) 및 중간 패리티(P11)에 대해 패리티 연산을 수행하여, 데이터(D1)와 관련되는 다음 중간 패리티(P12)를 생성할 수 있다. 시각 t25에서, 중간 패리티(P12)는 패리티 영역(1331b)에 저장(또는, 갱신)될 수 있고, 데이터 청크(D12)는 불휘발성 메모리들(1310)로 출력될 수 있다.
유사하게, 시각 t26 내지 시각 t30에서, 패리티 연산기(1333b)는 데이터 청크(D22) 및 중간 패리티(P21)에 대해 패리티 연산을 수행할 수 있다. 이를 위해, RAID 엔진(1333)의 판별 및 요청에 응답하여, 중간 패리티(P31)는 패리티 영역(1331a)으로부터 패리티 영역(1350b)으로 저장될 수 있고, 중간 패리티(P21)는 패리티 영역(1350b)으로부터 빈 패리티 영역(1331a)으로 로드될 수 있다. 패리티 연산에 의해 데이터(D2)와 관련되는 다음 중간 패리티(P22)가 생성될 수 있고, 패리티 영역(1331a)에 저장(또는, 갱신)될 수 있다.
도 6c를 도 5와 함께 참조하면, 시각 t31 내지 시각 t35에서, 패리티 연산기(1333b)는 데이터 청크(D32) 및 중간 패리티(P31)에 대해 패리티 연산을 수행할 수 있다. 이를 위해, RAID 엔진(1333)의 판별 및 요청에 응답하여, 중간 패리티(P12)는 패리티 영역(1331b)으로부터 패리티 영역(1350b)으로 저장될 수 있고, 중간 패리티(P31)는 패리티 영역(1350b)으로부터 빈 패리티 영역(1331b)으로 로드될 수 있다. 패리티 연산에 의해 데이터(D3)와 관련되는 다음 중간 패리티(P32)가 생성될 수 있고, 패리티 영역(1331b)에 저장(또는, 갱신)될 수 있다.
시간 t36 내지 시각 t40에서, 패리티 연산기(1333b)는 데이터 청크(D13) 및 중간 패리티(P12)에 대해 패리티 연산을 수행할 수 있다. 이를 위해, RAID 엔진(1333)의 판별 및 요청에 응답하여, 중간 패리티(P22)는 패리티 영역(1331a)으로부터 패리티 영역(1350b)으로 저장될 수 있고, 중간 패리티(P12)는 패리티 영역(1350b)으로부터 빈 패리티 영역(1331a)으로 로드될 수 있다. 패리티 연산에 의해 데이터(D1)와 관련되는 패리티(P13)가 생성될 수 있고, 패리티 영역(1331a)에 저장(또는, 갱신)될 수 있다.
한편, 데이터 청크(D13)는 데이터(D1)와 관련하여 마지막으로 처리되는 데이터 청크이기 때문에, 시각 t41에서, 패리티(P13)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D1)와 관련하여 데이터 청크들(D11, D12, D13) 및 최종 패리티(P13)를 분산하여 저장할 수 있다.
도 6d를 도 5와 함께 참조하면, 유사하게, 시각 t42 내지 시각 t45에서, 패리티 연산기(1333b)는 데이터 청크(D23) 및 중간 패리티(P22)에 대해 패리티 연산을 수행할 수 있다. 이를 위해, RAID 엔진(1333)의 판별 및 요청에 응답하여, 중간 패리티(P22)는 패리티 영역(1350b)으로부터 빈 패리티 영역(1331a)으로 로드될 수 있다. 패리티 연산에 의해 데이터(D2)와 관련되는 패리티(P23)가 생성될 수 있고, 패리티 영역(1331a)에 저장(또는, 갱신)될 수 있다.
한편, 데이터 청크(D23)는 데이터(D2)와 관련하여 마지막으로 처리되는 데이터 청크이기 때문에, 시각 t46에서, 패리티(P23)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D2)와 관련하여 데이터 청크들(D21, D22, D23) 및 최종 패리티(P23)를 분산하여 저장할 수 있다.
시각 t47 내지 시각 t49에서, 패리티 연산기(1333b)는 데이터 청크(D33) 및 중간 패리티(P32)에 대해 패리티 연산을 수행하여, 데이터(D3)와 관련되는 패리티(P33)를 생성할 수 있다. 패리티(P33)는 패리티 영역(1331b)에 저장(또는, 갱신)될 수 있다.
한편, 데이터 청크(D33)는 데이터(D3)와 관련하여 마지막으로 처리되는 데이터 청크이기 때문에, 시각 t50에서, 패리티(P33)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D3)와 관련하여 데이터 청크들(D31, D32, D33) 및 최종 패리티(P33)를 분산하여 저장할 수 있다.
도 7은 도 5의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다. 더 나은 이해를 돕기 위해, 도 5가 도 7과 함께 참조될 것이다.
S110 동작에서, 대상 데이터로부터 분할되는 데이터 청크가 수신되어, 버퍼 메모리(1350)의 데이터 영역(1350a)에서 버퍼링될 수 있다. S120 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 처음으로 처리되는 데이터 청크인지 여부를 판별할 수 있다.
수신된 데이터 청크가 대상 데이터와 관련하여 처음으로 처리되는 경우, 중간 패리티가 아직 생성되지 않았을 수 있다. 따라서, S125 동작에서, 패리티 연산기(1333b)는 수신된 데이터 청크에 기초하여 중간 패리티를 생성할 수 있고, 이 중간 패리티는 캐시 메모리(1331)의 빈 패리티 영역에 저장될 수 있다. 이후, S110 동작에서, 다음 데이터 청크가 수신될 수 있다.
반면, 수신된 데이터 청크가 처음으로 처리되는 데이터 청크가 아닌 경우, S130 동작이 수행될 수 있다. S130 동작에서, RAID 엔진(1333)은 RAID 엔진(1333)에 의해 관리되는 메타 정보에 기초하여, 중간 패리티가 캐시 메모리(1331)에 저장되어 있는지 여부를 판별할 수 있다.
중간 패리티가 캐시 메모리(1331)에 있는 경우, S140 동작이 수행될 수 있다. S140 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크, 및 경로 B를 따라 캐시 메모리(1331)로부터 수신되는 중간 패리티에 기초하여, 다음 패리티를 생성할 수 있다(예컨대, 도 4의 시각 t5 참조). 이 패리티는 캐시 메모리(1331)의 패리티 영역에 저장(또는, 갱신)될 수 있다.
반면, 중간 패리티가 캐시 메모리(1331)에 없는 경우(즉, 버퍼 메모리(1350)에서 버퍼링되는 경우), S150 동작이 수행될 수 있다. S150 동작에서, RAID 엔진(1333)의 요청에 응답하여, 중간 패리티가 버퍼 메모리(1350)로부터 캐시 메모리(1331)로 로드될 수 있다(예컨대, 도 6b의 시각 t22 및 시각 t23 참조). 이후, S155 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크, 및 경로 B를 따라 캐시 메모리(1331)로부터 수신되는 로드된 중간 패리티에 기초하여, 다음 패리티를 생성할 수 있다(예컨대, 도 6b의 시각 t24 참조). 이 패리티는 캐시 메모리(1331)의 패리티 영역에 저장(또는, 갱신)될 수 있다.
S140 또는 S155 동작에서 패리티가 생성되는 경우, S160 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크인지 여부를 판별할 수 있다. 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크인 경우, S165 동작에서, 생성된 패리티는 대상 데이터와 관련되는 최종 패리티로서 불휘발성 메모리들(1310)에 저장될 수 있다.
반면, 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크가 아닌 경우, S170 동작이 수행될 수 있다. S170 동작에서, RAID 엔진(1333)은 RAID 엔진(1333)에 의해 관리되는 메타 정보에 기초하여, 캐시 메모리(1331)에서 최종 패리티 및 중간 패리티를 위해 할당되는 메모리 영역의 잔여 용량이 기준 용량 미만인지(즉, 캐시 메모리(1331)의 패리티 영역들 모두가 채워졌는지) 여부를 판별할 수 있다. 잔여 용량이 기준 용량 이상인 경우(즉, 캐시 메모리(1331)의 패리티 영역들의 일부가 아직 비어 있는 경우), S110 동작에서, 다음 데이터 청크가 수신될 수 있다.
반면, 잔여 용량이 기준 용량 미만인 경우, S175 동작이 수행될 수 있다. S175 동작에서, RAID 엔진(1333)의 요청에 응답하여, 캐시 메모리(1331)의 중간 패리티가 버퍼 메모리(1350)로 이동하여 버퍼 메모리(1350)에서 버퍼링될 수 있다(예컨대, 도 6b의 시각 t21 및 시각 t22 참조). 따라서, 캐시 메모리(1331)의 빈 패리티 영역이 확보될 수 있다. 이후, S110 동작에서, 다음 데이터 청크가 수신될 수 있다.
도 5 내지 도 7을 참조하여 설명된 실시 예에 따르면, 한정된 패리티 영역들(1331a, 1331b) 하에서 여러 데이터(D1, D2, D3)가 제공되더라도, 패리티 연산기(1333b)는 중간 패리티의 손실 없이 패리티 연산들을 수행할 수 있다. 그러나, 중간 패리티를 캐시 메모리(1331)로부터 버퍼 메모리(1350)로 저장하는 처리(예컨대, S175 동작) 및 중간 패리티를 버퍼 메모리(1350)로부터 캐시 메모리(1331)로 로드하는 처리(예컨대, S150 동작)는 레이턴시(Latency)를 불필요하게 증가시킬 수 있다. 데이터 및 데이터 청크들의 양이 많아질수록, 데이터의 로드 및 저장이 빈번하게 반복될 수 있고 스토리지 장치(1300)의 성능이 떨어질 수 있다.
따라서, 최종 패리티가 생성되는 동안 상이한 메모리들(예컨대, 캐시 메모리(1331) 및 버퍼 메모리(1350)) 사이에서 데이터를 로드하고 저장하는 처리들의 일부가 생략되는 경우, 최종 패리티를 생성하는 데에 대한 레이턴시가 감소할 수 있다. 이는 스토리지 장치(1300)의 성능을 향상시킬 수 있다.
도 8은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다. 도 9a 내지 도 9c는 도 8의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다. 더 나은 이해를 돕기 위해, 도 8 내지 도 9c가 함께 참조될 것이다.
도 8을 참조하면, 몇몇 실시 예에서, 도 1의 스토리지 장치(1300)는 도 8의 스토리지 장치(1300c)를 포함할 수 있다. 스토리지 장치(1300c)는 도 5의 스토리지 장치(1300b)의 것들과 유사한 구성 요소들을 포함할 수 있다. 다만, 도 8 내지 도 9c의 예에서, 스토리지 장치(1300c)는 추가의 패리티 연산기(1333c)를 더 포함할 수 있다.
패리티 연산기(1333c)는 패리티 연산기(1333b)와 유사하게 패리티 연산을 수행할 수 있다. 그러나, 패리티 연산기(1333c)는 패리티 연산기(1333b)의 것들과 상이한 연결들로 구성될 수 있다. 패리티 연산기(1333c)는 도 9a 내지 도 9c를 함께 참조하여 더 상세히 설명될 것이다.
도 8 내지 도 9c의 예에서, RAID 관리기(1333a)는 여러 데이터(D1, D2, D3)를 수신할 수 있다. RAID 관리기(1333a)는 RAID 파라미터에 기초하여, 데이터(D1)를 데이터 청크들(D11, D12, D13)로 분할할 수 있고, 데이터(D2)를 데이터 청크들(D21, D22, D23)로 분할할 수 있고, 데이터(D3)를 데이터 청크들(D31, D32, D33)로 분할할 수 있다. 도 8 내지 도 9c의 예에서, 데이터 청크들(D11, D12, D13, D21, D22, D23, D31, D32, D33)은 데이터 청크(D11), 데이터 청크(D21), 데이터 청크(D31), 데이터 청크(D12), 데이터 청크(D22), 데이터 청크(D32), 데이터 청크(D13), 데이터 청크(D23), 및 데이터 청크(D33)의 순서에 따라 순차적으로 처리될 수 있다.
도 9a를 도 8과 함께 참조하면, 시각 t51에서, 데이터 청크(D11)가 버퍼 메모리(1350)의 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t52에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D11)를 수신할 수 있다. 데이터 청크(D11)와 관련되는 중간 패리티가 아직 생성되지 않았고, 패리티 연산기(1333b)는 데이터 청크(D11)에 기초하여 데이터(D1)와 관련되는 중간 패리티(D11')를 생성할 수 있다. 시각 t53에서, 중간 패리티(D11')는 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D11)는 불휘발성 메모리들(1310)로 출력될 수 있다.
시각 t54에서, 데이터 청크(D21)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t55에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D21)를 수신할 수 있고, 데이터 청크(D21)에 기초하여 데이터(D2)와 관련되는 중간 패리티(D21')를 생성할 수 있다.
시각 t56에서, 중간 패리티(D21')는 빈 패리티 영역(1331b)에 저장될 수 있고, 데이터 청크(D21)는 불휘발성 메모리들(1310)로 출력될 수 있다. 한편, 패리티 영역들(1331a, 1331b) 모두가 채워졌기 때문에, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(D11')가 캐시 메모리(1331)로부터 패리티 연산기(1333c)로 출력될 수 있다. 패리티 연산기(1333c)는 경로 C를 따라 중간 패리티(D11')를 수신할 수 있고, 중간 패리티(D11')에 기초하여 중간 패리티(P11)를 생성할 수 있다. 중간 패리티들(D11', P11) 각각은 데이터 청크(D11)와 실질적으로 동일할 수 있다.
시각 t57에서, 패리티 연산기(1333c)에 의해 생성되는 중간 패리티(P11)는 버퍼 메모리(1350)의 패리티 영역(1350b)에서 버퍼링될 수 있다. 따라서, 캐시 메모리(1331)에서 빈 패리티 영역(1331a)이 확보될 수 있다. 도 9a는 데이터 청크(D31)가 수신되기 전에 미리 패리티 영역(1331a)이 비워지는 것을 보여주지만, 몇몇 실시 예에서, 데이터 청크(D31)가 수신된 후에 패리티 영역(1331a)이 비워질 수 있다.
시각 t58에서, 데이터 청크(D31)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t59에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D31)를 수신할 수 있고, 데이터 청크(D31)에 기초하여 데이터(D3)와 관련되는 중간 패리티(D31')를 생성할 수 있다.
시각 t60에서, 중간 패리티(D31')는 빈 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D31)는 불휘발성 메모리들(1310)로 출력될 수 있다. 한편, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333c)는 경로 C를 따라 캐시 메모리(1331)의 중간 패리티(D21')를 수신할 수 있고, 중간 패리티(D21')에 기초하여 중간 패리티(P21)를 생성할 수 있다. 시각 t61에서, 중간 패리티(P21)는 패리티 영역(1350b)에서 버퍼링될 수 있다.
도 9b를 도 8과 함께 참조하면, 시각 t62에서, 데이터 청크(D12)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 한편, RAID 엔진(1333)은 메타 정보에 기초하여, 데이터 청크(D12)와 관련되는 중간 패리티(P11)가 캐시 메모리(1331)가 아니라 버퍼 메모리(1350)에서 버퍼링됨을 판별할 수 있다. 레이턴시가 증가하는 것을 방지하기 위해, 중간 패리티(P11)는 캐시 메모리(1331)로 로드되지 않을 수 있다. 대신, 시각 t63에서, 패리티 연산기(1333b)가 경로 A를 따라 데이터 청크(D12)를 수신할 수 있고, 데이터 청크(D12)에 기초하여 중간 패리티(D12')를 생성할 수 있다.
시각 t64에서, 중간 패리티(D12')는 빈 패리티 영역(1331b)에 저장될 수 있고, 데이터 청크(D12)는 불휘발성 메모리들(1310)로 출력될 수 있다. 한편, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333c)는 경로 C를 따라 캐시 메모리(1331)의 중간 패리티(D31')를 수신할 수 있고, 중간 패리티(D31')에 기초하여 중간 패리티(P31)를 생성할 수 있다. 시각 t65에서, 중간 패리티(P31)는 패리티 영역(1350b)에서 버퍼링될 수 있다.
시각 t66에서, 데이터 청크(D22)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 데이터 청크(D22)와 관련되는 중간 패리티(P21)가 캐시 메모리(1331)가 아니라 버퍼 메모리(1350)에서 버퍼링되기 때문에, 시각 t67에서, 패리티 연산기(1333b)가 경로 A를 따라 데이터 청크(D22)를 수신할 수 있고, 데이터 청크(D22)에 기초하여 중간 패리티(D22')를 생성할 수 있다.
시각 t68에서, 중간 패리티(D22')는 빈 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D22)는 불휘발성 메모리들(1310)로 출력될 수 있다. 한편, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333c)는 경로 C를 따라 캐시 메모리(1331)의 중간 패리티(D12')를 수신할 수 있다. 여기서, 중간 패리티(D12')와 관련되는 중간 패리티(P11)가 패리티 영역(1350b)에서 먼저 버퍼링되어 있을 수 있다. 따라서, 패리티 연산기(1333c)는 경로 D를 따라 버퍼 메모리(1350)의 중간 패리티(P11)를 더 수신할 수 있다. 패리티 연산기(1333c)는 중간 패리티(D12') 및 중간 패리티(D11)에 기초하여 중간 패리티(P12)를 생성할 수 있다.
시각 t69에서, 중간 패리티(P12)는 캐시 메모리(1331)에 저장되지 않고, 패리티 연산기(1333c)로부터 버퍼 메모리(1350)로 출력될 수 있다. 따라서, 중간 패리티(P12)는 패리티 영역(1350b)에서 버퍼링될 수 있다. 즉, 중간 패리티(P11)를 캐시 메모리(1331)로 로드하고 패리티 연산기(1333b)에 의해 중간 패리티(P12)를 생성한 후 중간 패리티(P12)를 다시 버퍼 메모리(1350)로 출력하는 대신, 패리티 연산기(1333c)를 이용하여 중간 패리티(P12)가 곧바로 버퍼 메모리(1350)에서 버퍼링될 수 있다.
이러한 실시 예에 따르면, 버퍼 메모리(1350)에서 버퍼링되는 중간 패리티를 캐시 메모리(1331)로 로드하는 과정을 생략하면서도 중간 패리티를 잃지 않는 것이 가능할 수 있다. 상이한 메모리들 사이에서 데이터를 로드 및 저장하는 처리들의 일부가 생략됨에 따라, 레이턴시가 감소할 수 있고, 스토리지 장치(1300c)의 성능이 향상될 수 있다.
유사하게, 시각 t70 내지 t73에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크(D32)에 기초하여 중간 패리티(D32')를 생성할 수 있다. 패리티 연산기(1333c)는 경로 C를 따라 캐시 메모리(1331)의 중간 패리티(D22')를 수신할 수 있고, 경로 D를 따라 버퍼 메모리(1350)의 중간 패리티(P21)를 수신할 수 있다. 패리티 연산기(1333c)는 중간 패리티(D22') 및 중간 패리티(P21)에 기초하여 중간 패리티(P22)를 생성할 수 있다. 중간 패리티(P22)는 버퍼 메모리(1350)에서 버퍼링될 수 있고, 빈 패리티 영역(1331a)이 확보될 수 있다.
도 9c를 도 8과 함께 참조하면, 시각 t74에서, 데이터 청크(D13)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t75에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D13)를 수신할 수 있다. 한편, RAID 엔진(1333)은 메타 또는 헤더 정보에 기초하여, 데이터 청크(D13)가 데이터(D1)와 관련하여 마지막으로 처리되는 데이터 청크임을 판별할 수 있다. 이 경우, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333b)는 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P12)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D13) 및 중간 패리티(P12)에 기초하여 패리티(P13)를 생성할 수 있다.
시각 t76에서, 패리티(P13)는 빈 패리티 영역(1331a)에 저장될 수 있다. 한편, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333c)는 경로 C를 따라 캐시 메모리(1331)의 중간 패리티(D32')를 수신할 수 있고, 경로 D를 따라 버퍼 메모리(1350)의 중간 패리티(P31)를 수신할 수 있다. 패리티 연산기(1333c)는 중간 패리티(D32') 및 중간 패리티(P31)에 기초하여 중간 패리티(P32)를 생성할 수 있다.
시각 t77에서, 중간 패리티(P32)는 패리티 영역(1350b)에서 바로 버퍼링될 수 있다. 시각 t78에서, 패리티(P13)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D1)와 관련하여 데이터 청크들(D11, D12, D13) 및 최종 패리티(P13)를 분산하여 저장할 수 있다.
유사하게, 시각 t79 내지 시각 t82에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D23)를 수신할 수 있고, 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P22)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D23) 및 중간 패리티(P22)에 기초하여 패리티(P23)를 생성할 수 있다. 패리티(P23)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D2)와 관련하여 데이터 청크들(D21, D22, D23) 및 최종 패리티(P23)를 분산하여 저장할 수 있다.
시각 t83 내지 시각 t86에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D33)를 수신할 수 있고, 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P32)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D33) 및 중간 패리티(P32)에 기초하여 패리티(P33)를 생성할 수 있다. 패리티(P33)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D3)와 관련하여 데이터 청크들(D31, D32, D33) 및 최종 패리티(P33)를 분산하여 저장할 수 있다.
도 10은 도 8의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다. 더 나은 이해를 돕기 위해, 도 8이 도 10과 함께 참조될 것이다.
S210 동작에서, 대상 데이터로부터 분할되는 데이터 청크가 수신되어, 버퍼 메모리(1350)의 데이터 영역(1350a)에서 버퍼링될 수 있다. S220 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 처음으로 처리되는 데이터 청크인지 여부를 판별할 수 있다.
수신된 데이터 청크가 대상 데이터와 관련하여 처음으로 처리되는 경우, 중간 패리티가 아직 생성되지 않았을 수 있다. 따라서, S225 동작에서, 패리티 연산기(1333b)는 수신된 데이터 청크에 기초하여 중간 패리티를 생성할 수 있고, 이 중간 패리티는 캐시 메모리(1331)의 빈 패리티 영역에 저장될 수 있다. 이후, S210 동작에서, 다음 데이터 청크가 수신될 수 있다.
반면, 수신된 데이터 청크가 처음으로 처리되는 데이터 청크가 아닌 경우, S230 동작이 수행될 수 있다. S230 동작에서, RAID 엔진(1333)은 RAID 엔진(1333)에 의해 관리되는 메타 정보에 기초하여, 중간 패리티가 캐시 메모리(1331)에 저장되어 있는지 여부를 판별할 수 있다.
중간 패리티가 캐시 메모리(1331)에 있는 경우, S240 동작이 수행될 수 있다. S240 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크, 및 경로 B를 따라 캐시 메모리(1331)로부터 수신되는 중간 패리티에 기초하여, 다음 패리티를 생성할 수 있다(예컨대, 도 4의 시각 t5 참조). 이 패리티는 캐시 메모리(1331)의 패리티 영역에 저장(또는, 갱신)될 수 있다.
이후, S245 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크인지 여부를 판별할 수 있다. 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크인 경우, S265 동작이 수행될 수 있다. 반면, 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크가 아닌 경우, S270 동작이 수행될 수 있다.
한편, S230 동작에서 중간 패리티가 캐시 메모리(1331)에 없는 것으로 판별된 경우(즉, 중간 패리티가 버퍼 메모리(1350)에서 버퍼링되는 경우), S260 동작이 수행될 수 있다. S260 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크인지 여부를 판별할 수 있다.
수신된 데이터 청크가 마지막으로 처리되는 데이터 청크인 경우, S263 동작이 수행될 수 있다. S263 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크, 및 경로 E를 따라 수신되는 버퍼 메모리(1350)의 중간 패리티에 기초하여, 다음 패리티를 생성할 수 있다(예컨대, 도 9c의 시각 t75 참조). 이 패리티는 캐시 메모리(1331)의 빈 패리티 영역에 일시적으로 저장될 수 있다. 이후, S265 동작에서, 생성된 패리티는 대상 데이터와 관련되는 최종 패리티로서 불휘발성 메모리들(1310)에 저장될 수 있다.
반면, 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크가 아닌 경우, S267 동작이 수행될 수 있다. S267 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크에 기초하여 다음 패리티를 생성할 수 있고, 이 패리티는 캐시 메모리(1331)에 저장될 수 있다(예컨대, 도 9b의 시각 t63 및 시각 t64 참조). 즉, 버퍼 메모리(1350)의 중간 패리티가 캐시 메모리(1331)로 로드되지 않을 수 있고, 레이턴시가 증가하는 것이 방지될 수 있다.
이후, S270 동작에서, RAID 엔진(1333)은 RAID 엔진(1333)에 의해 관리되는 메타 정보에 기초하여, 캐시 메모리(1331)에서 최종 패리티 및 중간 패리티를 위해 할당되는 메모리 영역의 잔여 용량이 기준 용량 미만인지(즉, 캐시 메모리(13310의 패리티 영역들 모두가 채워졌는지) 여부를 판별할 수 있다. 잔여 용량이 기준 용량 이상인 경우(즉, 캐시 메모리(1331)의 패리티 영역들의 일부가 아직 비어 있는 경우), S210 동작에서, 다음 데이터 청크가 수신될 수 있다.
반면, 잔여 용량이 기준 용량 미만인 경우, S275 동작이 수행될 수 있다. S275 동작에서, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333c)가 경로 C를 따라 캐시 메모리(1331)의 중간 패리티를 수신할 수 있고, 경로 D를 따라 버퍼 메모리(1350)의 중간 패리티를 수신할 수 있다. 패리티 연산기(1333c)는 수신된 중간 패리티들에 기초하여 다음 중간 패리티를 생성할 수 있다(예컨대, 도 9b의 시각 t68 참조). 생성된 중간 패리티는 캐시 메모리(1331)에 저장되지 않고, 패리티 영역(1350b)에서 바로 버퍼링(또는, 갱신)될 수 있다. 이후, S210 동작에서, 다음 데이터 청크가 수신될 수 있다.
도 11은 RAID 방식을 채용한 도 1의 스토리지 장치의 예시적인 구성을 보여주는 블록도이다. 도 12a 내지 도 12c는 도 11의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하기 위한 개념도들이다. 더 나은 이해를 돕기 위해 도 11 내지 도 12c가 함께 참조될 것이다.
도 11을 참조하면, 몇몇 실시 예에서, 도 1의 스토리지 장치(1300)는 도 11의 스토리지 장치(1300d)를 포함할 수 있다. 스토리지 장치(1300d)는 도 5의 스토리지 장치(1300b)의 것들과 유사한 구성 요소들을 포함할 수 있다. 다만, 도 11 내지 도 12c의 예에서, 버퍼 메모리(1350)의 패리티 영역(1350b)은 경로 E를 따라 패리티 연산기(1333b)로 더 연결될 수 있다.
도 11 내지 도 12c의 예에서, RAID 관리기(1333a)는 여러 데이터(D1, D2, D3)를 수신할 수 있다. RAID 관리기(1333a)는 RAID 파라미터에 기초하여, 데이터(D1)를 데이터 청크들(D11, D12, D13)로 분할할 수 있고, 데이터(D2)를 데이터 청크들(D21, D22, D23)로 분할할 수 있고, 데이터(D3)를 데이터 청크들(D31, D32, D33)로 분할할 수 있다. 도 11 내지 도 12c의 예에서, 데이터 청크들(D11, D12, D13, D21, D22, D23, D31, D32, D33)은 데이터 청크(D11), 데이터 청크(D21), 데이터 청크(D31), 데이터 청크(D12), 데이터 청크(D22), 데이터 청크(D32), 데이터 청크(D13), 데이터 청크(D23), 및 데이터 청크(D33)의 순서에 따라 순차적으로 처리될 수 있다.
도 12a를 도 11과 함께 참조하면, 시각 t91에서, 데이터 청크(D11)가 버퍼 메모리(1350)의 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t92에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D11)를 수신할 수 있다. 데이터 청크(D11)와 관련되는 중간 패리티가 아직 생성되지 않았고, 패리티 연산기(1333b)는 데이터 청크(D11)에 기초하여 데이터(D1)와 관련되는 중간 패리티(P11)를 생성할 수 있다. 시각 t93에서, 중간 패리티(P11)는 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D11)는 불휘발성 메모리들(1310)로 출력될 수 있다.
시각 t94에서, 데이터 청크(D21)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t95에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D21)를 수신할 수 있고, 데이터 청크(D21)에 기초하여 데이터(D2)와 관련되는 중간 패리티(P21)를 생성할 수 있다. 시각 t96에서, 중간 패리티(P21)는 빈 패리티 영역(1331b)에 저장될 수 있고, 데이터 청크(D21)는 불휘발성 메모리들(1310)로 출력될 수 있다.
한편, 패리티 영역들(1331a, 1331b) 모두가 채워졌기 때문에, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(P11)가 캐시 메모리(1331)로부터 버퍼 메모리(1350)로 출력될 수 있다. 따라서, 시각 t97에서, 중간 패리티(P11)는 버퍼 메모리(1350)의 패리티 영역(1350b)에서 버퍼링될 수 있고, 캐시 메모리(1331)에서 빈 패리티 영역(1331a)이 확보될 수 있다. 도 12a는 데이터 청크(D31)가 수신되기 전에 미리 패리티 영역(1331a)이 비워지는 것을 보여주지만, 몇몇 실시 예에서, 데이터 청크(D31)가 수신된 후에 패리티 영역(1331a)이 비워질 수 있다.
시각 t98에서, 데이터 청크(D31)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t99에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D31)를 수신할 수 있고, 데이터 청크(D31)에 기초하여 데이터(D3)와 관련되는 중간 패리티(P31)를 생성할 수 있다.
시각 t100에서, 중간 패리티(P31)는 빈 패리티 영역(1331a)에 저장될 수 있고, 데이터 청크(D31)는 불휘발성 메모리들(1310)로 출력될 수 있다. 한편, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(P21)가 캐시 메모리(1331)로부터 버퍼 메모리(1350)로 출력될 수 있다. 따라서, 시각 t101에서, 중간 패리티(P21)는 패리티 영역(1350b)에서 버퍼링될 수 있고, 캐시 메모리(1331)에서 빈 패리티 영역(1331b)이 확보될 수 있다.
도 12b를 도 11과 함께 참조하면, 시각 t102에서, 데이터 청크(D12)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t103에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D12)를 수신할 수 있다. 한편, RAID 엔진(1333)은 메타 정보에 기초하여, 데이터 청크(D12)와 관련되는 중간 패리티(P11)가 캐시 메모리(1331)가 아니라 버퍼 메모리(1350)에서 버퍼링됨을 판별할 수 있다. 이 경우, RAID 엔진(1333)의 요청에 응답하여, 패리티 연산기(1333b)는 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P11)를 더 수신할 수 있다.
패리티 연산기(1333b)는 데이터 청크(D12) 및 중간 패리티(P11)에 기초하여 중간 패리티(P12)를 생성할 수 있다. 시각 t104에서, 중간 패리티(P12)는 빈 패리티 영역(1331b)에 저장될 수 있고, 데이터 청크(D12)는 불휘발성 메모리들(1310)로 출력될 수 있다. 즉, 중간 패리티(P11)를 캐시 메모리(1331)로 로드하고 패리티 연산기(1333b)에 의해 중간 패리티(P12)를 생성한 후 중간 패리티(P12)를 다시 버퍼 메모리(1350)로 출력하는 대신, 패리티 연산기(1333b)는 경로 E를 따라 중간 패리티(P12)를 수신할 수 있다. 여기서, 중간 패리티(P12)는 캐시 메모리(1331)에 저장되지 않을 수 있고, 패리티 연산기(1333b)로 바로 로드될 수 있다.
이러한 실시 예에 따르면, 버퍼 메모리(1350)에서 버퍼링되는 중간 패리티를 캐시 메모리(1331)로 로드하는 과정을 생략하면서도 중간 패리티를 잃지 않는 것이 가능할 수 있다. 상이한 메모리들 사이에서 데이터를 로드 및 저장하는 처리들의 일부가 생략됨에 따라, 레이턴시가 감소할 수 있고, 스토리지 장치(1300d)의 성능이 향상될 수 있다.
한편, RAID 엔진(1333)의 요청에 응답하여 중간 패리티(P31)가 캐시 메모리(1331)로부터 버퍼 메모리(1350)로 출력될 수 있다. 따라서, 시각 t105에서, 중간 패리티(P31)는 패리티 영역(1350b)에서 버퍼링될 수 있고, 캐시 메모리(1331)에서 빈 패리티 영역(1331a)이 확보될 수 있다.
유사하게, 시각 t106 내지 시각 t109에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D22)를 수신할 수 있고, 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P21)를 수신할 수 있다. 여기서, 중간 패리티(P21)는 캐시 메모리(1331)에 저장되지 않고 패리티 연산기(1333b)로 로드될 수 있다. 패리티 연산기(1333b)는 데이터 청크(D22) 및 중간 패리티(P21)에 기초하여 중간 패리티(P22)를 생성할 수 있고, 중간 패리티(P22)는 빈 패리티 영역(1331a)에 저장될 수 있다. RAID 엔진(1333)의 요청에 응답하여, 중간 패리티(P12)는 패리티 영역(1350b)에서 버퍼링될 수 있다.
시각 t110 내지 시각 t113에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D32)를 수신할 수 있고, 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P31)를 수신할 수 있다. 여기서, 중간 패리티(P31)는 캐시 메모리(1331)에 저장되지 않고 패리티 연산기(1333b)로 로드될 수 있다. 패리티 연산기(1333b)는 데이터 청크(D32) 및 중간 패리티(P31)에 기초하여 중간 패리티(P32)를 생성할 수 있고, 중간 패리티(P32)는 빈 패리티 영역(1331b)에 저장될 수 있다. RAID 엔진(1333)의 요청에 응답하여, 중간 패리티(P22)는 패리티 영역(1350b)에서 버퍼링될 수 있다.
도 12c를 도 11과 함께 참조하면, 시각 t114에서, 데이터 청크(D13)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t115에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D13)를 수신할 수 있고, 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P12)를 수신할 수 있다. 여기서, 중간 패리티(P12)는 캐시 메모리(1331)에 저장되지 않고 패리티 연산기(1333b)로 로드될 수 있다. 패리티 연산기(1333b)는 데이터 청크(D13) 및 중간 패리티(P12)에 기초하여 패리티(P13)를 생성할 수 있다.
시각 t116에서, 패리티(P13)는 빈 패리티 영역(1331b)에 저장될 수 있다. 한편, RAID 엔진(1333)은 메타 또는 헤더 정보에 기초하여, 데이터 청크(D13)가 데이터(D1)와 관련하여 마지막으로 처리되는 데이터 청크임을 판별할 수 있다. 이 경우, 시각 t117에서, 패리티(P13)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D1)와 관련하여 데이터 청크들(D11, D12, D13) 및 최종 패리티(P13)를 분산하여 저장할 수 있다.
유사하게, 시각 t118 내지 t121에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D23)를 수신할 수 있고, 경로 E를 따라 버퍼 메모리(1350)의 중간 패리티(P22)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D23) 및 중간 패리티(P22)에 기초하여 패리티(P23)를 생성할 수 있다. 패리티(P23)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D2)와 관련하여 데이터 청크들(D21, D22, D23) 및 최종 패리티(P23)를 분산하여 저장할 수 있다.
시각 t122에서, 데이터 청크(D33)가 데이터 영역(1350a)에서 버퍼링될 수 있다. 시각 t123에서, 패리티 연산기(1333b)는 경로 A를 따라 데이터 청크(D33)를 수신할 수 있다. 한편, 중간 패리티(P32)는 패리티 영역(1331b)에 저장되어 있기 때문에, 패리티 연산기(1333b)는 경로 B를 따라 캐시 메모리(1331)의 중간 패리티(P32)를 수신할 수 있다. 패리티 연산기(1333b)는 데이터 청크(D33) 및 중간 패리티(P32)에 기초하여 패리티(P33)를 생성할 수 있다. 시각 t124에서, 패리티(P33)는 패리티 영역(1331b)에 저장(또는, 갱신)될 수 있다.
시각 t125에서, 패리티(P33)는 RAID 엔진(1333)의 요청에 응답하여 최종 패리티로서 불휘발성 메모리들(1310)로 출력될 수 있다. 따라서, 불휘발성 메모리들(1310)은 데이터(D3)와 관련하여 데이터 청크들(D31, D32, D33) 및 최종 패리티(P33)를 분산하여 저장할 수 있다.
도 13은 도 11의 스토리지 장치에 데이터를 저장하는 예시적인 과정을 설명하는 흐름도이다. 더 나은 이해를 돕기 위해, 도 11이 도 13과 함께 참조될 것이다.
S310 동작에서, 대상 데이터로부터 분할되는 데이터 청크가 수신되어, 버퍼 메모리(1350)의 데이터 영역(1350a)에서 버퍼링될 수 있다. S320 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 처음으로 처리되는 데이터 청크인지 여부를 판별할 수 있다.
수신된 데이터 청크가 대상 데이터와 관련하여 처음으로 처리되는 경우, 중간 패리티가 아직 생성되지 않았을 수 있다. 따라서, S325 동작에서, 패리티 연산기(1333b)는 수신된 데이터 청크에 기초하여 중간 패리티를 생성할 수 있고, 이 중간 패리티는 캐시 메모리(1331)의 빈 패리티 영역에 저장될 수 있다. 이후, S310 동작에서, 다음 데이터 청크가 수신될 수 있다.
반면, 수신된 데이터 청크가 처음으로 처리되는 데이터 청크가 아닌 경우, S330 동작이 수행될 수 있다. S330 동작에서, RAID 엔진(1333)은 RAID 엔진(1333)에 의해 관리되는 메타 정보에 기초하여, 중간 패리티가 캐시 메모리(1331)에 저장되어 있는지 여부를 판별할 수 있다.
중간 패리티가 캐시 메모리(1331)에 있는 경우, S340 동작이 수행될 수 있다. S340 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크, 및 경로 B를 따라 캐시 메모리(1331)로부터 수신되는 중간 패리티에 기초하여, 다음 패리티를 생성할 수 있다(예컨대, 도 12c의 시각 t123 참조). 이 패리티는 캐시 메모리(1331)의 패리티 영역에 저장(또는, 갱신)될 수 있다.
반면, 중간 패리티가 캐시 메모리(1331)에 없는 경우(즉, 버퍼 메모리(1350)에서 버퍼링되는 경우), S350 동작이 수행될 수 있다. S350 동작에서, 패리티 연산기(1333b)는 경로 A를 따라 수신되는 데이터 청크, 및 경로 E를 따라 버퍼 메모리(1350)로부터 수신되는 중간 패리티에 기초하여, 다음 패리티를 생성할 수 있다(예컨대, 도 12b의 시각 t103 참조). 여기서, 버퍼 메모리(1350)의 중간 패리티는 캐시 메모리(1331)에 저장되지 않고 패리티 연산기(1333b)로 로드될 수 있다. 따라서, 레이턴시가 증가하는 것이 방지될 수 있다. 생성된 패리티는 캐시 메모리(1331)의 빈 패리티 영역에 저장될 수 있다.
S340 또는 S350 동작에서 패리티가 생성되는 경우, S360 동작에서, RAID 엔진(1333)은 수신된 데이터 청크의 메타 또는 헤더 정보에 기초하여, 수신된 데이터 청크가 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크인지 여부를 판별할 수 있다. 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크인 경우, S365 동작이 수행될 수 있다. S365 동작에서, 생성된 패리티는 대상 데이터와 관련되는 최종 패리티로서 불휘발성 메모리들(1310)에 저장될 수 있다.
반면, 수신된 데이터 청크가 마지막으로 처리되는 데이터 청크가 아닌 경우, S370 동작이 수행될 수 있다. S370 동작에서, RAID 엔진(1333)은 RAID 엔진(1333)에 의해 관리되는 메타 정보에 기초하여, 캐시 메모리(1331)에서 최종 패리티 및 중간 패리티를 위해 할당되는 메모리 영역의 잔여 용량이 기준 용량 미만인지(즉, 캐시 메모리(1331)의 패리티 영역들 모두가 채워졌는지) 여부를 판별할 수 있다. 잔여 용량이 기준 용량 이상인 경우(즉, 캐시 메모리(1331)의 패리티 영역들의 일부가 아직 비어 있는 경우), S310 동작에서, 다음 데이터 청크가 수신될 수 있다.
반면, 잔여 용량이 기준 용량 미만인 경우, S375 동작이 수행될 수 있다. S375 동작에서, RAID 엔진(1333)의 요청에 응답하여, 캐시 메모리(1331)의 중간 패리티가 버퍼 메모리(1350)로 출력될 수 있고, 따라서 버퍼 메모리(1350)에서 버퍼링될 수 있다(예컨대, 도 12b의 시각 t104 및 시각 t105 참조). 따라서, 캐시 메모리(1331)의 빈 패리티 영역이 확보될 수 있다. 이후, S310 동작에서, 다음 데이터 청크가 수신될 수 있다.
도 3 내지 도 13을 참조하여 설명된 경로 A, 경로 B, 경로 C, 경로 D, 및 경로 E 각각은 구성 요소들을 연결하기 위한 도전 패턴을 포함할 수 있다. 예로서, 도전 패턴은 PCB(Printed Circuit Board) 상에 형성되는 도전성 물질일 수 있다. 예로서, 도전 패턴은 와이어 패턴(Wire Pattern), 트레이스 패턴(Trace Pattern) 등을 포함할 수 있다. 예로서, 도전성 물질은 와이어, 트레이스, 도전판(Conductive Plate) 등으로 구현될 수 있다. 다만, 본 발명은 이 예들로 한정되지 않는다.
도 14는 본 발명의 실시 예들에 따른 RAID 컨트롤러 및 스토리지 장치들을 포함하는 전자 시스템을 보여주는 블록도이다. 전자 시스템(2000)은 호스트(2100), RAID 컨트롤러(2200), 및 복수의 스토리지 장치(2300, 2301, 2302)를 포함할 수 있다.
호스트(2100)는 도 1의 호스트(1100)에 대응할 수 있다. RAID 컨트롤러(2200)는 복수의 스토리지 장치(2300, 2301, 2302)를 RAID 방식으로 관리할 수 있다. RAID 컨트롤러(2200)는 호스트(2100)와 교환되는 데이터(DAT)를 스트라이프 단위로 관리할 수 있다. RAID 컨트롤러(2200)의 동작에 따라, 복수의 스토리지 장치(2300, 2301, 2302)는 하나의 스트라이프와 관련되는 복수의 데이터 청크 및 패리티를 분산하여 저장할 수 있다.
스토리지 장치(2300)는 불휘발성 메모리(들)(2310), 장치 컨트롤러(2330), 및 버퍼 메모리(2350)를 포함할 수 있다. 불휘발성 메모리(들)(2310), 장치 컨트롤러(2330), 및 버퍼 메모리(2350)는 각각 도 1의 스토리지 장치(1300)의 불휘발성 메모리들(1310), 컨트롤러(1330), 및 버퍼 메모리(1350)에 대응할 수 있다. 다만, 장치 컨트롤러(2330)는 RAID 엔진(1333)을 포함하지 않을 수 있다. 스토리지 장치들(2301, 2302) 각각은 스토리지 장치(2300)와 동일 또는 유사하게 구성될 수 있다.
RAID 컨트롤러(2200)는 복수의 스토리지 장치(2300, 2301, 2302)와 별개의 전자 장치로 구현될 수 있다. RAID 컨트롤러(2200)는 컴퓨팅 장치와 같은 범용 전자 장치로 구현되거나, RAID 방식의 스토리지 스킴(Scheme)을 처리하도록 구성되는 전용 전자 장치/회로로 구현될 수 있다.
RAID 컨트롤러(2200)는 캐시 메모리(2210), RAID 엔진(2230), 및 버퍼 메모리(2250)를 포함할 수 있다. 캐시 메모리(2210) 및 버퍼 메모리(2250)는 RAID 컨트롤러(2200)의 동작에 이용되는 데이터를 저장/버퍼링할 수 있다. RAID 엔진(2230)은 복수의 스토리지 장치(2300, 2301, 2302)를 RAID 방식으로 관리하기 위해 다양한 연산을 수행할 수 있다.
RAID 엔진(2230)은 도 2 내지 도 13을 참조하여 설명된 다양한 실시 예 중 하나 이상을 채용할 수 있다. 예로서, RAID 엔진(2230)은 도 8의 추가의 패리티 연산기(1333c)를 채용하거나 도 11의 경로 E를 포함함으로써, 최종 패리티를 생성하는 데에 대한 레이턴시를 감소시킬 수 있다. 즉, 본 발명의 실시 예들은 단일 스토리지 장치(1300)에서 채용될 수 있을 뿐만 아니라, 복수의 스토리지 장치(2300, 2301, 2302)를 포함하는 RAID 방식의 전자 시스템(2000)에서도 채용될 수 있다.
위에서 설명된 내용은 본 발명의 기술 사상을 구현하기 위한 구체적인 예들이다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 용이하게 변경하여 얻어질 수 있는 실시 예들도 포함할 것이다. 또한, 본 발명의 기술 사상에는 위에서 설명된 실시 예들에 기초하여 앞으로 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
1000, 2000 : 전자 시스템
1300a, 1300b, 1300c, 1300d : 스토리지 장치
1331a, 1331b : 패리티 영역
1300a, 1300b, 1300c, 1300d : 스토리지 장치
1331a, 1331b : 패리티 영역
Claims (10)
- 대상 데이터와 관련되는 제 1 및 제 2 데이터 청크(Chunk)들을 분산하여 저장하도록 구성되는 복수의 제 1 메모리;
상기 제 1 및 제 2 데이터 청크들이 분산하여 저장되도록 상기 복수의 제 1 메모리를 제어하도록 구성되는 컨트롤러; 및
상기 제 1 및 제 2 데이터 청크들을 버퍼링하도록 구성되는 제 2 메모리를 포함하되,
상기 컨트롤러는 상기 대상 데이터와 관련하여 상기 제 2 데이터 청크 직전에 처리되는 상기 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성하고,
상기 제 2 데이터 청크가 상기 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크가 아니고 상기 제 1 중간 패리티가 상기 제 2 메모리에서 버퍼링되는 경우, 상기 컨트롤러는 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성하고, 상기 제 2 중간 패리티가 상기 컨트롤러 내부의 제 3 메모리에 저장되지 않고 상기 제 2 메모리에서 버퍼링되도록 상기 제 2 중간 패리티를 상기 제 2 메모리로 출력하는 스토리지 장치. - 제 1 항에 있어서,
상기 컨트롤러는:
적어도 상기 제 1 데이터 청크에 기초하여 상기 제 1 중간 패리티를 생성하도록 구성되는 제 1 패리티 연산기; 및
상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 상기 제 2 중간 패리티를 생성하도록 구성되는 제 2 패리티 연산기를 포함하는 스토리지 장치. - 제 2 항에 있어서,
상기 제 1 패리티 연산기로부터의 출력은 상기 제 3 메모리에 저장되고,
상기 제 2 패리티 연산기로부터의 출력은 상기 제 2 메모리에서 버퍼링되는 스토리지 장치. - 제 1 항에 있어서,
상기 제 3 메모리가 상기 제 2 데이터 청크를 저장하면 상기 제 3 메모리에서 최종 패리티 및 중간 패리티를 위해 할당되는 메모리 영역의 잔여 용량이 기준 용량 미만인 경우, 상기 컨트롤러가 상기 제 2 중간 패리티를 생성하고 상기 제 2 중간 패리티를 상기 제 2 메모리로 출력하는 스토리지 장치. - 제 4 항에 있어서,
상기 제 3 메모리가 상기 제 2 데이터 청크를 저장하면 상기 잔여 용량이 상기 기준 용량 이상인 경우, 상기 컨트롤러는 상기 제 2 중간 패리티를 생성하지 않고, 상기 제 2 데이터 청크를 상기 제 3 메모리에 저장하는 스토리지 장치. - 제 1 항에 있어서,
상기 제 2 데이터 청크가 상기 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크이고 상기 제 1 중간 패리티가 상기 제 2 메모리에서 버퍼링되는 경우, 상기 컨트롤러는 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여, 상기 제 1 및 제 2 데이터 청크들과 관련되는 최종 패리티를 생성하는 스토리지 장치. - 제 6 항에 있어서,
상기 컨트롤러는:
적어도 상기 제 1 데이터 청크에 기초하여 상기 제 1 중간 패리티를 생성하고, 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 상기 최종 패리티를 생성하도록 구성되는 패리티 연산기를 포함하는 스토리지 장치. - 제 6 항에 있어서,
상기 컨트롤러는 상기 최종 패리티를 상기 제 3 메모리에 저장하는 스토리지 장치. - 제 8 항에 있어서,
상기 컨트롤러는 상기 제 3 메모리의 상기 최종 패리티를 상기 복수의 제 1 메모리로 출력하고,
상기 복수의 제 1 메모리는 상기 대상 데이터와 관련하여, 상기 제 1 및 제 2 데이터 청크들 및 상기 최종 패리티를 분산하여 저장하는 스토리지 장치. - 대상 데이터와 관련되는 제 1 및 제 2 데이터 청크(Chunk)들을 분산하여 저장하도록 구성되는 복수의 제 1 메모리;
상기 제 1 및 제 2 데이터 청크들이 분산하여 저장되도록 상기 복수의 제 1 메모리를 제어하도록 구성되는 컨트롤러; 및
상기 제 1 및 제 2 데이터 청크들을 버퍼링하도록 구성되는 제 2 메모리를 포함하되,
상기 컨트롤러는 상기 대상 데이터와 관련하여 상기 제 2 데이터 청크 직전에 처리되는 상기 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성하고,
상기 제 1 중간 패리티가 상기 제 2 메모리에서 버퍼링되는 경우, 상기 컨트롤러는 상기 버퍼링되는 제 1 중간 패리티를 상기 컨트롤러 내부의 제 3 메모리에 저장하지 않고 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성하는 스토리지 장치.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160132205A KR102721225B1 (ko) | 2016-10-12 | Raid 방식으로 데이터를 저장하는 스토리지 장치 | |
US15/616,268 US10372541B2 (en) | 2016-10-12 | 2017-06-07 | Storage device storing data using raid |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160132205A KR102721225B1 (ko) | 2016-10-12 | Raid 방식으로 데이터를 저장하는 스토리지 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180040767A true KR20180040767A (ko) | 2018-04-23 |
KR102721225B1 KR102721225B1 (ko) | 2024-10-24 |
Family
ID=
Also Published As
Publication number | Publication date |
---|---|
US20180101441A1 (en) | 2018-04-12 |
US10372541B2 (en) | 2019-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10372541B2 (en) | Storage device storing data using raid | |
US10409511B1 (en) | Multi-device storage system with distributed read/write processing | |
US11604594B2 (en) | Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator | |
US11055188B2 (en) | Offloading error processing to raid array storage enclosure | |
US8601346B1 (en) | System and method for generating parity data in a nonvolatile memory controller by using a distributed processing technique | |
US9858015B2 (en) | Solid-state storage management | |
TWI727979B (zh) | 資料儲存裝置及其操作方法 | |
US20180284993A1 (en) | Performing data operations in a storage area network | |
CN111198839B (zh) | 存储装置及操作其的方法、控制器 | |
US9164677B2 (en) | Systems and methods for DMA controller for checking the status of metadata prior to or simultaneously when transferring data to host | |
CN104508644A (zh) | 智能存储器缓冲器 | |
US10769074B2 (en) | Computer memory content movement | |
US11119693B2 (en) | Method of operating storage device for improving QOS latency and storage device performing the same | |
US20130031300A1 (en) | Non-volatile memory device, method of operating the same, and memory system having the non-volatile memory device | |
US11461024B2 (en) | Computing system and operating method thereof | |
US11151064B2 (en) | Information processing apparatus and storage device access control method | |
US9971549B2 (en) | Method of operating a memory device | |
KR20180087494A (ko) | 메모리 장치, 메모리 시스템 및 메모리 시스템의 동작 방법 | |
KR102721225B1 (ko) | Raid 방식으로 데이터를 저장하는 스토리지 장치 | |
US11853614B2 (en) | Synchronous write method and device, storage system and electronic device | |
KR20210043001A (ko) | 하이브리드 메모리 시스템 인터페이스 | |
US20180335961A1 (en) | Network Data Storage Buffer System | |
US20230221867A1 (en) | Computational acceleration for distributed cache | |
CN110633226A (zh) | 融合存储器、存储系统及深度学习计算方法 | |
KR20180089140A (ko) | 데이터 저장 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right |