KR20220120967A - 스토리지 컨트롤러, 그 동작방법 - Google Patents

스토리지 컨트롤러, 그 동작방법 Download PDF

Info

Publication number
KR20220120967A
KR20220120967A KR1020210024815A KR20210024815A KR20220120967A KR 20220120967 A KR20220120967 A KR 20220120967A KR 1020210024815 A KR1020210024815 A KR 1020210024815A KR 20210024815 A KR20210024815 A KR 20210024815A KR 20220120967 A KR20220120967 A KR 20220120967A
Authority
KR
South Korea
Prior art keywords
sub
error
data
raid
stripe data
Prior art date
Application number
KR1020210024815A
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 KR1020210024815A priority Critical patent/KR20220120967A/ko
Priority to DE102021127814.7A priority patent/DE102021127814A1/de
Priority to US17/517,946 priority patent/US20220269561A1/en
Priority to CN202210155364.1A priority patent/CN114974362A/zh
Publication of KR20220120967A publication Critical patent/KR20220120967A/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/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/142Reconfiguring to eliminate the error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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/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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/24Bit-line control circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents

Abstract

스토리지 컨트롤러를 포함한 스토리지 장치가 제공된다. 스토리지 컨트롤러는, 스토리지 컨트롤러는 RAID로 연결된 복수의 비휘발성 메모리 장치 각각에서 서브 스트라이프 데이터를 리드하고, 적어도 하나의 서브 스트라이프 데이터의 에러 정보를 확인하여, 정정 불가능한 에러가 존재하면 RAID 리커버리 동작을 수행하는 RAID 엔진 및 RAID 리커버리 동작의 연산 결과를 저장하는 RAID 메모리를 포함할 수 있다.

Description

스토리지 컨트롤러, 그 동작방법 {STORAGE Controller , Operation Method thereof}
본 발명은 스토리지 장치, 및 RAID로 구성된 시스템에 관한 것이다.
RAID(Redundant Array of Inexpensive Disk)는 중요한 데이터를 가지고 있는 서버 등의 저장 매체에서 주로 사용되는 방법으로, 단순히 다수의 저장 매체에 데이터를 분산시켜서 한꺼번에 입출력을 수행하거나, 다수의 저장 매체에 동일한 데이터를 복제하여 저장하는 방식, 또는 복수의 저장 매체 중 하나 이상의 저장 매체에 패리티(parity)를 저장하여 다른 저장 매체에 저장된 데이터에서 오류가 발생하더라도 이를 정상적인 데이터로 복원할 수 있는 방식 등 다양한 구성이 가능하다. 이러한 RAID를 이용하면 데이터 손실을 방지하여 데이터의 안정성을 증대하는 것뿐만 아니라 입출력 작업의 균형을 이룰 수 있고 서버의 전체적인 성능이 개선될 수 있다.
한편, 데이터의 완전성을 보장하기 위한 시스템에서는 이러한 RAID의 구성 중 패리티 비트를 분산하여 저장하는 RAID 레벨 5 또는 RAID 레벨 6의 시스템이 사용되고 있다. RAID 레벨 5는 데이터 청크 당 하나의 패리티 비트가 분산되어 저장되는 방식이고, RAID 레벨 6은 데이터 청크 당 두 개의 패리티 비트가 분산되어 저장되는 방식이다. 레벨 5 또는 레벨 6의 RAID 시스템을 이용하는 경우, 각각 하나 또는 두 개의 스페어 스토리지 영역을 포함하여 고장 발생 시 해당 스페어 스토리지 영역에 RAID 리커버리를 수행한다.
이러한 RAID 리커버리 과정은, 패리티 비트 및 전체 RAID 시스템에 포함된 데이터에 접근하여 손실된 데이터를 생성하는 작업이므로, RAID 리커버리 과정에 소요되는 시간이 길어질 뿐만 아니라 리빌드 과정에서의 시스템 자원 사용으로 인해 전체 RAID 시스템의 I/O 성능에도 큰 영향을 미칠 수 있는 단점이 있다.
본 발명이 해결하고자 하는 기술적 과제는, RAID 시스템에서 정정 불가한 에러(Uncorrectable Error)가 발생하여 리커버리를 수행하는 경우, 적은 리소스를 사용하여 리커버리 동작에 필요한 시간을 저감할 수 있는 스토리지 컨트롤러 및 그 동작 방법을 제공하는 것이다.
본 발명이 해결하고자 하는 기술적 과제는, RAID 시스템에서 정정 불가한 에러(Uncorrectable Error)가 발생하여 리커버리를 수행하는 경우, 적은 리소스를 사용하여 리커버리 동작에 필요한 시간을 저감할 수 있는 스토리지 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 기술적 과제는, 정정 불가한 에러(Uncorrectable Error)가 발생하여 리커버리를 수행하는 경우, 적은 리소스를 사용하여 리커버리 동작에 필요한 시간을 저감할 수 있는 RAID 스토리지 컨트롤러를 제공하는 것이다.
본 발명이 해결하고자 하는 기술적 과제는, 정정 불가한 에러(Uncorrectable Error)가 발생하여 리커버리를 수행하는 경우, 적은 리소스를 사용하여 리커버리 동작에 필요한 시간을 저감할 수 있는 스토리지 장치를 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 컨트롤러는 RAID로 연결된 복수의 비휘발성 메모리 장치 각각에서 서브 스트라이프 데이터를 리드하고, 적어도 하나의 서브 스트라이프 데이터의 에러 정보를 확인하여, 정정 불가능한 에러가 존재하면 RAID 리커버리 동작을 수행하는 RAID 엔진 및 RAID 리커버리 동작의 연산 결과를 저장하는 RAID 메모리를 포함한다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 컨트롤러의 동작방법은 RAID로 연결된 복수의 비휘발성 메모리 장치 각각에서 서브 스트라이프 데이터를 리드하는 단계, 리드된 서브 스트라이프 데이터의 에러 정보를 확인하여, 정정 불가능한 에러의 존재 유무를 확인하는 단계, 에러가 존재하는 경우 실패 카운트값을 증가시키고 다음 서브 스트라이프 데이터를 리드하는 단계 및 에러가 존재하지 않으면 리드된 서브 스트라이프 데이터로 XOR 연산을 수행하는 단계를 포함하고, 에러 정보는 서브 스트라이프 데이터의 헤더 또는 기초 정보로 저장된다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 컨트롤러는 복수의 비휘발성 메모리 장치에 연결되고, 각 비휘발성 메모리 장치와 서브 스트라이프 데이터를 송수신하는 DMA(Direct Memory Access) 인터페이스, 서브 스트라이프 데이터의 에러 정보를 확인하고, 정정 불가능한 에러가 없는 서브 스트라이프 데이터를 기초로 XOR 연산하여 리커버리 데이터를 추출하는 RAID 엔진을 포함하고, RAID 엔진은 정정 불가능한 에러가 있는 서브 스트라이프 데이터의 개수가 패리티 서브 스트라이프의 개수를 초과하는 경우, 리커버리 데이터를 추출하지 않는다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 몇몇 실시 예에 따른 RAID 시스템을 보여주는 블록도이다.
도 2는 도 1에 도시된 스토리지 컨트롤러의 구성을 예시적으로 보여주는 블록도이다.
도 3은 몇몇 실시예에 따른 비휘발성 메모리 장치를 나타내는 예시적인 블록도이다.
도 4는 몇몇 실시예에 따라 RAID 컨트롤러의 리커버리 동작을 설명하기 위한 도면이다.
도 5 및 도 6은 몇몇 실시예에 따른 스토리지 컨트롤러의 동작 방법을 설명하기 위한 개념도이다.
도 7은 몇몇 실시예에 따른 스토리지 컨트롤러의 동작방법을 설명하기 위한 흐름도이다.
도 8는 몇몇 실시예에 따른 스토리지 컨트롤러의 동작방법을 설명하기 위한 흐름도이다.
도 9는 몇몇 실시예에 따른 스토리지 장치가 적용된 데이터 센터를 나타낸 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 기술적 사상에 따른 실시예들에 대해 설명한다.
도 1은 몇몇 실시 예에 따른 RAID 시스템을 보여주는 블록도이다.
도 1을 참조하면, RAID 시스템(10)는 호스트(100)와 스토리지 장치(200)를 포함한다.
호스트(100)는 데이터를 독출하기 위해 스토리지 장치(200)에 리드 요청(Read Req.)을 전송한다. 스토리지 장치(200)는 리드 요청된 데이터(Data)를 복수의 비휘발성 메모리 장치들(300_1 내지 300_n)로부터 리드하여 전달한다. 하지만, 스토리지 장치(200)의 복수의 비휘발성 메모리 장치들(300_1 내지 300_n)에 대한 리드는 여기에만 국한되지 않는다.
또한 스토리지 장치(200)는 내부적으로 수행될 수 있는 리드 동작으로 가비지 컬렉션(Garbage Collection)이나 메타 데이터(Meta Data) 리드 등을 할 수 있다. 외부로부터의 명령이나 제어 없이 스토리지 장치(200) 내 비휘발성 메모리 장치들(300_1 내지 300_n)에 대한 내부적인 리드 동작에서도 본 발명이 적용될 수 있다.
호스트(100)는 스토리지 장치(200)에 데이터를 쓰거나, 스토리지 장치(200)에 저장된 데이터를 읽어낸다. 호스트(100)는 스토리지 장치(200)에 명령어, 어드레스, 그리고 데이터를 제공할 수 있다. 호스트(100)는 스토리지 장치(200)로부터 명령어나 어드레스를 사용하여 데이터를 리드 요청할 수 있다. 예로서, 호스트(100)는 적어도 하나의 프로세서를 포함할 수 있다. 호스트(100)는 프로세서 그 자체이거나, 프로세서를 포함하는 전자 장치 또는 시스템일 수 있다.
스토리지 장치(200)는 호스트(100)로부터 제공되는 명령어(CMD)에 응답하여 비휘발성 메모리 장치들(300_1 내지 300_n)에 접근하거나, 호스트(100)에 의해서 요청된 다양한 동작을 수행할 수 있다. 스토리지 장치(200)는 특히, 호스트(100)에서 제공되는 명령어 또는 어드레스에 따라 버퍼(215)나 비휘발성 메모리 장치(300_1 내지 300_n)에 저장된 데이터를 읽어낼 수 있다. 그리고 스토리지 장치(200)는 리드된 데이터(Data)를 호스트(100)로 전송할 것이다. 스토리지 장치(200)는, 스토리지 컨트롤러(210), 복수의 비휘발성 메모리 장치(300_1 내지 300_n)를 포함할 수 있다.
스토리지 컨트롤러(210)는 호스트(100)와 스토리지 장치(200) 사이에서 인터페이싱을 제공한다. 스토리지 컨트롤러(210)는 실시예에 따라 RAID 컨트롤러라고 호칭될 수도 있다.
스토리지 컨트롤러(210)는 데이터를 리드하여 에러 정정 가능 여부를 판단하고, 정정 불가능한 에러(UCE)가 있으면, 에러가 발생한 데이터에 대해 데이터 복구를 수행한다.
몇몇 실시예에 따라 리드된 데이터는 헤더를 포함한다. 일 예로 헤더는 데이터의 리드 성공(Read Sccuess) 또는 리드 실패(Read Fail) 정보를 포함할 수 있다. 다른 예로 헤더는 데이터의 에러 정정 성공(ECC Success) 또는 에러 정정 실패(ECC Fail) 정보를 포함할 수 있다. 또다른 예로, 헤더는 정정 불가능한 에러 유무에 대한 정보를 포함할 수 있다.
몇몇 실시예에 따라 스토리지 컨트롤러(210)는 기초 정보를 저장할 수 있다. 기초 정보는 일 예로 데이터의 리드 성공 또는 리드 실패 정보를 포함할 수 있다. 기초 정보는 다른 예로 데이터의 에러 정정 성공(ECC Success) 또는 에러 정정 실패(ECC Fail) 정보를 포함할 수 있다. 또다른 예로, 기초 정보는 정정 불가능한 에러 유무에 대한 정보를 포함할 수 있다.
몇몇 실시예에 따라 스토리지 컨트롤러(210)는 복수의 비휘발성 메모리 장치 중 어느 하나로부터 리드된 데이터(예를 들어 A1데이터)에서, 헤더에 기초하여 정정 불가능한 에러가 포함된 경우, 동일 스트라이프에 속한 나머지 비휘발성 메모리 장치들로부터 리드된 데이터(예를 들어 A2, A3 내지 An-1, Pa)를 기초로 데이터(A1 데이터)를 복구할 수 있다.
예를 들어 스토리지 장치(200)는 제1 데이터에서 정정 불가능한 에러(UnCorrectable Error; Uncor 또는 UCE)가 발생하면, 에러가 발생한 제1 데이터를 제외하고, 동일 스트라이프에 속한 나머지 제2 데이터를 리드하고, 리드된 나머지 제2 데이터에 기초하여 기설정된 리커버리 연산을 수행하여 제1 데이터를 복구한다. 예를 들어, 스토리지 컨트롤러(210)는 RAID 방식으로 데이터를 복수의 비휘발성 메모리 장치들(300_1 내지 300_n)에 저장할 수 있다. 구체적으로 유저 데이터 및 패리티 데이터는 복수의 비휘발성 메모리 장치들 각각에 서브 스트라이프 단위로 각각 저장될 수 있다. 예를 들어 유저 데이터가 N개의 서브 스트라이프 데이터, 패리티 데이터가 M개의 서브 스트라이프 데이터라면(N과 M은 자연수, N은 M보다 큰 수), RAID 방식으로 연결된 비휘발성 메모리 장치들은 (N+M)개일 수 있다.
상술한 복구 방식을 사용하기 위해 스토리지 컨트롤러(210)는 RAID 엔진(212)과 ECC 엔진(214)을 포함할 수 있다. 스토리지 컨트롤러(210)는 플래시 인터페이스(217)를 통해 비휘발성 메모리 장치(300)로부터 리드된 데이터를 수신하면, ECC 엔진(214)을 통해 리드된 데이터에 대한 플래시 리커버리를 수행할 수 있다.
플래시 리커버리는 예를 들면, 어느 하나의 비휘발성 메모리 장치(300)에서 발생한 청크에 대해서 다양한 리드 환경 조정, 벨리 서치(Valley search), ECC(Error Correcion Code) 등의 기법들일 수 있다.
플래시 리커버리는 예를 들면, 하드 디시젼 디코딩 및 소프트 디시젼 디코딩을 포함할 수 있다. 하드 디시젼 디코딩(hard decision decoding)과 소프트 디시젼 디코딩(soft decision decoding)을 이용한다. 하드 디시젼 디코딩은 적은 리소스를 사용하기 때문에 효율적이지만, 에러정정능력이 상대적으로 떨어질 수 있다. 반면, 소프트 디시젼 디코딩은 하드 디시젼 디코딩에 비해서 에러정정능력을 높지만, 많은 리소스를 사용한다. 따라서 몇몇 실시예에 따라 ECC 엔진(214)는 1차적으로 하드 디시젼 디코딩을 수행하고, 디코딩 결과를 데이터의 헤더 또는 기초 정보로 생성할 수 있다. ECC 엔진(214)은 RAID 엔진(212)의 제어에 따라 2차적으로 소프트 디시젼 디코딩을 수행할 수 있다.
RAID 엔진(212)은 액세스 요청되는 데이터를 복수의 비휘발성 메모리 장치들(300_1 내지 300_n)에 RAID 방식으로 저장하기 위한 스트라이프(Stripe) 단위로 처리한다. 예를 들어 하나의 스트라이프에 포함되는 서브-스트라이프들 중 하나 또는 그 이상의 서브-스트라이프에 정정 불가능한 에러(UCE)가 발생하면, 스토리지 컨트롤러(210)는 RAID 리커버리(RR)를 수행하여 하나의 스트라이프를 복구할 수 있다. 몇몇 실시예에 따라 RAID 엔진(212)은 ECC 엔진(214)이 생성한 헤더 또는 기초 정보를 확인하여, RAID 리커버리를 수행할 수 있다. 이때 헤더는 정정 불가능한 에러(UCE) 포함 여부에 대한 정보를 나타낼 수 있다.
몇몇 실시예에 따라 RAID 엔진(212)는 정정 불가능한 에러(UCE)를 포함하였더라도, 메모리 셀의 열화로 인해 정정 불가능한 에러로서 정정 가능한 에러에 근접한 확률을 가진 에러의 경우, 재-에러 디코딩을 하도록 ECC 엔진(214)을 제어할 수 있다. 예를 들어 ECC 엔진(214)이 리드된 데이터에 대해 1차적으로 하드 디시젼 디코딩을 수행하여 정정 불가능한 에러(UCE)로 판단하였으나 2차적으로 소프트 디시젼 디코딩을 수행하여 정정 가능한 에러(CE)로 판단이 바뀔 수 있는 경우에는, RAID 엔진(212)은 ECC 엔진(214)이 디코딩 설정을 업데이트하도록 제어하고, ECC 엔진(214)은 업데이트된 디코딩 설정, 예를 들어 소프트 디시젼 디코딩 방식으로 재-에러 디코딩을 수행할 수 있다.
상기 실시예와 같이 헤더 또는 기초 정보를 기초로 정정 불가능한 에러를 포함하는지 확인할 수 있으므로 스토리지 컨트롤러(21)는 CPU(211)의 개입없이 RAID 엔진(212) 자체적으로 판단하여 RAID 리커버리를 수행할 수 있다.
도 2는 도 1에 도시된 스토리지 컨트롤러(210)의 구성을 예시적으로 보여주는 블록도이다.
도 2를 참조하면, 본 발명의 스토리지 컨트롤러(210)는 CPU(211), RAID 엔진(212), 호스트 인터페이스(213), ECC 엔진(214), 버퍼 메모리(215) 및 플래시 인터페이스(217)를 포함한다.
CPU(Central Processing Unit, 211)는 비휘발성 메모리 장치들(300_1 내지 300_n, 도 1 참조)에 대한 리드/라이트 동작에 필요한 다양한 제어 정보를 호스트 인터페이스(213) 및 플래시 인터페이스(217)의 레지스터들에 전달한다. CPU(211)는 스토리지 컨트롤러(210)의 다양한 제어 동작을 위해 제공되는 펌웨어에 따라 동작할 수 있다. 예를 들면, CPU(211)는 비휘발성 메모리 장치들(300_1 내지 300_n)을 관리하기 위한 가비지 컬렉션(Garbage collection)이나, 주소 맵핑, 웨어 레벨링 등을 수행하기 위한 플래시 변환 계층(FTL)을 실행할 수 있다.
몇몇 실시예에 따라 CPU(211)는 레지스터(400)를 포함할 수 있다. 레지스터(400)는 CPU(211)의 제어 신호를 생성하기 위해 빠른 접근이 필요한 연산 데이터들을 저장할 수 있다. 몇몇 실시예에 따라 레지스터(400)는 기초 정보를 저장할 수 있다. 기초 정보는 예를 들면 비휘발성 메모리 장치(300)로부터 리드되는 데이터 또는 비휘발성 메모리 장치(300)에 라이트 요청되는 데이터의 에러 검출 여부, 에러 비트의 개수, 에러 비트의 위치, 에러 정정 여부, 에러 정정 불가능 여부 등을 포함할 수 있다. CPU(211)는 기초 정보를 확인하여 RAID 엔진(212)의 동작수행을 제어할 수 있다. 레지스터(400)는 예를 TCM(Tightly Coupled Memory)로 구현될 수도 있고, SRAM(Static RAM) 등으로 구현될 수 있다.
레지스터(400)는 상술한 실시예에서는 CPU(211)에 포함하는 것으로 설명하였으나, 다른 실시예에 따라 CPU(211)와 별개로 구현될 수도 있다.
몇몇 실시예에 따라 RAID 엔진(212)은 호스트(100)로부터 제공되는 데이터를 스트라이프 단위로 구분하고, 각각의 스트라이프(Stripe)를 비휘발성 메모리 장치들(300_1 내지 300_n) 각각에 서브-스트라이프 단위로 분배하여 저장한다. RAID 엔진(212)은 스트라이프 단위로 데이터를 생성하기 위해 패리티를 생성할 수 있다. 다양한 실시예에 따라 패리티에 대응하는 서브-스트라이프의 수나 구성 방식은 RAID 타입에 따라 다르게 구성될 수 있다. 각각의 서브-스트라이프는 ECC 디코딩이 가능한 적어도 하나의 서브-스트라이프를 포함할 수 있다.
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)일 수도 있다.
몇몇 실시예에 따라 스토리지 컨트롤러(210)는 RAID 메모리(219)를 더 포함할 수도 있다. RAID 메모리(219)는 RAID 엔진(212)의 동작 메모리(Working memory)로서 이용될 수 있고, 각종 메모리로 구현될 수 있다. 예를 들어 RAID 메모리(219)는 RAID 엔진(212)이 수행하는 복구 연산의 중간값 또는 복구 연산의 결과값을 저장할 수 있다. 즉, 서브 스트라이프 데이터들 간의 XOR 연산 결과를 저장할 수 있다. 몇몇 실시예에 따라, RAID 메모리(219)는 휘발성 메모리 또는 비휘발성 메모리일 수 있다. 예를 들어 캐시(Cache), DRAM(Dynamic RAM), SRAM(Static RAM), PRAM(Phase-change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), 플래시(Flash) 메모리 장치들 중 적어도 하나로 구현될 수 있다.
호스트 인터페이스(213)는 호스트(100)와의 통신을 수행할 수 있다. 예를 들면, 호스트 인터페이스(213)는 호스트(100)와의 통신 채널을 제공한다. 호스트 인터페이스(213)는 호스트(100)와 스토리지 장치(200)와의 물리적 연결을 제공한다. 즉, 호스트 인터페이스(213)는 호스트(100)의 버스 포맷(Bus format)에 대응하여 스토리지 장치(200)와의 인터페이싱을 제공한다. 호스트(100)의 버스 포맷은 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) 중 적어도 하나로 구성될 수 있다.
몇몇 실시예에 따라 ECC 엔진(214)은 라이트 요청되는 데이터에 대해서 에러 검출 및 정정을 위한 인코딩을 수행할 수 있다. 몇몇 실시예에 따라 ECC 엔진(214)은 비휘발성 메모리 장치들(300)로부터 리드된 데이터에 포함된 에러를 검출하고, 검출된 에러를 정정할 것이다.
ECC 엔진(214)은 정정 가능한 비트 수의 제한이 존재한다. 이러한 제한을 초과하는 비트 수의 에러가 검출되면, ECC 엔진(214)은 정정 불가능한 에러(UCE)로 판단할 수 있고, 정정 불가능한 에러(UCE)의 발생을 CPU(211)에 알려줄 수도 있다. ECC 엔진(214)은 일 실시예로 정정 가능한 에러(CE)인지 정정 불가능한 에러(UCE)인지를 해당 데이터의 헤더 정보(H) 또는 레지스터(400)의 기초 정보로 기록할 수 있다. ECC 엔진(214)는 다른 실시예로 에러가 발생한 비트의 개수를 해당 데이터의 헤더 정보(H)로 기록하거나 레지스터(400)의 기초 정보로 기록할 수도 있다. 기록되는 헤더 또는 기초 정보는 몇몇 실시예에 따라 1 비트일 수도 있고, 복수의 비트일 수도 있다.
버퍼 메모리(215)에는 스토리지 컨트롤러(210)의 동작 또는 상태와 관련된 기설정된 정보들, 프로그램들, 또는 명령들이 저장될 수 있다. 일 예로, 버퍼 메모리(215)는 라이트 데이터(Write data)나 리드 데이터(Read data), 또는 글로벌 메타 데이터를 일시 저장할 수 있다. 글로벌 메타 데이터는 일예로, 스토리지 장치 전체에 대한 다양한 환경 정보일 수 있다.
몇몇 실시예에 따라 버퍼 메모리(215)는 캐시(Cache), ROM(Read Only Memory), PROM(Programmable Read Only Memory), EPROM(Erasable PROM), EEPROM(Electrically Erasable Programmable Read-Only Memory), PRAM(Phase-change RAM), 플래시(Flash) 메모리, SRAM(Static RAM), 또는 DRAM(Dynamic RAM)을 포함할 수 있다. 버퍼 메모리(215)는 일 실시예로 스토리지 컨트롤러(210) 내에 포함되어 구현될 수도 있으나, 버퍼 메모리(215)는 다른 실시예로 도 1과 같이 스토리지 컨트롤러(210) 외부에 비휘발성 메모리로 구현될 수도 있다.
플래시 인터페이스(217)는 비휘발성 메모리 장치(300_1 내지 300_n)와 데이터를 교환한다. 몇몇 실시예에 따라 플래시 인터페이스(217)는 버퍼 메모리(215)로부터 전달되는 데이터를 각각의 메모리 채널들(CH1, CH2,…, CHn)을 경유하여 비휘발성 메모리 장치(300_1 내지 300_n)에 라이트(write)한다. 몇몇 실시예에 따라 플래시 인터페이스(217)는 메모리 채널을 통하여 제공되는 비휘발성 메모리 장치(300_1 내지 300_n)로부터의 리드 데이터(Read data)를 취합한다. 취합된 데이터는 이후 버퍼 메모리(215)에 저장되어 CPU(211)에 의해 처리될 수 있다. 일 예로 라이트되는 데이터 또는 취합되기전의 데이터 각각은 헤더를 더 포함할 수 있고, RAID 엔진(212)은 헤더로부터 각 데이터가 에러를 포함하는지, 정정 불가능한 에러인지 정정 가능한 에러인지 확인할 수 있다. 또는 다른 예로 라이트되는 데이터 또는 취합되기전의 데이터 각각은 에러 정보를 포함한 기초 정보와 연관될 수 있고, RAID 엔진(212)은 기초 정보로부터 각 데이터가 에러를 포함하는지, 정정 불가능한 에러인지 정정 가능한 에러, 또는 에러 비트 개수가 몇 개인지 확인할 수 있다.
몇몇 실시예에 따라 플래시 인터페이스(217)는 DMA(Direct Memory Access) 인터페이스를 포함할 수 있다. 비휘발성 메모리 장치(300_1 내지 300_n) 각각은 호스트(100)를 거치지 않고 DMA 인터페이스를 통해 스토리지 컨트롤러(210)와 연결될 수 있다. 구체적인 사항은 도 7에서 후술한다.
더불어, 비휘발성 메모리 장치들(300_1 내지 300_n)로부터 리드된 데이터에 정정 불가능한 에러(UCE)가 검출되면, 스토리지 컨트롤러(210)는 복구(Recovery) 동작을 수행할 수 있다. 이러한 리커버리 방식을 적용함에 따라 본 발명의 스토리지 컨트롤러(210)는 정정 불가능한 에러(UCE)의 발생시에 고속으로 데이터의 복구를 수행할 수 있다.
상술한 몇몇 실시예에 따른 리커버리 동작을 위해 RAID 엔진(212) 및 ECC 엔진(214)에서는 대응하는 리커버리 알고리즘이 실행될 수 있을 것이다. 리커버리를 위한 알고리즘은 스토리지 장치(200)에 구비되는 롬(ROM, 미도시)이나 비휘발성 메모리 장치들(300_1 내지 300_n)에 저장될 수 있다. 그리고 부팅시에 버퍼 메모리(215)에 로드되고, RAID 엔진(212) 및 ECC 엔진(214)에 의해서 실행될 수 있을 것이다.
도 3은 몇몇 실시예에 따른 비휘발성 메모리 장치를 나타내는 예시적인 블록도이다.
도 3을 참조하면, 비휘발성 메모리 장치(300)는 제어 로직 회로(320), 메모리 셀 어레이(330), 페이지 버퍼부(340), 전압 생성기(350), 및 로우 디코더(360)를 포함할 수 있다. 도 3에는 도시되지 않았으나, 비휘발성 메모리 장치(300)는 메모리 인터페이스 회로(310)를 더 포함할 수 있고, 또한 컬럼 로직, 프리-디코더, 온도 센서, 커맨드 디코더, 어드레스 디코더 등을 더 포함할 수 있다.
제어 로직 회로(320)는 비휘발성 메모리 장치(300) 내의 각종 동작을 전반적으로 제어할 수 있다. 제어 로직 회로(320)는 메모리 인터페이스 회로(310)로부터의 커맨드(CMD) 및/또는 어드레스(ADDR)에 응답하여 각종 제어 신호들을 출력할 수 있다. 예를 들어, 제어 로직 회로(320)는 전압 제어 신호(CTRL_vol), 로우 어드레스(X-ADDR), 및 컬럼 어드레스(Y-ADDR)를 출력할 수 있다.
메모리 셀 어레이(330)는 복수의 메모리 블록들(BLK1 내지 BLKz)을 포함할 수 있고(z는 양의 정수), 복수의 메모리 블록들(BLK1 내지 BLKz) 각각은 복수의 메모리 셀들을 포함할 수 있다. 메모리 셀 어레이(330)는 비트 라인들(BL)을 통해 페이지 버퍼부(340)에 연결될 수 있고, 워드 라인들(WL), 스트링 선택 라인들(SSL), 및 그라운드 선택 라인들(GSL)을 통해 로우 디코더(360)에 연결될 수 있다.
예시적인 실시 예에서, 메모리 셀 어레이(330)는 3차원 메모리 셀 어레이를 포함할 수 있고, 3차원 메모리 셀 어레이는 복수의 낸드 스트링들을 포함할 수 있다. 각 낸드 스트링은 기판 위에 수직으로 적층된 워드 라인들에 각각 연결된 메모리 셀들을 포함할 수 있다. 미국 특허공개공보 제7,679,133호, 미국 특허공개공보 제8,553,466호, 미국 특허공개공보 제8,654,587호, 미국 특허공개공보 제8,559,235호, 및 미국 특허출원공개공보 제2011/0233648호는 본 명세서에 인용 형식으로 결합된다. 예시적인 실시 예에서, 메모리 셀 어레이(330)는 2차원 메모리 셀 어레이를 포함할 수 있고, 2차원 메모리 셀 어레이는 행 및 열 방향을 따라 배치된 복수의 낸드 스트링들을 포함할 수 있다.
페이지 버퍼부(340)는 복수의 페이지 버퍼들(PB1 내지 PBn)을 포함할 수 있고(n은 3 이상의 정수), 복수의 페이지 버퍼들(PB1 내지 PBn)은 복수의 비트 라인들(BL)을 통해 메모리 셀들과 각각 연결될 수 있다. 페이지 버퍼부(340)는 컬럼 어드레스(Y-ADDR)에 응답하여 비트 라인들(BL) 중 적어도 하나의 비트 라인을 선택할 수 있다. 페이지 버퍼부(340)는 동작 모드에 따라 라이트 드라이버 또는 감지 증폭기로서 동작할 수 있다. 예를 들어, 라이트 동작 시, 페이지 버퍼부(340)는 선택된 비트 라인으로 라이트될 데이터에 대응하는 비트 라인 전압을 인가할 수 있다. 리드 동작 시, 페이지 버퍼부(340)는 선택된 비트 라인의 전류 또는 전압을 감지하여 메모리 셀에 저장된 데이터를 감지할 수 있다.
전압 생성기(350)는 전압 제어 신호(CTRL_vol)를 기반으로 라이트, 리드, 및 이레이즈 동작들을 수행하기 위한 다양한 종류의 전압들을 생성할 수 있다. 예를 들어, 전압 생성기(350)는 워드 라인 전압(VWL)으로서 라이트(또는 프로그램) 전압, 리드 전압, 프로그램 검증 전압, 이레이즈 전압 등을 생성할 수 있다.
로우 디코더(360)는 로우 어드레스(X-ADDR)에 응답하여 복수의 워드 라인들(WL) 중 하나를 선택할 수 있고, 복수의 스트링 선택 라인들(SSL) 중 하나를 선택할 수 있다. 예를 들어, 라이트 동작 시, 로우 디코더(360)는 선택된 워드 라인으로 프로그램 전압 및 프로그램 검증 전압을 인가하고, 리드 동작 시, 선택된 워드 라인으로 리드 전압을 인가할 수 있다.
도 4는 몇몇 실시예에 따라 RAID 컨트롤러의 리커버리 동작을 설명하기 위한 도면이다.
도 4을 참조하면, RAID 엔진(212)은 호스트(100)로부터 라이트 요청되는 데이터(DATA)를 복수의 서브-스트라이프(Sub-stripe) 데이터로 분할한다. RAID 엔진(212)은 분할된 서브-스트라이프(Sub-stripe) 데이터(예를 들어 A1, A2, A3 내지 An-1)들을 여러 스토리지(예를 들어 3011, 3012, 3013, 305)에 분산하여 저장할 수 있다. 분할된 서브-스트라이프(Sub-stripe) 데이터들 중에서는 하나 이상의 패리티 서브-스트라이프(Pa)가 포함될 수 있을 것이다. 여기서, 스토리지는 칩(Chip)이나 다이(Die) 등에 대응할 수 있다. 복수의 스토리지에서 동시에 에러가 발생하는 확률은 거의 희박하기 때문에, RAID 엔진(212)에 의해 데이터의 신뢰성을 향상시킬 수 있다.
데이터(DATA)는 호스트(100)와 스토리지 장치(200) 사이에서 스트라이프(Stripe) 단위로 전송될 수 있다. 호스트(100) 또는 스토리지 장치(200)의 사용자는 스트라이프의 데이터 크기를 선택할 수 있다. 데이터(DATA)는 하나 이상의 스트라이프들을 포함할 수 있다. 하나의 스트라이프는 복수의 서브-스트라이프를 포함할 수 있다(예를 들어, C1, C2, C3, ?Cn-1). 나아가, 스트라이프는 서브-스트라이프들의 오류를 검사하기 위해 참조되는 패리티(Parity)(예를 들어 Pc)를 포함할 수 있다. 서브-스트라이프들 및 패리티는 복수의 비휘발성 메모리 장치들(예를 들어 3011, 3012, 3013, 305)에 분산하여 저장될 수 있다. 본 명세서 설명의 편의를 위해 스트라이프는 총 N개의 서브 스트라이프로 구성되고, 유저 데이터를 저장하는 L개의 유저 서브 스트라이프와 패리티 데이터를 저장하는 M개의 패리티 서브 스트라이프를 포함할 수 있다(N=M+L)
예를 들어, 하나의 서브-스트라이프 데이터는 비휘발성 메모리 장치들(3011, 3012, 3013, 305)에서 수행되는 리드 동작의 리드 단위에 대응하는 데이터 크기를 가질 수 있다. 비휘발성 메모리 장치들(3011, 3012, 3013, 305)에 저장된 데이터는 서브-스트라이프와 동일한 데이터 크기를 갖는 리드 단위로 읽힐 수 있다.
이러한 RAID 구성이 채용되는 경우, 하나의 스토리지에 저장된 하나의 서브-스트라이프 데이터에 오류가 발생하더라도, 그 서브-스트라이프 데이터는 패리티(Pa, Pb, Pc, Pd) 서브 스트라이프를 참조하여 복구될 수 있다. 예를 들어, 서브-스트라이프들(C1, C2, C3, …)과 패리티(Pc)가 구성하는 스트라이프(Stripe) 중에 C1 서브 스트라이프 데이터에 에러가 발생한 경우, 스토리지 컨트롤러(210)는 에러가 발생하지 않은 서브-스트라이프들(C2, C3, …)과 패리티(Pc) 서브 스트라이프를 사용하여 에러가 발생한 C1 서브-스트라이프 데이터를 복구할 수 있다. 다만, 데이터의 무결성을 보장하기 위해 ECC 엔진(214)이 에러 디코딩한 결과 에러가 없거나 정정가능한 에러를 포함한 서브 스트라이프를 이용하여야 에러가 발생한 서브 스트라이프를 복구할 수 있다.
몇몇 실시 예에서, 비휘발성 메모리 장치들(3011, 3012, 3013, 305) 각각이 하나의 칩이나 다이로 구현될 수 있다. 그리고 각각의 칩이나 다이들은 스토리지 컨트롤러(210)에 의해서 독립적으로 접근 가능한 채널들에 연결될 수 있을 것이다.
도 5 및 도 6은 몇몇 실시예에 따른 스토리지 컨트롤러의 동작 방법을 설명하기 위한 개념도이다.
도 5을 참조하면, 몇몇 실시예에 따라 스토리지 컨트롤러(210)는 RAID 엔진(212), DMA(Direct Memory Access) 인터페이스(510, 520)를 포함한다.
몇몇 실시예에 따라 DMA 인터페이스(510, 520)는 도 2의 플래시 인터페이스(217)에 포함될 수 있고, DMA 인터페이스(510, 520)는 비휘발성 메모리 장치(301, 305)에 연결될 수 있다.
DMA 인터페이스(510, 520)는 비휘발성 메모리(301)로부터 서브 스트라이프 데이터를 수신하면, 에러 디코딩을 수행하고 디코딩된 데이터에 헤더를 붙여서 RAID 엔진(212)에 제공할 수 있다. 구체적으로, ECC 엔진(214)은 몇몇 실시예에 따라 에러 디코더(512, 522) 및 에러 인코더(미도시)를 포함할 수 있고, DMA 인터페이스(510, 520)를 통해 수신되거나 전송되는 데이터에서 에러 디코딩 또는 에러 인코딩을 수행할 수 있다. 예를 들어 ECC 엔진(214)이 리드된 서브 스트라이프 데이터에 대해 에러 디코딩을 수행하면, DMA 인터페이스(512, 522)는 디코딩 결과에 기초한 에러 정보를 포함하는 헤더(H)를 생성하여 데이터(Data)에 부가할 수 있다(511). 또는 다른 예를 들어 ECC 엔진(214)이 리드된 서브 스트라이프 데이터에 대해 에러 디코딩을 수행하면, DMA 인터페이스(512, 522)는 디코딩 결과에 기초한 에러 정보를 포함하는 기초 정보를 생성하여 레지스터(400)에 저장하고, 상기 데이터와 연관할 수 있다(511).
RAID 엔진(212)은 헤더/기초 정보 및 데이터(511)를 수신하면, 헤더(H)/기초 정보를 확인하여 상기 데이터가 정정 불가능한 에러(UCE)를 포함하는지 검출하고, 에러가 없거나 정정 가능한 에러만 포함하면 XOR 연산의 대상으로 포함시킬 수 있다. 몇몇 실시예에 따라 RAID 엔진(212)는 XOR 머신(401) 및 정정불가능에러 검출부(405)를 포함할 수 있다.
일 예로 정정불가능에러 검출부(405)는 수신된 헤더를 확인하여 정정 불가능한 에러(UCE)를 포함하는 데이터인지 검출할 수 있다. 정정 불가능한 에러(UCE)를 포함하지 않은 경우 XOR 머신(401)이 활용할 수 있도록 할 수 있다. 몇몇 실시예에 따라 XOR 머신(401)은 유저 데이터, 즉 복수(예를 들어 M개)의 서브 스트라이프(예를 들어 도 6의 A1, A2, A3, …)를 XOR 연산하여 적어도 하나(예를 들어 L개)의 패리티 서브 스트라이프를 생성할 수 있다. 또는 몇몇 실시예에 따라 XOR 머신(401)은 RAID 리커버리를 수행하기 위해 정정불가능에러 검출부(405)의 결과에 따라 정정불가능에러가 검출되지 않은 유저 데이터에 기반한 L개의 서브 스트라이프 데이터(511, Data) 또는 M개의 패리티 서브 스트라이프(521, Data)들을 XOR 연산할 수 있다.
한편, RAID 엔진(212)은 카운터(407)를 더 포함할 수도 있다. 예를 들어 카운터(407)은 XOR 연산을 수행할 때마다 수행 카운트 값(i)를 증가시킬 수 있다. 또는 카운터(407)는 에러 디코딩 결과 에러 정정이 실패하면 실패 카운트 값(k)를 증가시킬 수 있다.
RAID 엔진(212)은 카운트 값에 따라 복구 완료(Recovery finished) 또는 복구 불가능(Recovery Fail)으로 판단할지 결정할 수 있다.
예를 들어, 호스트가 요청한 데이터는 복수의 비휘발성 메모리 장치의 동일 스트라이프 내에서 전체 N개의 서브 스트라이프로서, L개의 유저 데이터 및 M개의 패리티로 저장되어 있다고 하자. L 및 M은 자연수로서 L은 M보다 큰 수이다. L개의 유저 데이터 및 M개의 패리티는 각각이 서브 스트라이프 단위의 데이터일 수 있다. L개의 유저 데이터 또는 M개의 패리티 데이터 중 어느 하나를 포함하는 제1 서브 스트라이프 데이터는 정정불가능한 에러(UECC)를 포함하고, 제1 서브 스트라이프 데이터를 제외한 나머지 제2 서브 스트라이프 데이터는 정정 불가능한 에러를 포함하지 않은 나머지 유저 데이터 또는 패리티 데이터라고 가정하자. 예를 들어 제1 서브 스트라이프 데이터는 유저 데이터일 수도 있고 패리티일 수도 있다. 예를 들어 제2 서브 스트라이프 데이터는 유저 데이터일 수도 있고 패리티일 수도 있다.
몇몇 실시예에 따라 RAID 엔진(212)은 제2 서브 스트라이프 데이터에 대해서는 수행 카운트 값(i)을 증가시키며 XOR 연산을 하다가, 상기 수행 카운트값(i)이 전체 서브 스트라이프 개수(N)와 같아질 때까지 XOR 연산을 수행하고, 실패 카운트값(k)이 패리티 서브 스트라이프의 개수(M) 이내인 경우 상기 제2 서브 스트라이프 데이터들에 기초하여 제1 서브 스트라이프 데이터가 신뢰성있게 복구되었다고 판단하고, XOR 연산 결과를 제1 서브 스트라이프 데이터로 추출하고 RAID 리커버리 동작을 종료한다.
RAID 엔진(212)은 제2 서브 스트라이프 데이터에 대해서는 XOR 연산을 시키고 수행 카운트값(i)을 증가시키다가, 상기 수행 카운트값(i)이 전체 서브 스트라이프 개수(N)에 도달하였으나, 실패 카운트값(k)이 패리티 서브스트라이프 개수(M)를 초과하는 경우(k>M) 정정불가능한 에러(UECC)가 많아서 제1 서브 스트라이프 데이터를 복구하기 위한 제2 서브 스트라이프 데이터가 불충분(또는 부족)하다고 판단하고 RAID 리커버리가 실패했다고 판단할 수 있다.
다만, RAID 엔진(212)은 이 경우 RAID 리커버리가 실패했다고 판단하기 전에, 강화된 ECC 디코딩을 수행할 수 있다. 강화된 ECC 디코딩이란 예를 들어 1차적으로는 하드 디시젼 디코딩 방식으로 에러 디코딩을 수행하였다면, 2차, 즉 재-에러 디코딩에서는 소프트 디시젼 디코딩 방식으로 에러 디코딩을 수행하는 것일 수 있다. ECC 엔진은 1차 에러 디코딩시에는 정정 불가능한 에러(UCE)로 판단하였으나, 2차, 재-에러 디코딩시에는 정정 가능한 에러(CE)로 판단될 수 있는 경우, 이러한 데이터의 에러를 정정하여 XOR 연산에 참여하는 제2 서브 스트라이프 데이터의 무결성을 강화할 수 있다. 또한 상술한 RAID 엔진(212)은 RAID 내에서 1개의 서브 스트라이프 데이터만 정정 불가능한 에러를 포함한 경우에는 RAID 리커버리를 수행하고, 2개 이상의 서브 스트라이프 데이터가 정정 불가능한 에러를 포함한 경우에만 디코딩 설정을 업데이트 하여 재-에러 디코딩을 함으로써, 재-에러 디코딩을 위해 비휘발성 메모리 장치를 추가적으로 리드하는 횟수를 감소시킬 수 있다.
몇몇 실시예에 따라 RAID 엔진은 (212)은 제2 서브 스트라이프 데이터에 대해서는 수행 카운트 값(i)을 증가시키며 XOR 연산을 하다가, 제2 서브 스트라이프 데이터가 정정 불가능한 에러, 즉, UECC(uncorrectable by Error Correction Code: UECC)를 포함하면 실패 카운트값(k)을 증가시키고, 다음 제2 서브 스트라이프 데이터를 리드한다.
모든 서브 스트라이프(N)에 대해 리드하면, 실패 카운트값(k)이 패리티 서브 스트라이프 개수(M)보다 작은 경우 현재까지 리드된 서브 스트라이프 데이터로 RAID 복구가 될 수 있다고 판단하고, XOR 연산결과를 제1 서브 스트라이프 데이터로 추출하여 RAID 리커버리 동작을 종료한다. 그러나 실패 카운트값(k)이 패리티 스트라이프 개수(M)보다 큰 경우 데이터 복구가 어렵다고 판단하고 RAID 리커버리가 실패했다고 판단한다.
도 6을 참조하면, 스토리지 컨트롤러(210)는 복수의 채널(CH0, CH1, ?)을 통해 복수의 비휘발성 메모리 장치(301, 302)와 연결될 수 있고, 채널(CH0, CH1, ?) 각각은 라이트 패스(Write path)와 리드 패스(Read path)를 포함할 수 있다.
호스트(100)는 라이트 패스(PG path)를 통해 라이트 요청 및 라이트 할 데이터를 전송할 수 있고, 리드 패스(RD path)를 통해 리드 요청을 전송하고 리드된 데이터를 수신할 수 있다.
몇몇 실시예에 따라 채널 각각의 라이트 패스(Write path)는 RAID 엔진(212)으로 라이트 할 데이터를 전송할 라이트 스플리터(spliter)(251W, 252W)를 포함할 수 있다. 채널 각각의 리드 패스(Read path)는 RAID 엔진(212)으로 리드된 데이터를 전송할 리드 스플리터(251R, 252R)를 포함할 수 있다. 즉, 라이트 스플리터(251W, 252W) 및 리드 스플리터(251R, 252R)는 앞단의 패스와 뒷단의 패스 사이에 연결되어 데이터를 전달하면서도, 전달되는 데이터를 RAID 엔진(212)으로도 전송할 수 있다.
RAID 엔진(212)은 ECC 엔진(214)의 디코딩 결과를 반영한 헤더에 기초한 RAID 리커버리를 수행하되, 복구 완료(Recovery Finished) 또는 복구 실패(Recovery Fail)에 대한 결과를 호스트(100)에게 알려줄 수 있다(S).
RAID 엔진(212)은 RAID 리커버리 과정 중에 디코딩 설정을 업데이트 하여 다시 리드하여도 적어도 하나의 비휘발성 메모리 장치(300)로부터 리드된 서브 스트라이프 데이터에 정정 불가능한 에러가 포함된 경우, 해당 서브 스트라이프 데이터에 대한 기초 정보(예를 들면 주소, 동작 환경 정보, 에러 관련 정보 등)에 대해 호스트(100)에 알려줄 수 있다(M).
몇몇 실시예에 따라 스토리지 컨트롤러(210)는 FTL(File Transfer Layer)을 통해 시퀀셜한 리드 명령을 수신한 경우, RAID 방식으로 연결된 비휘발성 메모리 장치(300)를 모두 인에이블하고 각각에서 서브 스트라이프 데이터를 리드할 수 있다.
몇몇 실시예에 따라 스토리지 컨트롤러(210)는 FTL(File Transfer Layer)을 통해 랜덤한 리드 명령을 수신한 경우, 상기 랜덤한 리드 명령에 따라 RAID 방식으로 연결된 비휘발성 메모리 장치(300)를 모두 리드하지 않을 수 있으므로, RAID 연결을 차단하고, 요청된 데이터의 동일 스트라이프에 속한 비휘발성 메모리 장치(300)를 모두 인에이블하여 각각에서 서브 스트라이프 데이터를 리드할 수 있다.
상술한 예에서 동일 스트라이프에 속한 서브 스트라이프 데이터를 모두 읽어오기 때문에 만약 적어도 하나의 제1 서브 스트라이프 데이터에 정정 불가능한 에러(UCE)가 포함되어 있더라도, 스토리지 컨트롤러(210)는 함께 리드된 나머지 제2 서브 스트라이프 데이터들에 기초하여 에러가 발생한 제1 서브 스트라이프 데이터를 복구할 수 있고, 복구된 제1 서브 스트라이프 데이터 및 나머지 제2 서브 스트라이프 데이터에 기반한 전체 데이터를 호스트(100)로 전송할 수 있다. 스토리지 컨트롤러(210)는 서브 스트라이프 각각의 에러 정보를 기초로 정정 불가능한 에러를 포함하는지 확인할 수 있으므로, CPU(211)의 개입없이 RAID 엔진(212) 자체적으로 판단하여 RAID 리커버리를 수행할 수 있다.
RAID 엔진(212)은 리드된 서브 스트라이프 데이터들을 기초로 XOR 연산을 수행하여, 연산결과를 저장한다. 스토리지 컨트롤러는 패리티 서브 스트라이프 개수(M)와 실패 카운트값을 비교하여 이후 저장된 XOR 연산결과를 리커버된 서브 스트라이프 데이터로 추출할 수도 있다. 더 구체적인 동작에 대해서는 이하 도 7 및 도 8에서 설명한다.
도 7은 몇몇 실시예에 따른 스토리지 컨트롤러의 동작방법을 설명하기 위한 흐름도이다.
도 7을 참고하면, 몇몇 실시예에 따라 스토리지 컨트롤러는 먼저 카운터의 카운트값, 예를 들어 수행 카운트값(i) 및 실패 카운트값(k)을 리셋한다(S10). 스토리지 컨트롤러는 RAID로 연결된 복수의 비휘발성 메모리 장치들 각각으로부터 서브 스트라이프 데이터(i-th Data)를 리드하고(S11), 리드된 서브 스트라이프 데이터의 에러 정보(ERR information)를 확인한다(S12). 에러 정보는 몇몇 실시예에 따라 리드된 서브 스트라이프 데이터(i-th Data)의 헤더일 수도 있고 또는 레지스터에 저장해 둔 기초 정보에 기초할 수 있다.
스토리지 컨트롤러는 에러 정보를 확인하여 에러가 존재하면, 즉 에러가 검출되면(S13), 실패 카운트값(k) 및 수행 카운트값(i)을 증가시키고(S14) 다음 서브 스트라이프 데이터(i++ Data)를 리드하고(S11), S12 및 S13단계를 반복한다. 한편 스토리지 컨트롤러는 에러 정보를 확인하여 에러가 존재하지 않으면(S13), 리드된 서브 스트라이프 데이터(i-th Data)를 이용한 XOR 연산을 수행하고(S15), 수행 카운트값(i)을 증가시킨다(S16).
스토리지 컨트롤러는 증가된 수행 카운트값(i)이 서브 스트라이프의 전체 개수(N)와 동일해질 때까지(S17) S12 내지 S17단계를 반복한다. 스토리지 컨트롤러는 증가된 수행 카운트값(i)이 서브 스트라이프의 전체 개수(N)(즉 데이터 서브 스트라이프 및 패리티 서브스트라이프의 총 개수)와 동일해지면(S17), 즉, 비휘발성 메모리 장치의 서브 스트라이프를 모두 읽었으면, 실패 카운트값(k)을 기설정된 값(M)과 비교한다(S18). 이때 기설정된 값(M)은 RAID로 연결된 복수의 비휘발성 메모리 장치에서 패리티 서브 스트라이프의 개수일 수 있다. 예를 들어 RAID5의 경우 M은 1일 수 있고, RAID6의 경우 M은 2일 수 있다.
만약 실패 카운트값(k)이 기설정된 값(M)과 같거나 작으면(S18), 스토리지 컨트롤러는 RAID 방식상 복구 가능한 정도로 판단하여, S15단계에서 XOR연산된 값을 리커버리 데이터로 추출한다(S19). 한편 실패 카운트값(k)이 기설정된 값(M)보다 크면(S18), 스토리지 컨트롤러는 도 8에 따라 판단할 수 있다.
도 8는 몇몇 실시예에 따른 스토리지 컨트롤러의 동작방법을 설명하기 위한 흐름도이다.
도 7 및 도 8을 참조하면, 스토리지 컨트롤러는 1차적으로 실패 카운트값(k)이 기설정된 값보다 큰 경우, 다시 서브 스트라이프 데이터를 리드하여 에러 디코딩을 해보고 복구 불가능한 것이 맞는지 재확인을 하는 S30 내지 S54의 단계를 수행한다.
구체적으로, 스토리지 컨트롤러는 카운트값을 다시 리셋하고(S30), RAID로 연결된 복수의 비휘발성 메모리로부터 서브 스트라이프 데이터를 리드한다(S31).
리드된 서브 스트라이프 데이터(i-th Data)에 대해 제1 에러 디코딩 모드로 설정하고(S32), 설정된 모드에서 에러 디코딩을 수행한다(S33).
만약 제1 에러 디코딩 결과, 에러가 수정가능한 에러인 경우(S34, Pass), 서브 스트라이프 데이터(i-th Data)를 이용하여 XOR 연산하고(S35) 다음 서브 스트라이프 데이터를 읽기 위해 수행 카운트값(i)을 증가시킨다(S36). 수행 카운트값(i)이 서브 스트라이프의 전체 개수(N)와 동일해질 때까지(S37) S31 내지 S36 단계를 반복한다. 수행 카운트값(i)이 서브 스트라이프의 전채 개수와 동일해지면(S37), 즉, 모든 서브 스트라이프를 리드한 경우, 실패 카운트값(k)을 기설정된 값(M)과 비교한다. 기설정된 값(M)은 도 7에서 설명한 바와 같이 패리티 서브 스트라이프의 개수이다.
실패 카운트값(k)이 기설정된 값 이내이면(S38, Yes) 패리티 서브 스트라이프 데이터를 이용하여 복구 가능한 경우로 판단하여, S35의 XOR 연산결과를 리커버리 데이터로 추출한다(S39). 실패 카운트값(k)이 기설정된 값 을 초과하면(S38, No) 복구 불가능한 경우로 판단하여, 복구 실패로 판단하고 리커버리 동작을 종료한다(S40).
만약 제1 에러 디코딩 결과, 에러가 수정불가능한 에러인 경우(S34, Fail), 실패 카운트값(k)을 증가시키고(S50), 제2 에러 디코딩으로 설정을 변경하여(S51), S31에서 리드했던 서브 스트라이프 데이터를 다시 리드하고(S52), 설정된 모드에서 에러 디코딩을 수행한다(S53). 예를 들어 제1 에러 디코딩은 하드 디시젼 디코딩 방식이고, 제2 에러 디코딩은 소프트 디시젼 디코딩 방식으로 에러 디코딩을 수행하는 것일 수 있다. 스토리지 컨트롤러는 제1 에러 디코딩시에는 정정 불가능한 에러(UCE)로 판단하였으나, 제2 에러 디코딩시에는 정정 가능한 에러(CE)로 판단될 수 있는 경우, 이러한 데이터의 에러를 정정하여 XOR 연산에 참여하는 제2 서브 스트라이프 데이터의 무결성을 강화할 수 있다.
제2 에러 디코딩 결과, 정정 가능한 에러인 경우(S54, Pass), S35 이후의 단계를 수행하고, 정정 불가능한 에러인 경우(S54, Fail) S36 이후의 단계를 수행한다. 즉, 정정 불가능한 에러인 경우 더 이상 에러 디코딩을 하지 않고 다음 서브 스트라이프 데이터를 리드하도록 한다.
도 9는 몇몇 실시예에 따른 스토리지 장치가 적용된 데이터 센터를 나타낸 도면이다.
도 9를 참조하면, 데이터 센터(3000)는 각종 데이터를 모아두고 서비스를 제공하는 시설로서, 데이터 스토리지 센터라고 지칭될 수도 있다. 데이터 센터(3000)는 검색 엔진 및 데이터 베이스 운용을 위한 시스템일 수 있으며, 은행 등의 기업 또는 정부기관에서 사용되는 컴퓨팅 시스템일 수 있다. 데이터 센터(3000)는 어플리케이션 서버들(3100 내지 3100n) 및 스토리지 서버들(3200 내지 3200m)을 포함할 수 있다. 어플리케이션 서버들(3100 내지 3100n)의 개수 및 스토리지 서버들(3200 내지 3200m)의 개수는 실시예에 따라 다양하게 선택될 수 있고, 어플리케이션 서버들(3100 내지 3100n)의 개수 및 스토리지 서버들(3200 내지 3200m)의 개수는 서로 다를 수 있다.
어플리케이션 서버(3100) 또는 스토리지 서버(3200)는 프로세서(3110, 3210) 및 메모리(3120, 3220) 중 적어도 하나를 포함할 수 있다. 스토리지 서버(3200)를 예시로 설명하면, 프로세서(3210)는 스토리지 서버(3200)의 전반적인 동작을 제어할 수 있고, 메모리(3220)에 액세스하여 메모리(3220)에 로딩된 명령어 및/또는 데이터를 실행할 수 있다. 메모리(3220)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 또는 NVMDIMM(Non-Volatile DIMM)일 수 있다. 실시예에 따라, 스토리지 서버(3200)에 포함되는 프로세서(3210)의 개수 및 메모리(3220)의 개수는 다양하게 선택될 수 있다. 일 실시예에서, 프로세서(3210)와 메모리(3220)는 프로세서-메모리 페어를 제공할 수 있다. 일 실시예에서, 프로세서(3210)와 메모리(3220)의 개수는 서로 다를 수도 있다. 프로세서(3210)는 단일 코어 프로세서 또는 다중 코어 프로세서를 포함할 수 있다. 스토리지 서버(3200)에 대한 상기 설명은, 어플리케이션 서버(3100)에도 유사하게 적용될 수 있다. 실시예에 따라, 어플리케이션 서버(3100)는 스토리지 장치(3150)를 포함하지 않을 수도 있다. 스토리지 서버(3200)는 적어도 하나 이상의 스토리지 장치(3250)를 포함할 수 있다. 스토리지 서버(3200)에 포함되는 스토리지 장치(3250)의 개수는 실시예에 따라 다양하게 선택될 수 있다.
어플리케이션 서버들(3100 내지 3100n) 및 스토리지 서버들(3200 내지 3200m)은 네트워크(3300)를 통해 서로 통신할 수 있다. 네트워크(3300)는 FC(Fibre Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(3300)의 액세스 방식에 따라 스토리지 서버들(3200 내지 3200m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
일 실시예에서, 네트워크(1300)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 다른 예를 들어, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 다른 실시예에서, 네트워크(1300)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(1300)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
이하에서는, 어플리케이션 서버(3100) 및 스토리지 서버(3200)를 중심으로 설명하기로 한다. 어플리케이션 서버(3100)에 대한 설명은 다른 어플리케이션 서버(3100n)에도 적용될 수 있고, 스토리지 서버(3200)에 대한 설명은 다른 스토리지 서버(3200m)에도 적용될 수 있다.
어플리케이션 서버(3100)는 사용자 또는 클라이언트가 저장 요청한 데이터를 네트워크(3300)를 통해 스토리지 서버들(3200 내지 3200m) 중 하나에 저장할 수 있다. 또한, 어플리케이션 서버(3100)는 사용자 또는 클라이언트가 독출 요청한 데이터를 스토리지 서버들(3200 내지 3200m) 중 하나로부터 네트워크(3300)를 통해 획득할 수 있다. 예를 들어, 어플리케이션 서버(3100)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
어플리케이션 서버(3100)는 네트워크(3300)를 통해 다른 어플리케이션 서버(3100n)에 포함된 메모리(3120n) 또는 스토리지 장치(3150n)에 액세스할 수 있고, 또는 네트워크(3300)를 통해 스토리지 서버(3200-3200m)에 포함된 메모리(3220-3220m) 또는 스토리지 장치(3250-3250m)에 액세스할 수 있다. 이로써, 어플리케이션 서버(3100)는 어플리케이션 서버들(3100-3100n) 및/또는 스토리지 서버들(3200-3200m)에 저장된 데이터에 대해 다양한 동작들을 수행할 수 있다. 예를 들어, 어플리케이션 서버(3100)는 어플리케이션 서버들(3100-3100n) 및/또는 스토리지 서버들(3200-3200m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행할 수 있다. 이 때 데이터는 스토리지 서버들(3200-3200m)의 스토리지 장치로(3250-3250m)부터 스토리지 서버들(3200-3200m)의 메모리들(3220-3220m)을 거쳐서, 또는 바로 어플리케이션 서버들(3100-3100n)의 메모리(3120-3120n)로 이동될 수 있다. 네트워크(3300)를 통해 이동하는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 서버(3200)를 예시로 설명하면, 인터페이스(3254)는 프로세서(3210)와 컨트롤러(3251)의 물리적 연결 및 NIC(3240)와 컨트롤러(3251)의 물리적 연결을 제공할 수 있다. 예를 들어, 인터페이스(3254)는 스토리지 장치(3250)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 또한, 예를 들어, 인터페이스(1254)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
스토리지 서버(3200)는 스위치(3230) 및 NIC(3240)을 더 포함할 수 있다. 스위치(3230)는 프로세서(3210)의 제어에 따라 프로세서(3210)와 스토리지 장치(3250)를 선택적으로 연결시키거나, NIC(3240)과 스토리지 장치(3250)를 선택적으로 연결시킬 수 있다.
일 실시예에서 NIC(3240)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(3240)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(3300)에 연결될 수 있다. NIC(3240)는 내부 메모리, DSP, 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(3210) 및/또는 스위치(3230) 등과 연결될 수 있다. 호스트 버스 인터페이스는, 앞서 설명한 인터페이스(3254)의 예시들 중 하나로 구현될 수도 있다. 일 실시예에서, NIC(3240)는 프로세서(3210), 스위치(3230), 스토리지 장치(3250) 중 적어도 하나와 통합될 수도 있다.
스토리지 서버(3200-3200m) 또는 어플리케이션 서버(3100-3100n)에서 프로세서는 스토리지 장치(3130-3130n, 3250-3250m) 또는 메모리(3120-3120n, 3220-3220m)로 커맨드를 전송하여 데이터를 프로그램하거나 리드할 수 있다. 이 때 데이터는 ECC(Error Correction Code) 엔진을 통해 에러 정정된 데이터일 수 있다. 데이터는 데이터 버스 변환(Data Bus Inversion: DBI) 또는 데이터 마스킹(Data Masking: DM) 처리된 데이터로서, CRC(Cyclic Redundancy Code) 정보를 포함할 수 있다. 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 장치(3150-3150m, 3250-3250m)는 프로세서로부터 수신된 리드 커맨드에 응답하여, 제어 신호 및 커맨드/어드레스 신호를 NAND 플래시 메모리 장치(3252-3252m)로 전송할 수 있다. 이에 따라 NAND 플래시 메모리 장치(3252-3252m)로부터 데이터를 독출하는 경우, RE(Read Enable) 신호는 데이터 출력 제어 신호로 입력되어, 데이터를 DQ 버스로 출력하는 역할을 할 수 있다. RE 신호를 이용하여 DQS(Data Strobe)를 생성할 수 있다. 커맨드와 어드레스 신호는 WE(Write Enable) 신호의 상승 엣지 또는 하강 엣지에 따라 페이지 버퍼에 래치될 수 있다.
컨트롤러(3251)는 스토리지 장치(3250)의 동작을 전반적으로 제어할 수 있다. 일 실시예에서, 컨트롤러(3251)는 SRAM(Static Random Access Memory)을 포함할 수 있다. 컨트롤러(3251)는 기입 커맨드에 응답하여 낸드 플래시(3252)에 데이터를 기입할 수 있고, 또는 독출 커맨드에 응답하여 낸드 플래시(3252)로부터 데이터를 독출할 수 있다. 예를 들어, 기입 커맨드 및/또는 독출 커맨드는 스토리지 서버(3200) 내의 프로세서(3210), 다른 스토리지 서버(3200m) 내의 프로세서(3210m) 또는 어플리케이션 서버(3100, 3100n) 내의 프로세서(3110, 3110n)로부터 제공될 수 있다. DRAM(3253)은 낸드 플래시(3252)에 기입될 데이터 또는 낸드 플래시(3252)로부터 독출된 데이터를 임시 저장(버퍼링)할 수 있다. 또한, DRAM(3253)은 메타 데이터를 저장할 수 있다. 여기서, 메타 데이터는 사용자 데이터 또는 낸드 플래시(3252)를 관리하기 위해 컨트롤러(3251)에서 생성된 데이터이다. 스토리지 장치(3250)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 포함할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
100: 호스트 10: RAID 시스템
200 : 스토리지 장치 210 : 스토리지 컨트롤러
211 : CPU 212 : RAID 엔진
214 : ECC 엔진 213 : HOST I/F
215 : 버퍼메모리 217 : Flash I/F
300 : 비휘발성 메모리 장치 210 : 메모리 인터페이스
320 : 제어 로직 회로 330 : 메모리 셀 어레이
340 : 페이지 버퍼 유닛 350 : 전압 생성기
360 : 로우 디코더

Claims (20)

  1. RAID(Redundant Array of Inexpensive Disk)로 연결된 복수의 비휘발성 메모리 장치 각각에서 서브 스트라이프 데이터를 리드하고, 적어도 하나의 상기 서브 스트라이프 데이터의 에러 정보를 확인하여, 정정 불가능한 에러가 존재하면 RAID 리커버리 동작을 수행하는 RAID 엔진; 및
    상기 RAID 리커버리 동작의 연산 결과를 저장하는 RAID 메모리를 포함하는, 스토리지 컨트롤러.
  2. 제1항에 있어서, 상기 RAID 엔진은
    상기 서브 스트라이프 데이터를 리드할 때마다 증가되는 수행 카운트값 및 상기 서브 스트라이프 데이터에 상기 정정 불가능한 에러가 존재하는 경우 증가되는 실패 카운트값을 저장하는 카운터를 포함하는, 스토리지 컨트롤러.
  3. 제2항에 있어서, 상기 RAID 엔진은
    상기 수행 카운트값이 상기 서브 스트라이프의 전체 개수와 같아질 때까지 상기 서브 스트라이프 데이터를 리드하고 상기 에러 정보에 기초하여, 상기 RAID 리커버리 동작을 수행하는, 스토리지 컨트롤러.
  4. 제2항에 있어서, 상기 RAID 리커버리 동작은
    상기 에러가 존재하지 않는 서브 스프라이프 데이터들 모두를 XOR 연산하여 상기 RAID 메모리에 저장하고, 상기 실패 카운트값이 패리티 서브 스트라이프의 개수 이내인 경우 상기 저장된 연산결과를 리커버리된 데이터로 추출하는, 스토리지 컨트롤러.
  5. 제2항에 있어서, 상기 스토리지 컨트롤러는
    상기 에러 정보에 기초하여 상기 서브 스트라이프 데이터를 에러 디코딩하는 ECC(Error Correction Code) 엔진을 더 포함하고,
    상기 실패 카운트값이 패리티 서브 스트라이프의 개수를 초과하는 경우, 상기 서브 스트라이프 데이터를 상기 ECC 엔진으로 에러 디코딩하는, 스토리지 컨트롤러.
  6. 제5항에 있어서, 상기 ECC 엔진은
    상기 서브 스트라이프 데이터를 하드 디시젼 에러 디코딩으로 제1차 에러 디코딩을 수행하고,
    상기 제1차 에러 디코딩으로도 상기 서브 스트라이프 데이터의 에러가 정정되지 않는 경우, 소프트 디시젼 에러 디코딩으로 제2차 에러 디코딩을 수행하는, 스토리지 컨트롤러.
  7. 제6항에 있어서, 상기 스토리지 컨트롤러는
    상기 제2차 에러 디코딩으로도 상기 서브 스트라이프 데이터의 에러가 정정되지 않는 경우, 상기 RAID 리커버리 동작을 종료하는, 스토리지 컨트롤러.
  8. 제1항에 있어서, 상기 에러 정보는 상기 서브 스트라이프 데이터의 헤더 또는 기초 정보로 저장되는 것인, 스토리지 컨트롤러.
  9. RAID로 연결된 복수의 비휘발성 메모리 장치 각각에서 서브 스트라이프 데이터를 리드하는 단계;
    상기 리드된 서브 스트라이프 데이터의 에러 정보를 확인하여, 정정 불가능한 에러의 존재 유무를 확인하는 단계;
    상기 에러가 존재하는 경우 실패 카운트값을 증가시키고 다음 서브 스트라이프 데이터를 리드하는 단계; 및
    상기 에러가 존재하지 않으면 상기 리드된 서브 스트라이프 데이터로 XOR 연산을 수행하는 단계를 포함하고,
    상기 에러 정보는 상기 서브 스트라이프 데이터의 헤더 또는 기초 정보로 저장되는 스토리지 컨트롤러의 동작방법.
  10. 제9항에 있어서,
    상기 실패 카운트값이 패리티 서브 스트라이프의 개수 이내이고, 상기 스토리지 컨트롤러가 모든 서브 스트라이프 데이터를 리드한 경우, XOR 연산결과를 리커버리 데이터로 추출하는 단계를 더 포함하는, 스토리지 컨트롤러의 동작방법.
  11. 제9항에 있어서,
    상기 실패 카운트값이 패리티 서브 스트라이프의 개수를 초과하면, 모든 카운트값을 리셋하고 상기 복수의 비휘발성 메모리 장치 각각에 저장된 상기 서브 스트라이프 데이터를 재리드하는 단계를 더 포함하는, 스토리지 컨트롤러의 동작방법.
  12. 제11항에 있어서, 상기 스토리지 컨트롤러는 상기 재리드된 서브 스트라이프 데이터에 대해 제1 에러 디코딩을 수행하고,
    상기 제1 에러 디코딩을 수행한 결과 에러가 정정되면 상기 실패 카운트값이 패리티 서브 스트라이프의 개수 이내이고, 모든 서브 스트라이프 데이터를 리드한 경우, XOR 연산결과를 리커버리 데이터로 추출하는, 스토리지 컨트롤러의 동작방법.
  13. 제12항에 있어서, 상기 스토리지 컨트롤러는 상기 재리드된 서브 스트라이프 데이터에 대해 제1 에러 디코딩으로 에러 정정이 되지 않는 경우, 강한 제2 에러 디코딩으로 상기 서브 스트라이프 데이터를 재리드하는, 스토리지 컨트롤러의 동작방법.
  14. 제13항에 있어서, 상기 제1 에러 디코딩으로 에러 정정이 되지 않는 경우 상기 실패 카운트값을 증가시키는, 스토리지 컨트롤러의 동작방법.
  15. 제13항에 있어서, 상기 스토리지 컨트롤러는 상기 재리드된 서브 스트라이프 데이터에 대해 제2 에러 디코딩으로 에러 정정이 되는 경우, 상기 재리드된 서브 스트라이프 데이터로 XOR 연산을 수행하는, 스토리지 컨트롤러의 동작방법.
  16. 제15항에 있어서, 상기 제2 에러 디코딩으로 에러 정정이 되지 않는 경우, 다음 서브 스트라이프 데이터를 리드하는, 스토리지 컨트롤러의 동작방법.
  17. 제16항에 있어서, 상기 스토리지 컨트롤러는 상기 실패 카운트값이 패리티 서브 스트라이프의 개수를 초과하면, RAID 리커버리 동작을 종료하는, 스토리지 컨트롤러의 동작방법.
  18. 복수의 비휘발성 메모리 장치에 연결되고, 각 비휘발성 메모리 장치와 서브 스트라이프 데이터를 송수신하는 DMA(Direct Memory Access) 인터페이스;
    상기 서브 스트라이프 데이터의 에러 정보를 확인하고, 정정 불가능한 에러가 없는 서브 스트라이프 데이터를 기초로 XOR 연산하여 리커버리 데이터를 추출하는 RAID 엔진을 포함하고,
    상기 RAID 엔진은
    상기 정정 불가능한 에러가 있는 서브 스트라이프 데이터의 개수가 패리티 서브 스트라이프의 개수를 초과하는 경우, 상기 리커버리 데이터를 추출하지 않는, 스토리지 컨트롤러.
  19. 제18항에 있어서, 상기 RAID 엔진은
    상기 정정 불가능한 에러가 있는 서브 스트라이프 데이터를 재리드하여 제1 에러 디코딩하고,
    상기 에러가 정정되면 상기 서브 스트라이프 데이터를 기초로 XOR 연산하여 리커버리 데이터를 추출하는, 스토리지 컨트롤러.
  20. 제19항에 있어서, 상기 제1 에러 디코딩으로 상기 에러가 정정되지 않으면,
    상기 서브 스트라이프 데이터를 재리드하여 상기 제1 에러 디코딩보다 강한 제2 에러 디코딩을 수행하는, 스토리지 컨트롤러.
KR1020210024815A 2021-02-24 2021-02-24 스토리지 컨트롤러, 그 동작방법 KR20220120967A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020210024815A KR20220120967A (ko) 2021-02-24 2021-02-24 스토리지 컨트롤러, 그 동작방법
DE102021127814.7A DE102021127814A1 (de) 2021-02-24 2021-10-26 Ablagespeichersteuerung, operationsverfahren dafür
US17/517,946 US20220269561A1 (en) 2021-02-24 2021-11-03 Storage controller, operation method thereof
CN202210155364.1A CN114974362A (zh) 2021-02-24 2022-02-21 存储控制器和存储控制器的操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210024815A KR20220120967A (ko) 2021-02-24 2021-02-24 스토리지 컨트롤러, 그 동작방법

Publications (1)

Publication Number Publication Date
KR20220120967A true KR20220120967A (ko) 2022-08-31

Family

ID=82702093

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210024815A KR20220120967A (ko) 2021-02-24 2021-02-24 스토리지 컨트롤러, 그 동작방법

Country Status (4)

Country Link
US (1) US20220269561A1 (ko)
KR (1) KR20220120967A (ko)
CN (1) CN114974362A (ko)
DE (1) DE102021127814A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11782778B2 (en) * 2021-07-28 2023-10-10 Alibaba Singapore Holding Private Limited Data recovery bypassing protocol for cloud network storage system
US20240070024A1 (en) * 2022-08-30 2024-02-29 Micron Technology, Inc. Read Data Path for a Memory System

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101226685B1 (ko) 2007-11-08 2013-01-25 삼성전자주식회사 수직형 반도체 소자 및 그 제조 방법.
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 삼성전자주식회사 비휘발성 메모리 장치, 그것의 채널 부스팅 방법, 그것의 프로그램 방법 및 그것을 포함하는 메모리 시스템
US8700951B1 (en) * 2011-03-09 2014-04-15 Western Digital Technologies, Inc. System and method for improving a data redundancy scheme in a solid state subsystem with additional metadata
KR101826051B1 (ko) * 2012-02-27 2018-02-07 삼성전자주식회사 비휘발성 메모리 장치의 제어 방법 및 비휘발성 메모리 시스템
KR102572357B1 (ko) * 2016-02-03 2023-08-29 삼성전자주식회사 Raid-6 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템

Also Published As

Publication number Publication date
DE102021127814A1 (de) 2022-08-25
US20220269561A1 (en) 2022-08-25
CN114974362A (zh) 2022-08-30

Similar Documents

Publication Publication Date Title
US11042441B2 (en) Stripe mapping in memory
US9684468B2 (en) Recording dwell time in a non-volatile memory system
US10496312B2 (en) Method of operating a storage device to compress or decompress data and a data storage system including the storage device
US9235503B2 (en) Stripe-based non-volatile multilevel memory operation
US9569306B1 (en) Recovery of multi-page failures in non-volatile memory system
US9304685B2 (en) Storage array system and non-transitory recording medium storing control program
US11531590B2 (en) Method and system for host-assisted data recovery assurance for data center storage device architectures
WO2011043791A2 (en) Stripe-based memory operation
US11340986B1 (en) Host-assisted storage device error correction
US20220269561A1 (en) Storage controller, operation method thereof
US11487609B2 (en) Separating parity data from host data in a memory sub-system
US10552243B2 (en) Corrupt logical block addressing recovery scheme
US11537510B2 (en) Storage devices having minimum write sizes of data
US11804280B2 (en) Non-volatile memory device, operating method thereof, controller for controlling the same, and storage device having the same
US11789815B2 (en) Memory controller and memory device including the same
US20220011979A1 (en) Raid storage device, host, and raid system
US20230092380A1 (en) Operation method of memory controller configured to control memory device
KR102547251B1 (ko) 비휘발성 메모리 장치를 제어하는 제어기, 그것을 포함하는 저장 장치 및 그것의 동작 방법
EP4152333A2 (en) Operation method of memory controller configured to control memory device
EP4187398A1 (en) Controller controlling non-volatile memory device, storage device including the same, and operating method thereof
US20240004762A1 (en) Method of recovering data in storage device using network and storage device performing the same
KR20230064279A (ko) 메모리 시스템에서 데이터를 복구하는 장치 및 방법
CN117349076A (zh) 存储控制器、其操作方法和包括其的存储装置的操作方法

Legal Events

Date Code Title Description
A201 Request for examination