KR20180040767A - Raid 방식으로 데이터를 저장하는 스토리지 장치 - Google Patents

Raid 방식으로 데이터를 저장하는 스토리지 장치 Download PDF

Info

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
Application number
KR1020160132205A
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 KR1020160132205A priority Critical patent/KR20180040767A/ko
Priority to US15/616,268 priority patent/US10372541B2/en
Publication of KR20180040767A publication Critical patent/KR20180040767A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/1096Parity calculation or recalculation after configuration or reconfiguration of the system
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1748De-duplication implemented within the file system, e.g. based on file segments
    • G06F16/1752De-duplication implemented within the file system, e.g. based on file segments based on file chunks
    • G06F17/30159
    • 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/061Improving I/O performance
    • 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/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • 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/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/109Sector level checksum or ECC, i.e. sector or stripe level checksum or ECC in addition to the RAID parity calculation

Abstract

본 발명은 복수의 제 1 메모리, 컨트롤러, 및 제 2 메모리를 포함하는 스토리지 장치를 제공한다. 컨트롤러는 제 1 및 제 2 데이터 청크들이 복수의 제 1 메모리에 분산하여 저장되도록 복수의 제 1 메모리를 제어한다. 컨트롤러는 제 2 데이터 청크 직전에 처리되는 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성한다. 제 2 데이터 청크가 마지막으로 처리되는 데이터 청크가 아니고 제 1 중간 패리티가 제 2 메모리에서 버퍼링되는 경우, 컨트롤러는 제 2 메모리에서 버퍼링되는 제 1 중간 패리티 및 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성하고, 제 2 중간 패리티가 컨트롤러 내부의 제 3 메모리에 저장되지 않고 제 2 메모리에서 버퍼링되도록 제 2 중간 패리티를 제 2 메모리로 출력한다. 본 발명에 따르면, 패리티를 생성하는 데에 대한 레이턴시가 감소할 수 있다.

Description

RAID 방식으로 데이터를 저장하는 스토리지 장치 {STORAGE DEVICE STORING DATA IN RAID MANNER}
본 발명은 전자 장치에 관한 것으로, 좀 더 구체적으로는 데이터를 저장하는 스토리지 장치의 구성들 및 동작들에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그것에 포함되는 다양한 전자 회로의 동작들에 따라 고유의 기능들을 수행한다. 전자 장치의 전자 회로들은 전자 장치의 기능들을 제공하기 위해 신호들/데이터를 처리하고 연산들을 수행할 수 있다.
스토리지 장치는 전자 장치의 한 예이고, 사용자를 위해 데이터를 저장한다. 스토리지 장치는 그것에 포함되는 메모리 장치, 컨트롤러 등과 같은 다양한 전자 회로의 동작들에 따라 스토리지 서비스를 제공한다. 이를 위해, 스토리지 장치는 호스트(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 컨트롤러 및 스토리지 장치들을 포함하는 전자 시스템을 보여주는 블록도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자(이하, 통상의 기술자)들이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 본 발명의 실시 예들이 명확하고 상세하게 설명될 것이다.
도 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 : 패리티 영역

Claims (10)

  1. 대상 데이터와 관련되는 제 1 및 제 2 데이터 청크(Chunk)들을 분산하여 저장하도록 구성되는 복수의 제 1 메모리;
    상기 제 1 및 제 2 데이터 청크들이 분산하여 저장되도록 상기 복수의 제 1 메모리를 제어하도록 구성되는 컨트롤러; 및
    상기 제 1 및 제 2 데이터 청크들을 버퍼링하도록 구성되는 제 2 메모리를 포함하되,
    상기 컨트롤러는 상기 대상 데이터와 관련하여 상기 제 2 데이터 청크 직전에 처리되는 상기 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성하고,
    상기 제 2 데이터 청크가 상기 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크가 아니고 상기 제 1 중간 패리티가 상기 제 2 메모리에서 버퍼링되는 경우, 상기 컨트롤러는 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성하고, 상기 제 2 중간 패리티가 상기 컨트롤러 내부의 제 3 메모리에 저장되지 않고 상기 제 2 메모리에서 버퍼링되도록 상기 제 2 중간 패리티를 상기 제 2 메모리로 출력하는 스토리지 장치.
  2. 제 1 항에 있어서,
    상기 컨트롤러는:
    적어도 상기 제 1 데이터 청크에 기초하여 상기 제 1 중간 패리티를 생성하도록 구성되는 제 1 패리티 연산기; 및
    상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 상기 제 2 중간 패리티를 생성하도록 구성되는 제 2 패리티 연산기를 포함하는 스토리지 장치.
  3. 제 2 항에 있어서,
    상기 제 1 패리티 연산기로부터의 출력은 상기 제 3 메모리에 저장되고,
    상기 제 2 패리티 연산기로부터의 출력은 상기 제 2 메모리에서 버퍼링되는 스토리지 장치.
  4. 제 1 항에 있어서,
    상기 제 3 메모리가 상기 제 2 데이터 청크를 저장하면 상기 제 3 메모리에서 최종 패리티 및 중간 패리티를 위해 할당되는 메모리 영역의 잔여 용량이 기준 용량 미만인 경우, 상기 컨트롤러가 상기 제 2 중간 패리티를 생성하고 상기 제 2 중간 패리티를 상기 제 2 메모리로 출력하는 스토리지 장치.
  5. 제 4 항에 있어서,
    상기 제 3 메모리가 상기 제 2 데이터 청크를 저장하면 상기 잔여 용량이 상기 기준 용량 이상인 경우, 상기 컨트롤러는 상기 제 2 중간 패리티를 생성하지 않고, 상기 제 2 데이터 청크를 상기 제 3 메모리에 저장하는 스토리지 장치.
  6. 제 1 항에 있어서,
    상기 제 2 데이터 청크가 상기 대상 데이터와 관련하여 마지막으로 처리되는 데이터 청크이고 상기 제 1 중간 패리티가 상기 제 2 메모리에서 버퍼링되는 경우, 상기 컨트롤러는 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여, 상기 제 1 및 제 2 데이터 청크들과 관련되는 최종 패리티를 생성하는 스토리지 장치.
  7. 제 6 항에 있어서,
    상기 컨트롤러는:
    적어도 상기 제 1 데이터 청크에 기초하여 상기 제 1 중간 패리티를 생성하고, 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 상기 최종 패리티를 생성하도록 구성되는 패리티 연산기를 포함하는 스토리지 장치.
  8. 제 6 항에 있어서,
    상기 컨트롤러는 상기 최종 패리티를 상기 제 3 메모리에 저장하는 스토리지 장치.
  9. 제 8 항에 있어서,
    상기 컨트롤러는 상기 제 3 메모리의 상기 최종 패리티를 상기 복수의 제 1 메모리로 출력하고,
    상기 복수의 제 1 메모리는 상기 대상 데이터와 관련하여, 상기 제 1 및 제 2 데이터 청크들 및 상기 최종 패리티를 분산하여 저장하는 스토리지 장치.
  10. 대상 데이터와 관련되는 제 1 및 제 2 데이터 청크(Chunk)들을 분산하여 저장하도록 구성되는 복수의 제 1 메모리;
    상기 제 1 및 제 2 데이터 청크들이 분산하여 저장되도록 상기 복수의 제 1 메모리를 제어하도록 구성되는 컨트롤러; 및
    상기 제 1 및 제 2 데이터 청크들을 버퍼링하도록 구성되는 제 2 메모리를 포함하되,
    상기 컨트롤러는 상기 대상 데이터와 관련하여 상기 제 2 데이터 청크 직전에 처리되는 상기 제 1 데이터 청크에 기초하여 제 1 중간 패리티를 생성하고,
    상기 제 1 중간 패리티가 상기 제 2 메모리에서 버퍼링되는 경우, 상기 컨트롤러는 상기 버퍼링되는 제 1 중간 패리티를 상기 컨트롤러 내부의 제 3 메모리에 저장하지 않고 상기 버퍼링되는 제 1 중간 패리티 및 상기 제 2 데이터 청크에 기초하여 제 2 중간 패리티를 생성하는 스토리지 장치.
KR1020160132205A 2016-10-12 2016-10-12 Raid 방식으로 데이터를 저장하는 스토리지 장치 KR20180040767A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020160132205A KR20180040767A (ko) 2016-10-12 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 KR20180040767A (ko) 2016-10-12 2016-10-12 Raid 방식으로 데이터를 저장하는 스토리지 장치

Publications (1)

Publication Number Publication Date
KR20180040767A true KR20180040767A (ko) 2018-04-23

Family

ID=61828968

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160132205A KR20180040767A (ko) 2016-10-12 2016-10-12 Raid 방식으로 데이터를 저장하는 스토리지 장치

Country Status (2)

Country Link
US (1) US10372541B2 (ko)
KR (1) KR20180040767A (ko)

Families Citing this family (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
US9218244B1 (en) 2014-06-04 2015-12-22 Pure Storage, Inc. Rebuilding data across storage nodes
US9836234B2 (en) 2014-06-04 2017-12-05 Pure Storage, Inc. Storage cluster
US11652884B2 (en) 2014-06-04 2023-05-16 Pure Storage, Inc. Customized hash algorithms
US9003144B1 (en) 2014-06-04 2015-04-07 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US11068363B1 (en) 2014-06-04 2021-07-20 Pure Storage, Inc. Proactively rebuilding data in a storage cluster
US9367243B1 (en) 2014-06-04 2016-06-14 Pure Storage, Inc. Scalable non-uniform storage sizes
US10574754B1 (en) 2014-06-04 2020-02-25 Pure Storage, Inc. Multi-chassis array with multi-level load balancing
US11886308B2 (en) 2014-07-02 2024-01-30 Pure Storage, Inc. Dual class of service for unified file and object messaging
US9836245B2 (en) 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
US8868825B1 (en) 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9021297B1 (en) 2014-07-02 2015-04-28 Pure Storage, Inc. Redundant, fault-tolerant, distributed remote procedure call cache in a storage system
US11604598B2 (en) 2014-07-02 2023-03-14 Pure Storage, Inc. Storage cluster with zoned drives
US10853311B1 (en) 2014-07-03 2020-12-01 Pure Storage, Inc. Administration through files in a storage system
US9747229B1 (en) 2014-07-03 2017-08-29 Pure Storage, Inc. Self-describing data format for DMA in a non-volatile solid-state storage
US9811677B2 (en) 2014-07-03 2017-11-07 Pure Storage, Inc. Secure data replication in a storage grid
US9483346B2 (en) 2014-08-07 2016-11-01 Pure Storage, Inc. Data rebuild on feedback from a queue in a non-volatile solid-state storage
US9495255B2 (en) 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US10983859B2 (en) 2014-08-07 2021-04-20 Pure Storage, Inc. Adjustable error correction based on memory health in a storage unit
US9082512B1 (en) 2014-08-07 2015-07-14 Pure Storage, Inc. Die-level monitoring in a storage cluster
US10079711B1 (en) 2014-08-20 2018-09-18 Pure Storage, Inc. Virtual file server with preserved MAC address
US9940234B2 (en) 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9672125B2 (en) 2015-04-10 2017-06-06 Pure Storage, Inc. Ability to partition an array into two or more logical arrays with independently running software
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US10983732B2 (en) 2015-07-13 2021-04-20 Pure Storage, Inc. Method and system for accessing a file
US10108355B2 (en) 2015-09-01 2018-10-23 Pure Storage, Inc. Erase block state detection
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US10762069B2 (en) 2015-09-30 2020-09-01 Pure Storage, Inc. Mechanism for a system where data and metadata are located closely together
US9768953B2 (en) 2015-09-30 2017-09-19 Pure Storage, Inc. Resharing of a split secret
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US10007457B2 (en) 2015-12-22 2018-06-26 Pure Storage, Inc. Distributed transactions with token-associated execution
US10261690B1 (en) 2016-05-03 2019-04-16 Pure Storage, Inc. Systems and methods for operating a storage system
US11861188B2 (en) 2016-07-19 2024-01-02 Pure Storage, Inc. System having modular accelerators
US10768819B2 (en) 2016-07-22 2020-09-08 Pure Storage, Inc. Hardware support for non-disruptive upgrades
US9672905B1 (en) 2016-07-22 2017-06-06 Pure Storage, Inc. Optimize data protection layouts based on distributed flash wear leveling
US11604690B2 (en) 2016-07-24 2023-03-14 Pure Storage, Inc. Online failure span determination
US11797212B2 (en) 2016-07-26 2023-10-24 Pure Storage, Inc. Data migration for zoned drives
US11734169B2 (en) 2016-07-26 2023-08-22 Pure Storage, Inc. Optimizing spool and memory space management
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
US10366004B2 (en) 2016-07-26 2019-07-30 Pure Storage, Inc. Storage system with elective garbage collection to reduce flash contention
US11886334B2 (en) 2016-07-26 2024-01-30 Pure Storage, Inc. Optimizing spool and memory space management
US11422719B2 (en) 2016-09-15 2022-08-23 Pure Storage, Inc. Distributed file deletion and truncation
US9747039B1 (en) 2016-10-04 2017-08-29 Pure Storage, Inc. Reservations over multiple paths on NVMe over fabrics
US11550481B2 (en) 2016-12-19 2023-01-10 Pure Storage, Inc. Efficiently writing data in a zoned drive storage system
US11307998B2 (en) 2017-01-09 2022-04-19 Pure Storage, Inc. Storage efficiency of encrypted host system data
US11955187B2 (en) 2017-01-13 2024-04-09 Pure Storage, Inc. Refresh of differing capacity NAND
US9747158B1 (en) 2017-01-13 2017-08-29 Pure Storage, Inc. Intelligent refresh of 3D NAND
US10528488B1 (en) 2017-03-30 2020-01-07 Pure Storage, Inc. Efficient name coding
US11016667B1 (en) 2017-04-05 2021-05-25 Pure Storage, Inc. Efficient mapping for LUNs in storage memory with holes in address space
US10705911B2 (en) * 2017-04-24 2020-07-07 Hewlett Packard Enterprise Development Lp Storing data in a distributed storage system
US10141050B1 (en) 2017-04-27 2018-11-27 Pure Storage, Inc. Page writes for triple level cell flash memory
US10516645B1 (en) 2017-04-27 2019-12-24 Pure Storage, Inc. Address resolution broadcasting in a networked device
US11782625B2 (en) 2017-06-11 2023-10-10 Pure Storage, Inc. Heterogeneity supportive resiliency groups
US10425473B1 (en) 2017-07-03 2019-09-24 Pure Storage, Inc. Stateful connection reset in a storage cluster with a stateless load balancer
US10402266B1 (en) 2017-07-31 2019-09-03 Pure Storage, Inc. Redundant array of independent disks in a direct-mapped flash storage system
US10545687B1 (en) 2017-10-31 2020-01-28 Pure Storage, Inc. Data rebuild when changing erase block sizes during drive replacement
US10496330B1 (en) 2017-10-31 2019-12-03 Pure Storage, Inc. Using flash storage devices with different sized erase blocks
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
TWI661307B (zh) * 2017-12-06 2019-06-01 慧榮科技股份有限公司 資料儲存裝置、主機裝置、以及資料寫入方法
US10976948B1 (en) 2018-01-31 2021-04-13 Pure Storage, Inc. Cluster expansion mechanism
US11036596B1 (en) 2018-02-18 2021-06-15 Pure Storage, Inc. System for delaying acknowledgements on open NAND locations until durability has been confirmed
US10838805B2 (en) * 2018-02-23 2020-11-17 Micron Technology, Inc. Generating parity data based on a characteristic of a stream of data
US11385792B2 (en) 2018-04-27 2022-07-12 Pure Storage, Inc. High availability controller pair transitioning
US10754726B2 (en) * 2018-08-21 2020-08-25 Micron Technology, Inc. Tracking error-correction parity calculations
US11354058B2 (en) 2018-09-06 2022-06-07 Pure Storage, Inc. Local relocation of data stored at a storage device of a storage system
US11500570B2 (en) 2018-09-06 2022-11-15 Pure Storage, Inc. Efficient relocation of data utilizing different programming modes
US11868309B2 (en) 2018-09-06 2024-01-09 Pure Storage, Inc. Queue management for data relocation
KR20200108650A (ko) * 2019-03-11 2020-09-21 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
TWI718519B (zh) * 2019-04-09 2021-02-11 喬鼎資訊股份有限公司 資料儲存系統及其管理方法
US11099986B2 (en) 2019-04-12 2021-08-24 Pure Storage, Inc. Efficient transfer of memory contents
US11281394B2 (en) 2019-06-24 2022-03-22 Pure Storage, Inc. Replication across partitioning schemes in a distributed storage system
US11893126B2 (en) 2019-10-14 2024-02-06 Pure Storage, Inc. Data deletion for a multi-tenant environment
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11847331B2 (en) 2019-12-12 2023-12-19 Pure Storage, Inc. Budgeting open blocks of a storage unit based on power loss prevention
US11188432B2 (en) 2020-02-28 2021-11-30 Pure Storage, Inc. Data resiliency by partially deallocating data blocks of a storage device
US11474986B2 (en) 2020-04-24 2022-10-18 Pure Storage, Inc. Utilizing machine learning to streamline telemetry processing of storage media
US20200264800A1 (en) * 2020-05-04 2020-08-20 Intel Corporation Erasure coding write hole closure for solid-state drive (ssd) erasure coding
US11487455B2 (en) 2020-12-17 2022-11-01 Pure Storage, Inc. Dynamic block allocation to optimize storage system performance
US11847324B2 (en) 2020-12-31 2023-12-19 Pure Storage, Inc. Optimizing resiliency groups for data regions of a storage system
US11614880B2 (en) 2020-12-31 2023-03-28 Pure Storage, Inc. Storage system with selectable write paths
US11507597B2 (en) 2021-03-31 2022-11-22 Pure Storage, Inc. Data replication to meet a recovery point objective

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5883909A (en) * 1996-11-06 1999-03-16 Lsi Logic Corporation Method and apparatus for reducing data transfers across a memory bus of a disk array controller
US6112255A (en) 1997-11-13 2000-08-29 International Business Machines Corporation Method and means for managing disk drive level logic and buffer modified access paths for enhanced raid array data rebuild and write update operations
US20030236943A1 (en) 2002-06-24 2003-12-25 Delaney William P. Method and systems for flyby raid parity generation
US7318190B2 (en) * 2004-06-10 2008-01-08 Intel Corporation Storage device parity computation
US7290199B2 (en) 2004-11-19 2007-10-30 International Business Machines Corporation Method and system for improved buffer utilization for disk array parity updates
US7636814B1 (en) 2005-04-28 2009-12-22 Symantec Operating Corporation System and method for asynchronous reads of old data blocks updated through a write-back cache
WO2010049928A1 (en) 2008-10-27 2010-05-06 Kaminario Tehnologies Ltd. System and methods for raid writing and asynchronous parity computation
US8775868B2 (en) 2010-09-28 2014-07-08 Pure Storage, Inc. Adaptive RAID for an SSD environment
CN104205059B (zh) * 2012-04-27 2017-07-14 株式会社日立制作所 存储系统和存储控制装置
JP5937697B2 (ja) * 2012-04-27 2016-06-22 株式会社日立製作所 ストレージシステム
US8886880B2 (en) 2012-05-29 2014-11-11 Dot Hill Systems Corporation Write cache management method and apparatus
US9122399B2 (en) * 2013-04-18 2015-09-01 Hitachi, Ltd. Storage system and storage control method
US9891989B2 (en) * 2013-10-11 2018-02-13 Hitachi, Ltd. Storage apparatus, storage system, and storage apparatus control method for updating stored data stored in nonvolatile memory
US9778986B2 (en) * 2014-03-28 2017-10-03 Hitachi, Ltd. Storage system
US20160072529A1 (en) * 2014-09-10 2016-03-10 Kabushiki Kaisha Toshiba Storage device and memory control method
KR20170010273A (ko) * 2015-07-17 2017-01-26 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US9921914B2 (en) * 2015-11-03 2018-03-20 Intel Corporation Redundant array of independent disks (RAID) write hole solutions

Also Published As

Publication number Publication date
US10372541B2 (en) 2019-08-06
US20180101441A1 (en) 2018-04-12

Similar Documents

Publication Publication Date Title
KR20180040767A (ko) Raid 방식으로 데이터를 저장하는 스토리지 장치
US10409511B1 (en) Multi-device storage system with distributed read/write processing
US11055188B2 (en) Offloading error processing to raid array storage enclosure
US11604594B2 (en) Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator
US9858015B2 (en) Solid-state storage management
CN101504594B (zh) 一种数据存储方法和装置
TWI727979B (zh) 資料儲存裝置及其操作方法
US20180284993A1 (en) Performing data operations in a storage area network
US9164677B2 (en) Systems and methods for DMA controller for checking the status of metadata prior to or simultaneously when transferring data to host
EP3709168A1 (en) Storage device
US9509771B2 (en) Prioritizing storage array management commands
US10769074B2 (en) Computer memory content movement
US20130031300A1 (en) Non-volatile memory device, method of operating the same, and memory system having the non-volatile memory device
CN111198839A (zh) 存储装置及操作其的方法、控制器
US20210042246A1 (en) Information processing apparatus and storage device access control method
US11461024B2 (en) Computing system and operating method thereof
US11287985B2 (en) Network data storage buffer system
KR20180087494A (ko) 메모리 장치, 메모리 시스템 및 메모리 시스템의 동작 방법
US20150128000A1 (en) Method of operating memory system
KR20230078577A (ko) 동기식 쓰기 방법 및 장치, 스토리지 시스템 및 전자 장치
KR20180089140A (ko) 데이터 저장 장치
CN109753236B (zh) 存储系统及其操作方法
US11481125B2 (en) Storage device and storage system performing offloaded tasks from host
US20150026408A1 (en) Cache memory system and method of operating the same
WO2018067745A1 (en) Parallel segment writer

Legal Events

Date Code Title Description
A201 Request for examination