KR102703983B1 - Raid 방식으로 데이터를 저장하는 스토리지 장치 - Google Patents
Raid 방식으로 데이터를 저장하는 스토리지 장치 Download PDFInfo
- Publication number
- KR102703983B1 KR102703983B1 KR1020160147673A KR20160147673A KR102703983B1 KR 102703983 B1 KR102703983 B1 KR 102703983B1 KR 1020160147673 A KR1020160147673 A KR 1020160147673A KR 20160147673 A KR20160147673 A KR 20160147673A KR 102703983 B1 KR102703983 B1 KR 102703983B1
- Authority
- KR
- South Korea
- Prior art keywords
- stripe
- memory
- parity
- controller
- raid engine
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 243
- 238000000034 method Methods 0.000 description 53
- 238000012545 processing Methods 0.000 description 33
- 238000010586 diagram Methods 0.000 description 29
- 230000003111 delayed effect Effects 0.000 description 6
- 238000013403 standard screening design Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- 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/0658—Controller construction 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/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
- 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
- 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
-
- 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/108—Parity data distribution in semiconductor storages, e.g. in SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- 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/0688—Non-volatile semiconductor memory arrays
-
- 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/1028—Distributed, i.e. distributed RAID systems with parity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/26—Using a specific storage system architecture
- G06F2212/261—Storage comprising a plurality of storage devices
- G06F2212/262—Storage comprising a plurality of storage devices configured as RAID
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)
Abstract
스토리지 장치는 복수의 불휘발성 메모리 및 컨트롤러를 포함한다. 복수의 불휘발성 메모리는 스트라이프 세트에 대한 제1 및 제2 스트라이프들을 분산하여 저장하도록 구성된다. 컨트롤러는 호스트로부터 제1 및 제2 스트라이프들을 수신하고, 제1 및 제2 스트라이프들을 복수의 불휘발성 메모리로 분산하여 저장하고, 제1 및 제2 스트라이프들에 기초하여 패리티 연산을 수행한다. 컨트롤러는 제1 스트라이프에 기초하여 중간 패리티를 생성하고, 중간 패리티를 컨트롤러 내부의 제1 메모리에 저장하고, 패리티 연산이 중단되는 경우, 제1 메모리에 저장된 중간 패리티를 컨트롤러 내부의 제2 메모리로 이동시킨다.
Description
본 발명은 반도체 메모리 장치에 관한 것으로, 좀 더 구체적으로는 RAID 방식으로 데이터를 저장하는 스토리지 장치에 관한 것이다.
플래시 메모리 장치는 컴퓨터, 스마트폰, PDA, 디지털 카메라, 캠코더, 보이스 리코더, MP3 플레이어, 휴대용 컴퓨터(Handheld PC)와 같은 정보 기기들의 음성 및 영상 데이터 저장 매체로서 널리 사용되고 있다. 그러나 플래시 메모리에 데이터를 기입하기 위해서는 소거 동작이 반드시 선행되어야 하며, 기입되는 데이터의 단위보다 삭제되는 데이터의 단위가 크다는 특징이 있다. 이러한 특징은 플래시 메모리가 보조기억장치로 사용되는 경우에도 일반 하드디스크용 파일 시스템(File System)을 그대로 활용하는 것을 저해하는 요인이 된다. 더불어, 이러한 특징은 플래시 메모리로의 연속적인(Sequential) 입출력 처리가 비연속적 입출력 처리보다 효율적임을 암시한다.
플래시 메모리 기반의 대용량 스토리지 장치의 예로 솔리드 스테이트 드라이브(Solid State Drive: 이하, SSD)가 대표적이다. SSD의 수요 증가와 함께 그 용도는 다양하게 분화되고 있다. 예를 들면, 서버용 SSD, 클라이언트용 SSD, 스트라이프 세트 센터용 SSD 등으로 용도가 세분화될 수 있다. SSD의 인터페이스는 이러한 각각의 용도에 따라 최적의 속도와 신뢰성을 제공할 수 있어야 한다. 이러한 요구를 충족하기 위해서 최적의 SSD 인터페이스로 SATA, PCIe, SAS 등이 적용되고 있다.
더불어, 높은 신뢰성을 위해 복수의 스토리지 장치를 포함하는 스토리지 장치가 사용된다. 예로서, RAID(Redundant Array of Independent Disks) 스토리지 시스템은 하나의 스트라이프 세트(Stripe Set)에 대응하는 데이터를 분할하고, 분할된 "스트라이프(Stripe)"들을 복수의 스토리지 장치에 분산하여 저장한다. 복수의 스토리지 장치가 동시에 문제를 야기하는 경우는 거의 발생하지 않기 때문에, 이러한 스토리지 장치는 데이터의 높은 신뢰성을 보장할 수 있다.
본 발명의 몇몇 실시 예들은 RAID 방식을 채용하는 스토리지 장치 또는 스토리지 시스템에서 성능이 저하되는 것을 방지하기 위한 구성들 및 동작들을 제공할 수 있다.
본 발명의 실시 예에 따른 스토리지 장치는 복수의 불휘발성 메모리 및 컨트롤러를 포함한다. 복수의 불휘발성 메모리는 스트라이프 세트(Stripe Set)에 대한 제1 및 제2 스트라이프(Strip)들을 분산하여 저장하도록 구성된다. 컨트롤러는 호스트로부터 제1 및 제2 스트라이프들을 수신하고, 제1 및 제2 스트라이프들을 복수의 불휘발성 메모리로 분산하여 저장하고, 제1 및 제2 스트라이프들에 기초하여 패리티 연산을 수행한다.
몇몇 실시 예로서, 컨트롤러는 제1 스트라이프에 기초하여 중간 패리티를 생성하고, 중간 패리티를 컨트롤러 내부의 제1 메모리에 저장하고, 패리티 연산이 중단되는 경우, 제1 메모리에 저장된 중간 패리티를 컨트롤러 내부의 제2 메모리로 이동시킨다.
본 발명의 실시 예에 따른 스토리지 장치는 복수의 불휘발성 메모리 및 컨트롤러를 포함한다. 복수의 불휘발성 메모리는 제1 스트라이프 세트(Stripe Set)에 대한 제1 및 제2 스트라이프(Strip)들 및 제2 스트라이프 세트에 대한 제3 스트라이프를 각각 분산하여 저장하도록 구성된다. 컨트롤러는 호스트로부터 제1 및 제2 스트라이프들 및 제3 스트라이프를 수신하고, 제1 및 제2 스트라이프들 및 제3 스트라이프를 복수의 불휘발성 메모리로 분산하여 저장한다.
몇몇 실시 예로서, 컨트롤러는 제1 스트라이프에 기초하여 제1 중간 패리티를 생성하고, 제1 중간 패리티를 컨트롤러 내부의 제1 메모리에 저장하고, 제1 스트라이프 다음에 제2 스트라이프 대신 제3 스트라이프가 수신되는 경우, 제1 메모리에 저장된 제1 중간 패리티를 컨트롤러 내부의 제2 메모리로 이동시키고, 제3 스트라이프에 기초하여 제2 중간 패리티를 생성하고, 제2 중간 패리티를 제1 메모리에 저장한다
본 발명의 실시 예에 따르면, 데이터에 대한 패리티 연산이 중지되면, 스토리지 장치는 메모리에 저장된 중간 패리티를 다른 메모리로 이동시키고 다른 데이터에 대한 패리티 연산을 수행할 수 있다. 따라서, 패리티를 생성하는 데에 대한 레이턴시가 감소하고, 스토리지의 성능이 향상될 수 있다.
도 1은 본 발명의 실시 예에 따른 전자 시스템을 보여주기 위한 블록도이다.
도 2는 도 1의 스토리지 장치에서 컨트롤러의 구성을 보여주기 위한 블록도이다.
도 3은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 설명하기 위한 도면이다.
도 4는 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 5는 스토리지 장치에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 6은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 7은 도 6의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 8은 도 6의 RAID 엔진에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 순서도이다.
도 9는 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 10은 도 9의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 11은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 12는 도 11의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 13은 도 11의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 14는 도 11의 RAID 엔진에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 순서도이다.
도 15는 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 16은 도 15의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 17a 내지 도 17c는 도 15의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 2는 도 1의 스토리지 장치에서 컨트롤러의 구성을 보여주기 위한 블록도이다.
도 3은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 설명하기 위한 도면이다.
도 4는 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 5는 스토리지 장치에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 6은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 7은 도 6의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 8은 도 6의 RAID 엔진에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 순서도이다.
도 9는 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 10은 도 9의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 11은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 12는 도 11의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 13은 도 11의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 14는 도 11의 RAID 엔진에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 순서도이다.
도 15는 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다.
도 16은 도 15의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 17a 내지 도 17c는 도 15의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자(이하, 통상의 기술자)들이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 본 발명의 실시 예들이 명확하고 상세하게 설명될 것이다.
도 1은 본 발명의 실시 예에 따른 전자 시스템을 보여주기 위한 블록도이다. 전자 시스템(1000)는 호스트(1100) 및 스토리지 장치(1200)를 포함할 수 있다.
호스트(1100)는 스토리지 장치(1200)와 데이터(DATA)를 교환할 수 있다. 스토리지 장치(1200)는 호스트(1100)는 스토리지 장치(1200)로부터 데이터(DATA)를 독출하기 위해, 스토리지 장치로 커맨드를 전송할 수 있다. 스토리지 장치(1200)는 커맨드에 응답하여, 호스트(1100)로 요청된 데이터(DATA)를 제공할 수 있다. 예로서, 스토리지 장치(1200)는 복수의 불휘발성 메모리(1210)으로부터 요청된 스트라이프 세트를 독출하여 호스트(1100)로 제공할 수 있다.
호스트(1100)는 하나 이상의 프로세서 코어들을 포함하도록 구현될 수 있다. 예로서, 호스트(1100)는 범용(General-purpose) 프로세서, 전용(Special-purpose) 프로세서, 또는 어플리케이션 프로세서(Application Processor)를 포함할 수 있다. 호스트(1100)는 프로세서 그 자체이거나, 프로세서(들)를 포함하는 전자 장치 또는 시스템일 수 있다.
스토리지 장치(1200)는 복수의 불휘발성 메모리(1210), 및 컨트롤러(1220)를 포함할 수 있다. 복수의 불휘발성 메모리(1210)에 포함되는 불휘발성 메모리들(1211, 1212, 1213, 1214) 각각은 호스트(1100)에 의해 요청되는 쓰기 데이터를 저장하거나 읽기 데이터를 출력할 수 있다. 이를 위해, 불휘발성 메모리들(1211, 1212, 1213, 1214) 각각은 데이터를 저장하기 위한 메모리 영역(들)을 포함할 수 있다. 도 1은 네 개의 불휘발성 메모리들(1211, 1212, 1213, 1214)을 보여주지만, 본 발명은 이에 한정되지 않고, 불휘발성 메모리들의 개수는 다양하게 변경 또는 수정될 수 있다.
예로서, 불휘발성 메모리(1211, 1212, 1213, 1214) 각각이 낸드 플래시 메모리(NAND-type Flash Memory)를 포함하는 경우, 불휘발성 메모리들(1211, 1212, 1213, 1214) 각각은 복수의 워드 라인 및 복수의 비트 라인을 따라 형성되는 메모리 셀 어레이를 포함할 수 있다. 그러나, 본 발명은 이 예로 한정되지 않고, 불휘발성 메모리들(1311, 1312, 1313, 1314) 각각은 PRAM(Phase-change Random Access Memory), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 다양한 불휘발성 메모리 중 하나 이상을 포함할 수 있다. 불휘발성 메모리들(1211, 1212, 1213, 1214) 각각의 구성은 다양하게 변경 또는 수정될 수 있다. 몇몇 실시 예에서, 불휘발성 메모리들(1211, 1212, 1213, 1214) 중 일부 또는 전부가 SRAM(Static RAM), DRAM(Dynamic RAM), SDRAM(Synchronous DRAM) 등과 같은 휘발성 메모리로 대체될 수 있다.
컨트롤러(1220)는 RAID 엔진(Redundant Array of Independent Disks), 제1 메모리(1222) 및 제2 메모리(1223)를 포함할 수 있다. 컨트롤러(1220)는 스토리지 장치(1200)의 전반적인 동작들을 제어할 수 있다. 스케줄링하거나, 스토리지 장치(1200)에서 처리되는 신호들/데이터를 인코딩 및 디코딩할 수 있다.
컨트롤러(1220)는 이러한 다양한 동작 및 뒤에서 설명될 동작들을 수행하기 위해, 하드웨어 구성, 소프트웨어 구성, 또는 그것들의 하이브리드(Hybrid) 구성을 포함할 수 있다. 예로서, 컨트롤러(1220)는 특정 동작을 수행하도록 구성되는 전용 하드웨어 회로를 포함할 수 있다. 또는, 컨트롤러(1220)는 특정 동작을 수행하도록 구성되는 프로그램 코드(Program Code)의 명령어 집합(Instruction Set)을 실행할 수 있는 하나 이상의 프로세서 코어들을 포함할 수 있다.
RAID 엔진(1221)은 RAID 방식으로 데이터(DATA)를 불휘발성 메모리들(1211, 1212, 1213, 1214)에 저장할 수 있다. 여기서 RAID는 다양한 레벨을 가질 수 있다. 예로서, RAID 레벨 0(Striped SET without parity or Striping), RAID 레벨 1(Mirrored SET without parity or Mirroring), RAID 레벨 2(Hamming code parity),RAID 레벨 3(Striped SET with dedicated parity, bit interleaved parity, or byte level parity), RAID 레벨 4(Block level parity), RAID 레벨 5(Striped SET with distributed parity or interleave parity), RAID 레벨 6(Striped SET with dual distributed parity), RAID 레벨 7, RAID 레벨 10, 및 RAID 레벨 53 중에서 어느 하나 또는 상기 RAID 레벨들 중에서 적어도 2개를 혼합한(merged) RAID 레벨(예컨대, RAID 0+1, RAID 1+0,RAID 5+0, RAID 5+1, 또는 RAID 0+1+5)일 수도 있다. RAID 방식에 대해서는 도 3을 참조하여 더 설명될 것이다.
제1 메모리(1222) 및 제2 메모리(1223) 각각은 컨트롤러(1220)의 동작들에 이용되는 데이터를 저장할 수 있다. 이를 위해, 제1 메모리(1222) 및 제2 메모리(1223)는 각각 다양한 불휘발성/휘발성 메모리 중 하나 이상을 포함할 수 있다. 예로서, 제1 메모리(1222)는 컨트롤러(1220)의 높은 성능을 제공하기 위해, 빠른 속도로 동작할 수 있다. 이를 위해, 제1 메모리(1222)는 SRAM을 포함할 수 있다. 몇몇 실시 예에서, 전자 시스템(1000)은 하나의 전자 장치로 구현될 수 있다. 예로서, 전자 시스템(1000)은 호스트(1100) 및 스토리지 장치(1200)를 포함하는 가전 기기, 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console) 등과 같은 다양한 전자 장치 중 하나일 수 있다.
도 2는 도 1의 스토리지 장치에서 컨트롤러의 구성을 보여주기 위한 블록도이다. 컨트롤러는 RAID 엔진(1221), 제1 메모리(1222), 제2 메모리(1223), 중앙처리장치(1224), 호스트 인터페이스(1225), 데이터 관리자(1226), 및 플래시 인터페이스(1227)를 포함할 수 있다.
RAID 엔진(1221)은 쓰기 요청되는 데이터를 복수의 불휘발성 메모리(1210)에 RAID 방식으로 저장하기 위한 스트라이프(Stripe) 단위로 처리할 수 있다. 예로서, 쓰기 요청되는 데이터는 하나의 스트라이프 세트(Stripe Set) 단위로 관리될 수 있다. 그리고, 하나의 스트라이프 세트는 복수의 불휘발성 메모리(1210) 각각에 저장되는 스트라이프들로 분리될 수 있다. RAID 엔진(1221)은 스트라이프들에 기초하여 패리티(Parity) 연산을 수행할 수 있다.
RAID 엔진(1221)은 패리티를 생성하는 동안 발생하는 중간 결과물들을 제1 메모리(1222)에 버퍼링할 수 있다. 만약, 컨트롤러(1220)로 수신되는 데이터의 흐름에 에러가 문제가 발생하는 경우, RAID 엔진(1221)은 패리티 연산을 중단할 수 있다. 컨트롤러(1220)로 데이터의 수신이 지연되거나, 데이터가 다 수신되지 않은 상태에서 다른 데이터가 컨트롤러(1220)로 수신되는 경우, 에러가 발생할 수 있다. 또는, 컨트롤러(1220)의 하드웨어 구성 또는 소프트웨어 구성에서 에러가 발생하여 데이터의 흐름이 제어되지 않는 경우, RAID 엔진(1221)은 패리티 연산을 중단할 수 있다. RAID 엔진(1221)의 패리티 연산이 중단되는 경우, 제1 메모리(1222)에 저장된 중간 결과물들은 제2 메모리(1223)로 이동될 수 있다.
그리고, 컨트롤러(1220)로 데이터가 정상적으로 수신되거나, 컨트롤러(1220)에서 발생된 에러가 해결되는 경우, RAID 엔진(1221)은 패리티 연산을 재개할 수 있다. RAID 엔진(1221)이 패리티 연산을 재개하기 위해서 제2 메모리(1222)에 저장된 중간 결과물들은 제1 메모리(1222)로 이동될 수 있다. RIAD 엔진(1221)의 패리티 연산의 중단 및 재개 동작에 대해서는 도 6내지 도 17c를 참조하여 설명된다.
중앙처리장치(1224)는 복수의 불휘발성 메모리(1210)에 대한 읽기/쓰기 동작에 필요한 다양한 제어 정보를 호스트 인터페이스(1225) 및 플래시 인터페이스(1227)의 레지스터들에 전달할 수 있다. 중앙처리장치(1224)는 스토리지 컨트롤러(1220)의 다양한 제어 동작을 위해 제공되는 펌웨어에 따라 동작할 수 있다. 예를 들면, 중앙처리장치(1224)는 복수의 불휘발성 메모리 (1210)을 관리하기 위한 가비지 컬렉션(Garbage collection)이나, 주소 맵핑, 웨어 레벨링 등을 수행하기 위한 플래시 변환 계층(FTL)을 실행할 수 있다.
컨트롤러(1220)의 하드웨어 구성 또는 소프트웨어 구성에서 에러가 발생하는 경우, 중앙처리장치(1224)는 RAID 엔진(1221)의 패리티 연산을 중단하도록 제어할 수 있다. 또는, 컨트롤러(1220)로 수신되는 데이터의 흐름에 에러가 발생하는 경우, 중앙처리장치(1224)는 RAID 엔진(1221)의 패리티 연산을 중단하도록 제어할 수 있다. 그리고, 중앙처리장치(1224)는 제1 메모리(1222)에 저장된 중간 결과물이 제2 메모리(1223)로 이동되도록 제어할 수 있다.
컨트롤러(1220)로 데이터가 정상적으로 수신되거나, 컨트롤러(1220)에서 발생된 에러가 해결되는 경우, 중앙처리장치(1224)는 RAID 엔진(1221)에서 패리티 연산이 재개되도록 제어할 수 있다.
호스트 인터페이스(1225)는 호스트(1100)와의 통신을 수행할 수 있다. 예를 들면, 호스트 인터페이스(1225)는 호스트(1100)와의 통신 채널을 제공한다. 호스트 인터페이스(1225)는 호스트(1100)와 스토리지 장치(1200)와의 물리적 연결을 제공할 수 있다. 즉, 호스트 인터페이스(1225)는 호스트(1100)의 버스 포맷(Bus format)에 대응하여 스토리지 장치(1200)와의 인터페이싱을 제공할 수 있다. 호스트(1100)의 버스 포맷은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), UFS(Universal Flash Storage) 중 적어도 하나로 구성될 수 있다.
데이터 관리기(1226)는 호스트(1100)로부터 수신되는 데이터(예로서, 스트라이프 세트)의 흐름을 관리할 수 있다. 예로서, 데이터 관리기(1226)는 스트라이프 세트를 구성하는 복수의 스트라이프 각각의 메타 또는 헤더 정보를 확인할 수 있다. 데이터 관리기(1226)는 메타 또는 헤더 정보에 기초하여, 수신되는 스트라이프의 순서를 확인할 수 있다. 수신되는 스트라이프 세트에 대응하는 스트라이프가 수신되는 시간이 기준 시간보다 딜레이 되거나, 다른 스트라이프 세트에 대응하는 스트라이프가 수신되는 경우, 데이터 관리기(1226)는 이러한 정보를 중앙처리장치(1224) 및 RAID 엔진(1221) 중 적어도 하나로 제공할 수 있다.
플래시 인터페이스(1227)는 복수의 불휘발성 메모리(1210)와 데이터(예로서, 스트라이프 세트)를 교환한다. 플래시 인터페이스(1227)는 메모리 채널들(미 도시)을 경유하여 복수의 불휘발성 메모리(1210)에 데이터 기입한다. 그리고 불휘발성 메모리 장치(230, 240, 250)로부터 메모리 채널들(미 도시)을 통하여 제공되는 읽기 데이터(Read data)는 플래시 인터페이스(1227)에 의해서 취합될 수 있다.
도 3은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 설명하기 위한 도면이다. RAID 방식에서, 데이터는 스트라이프 세트(Stripe Set) 단위로 관리될 수 있다. 컨트롤러(1220)는 호스트(1100)로부터 제1 스트라이프 세트(S_SET1)를 수신할 수 있다. 이때, 제1 스트라이프 세트(S_SET1)는 하나의 데이터에 해당할 수 있다. 그리고, 제1 스트라이프 세트(S_SET1)는 복수의 스트라이프(Stripe)로 구성될 수 있다. 복수의 스트라이프 각각은 데이터 청크(data chunk)에 해당할 수 있다. 예로서, 제1 스트라이프 세트(S_SET1)는 제1 내지 제3 스트라이프(S11, S12, S13)로 구성될 수 있다.
RAID 엔진(1221)은 호스트(1100)로부터 복수의 스트라이프(S11, S12, S13)으로 구성되는 제1 스트라이프 세트(S_SET1)를 수신할 수 있다. RAID 엔진(1221)은 복수의 스트라이프(S11, S12, S13)에 기초하여 패리티(P13)를 생성할 수 있다. 복수의 스트라이프(S11, S12, S13) 중 일부가 손실되거나 손상되는 경우, 패리티(P13)는 손실 또는 손상된 스트라이프를 복원 또는 복구하기 위해 이용될 수 있다.
RAID 엔진(1221)은 복수의 스트라이프(S11, S12, S13)에 기초하여 패리티(P13)를 생성하기 위해, 다양한 연산들을 수행할 수 있다. 제1 메모리(1222), 및/또는 제2 메모리(1223)는 연산들이 수행되는 동안 생성/처리되는 중간 결과물들 저장하거나 버퍼링 할 수 있다. 예로서, RAID 엔진(1221)은 패리티(P13)를 생성하는 동안 발생하는 중간 결과물들을 제1 메모리(1222)에 버퍼링할 수 있다. 만약, 컨트롤러(1220)의 동작에 에러가 발생하는 경우, RAID 엔진(1221)은 제1 메모리(1222)에 저장된 중간 결과물들을 제2 메모리(1223)로 이동시킬 수 있다. 이에 대해서는 도 5 및 도 16을 참조하여 설명된다.
복수의 스트라이프(S11, S12, S13) 및 패리티(P13)는 불휘발성 메모리들(1211, 1212, 1213, 1214)로 분산하여 저장될 수 있다. 예로서, 컨트롤러(1220)는 불휘발성 메모리들(1211, 1212, 1213, 1214)로 각각 복수의 스트라이프(S11, S12, S13) 및 패리티(P13)를 저장할 수 있다.
패리티(P13)는 불휘발성 메모리들(1211, 1212, 1213, 1214) 중 적어도 하나에 에러가 발생하는 경우, 에러가 발생한 불휘발성 메모리에 포함되는 스트라이프에 해당하는 데이터 청크는 손상될 수 있다. 이 같은 경우, 컨트롤러(1220)는 복수의 스트라이프(S11, S12, S13) 중 손상되지 않은 스트라이프들, 및 패리티(P13)에 기초하여 손상된 스트라이프에 해당하는 데이터 청크를 복원할 수 있다. RAID 방식은 스토리지 장치(1300)의 신뢰성을 향상시킬 수 있다.
도 4는 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다. 도 5는 스토리지 장치에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 4를 참조하면, RAID 엔진(1221)은 복수의 스트라이프(S11, S12, S13)를 수신할 수 있다. RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 제1 스트라이프(S11), 제2 스트라이프(S12), 및 제3 스트라이프(S13) 순서로 복수의 스트라이프(S11, S12, S13)를 각각 수신할 수 있다.
RAID 엔진(1221)은 복수의 스트라이프(S11, S12, S13)에 기초하여 패리티(P13)를 생성하기 위해, 패리티 연산을 수행할 수 있다. 예로서, 패리티 연산은 비트 단위의(Bitwise) 배타적 논리 합(Exclusive Logical OR) 연산을 포함할 수 있다. RAID 엔진(1221)은 패리티 연산을 수행하기 위한 연산기(Operator)를 포함할 수 있다.
제1 메모리(1222)는 RAID 엔진(1221)에서 산출되는 중간 패리티 및/또는 최종 패리티를 저장할 수 있다. 예로서, 중간 패리티는 최종 패리티가 산출되는 동안 생성되는 중간 결과들을 의미할 수 있고, 최종 패리티는 복수의 불휘발성 메모리(1210)에 저장되는 패리티를 의미할 수 있다.
제2 메모리(1223)는 RAID 엔진(1221)에서 산출되는 중간 패리티를 저장할 수 있다. 만약, RAID 엔진(1221)이 최종 패리티를 생성하는 동안, 컨트롤러(1220)의 동작에 에러가 발생하는 경우, 제1 메모리(1222)에 저장되어 있던 중간 패리티는 제2 메모리(1223)로 이동될 수 있다. 이는 도 5 내지 도 7을 참조하여 설명된다.
도 5 및 도 4를 참조하면, 시각 t11에서, RAID 엔진(1221)은 제1 스트라이프(S11)를 수신할 수 있다. RAID 엔진(1221)은 제1 스트라이프 (S11)에 기초하여 중간 패리티(P11)를 생성할 수 있다. 예로서, 중간 패리티(P11)는 제1 스트라이프(S11)와 실질적으로 동일할 수 있다. 시각 t12에서, 중간 패리티(P11)는 제1 메모리(1222)에 저장될 수 있고, 제1 스트라이프(S11)는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
시각 t13에서, RAID 엔진(1221)은 제2 스트라이프(S12)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)로부터 중간 패리티(P11)를 수신할 수 있다. RAID 엔진(1221)은 제2 스트라이프(S12) 및 중간 패리티(P11)에 대해 패리티 연산을 수행하여 중간 패리티(P12)를 생성할 수 있다. 시각 t14에서, RAID 엔진(1221)은 중간 패리티(P12)를 제1 메모리(1222)에 저장할 수 있다. 그리고, RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제2 스트라이프(S12)를 저장할 수 있다.
시각 t15에서, RAID 엔진(1221)은 제3 스트라이프(S13)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)로부터 중간 패리티(P12)를 수신할 수 있다. RAID 엔진(1221)은 제3 스트라이프(S13) 및 중간 패리티(P12)에 대해 패리티 연산을 수행하여 최종 패리티(P13)(또는, 패리티(P13))를 생성할 수 있다. 시각 t16에서, RAID 엔진(1221)은 패리티(P13)를 제1 메모리(1222)에 저장할 수 있다. RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제3 스트라이프(S13) 를 저장할 수 있다. 그리고, 제1 메모리(1222)는 복수의 불휘발성 메모리(1210)에 패리티(P13)를 저장할 수 있다.
도 6은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다. 도 7은 도 6의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 5를 참조하면, RAID 엔진(1221)은 복수의 스트라이프(S11, S12, S13)를 수신할 수 있다. RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 제1 스트라이프(S11), 제2 스트라이프(S12), 및 제3 스트라이프(S13) 순서로 복수의 스트라이프(S11, S12, S13)를 각각 수신할 수 있다.
예로서, 제2 스트라이프(S12)의 입력과 제3 스트라이프(S13)의 입력 사이에서 시간 딜레이(time delay, td)가 발생할 수 있다. 호스트(1100)의 제3 스트라이프(S13)의 출력이 지연됨에 따라 시간 딜레이(td)가 발생할 수 있다. 또는, 제1 내지 제3 스트라이프들(S11, S12, S13)이 컨트롤러(12200)로 수신된 후, 컨트롤러(1220)의 하드웨어 구성 또는 소프트웨어 구성에서 에러가 발생하는 경우, 시간 딜레이(td)가 발생할 수 있다.
시간 딜레이(td)가 기준 시간보다 길어지는 경우, RAID 엔진(1221)의 패리티 연산은 중지될 수 있다. 그리고, 도 7 참조하면, 제1 메모리(1222)에 저장된 중간 패리티는 제2 메모리(1223)로 이동될 수 있다. 좀 더 구체적으로, 제1 메모리(1222)에 저장된 제2 스트라이프(S12)에 대해 생성된 중간 패리티(P12)는 제2 메모리(1223)로 이동될 수 있다. 그리고, 다른 스트라이프 세트에 대한 패리티 연산을 수행하기 위해, 제1 메모리(1222)의 중간 패리티(P12)는 삭제될 수 있다.
도 8은 도 6의 RAID 엔진에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 순서도이다. 도 6 및 도 8을 참조하면, S110 단계에서, RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)와 관련하여 처음으로 처리되는 스트라이프를 수신할 수 있다.
S115 단계에서, RAID 엔진(1221)은 스트라이프에 기초하여 중간 패리티를 생성할 수 있고, 생성된 중간 패리티는 제1 메모리(1222)에 저장될 수 있다. S120 단계에서, RAID 엔진(1221)은 패리티 연산을 중지해야 하는 상황이 발생하였는지 판단할 수 있다. 예로서, 컨트롤러(1220) 동작에 에러가 발생하는 경우, RAID 엔진(1221)의 패리티 연산은 중지될 수 있다. 컨트롤러(1220) 동작에 에러가 발생하는 경우, 스트라이프에 대응하는 데이터가 처리되지 못할 수 있다. 또는, 컨트롤러(1220)로 스트라이프의 수신이 딜레이 되는 경우, RAID 엔진(1221)의 패리티 연산은 중지될 수 있다.
RAID 엔진(1221)에서 패리티 연산을 중지해야 하는 상황이 발생하는 경우(Yes), S125 단계에서, RAID 엔진(1221)은 패리티 연산을 중단한다. 패리티 연산이 중단되고, S130 단계에서, 제1 메모리(1222)에 저장된 중간 패리티는 제2 메모리(1223)로 이동될 수 있다. 그리고, RAID 엔진(1221)의 패리티 연산은 종료될 수 있다.
RAID 엔진(1221)에서 패리티 연산을 중지해야 하는 상황이 발생하지 않는 경우(Yes), S135 단계에서, RAID 엔진(1221)은 수신된 스트라이프 및 제1 메모리(1222)에 저장된 중간 패리티에 기초하여 중간 패리티를 생성할 수 있다. 그리고, RAID 엔진(1221)은 생성된 중간 패리티를 제1 메모리(1222)에 저장할 수 있다.
S140 단계에서, 컨트롤러(1220)는 제1 스트라이프 세트(S_SET1)의 마지막 스트라이프가 수신되었는지 판단할 수 있다. 예로서, RAID 엔진(1221)은 데이터 관리기(1226, 도 2에 도시)로부터 스트라이프의 순서에 대한 정보를 수신할 수 있다. 수신된 스트라이프가 제1 스트라이프 세트(S_SET1)에 대해 마지막으로 수신되는 스트라이프가 아닌 경우(No), RAID 엔진(1221)은 S135 단계에서 수신된 스트라이프 및 제1 메모리(1222)에 저장된 중간 패리티에 기초하여 중간 패리티를 생성할 수 있다.
수신된 스트라이프가 제1 스트라이프 세트(S_SET1)에 대해 마지막으로 수신되는 스트라이프인 경우(Yes), S145 단계에서, RAID 엔진(1221)은 마지막 스트라이프 및 제1 메모리(1222)에 저장된 중간 패리티에 기초하여 패리티(예로서, 최종 패리티)를 생성할 수 있다. 그리고 생성된 패리티는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
도 9는 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다. 도 10은 도 9의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 9를 참조하면, 제1 스트라이프 세트(S_SET1)에 대한 모든 스트라이프들(예로서, S11, S12, S13)이 RAID 엔진(1221)으로 수신되지 못하고, 일부 스트라이프들(예로서, S11, S12)만 RAID 엔진(1221)으로 수신될 수 있다. 그리고, 제1 스트라이프 세트(S_SET1)의 일부 스트라이프들(예로서, S11, S12)이 RAID 엔진(1221)으로 수신된 상태에서, 제2 스트라이프 세트(S_SET2)에 대한 스트라이프들(S21, S22, S23)이 RAID 엔진(1221)으로 수신될 수 있다. RAID 엔진(1221)의 패리티 생성 및 저장하는 방법에 대해서 도 9를 참조하여 설명된다.
도 9 및 도 10을 참조하면, 시각 t21에서, RAID 엔진(1221)은 제1 스트라이프(S11)를 수신할 수 있다. RAID 엔진(1221)은 제1 스트라이프(S11)에 기초하여 중간 패리티(P11)를 생성할 수 있다. 예로서, 중간 패리티(P11)는 제1 스트라이프(S11)와 실질적으로 동일할 수 있다. 시각 t22에서, 중간 패리티(P11)는 제1 메모리(1222)에 저장될 수 있고, 제1 스트라이프(S11)는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
시각 t23에서, RAID 엔진(1221)은 제2 스트라이프(S12)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)로부터 중간 패리티(P11)를 수신할 수 있다. RAID 엔진(1221)은 제2 스트라이프(S12) 및 중간 패리티(P11)에 대해 패리티 연산을 수행하여 중간 패리티(P12)를 생성할 수 있다. 시각 t24에서, RAID 엔진(1221)은 중간 패리티(P12)를 제1 메모리(1222)에 저장할 수 있다. 그리고, RAID 엔진(1221)은 제2 스트라이프(S12)를 복수의 불휘발성 메모리(1210)에 저장할 수 있다.
시각 t25에서, RAID 엔진(1221)은 제2 스트라이프 세트(S_SET2)에 대한 제1 스트라이프(S21)를 수신할 수 있다. 제1 스트라이프 세트(S_SET1)가 모두 수신되지 않은 상태에서, 제2 스트라이프 세트(S_SET2)가 수신되었다. 이로 인해, RAID 엔진(1221)의 패리티 연산은 중지될 수 있다.
시각 t26에서, 중간 패리티(P12)는 제1 메모리(1222)에서 제2 메모리(1223)로 이동될 수 있다. 그리고, RAID 엔진(1221)에서 제2 스트라이프 세트(S_SET2)의 스트라이프들(S21, S22, S23)에 대해 패리티 연산이 수행되도록, 제1 메모리(1222)에 저장된 중간 패리티(P12)는 삭제될 수 있다.
시각 t27에서, RAID 엔진(1221)은 제1 스트라이프(S21)에 기초하여 중간 패리티(P21)를 생성할 수 있다. 예로서, 중간 패리티(P21)는 제1 스트라이프(S21)와 실질적으로 동일할 수 있다. 시각 t28에서, 중간 패리티(P21)는 제1 메모리(1222)에 저장될 수 있고, 제1 스트라이프(S21)는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
시각 t29에서, RAID 엔진(1221)은 제2 스트라이프(S22)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)로부터 중간 패리티(P21)를 수신할 수 있다. RAID 엔진(1221)은 제2 스트라이프(S22) 및 중간 패리티(P21)에 대해 패리티 연산을 수행하여 중간 패리티(P22)를 생성할 수 있다. 시각 t30에서, RAID 엔진(1221)은 중간 패리티(P22)를 제1 메모리(1222)에 저장할 수 있다. 그리고, RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제2 스트라이프(S22)를 저장할 수 있다.
시각 t31에서, RAID 엔진(1221)은 제3 스트라이프(S23)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)로부터 중간 패리티(P22)를 수신할 수 있다. RAID 엔진(1221)은 제3 스트라이프(S23) 및 중간 패리티(P22)에 대해 패리티 연산을 수행하여 최종 패리티(P23)(또는, 패리티(P23))를 생성할 수 있다. 시각 t32에서, RAID 엔진(1221)은 패리티(P33)를 제1 메모리(1222)에 저장할 수 있다. RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제3 스트라이프(S23)를 저장할 수 있다. 그리고, 제1 메모리(1222)는 복수의 불휘발성 메모리(1210)에 패리티(P23)를 저장할 수 있다.
컨트롤러(1220)로 데이터의 수신이 딜레이 되거나, 컨트롤러(1220) 내부의 동작에 에러가 발생하는 경우, 본 발명의 실시 예에 따른 RAID 엔진(1221)은 수신되는 스트라이프 세트에 대한 패리티 연산을 중단할 수 있다. 그리고, 제1 메모리(1222)에 저장되는 중간 패리티는 제2 메모리(1223)로 이동될 수 있다. 제1 메모리(1222)에 저장된 중간 패리티는 삭제되고, RAID 엔진(1221)은 다른 스트라이프 세트에 대한 패리티 연산을 수행할 수 있도록 준비될 수 있다. 따라서, 패리티를 생성하는 데에 대한 레이턴시가 감소할 수 있고, 스토리지 장치(1200)의 성능이 향상될 수 있다.
도 11은 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다. 도 12는 도 11의 RAID 엔진에서 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다. 도 13은 도 11의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다.
도 11을 참조하면, 컨트롤러(1220)로 데이터가 정상적으로 수신되거나, 컨트롤러(1220)에서 발생된 에러가 해결되는 경우, 제1 스트라이프 세트(S_SET1)에 대한 패리티가 다시 RAID 엔진(1221)으로 수신될 수 있다. 예로서, 도 9를 참조하면, 제2 스트라이프 세트(S_SET2)에 대한 스트라이프들(S21, S22, S23)의 패리티 연산이 완료된 후, 다시 RAID 엔진(12210)으로 제1 스트라이프 세트(S_SET1)에 대한 패리티가 수신될 수 있다. RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산을 재개할 수 있다. 제3 스트라이프(S13)는 제1 스트라이프 세트(S_SET1)에 대해 마지막으로 처리되는 스트라이프이므로, RAID 엔진(12210)은 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산을 한 번만 수행할 수 있다.
도 12를 참조하면, RAID 엔진(12210)은 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산을 재개할 수 있다. 패리티 연산을 재개하기 위해서, 제2 메모리(1223)에 저장된 중간 패리티(P12)는 제1 메모리(1222)로 이동될 수 있다. RAID 엔진(12210)의 패리티를 생성하는 과정은 도 13을 참조하여 더 설명된다.
도 11 및 도 13을 참조하면, 시각 t41에서, 제3 스트라이프(S13)가 RAID 엔진(12210)으로 수신될 수 있다. 시각 t42에서, 중간 패리티(P12)는 제2 메모리(1223)에서 제1 메모리(1222)로 이동될 수 있다.
시각 t43에서, RAID 엔진(12210)은 제3 스트라이프(S13) 및 중간 패리티(P12)에 대해 패리티 연산을 수행하여 최종 패리티(P13)(또는, 패리티(P13))를 생성할 수 있다. 시각 t44에서, RAID 엔진(12210)은 패리티(P13)를 제1 메모리(1222)에 저장할 수 있다. RAID 엔진(12210)은 복수의 불휘발성 메모리(1210)에 제3 스트라이프(S13)를 저장할 수 있다. 그리고, 제1 메모리(1222)는 복수의 불휘발성 메모리(1210)에 패리티(P13)를 저장할 수 있다.
도 14는 도 11의 RAID 엔진에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 순서도이다. S210 단계에서, 컨트롤러(1220)는 RAID 엔진(12210)에서 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산을 재개할 수 있는지 판단할 수 있다. 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산을 재개할 수 있는 경우(Yes), RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)의 스트라이프를 수신할 수 있다. 예로서, 수신된 스트라이프는 제1 스트라이프 세트(S_SET1)에 대한 스트라이프들 중 처리되지 못한 스트라이프일 수 있다.
S220 단계에서, 제2 메모리(1223)에 저장된 중간 패리티는 제1 메모리(1222)로 이동될 수 있다. 예로서, 제2 메모리(1223)에 저장된 중간 패리티는 수신된 스트라이프 이전에 수신되었던 스트라이프에 대한 패리티 연산의 결과이다.
S230 단계에서, RAID 엔진(1221)은 수신된 스트라이프 및 중간 패리티에 기초하여 중간 패리티를 생성할 수 있고, 생성된 중간 패리티는 제1 메모리(1222)에 저장될 수 있다.
S240 단계에서, 컨트롤러(1220)는 제1 스트라이프 세트(S_SET1)의 마지막 스트라이프가 수신되었는지 판단할 수 있다. 예로서, RAID 엔진(1221)은 데이터 관리기(1226, 도 2에 도시)로부터 스트라이프의 순서에 대한 정보를 수신할 수 있다.
수신된 스트라이프가 제1 스트라이프 세트(S_SET1)에 대해 마지막으로 수신되는 스트라이프가 아닌 경우(No), RAID 엔진(1221)은 S230 단계에서 수신된 스트라이프 및 제1 메모리(1222)에 저장된 중간 패리티에 기초하여 중간 패리티를 생성할 수 있다. 수신된 스트라이프가 제1 스트라이프 세트(S_SET1)에 대해 마지막으로 수신되는 스트라이프인 경우(Yes), S250 단계에서, RAID 엔진(1221)은 마지막 스트라이프 및 제1 메모리(1222)에 저장된 중간 패리티에 기초하여 패리티(예로서, 최종 패리티)를 생성할 수 있다. 그리고 생성된 패리티는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
도 15는 도 1의 스토리지 장치에서 RAID 방식을 이용하여 스트라이프 세트를 처리하는 방법을 보여주기 위한 블록도이다. 도 15를 참조하면, 제1 스트라이프 세트(S_SET1)에 대한 스트라이프들(S11, S12, S13) 및 제2 스트라이프 세트(S_SET2)에 대한 스트라이프들(S21, S22, S23)은 RAID 엔진(1221)으로 비순차적으로 입력될 수 있다.
예로서, 제1 스트라이프 세트(S_SET1)에 대한 제1 스트라이프(S11), 제2 스트라이프(S12), 제2 스트라이프 세트(S_SET2)에 대한 제1 스트라이프(S21), 제2 스트라이프(S22), 및 제1 스트라이프 세트(S_SET1)에 대한 제3 스트라이프(S13) 마지막으로 제2 스트라이프 세트(S_SET2)에 대한 제3 스트라이프(S23) 순서로 입력될 수 있다. 스트라이프들이 RAID 엔진(1221)으로 비순차적으로 입력되는 경우, 패리티의 생성되는 과정은 도 16를 참조하여 설명된다.
제1 메모리(1222)는 복수의 메모리 영역(1222_1, 1222_2)으로 구분될 수 있다. 복수의 메모리 영역(1222_1, 1222_2)은 각각 제1 스트라이프 세트(S_SET1)에 대한 중간 패리티 및 제2 스트라이프 세트(S_SET2)에 대한 중간 패리티를 저장할 수 있다. 그리고, 제2 메모리(1223)는 복수의 메모리 영역(1223_1, 1223_2)으로 구분될 수 있다. 복수의 메모리 영역(1223_1, 1223_2)은 각각 제1 메모리(1222)의 복수의 메모리 영역(1222_1, 1222_2)으로부터 수신되는 중간 패리티를 저장할 수 있다. 도 15의 제1 및 제2 메모리들(1222, 1223)은 각각 두 개의 메모리 영역을 보여주지만, 본 발명은 이에 한정되지 않고, 메모리 영역들의 개수는 다양하게 변경 또는 수정될 수 있다.
도 16은 도 15의 RAID 엔진에서 패리티를 생성하는 예시적인 과정을 보여주기 위한 개념도이다. 도 17a 내지 도 17c는 도 15의 스트라이프 세트를 처리하는 방법에 따라 제1 메모리 및 제2 메모리 사이에서 이동되는 중간 패리티에 대해 예시적으로 보여주기 위한 블록도이다.
도 16 및 도 15를 참조하면, 시각 t51에서, RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 제1 스트라이프(S11)를 수신할 수 있다. RAID 엔진(1221)은 제1 스트라이프(S11)에 기초하여 중간 패리티(P11)를 생성할 수 있다. 예로서, 중간 패리티(P11)는 제1 스트라이프(S11)와 실질적으로 동일할 수 있다. 시각 t52에서, 중간 패리티(P11)는 제1 메모리(1222)의 제1 메모리 영역(1222_1) 저장될 수 있고, 제1 스트라이프(S11)는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
시각 t53에서, RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 제2 스트라이프(S12)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)의 제1 메모리 영역(1222_1)으로부터 중간 패리티(P11)를 수신할 수 있다. RAID 엔진(1221)은 제2 스트라이프(S12) 및 중간 패리티(P11)에 대해 패리티 연산을 수행하여 중간 패리티(P12)를 생성할 수 있다. 시각 t54에서, RAID 엔진(1221)은 중간 패리티(P12)를 제1 메모리(1222)의 제1 메모리 영역(1222_1)에 저장할 수 있다. 그리고, RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제2 스트라이프(S12)를 저장할 수 있다.
시각 t55에서, RAID 엔진(1221)은 제2 스트라이프 세트(S_SET2)에 대한 제1 스트라이프(S21)를 수신할 수 있다. 제1 스트라이프 세트(S_SET1)가 모두 수신되지 않은 상태에서, 제2 스트라이프 세트(S_SET2)가 수신되었다. 이로 인해, RAID 엔진(1221)의 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산은 중지된다.
도 17a를 함께 참조하면, 시각 t56에서, 제1 메모리(1222)의 제1 메모리 영역(1222_1)에 저장된 중간 패리티(P12)는 제2 메모리(1223)의 제1 메모리 영역(1223_1)으로 이동될 수 있다(①). 그리고, RAID 엔진(1221)에서 제2 스트라이프 세트(S_SET2)의 스트라이프들(S21, S22, S23)에 대해 패리티 연산이 수행되기 위해, 제1 메모리(1222)에 저장된 중간 패리티(P12)는 삭제될 수 있다.
시각 t57에서, RAID 엔진(1221)은 제1 스트라이프(S21)에 기초하여 중간 패리티(P21)를 생성할 수 있다. 예로서, 중간 패리티(P21)는 제1 스트라이프(S21)와 실질적으로 동일할 수 있다. 시각 t58에서, 중간 패리티(P21)는 제1 메모리(1222)의 제2 메모리 영역(1222_2)에 저장될 수 있고, 제1 스트라이프(S21)는 복수의 불휘발성 메모리(1210)에 저장될 수 있다.
시각 t59에서, RAID 엔진(1221)은 제2 스트라이프(S22)를 수신할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)의 제2 메모리 영역(1222_2)로부터 중간 패리티(P21)를 수신할 수 있다. RAID 엔진(1221)은 제2 스트라이프(S22) 및 중간 패리티(P21)에 대해 패리티 연산을 수행하여 중간 패리티(P22)를 생성할 수 있다. 시각 t60에서, RAID 엔진(1221)은 중간 패리티(P22)를 제1 메모리(1222)의 제2 메모리 영역(1222_2)에 저장할 수 있다. 그리고, RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)로 제2 스트라이프(S22)를 저장할 수 있다.
시각 t61에서, RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 제3 스트라이프(S13)를 수신할 수 있다 RAID 엔진(1221)은 제1 스트라이프 세트(S_SET1)에 대한 패리티 연산을 재개할 수 있다. RAID 엔진(1221)은 제3 스트라이프(S13)대한 패리티 연산을 수행하기 위해, 제2 스트라이프 세트(S_SET2)에 대한 패리티 연산을 중지할 수 있다.
도 17b를 함께 참조하면, 시각 t62에서, 제2 메모리(1223)의 제1 메모리 영역(1223_1)에 저장된 제1 스트라이프 세트(S_SET1)에 대한 중간 패리티(P12)는 제1 메모리(1222)의 제1 메모리 영역(1222_1)으로 이동될 수 있다(②). 그리고, 제1 메모리(1222)의 제2 메모리 영역(1222_2)에 저장된 제2 스트라이프 세트(S_SET2)에 대한 중간 패리티(P22)는 제2 메모리(1223)의 제2 메모리 영역(1223_2)로 이동될 수 있다(③). 제1 메모리(1222) 및 제2 메모리(1223) 사이에서 중간 패리티들의 이동은 동시에 수행될 수 있다.
시각 t63에서, RAID 엔진(1221)은 제1 메모리(1222)의 제1 메모리 영역(1222_1)으로부터 중간 패리티(P12)를 수신할 수 있다. RAID 엔진(1221)은 제3 스트라이프(S13) 및 중간 패리티(P12)에 대해 패리티 연산을 수행하여 최종 패리티(P13)(또는, 패리티(P13))를 생성할 수 있다. 시각 t64에서, RAID 엔진(1221)은 패리티(P13)를 제1 메모리(1222)의 제1 메모리 영역(1222_1)에 저장할 수 있다 RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제3 스트라이프(S13)를 저장할 수 있다. 그리고, 제1 메모리(1222)는 복수의 불휘발성 메모리(1210)에 패리티(P13)를 저장할 수 있다.
시각 t65에서, RAID 엔진(1221)은 제2 스트라이프 세트(S_SET12)에 대한 제3 스트라이프(S23)를 수신할 수 있다 RAID 엔진(1221)은 제2 스트라이프 세트(S_SET2)에 대한 패리티 연산을 재개할 수 있다. 도 17c를 함께 참조하면, 2 스트라이프 세트(S_SET2)에 대한 패리티 연산을 재개하기 위해, 제2 메모리(1223)의 제2 메모리 영역(1223_2)에 저장된 중간 패리티(P22)는 제1 메모리(1222)의 제2 메모리 영역(1222_2)으로 이동될 수 있다(④).
시각 t66에서, RAID 엔진(1221)은 제1 메모리(1222)의 제2 메모리 영역(1222_2)으로부터 중간 패리티(P22)를 수신할 수 있다. RAID 엔진(1221)은 제3 스트라이프(S23) 및 중간 패리티(P22)에 대해 패리티 연산을 수행하여 최종 패리티(P23)(또는, 패리티(P13))를 생성할 수 있다. 시각 t67에서, RAID 엔진(1221)은 패리티(P23)를 제1 메모리(1222)의 제2 메모리 영역(1222_2)에 저장할 수 있다 RAID 엔진(1221)은 복수의 불휘발성 메모리(1210)에 제3 스트라이프(S23)를 저장할 수 있다. 그리고, 제1 메모리(1222)는 복수의 불휘발성 메모리(1210)에 패리티(P23)를 저장할 수 있다.
컨트롤러(1220)로 스트라이프의 수신이 딜레이 되거나, 컨트롤러(1220) 내부에 발생하는 에러에 의해 스트라이프의 흐름이 제어되지 않는 경우, 본 발명의 실시 예에 따른 RAID 엔진(1221)은 수신되는 스트라이프 세트에 대한 패리티 연산을 중단할 수 있다. 그리고, RAID 엔진(1221)은 제1 메모리(1222)에 저장되는 패리티 연산 중 생성되는 중간 패리티를 제2 메모리(1223)로 이동시킬 수 있다. RAID 엔진(1221)은 제1 메모리(1222)에 저장된 중간 패리티를 삭제하고, 다른 스트라이프 세트에 대한 패리티 연산을 수행할 수 있도록 준비될 수 있다. 그리고, 컨트롤러(1220)로 데이터가 정상적으로 수신되거나, 컨트롤러(1220)에서 발생된 에러가 해결되는 경우, RAID 엔진(1221)은 패리티 연산을 재개할 수 있다. 따라서, 패리티를 생성하는 데에 대한 레이턴시가 감소할 수 있고, 스토리지 장치(1200)의 성능이 향상될 수 있다.
위에서 설명된 내용은 본 발명의 기술 사상을 구현하기 위한 구체적인 예들이다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 용이하게 변경하여 얻어질 수 있는 실시 예들도 포함할 것이다. 또한, 본 발명의 기술 사상에는 위에서 설명된 실시 예들에 기초하여 앞으로 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
Claims (10)
- 스트라이프 세트(Stripe Set)에 대한 제1 및 제2 스트라이프(Strip)들을 분산하여 저장하도록 구성되는 복수의 불휘발성 메모리; 및
호스트로부터 상기 제1 및 제2 스트라이프들을 수신하고, 상기 제1 및 제2 스트라이프들을 상기 복수의 불휘발성 메모리로 분산하여 저장하고, 상기 제1 및 제2 스트라이프들에 기초하여 패리티 연산을 수행하는 컨트롤러를 포함하되,
상기 컨트롤러는 상기 제1 스트라이프에 기초하여 중간 패리티를 생성하고,
상기 중간 패리티를 상기 컨트롤러 내부의 제1 메모리에 저장하고,
상기 패리티 연산이 중단되는 경우, 상기 제1 메모리에 저장된 상기 중간 패리티를 상기 컨트롤러 내부의 제2 메모리로 이동시키는 스토리지 장치. - 제 1 항에 있어서,
상기 컨트롤러는 상기 패리티 연산을 수행하기 위한 RAID 엔진을 포함하는 스토리지 장치. - 제 2 항에 있어서,
상기 RAID 엔진이 제1 및 제2 스트라이프들에 기초하여 패리티 연산을 수행하는 중에 상기 컨트롤러의 동작에 에러가 발생하는 경우, 상기 패리티 연산이 중단되고, 상기 제1 메모리에 저장된 상기 중간 패리티는 상기 제2 메모리로 이동되는 스토리지 장치. - 제 2 항에 있어서,
상기 제1 스트라이프 다음에 상기 제2 스트라이프가 기준 시간 이내에 수신되지 않는 경우, 상기 RAID 엔진은 상기 패리티 연산을 중단하고,
상기 제1 메모리에 저장된 상기 중간 패리티는 상기 제2 메모리로 이동되는 스토리지 장치. - 제 4 항에 있어서,
상기 스트라이프 세트는 제1 스트라이프 세트고,
상기 호스트로부터 상기 제1 스트라이프 세트와 다른 제2 스트라이프 세트에 대한 제3 및 제4 스트라이프들이 상기 컨트롤러로 수신되는 경우, 상기 RAID 엔진은 상기 제3 및 제4 스트라이프들에 기초하여 상기 패리티 연산을 수행하는 스토리지 장치. - 제 5 항에 있어서,
상기 RAID 엔진은
상기 제3 스트라이프에 기초하여 제1 중간 패리티를 생성하고,
상기 제1 중간 패리티를 상기 제1 메모리에 저장하고,
상기 제3 스트라이프 다음에 수신되는 상기 제4 스트라이프가 상기 제2 스트라이프 세트에 관련하여 마지막으로 처리되는 스트라이프인 경우, 상기 제4 스트라이프 및 상기 제1 메모리에 저장되는 상기 제1 중간 패리티에 기초하여 상기 제2 스트라이프 세트에 대한 패리티를 생성하고, 상기 제2 스트라이프 세트에 대한 패리티를 상기 제1 메모리에 저장하는 스토리지 장치. - 제 1 항에 있어서,
상기 패리티 연산이 재개되는 경우, 상기 컨트롤러는 상기 제2 메모리에 저장된 상기 중간 패리티를 상기 제1 메모리로 이동시키는 스토리지 장치. - 제1 스트라이프 세트(Stripe Set)에 대한 제1 및 제2 스트라이프(Strip)들 및 제2 스트라이프 세트에 대한 제3 스트라이프를 각각 분산하여 저장하도록 구성되는 복수의 불휘발성 메모리; 및
호스트로부터 상기 제1 및 제2 스트라이프들 및 상기 제3 스트라이프를 수신하고, 상기 제1 및 제2 스트라이프들 및 상기 제3 스트라이프를 상기 복수의 불휘발성 메모리로 분산하여 저장하기 위한 컨트롤러를 포함하되,
상기 컨트롤러는 상기 제1 스트라이프에 기초하여 제1 중간 패리티를 생성하고,
상기 제1 중간 패리티를 상기 컨트롤러 내부의 제1 메모리에 저장하고,
상기 제1 스트라이프 다음에 상기 제2 스트라이프 대신 상기 제3 스트라이프가 수신되는 경우, 상기 제1 메모리에 저장된 상기 제1 중간 패리티를 상기 컨트롤러 내부의 제2 메모리로 이동시키고,
상기 제3 스트라이프에 기초하여 제2 중간 패리티를 생성하고,
상기 제2 중간 패리티를 상기 제1 메모리에 저장하는 스토리지 장치. - 제 8 항에 있어서,
상기 컨트롤러는:
상기 제1 스트라이프에 기초하여 상기 제1 중간 패리티를 생성하고, 상기 제1 중간 패리티를 상기 제1 메모리에 저장하고, 상기 제3 스트라이프에 기초하여 상기 제2 중간 패리티를 생성하고, 상기 제2 중간 패리티를 상기 제1 메모리에 저장하도록 구성되는 RAID 엔진을 포함하는 스토리지 장치. - 제 9 항에 있어서,
상기 컨트롤러는 상기 제3 스트라이프 다음에 상기 상기 제2 스트라이프 세트에 대한 제4 스트라이프 대신 상기 제2 스트라이프가 수신되는 경우, 상기 제1 메모리에 저장된 상기 제2 중간 패리티를 상기 제2 메모리로 이동시키고,
상기 제2 메모리에 저장된 상기 제1 중간 패리티를 상기 제1 메모리로 이동시키는 스토리지 장치.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160147673A KR102703983B1 (ko) | 2016-11-07 | 2016-11-07 | Raid 방식으로 데이터를 저장하는 스토리지 장치 |
US15/711,129 US10521152B2 (en) | 2016-11-07 | 2017-09-21 | Storage device storing data in raid manner |
CN201710986336.3A CN108073357B (zh) | 2016-11-07 | 2017-10-20 | 以raid方式存储数据的存储装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160147673A KR102703983B1 (ko) | 2016-11-07 | 2016-11-07 | Raid 방식으로 데이터를 저장하는 스토리지 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180051703A KR20180051703A (ko) | 2018-05-17 |
KR102703983B1 true KR102703983B1 (ko) | 2024-09-10 |
Family
ID=62063949
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160147673A KR102703983B1 (ko) | 2016-11-07 | 2016-11-07 | Raid 방식으로 데이터를 저장하는 스토리지 장치 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10521152B2 (ko) |
KR (1) | KR102703983B1 (ko) |
CN (1) | CN108073357B (ko) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018229944A1 (ja) * | 2017-06-15 | 2018-12-20 | 株式会社日立製作所 | ストレージシステム及びストレージシステムの制御方法 |
US10353606B2 (en) * | 2017-10-12 | 2019-07-16 | International Business Machines Corporation | Partial data replay in a distributed memory buffer system |
TWI661307B (zh) * | 2017-12-06 | 2019-06-01 | 慧榮科技股份有限公司 | 資料儲存裝置、主機裝置、以及資料寫入方法 |
US10838805B2 (en) * | 2018-02-23 | 2020-11-17 | Micron Technology, Inc. | Generating parity data based on a characteristic of a stream of data |
CN108920094B (zh) * | 2018-06-01 | 2021-06-08 | 深圳忆联信息系统有限公司 | 擦除单元raid方法、装置、计算机设备及存储介质 |
CN109189340B (zh) * | 2018-08-29 | 2021-11-09 | 上海兆芯集成电路有限公司 | 用于存取独立硬盘冗余阵列的系统与方法 |
KR20200108650A (ko) | 2019-03-11 | 2020-09-21 | 삼성전자주식회사 | 스토리지 장치 및 스토리지 장치의 동작 방법 |
US11010247B2 (en) * | 2019-05-24 | 2021-05-18 | Violin Systems Llc | Dynamic memory management system |
CN110908826B (zh) * | 2019-10-16 | 2021-04-20 | 长江存储科技有限责任公司 | 数据处理方法及相关产品 |
CN113906513A (zh) | 2021-08-31 | 2022-01-07 | 长江存储科技有限责任公司 | 用于对抗编程故障的独立磁盘冗余阵列条带化的系统和设备 |
CN114115745B (zh) * | 2021-11-30 | 2023-07-04 | 深圳忆联信息系统有限公司 | 多Pass编程NAND的RAID优化方法、装置及计算机设备 |
US11822429B2 (en) * | 2022-04-08 | 2023-11-21 | Dell Products L.P. | Storage device raid data write intermediate parity system |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010008008A1 (en) * | 1999-12-27 | 2001-07-12 | Yoshiaki Mori | Information recording apparatus and control method thereof |
JP2015518186A (ja) * | 2012-04-27 | 2015-06-25 | 株式会社日立製作所 | ストレージシステム及びストレージ制御装置 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5157670A (en) | 1989-12-04 | 1992-10-20 | Avasem Corporation | Error correction code interruption system |
WO1993023803A1 (fr) * | 1992-05-21 | 1993-11-25 | Fujitsu Limited | Appareil de commande pour pile de disques |
JP3713788B2 (ja) * | 1996-02-28 | 2005-11-09 | 株式会社日立製作所 | 記憶装置および記憶装置システム |
US6912687B1 (en) | 2000-05-11 | 2005-06-28 | Lsi Logic Corporation | Disk array storage subsystem with parity assist circuit that uses scatter-gather list |
KR100463841B1 (ko) * | 2002-02-25 | 2004-12-29 | 한국전자통신연구원 | 레이드 서브 시스템과 이를 이용한 디스크 에러 모드에서데이터 입출력 및 복구 방법 |
US7392428B2 (en) | 2004-11-19 | 2008-06-24 | International Business Machines Corporation | Method and system for recovering from abnormal interruption of a parity update operation in a disk array system |
US7392458B2 (en) | 2004-11-19 | 2008-06-24 | International Business Machines Corporation | Method and system for enhanced error identification with disk array parity checking |
EP2357552A1 (en) | 2006-05-24 | 2011-08-17 | Compellent Technologies | System and method for RAID management, reallocation and restriping |
KR101226685B1 (ko) | 2007-11-08 | 2013-01-25 | 삼성전자주식회사 | 수직형 반도체 소자 및 그 제조 방법. |
US9223514B2 (en) | 2009-09-09 | 2015-12-29 | SanDisk Technologies, Inc. | Erase suspend/resume for memory |
KR101691092B1 (ko) | 2010-08-26 | 2016-12-30 | 삼성전자주식회사 | 불휘발성 메모리 장치, 그것의 동작 방법, 그리고 그것을 포함하는 메모리 시스템 |
US8553466B2 (en) | 2010-03-04 | 2013-10-08 | Samsung Electronics Co., Ltd. | Non-volatile memory device, erasing method thereof, and memory system including the same |
US9536970B2 (en) | 2010-03-26 | 2017-01-03 | Samsung Electronics Co., Ltd. | Three-dimensional semiconductor memory devices and methods of fabricating the same |
KR101682666B1 (ko) | 2010-08-11 | 2016-12-07 | 삼성전자주식회사 | 비휘발성 메모리 장치, 그것의 채널 부스팅 방법, 그것의 프로그램 방법 및 그것을 포함하는 메모리 시스템 |
US8583987B2 (en) | 2010-11-16 | 2013-11-12 | Micron Technology, Inc. | Method and apparatus to perform concurrent read and write memory operations |
US20120167100A1 (en) | 2010-12-23 | 2012-06-28 | Yan Li | Manual suspend and resume for non-volatile memory |
US8756371B2 (en) | 2011-10-12 | 2014-06-17 | Lsi Corporation | Methods and apparatus for improved raid parity computation in a storage controller |
US20150160999A1 (en) * | 2012-07-13 | 2015-06-11 | Samsung Electronics Co., Ltd. | Solid state drive controller, solid state drive, data processing method of solid state drive, multi-channel solid state drive, raid controller and computer-readable recording medium having recorded therein computer program for providing sequence information to solid state drive |
KR101925383B1 (ko) * | 2012-07-23 | 2018-12-05 | 삼성전자주식회사 | 불휘발성 메모리 장치 및 그것의 데이터 관리 방법 |
JP2016530637A (ja) | 2013-08-27 | 2016-09-29 | エージェンシー フォー サイエンス,テクノロジー アンド リサーチ | Raidパリティストライプ再構成 |
CN104956311B (zh) * | 2013-10-09 | 2017-10-17 | 株式会社日立制作所 | 存储系统以及存储控制方法 |
US8949692B1 (en) * | 2014-01-23 | 2015-02-03 | DSSD, Inc. | Method and system for service-aware parity placement in a storage system |
US20150205667A1 (en) * | 2014-01-23 | 2015-07-23 | DSSD, Inc. | Method and system for service-aware data placement in a storage system |
US9891993B2 (en) | 2014-05-23 | 2018-02-13 | International Business Machines Corporation | Managing raid parity stripe contention |
KR102368071B1 (ko) * | 2014-12-29 | 2022-02-25 | 삼성전자주식회사 | 레이드 스토리지 시스템에서의 스트라이프 재구성 방법 및 이를 적용한 가비지 컬렉션 동작 방법 및 레이드 스토리지 시스템 |
US9830093B2 (en) * | 2015-03-27 | 2017-11-28 | Intel Corporation | Method and apparatus for improving immunity to defects in a non-volatile memory |
-
2016
- 2016-11-07 KR KR1020160147673A patent/KR102703983B1/ko active IP Right Grant
-
2017
- 2017-09-21 US US15/711,129 patent/US10521152B2/en active Active
- 2017-10-20 CN CN201710986336.3A patent/CN108073357B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010008008A1 (en) * | 1999-12-27 | 2001-07-12 | Yoshiaki Mori | Information recording apparatus and control method thereof |
JP2015518186A (ja) * | 2012-04-27 | 2015-06-25 | 株式会社日立製作所 | ストレージシステム及びストレージ制御装置 |
Also Published As
Publication number | Publication date |
---|---|
US10521152B2 (en) | 2019-12-31 |
KR20180051703A (ko) | 2018-05-17 |
US20180129451A1 (en) | 2018-05-10 |
CN108073357B (zh) | 2022-07-26 |
CN108073357A (zh) | 2018-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102703983B1 (ko) | Raid 방식으로 데이터를 저장하는 스토리지 장치 | |
US10860508B2 (en) | Offloaded disaggregated storage architecture | |
CN109213440B (zh) | 存储器系统、存储器控制器及其操作方法 | |
US10621081B2 (en) | Storage device and global garbage collection method of data storage system including the same | |
US10127166B2 (en) | Data storage controller with multiple pipelines | |
US11520660B2 (en) | Storage devices hiding parity swapping behavior | |
CN111475427A (zh) | 使用低延迟非易失性存储器进行逻辑至物理映射管理 | |
US10275310B2 (en) | Updating exclusive-or parity data | |
US9703816B2 (en) | Method and system for forward reference logging in a persistent datastore | |
US9632702B2 (en) | Efficient initialization of a thinly provisioned storage array | |
US11853554B2 (en) | Aligned and unaligned data deallocation | |
TW202038086A (zh) | 主機型快閃記憶體維護技術 | |
KR102530583B1 (ko) | 저장 장치 및 메모리 시스템 | |
US11487609B2 (en) | Separating parity data from host data in a memory sub-system | |
KR20220103378A (ko) | 메모리 시스템에 저장된 데이터를 처리하는 장치 및 방법 | |
CN109815157B (zh) | 编程命令处理方法与装置 | |
US11640253B2 (en) | Method to use flat relink table in HMB | |
KR20230036682A (ko) | 인터리빙 동작을 지원하는 메모리 장치, 메모리 시스템 및 그의 동작 방법 | |
CN109002265B (zh) | 一种数据处理的方法以及相关装置 | |
KR20220049230A (ko) | 메모리 시스템에서 비휘발성 메모리 장치 내 오류를 확인하는 장치 및 방법 | |
KR20220032826A (ko) | 메모리 시스템 내 맵 정보를 제어 및 저장하는 장치 및 방법 | |
CN106569908B (zh) | 资料备份系统 | |
US11687275B2 (en) | Method for assigning plurality of channels of storage device for stream data writing, storage device and storage medium | |
KR20240053298A (ko) | 호스트와 메모리 시스템에서 맵데이터를 관리하는 장치 및 방법 | |
KR20230135884A (ko) | 메모리 시스템에서의 데이터 전달하기 위한 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |