KR102493864B1 - 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법 - Google Patents

스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법 Download PDF

Info

Publication number
KR102493864B1
KR102493864B1 KR1020210157669A KR20210157669A KR102493864B1 KR 102493864 B1 KR102493864 B1 KR 102493864B1 KR 1020210157669 A KR1020210157669 A KR 1020210157669A KR 20210157669 A KR20210157669 A KR 20210157669A KR 102493864 B1 KR102493864 B1 KR 102493864B1
Authority
KR
South Korea
Prior art keywords
data
raid
stream identifier
storage device
stream
Prior art date
Application number
KR1020210157669A
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 KR1020210157669A priority Critical patent/KR102493864B1/ko
Priority to US17/864,653 priority patent/US20230153019A1/en
Priority to EP22191405.4A priority patent/EP4180935A1/en
Priority to CN202211167068.XA priority patent/CN116136743A/zh
Application granted granted Critical
Publication of KR102493864B1 publication Critical patent/KR102493864B1/ko

Links

Images

Classifications

    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • 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/0629Configuration or reconfiguration of storage systems
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0632Configuration or reconfiguration of storage systems by initialisation or re-initialisation of storage systems
    • 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
    • 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/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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

Abstract

본 개시의 실시 예에 따른 RAID 엔진을 포함하고, 다중 스트림을 지원하는 스토리지 장치의 동작 방법에 있어서, 외부 호스트로부터, 제1 스트림 식별자 및 RAID 활성화를 가리키는 RAID 정보를 포함하는 RAID 활성화 요청을 수신하는 단계, 외부 호스트로부터, 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 내지 제4 데이터를 수신하는 단계, RAID 엔진에 의해, RAID 활성화 요청 및 제1 쓰기 요청에 응답하여, 제1 내지 제4 데이터를 기반으로 패리티 데이터를 생성하는 단계, 제1 스트림 식별자를 기반으로 제1 내지 제4 데이터 및 패리티 데이터를 불휘발성 메모리 장치에 저장하는 단계, 외부 호스트로부터, 제2 스트림 식별자를 포함하는 제2 쓰기 요청 및 제5 내지 제8 데이터를 수신하는 단계, 제2 쓰기 요청에 응답하여, 제2 스트림 식별자를 기반으로 제5 내지 제8 데이터를 불휘발성 메모리 장치에 저장하는 단계, 및 외부 호스트로부터, 제1 스트림 식별자 및 RAID 비활성화를 가리키는 RAID 정보를 포함하는 RAID 비활성화 요청을 수신하는 단계를 포함한다.

Description

스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법{OPERATION METHOD OF STORAGE DEVICE, AND OPERATION METHOD OF STORAGE SYSTEM INCLUDING HOST AND STORAGE DEVICE}
본 개시는 반도체 메모리에 관한 것으로, 좀 더 상세하게는 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법 관한 것이다.
반도체 메모리는 SRAM, DRAM 등과 같이 전원 공급이 차단되면 저장하고 있던 데이터가 소멸되는 휘발성 메모리 장치 및 플래시 메모리 장치, PRAM, MRAM, RRAM, FRAM 등과 같이 전원 공급이 차단되어도 저장하고 있던 데이터를 유지하는 불휘발성 메모리 장치로 구분된다.
최근에는 플래시 메모리를 기반으로 하는 솔리드 스테이트 드라이브(SSD)가 컴퓨팅 시스템의 대용량 저장 매체로서 널리 사용된다. SSD를 사용하는 호스트는 어플리케이션에 따라 다양한 종류의 데이터를 생성할 수 있다. 호스트는 SSD의 동작 성능을 개선하기 위해 데이터와 함께 데이터에 관한 정보를 스토리지 장치에 제공할 수 있다.
본 개시의 목적은 스트림 단위로 RAID 정보를 설정하여 향상된 성능 및 향상된 수명을 갖는 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법을 제공하는데 있다.
본 개시의 실시 예에 따른 RAID 엔진을 포함하고, 다중 스트림을 지원하는 스토리지 장치의 동작 방법에 있어서, 외부 호스트로부터, 제1 스트림 식별자 및 RAID 활성화를 가리키는 RAID 정보를 포함하는 RAID 활성화 요청을 수신하는 단계, 외부 호스트로부터, 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 내지 제4 데이터를 수신하는 단계, RAID 엔진에 의해, RAID 활성화 요청 및 제1 쓰기 요청에 응답하여, 제1 내지 제4 데이터를 기반으로 패리티 데이터를 생성하는 단계, 제1 스트림 식별자를 기반으로 제1 내지 제4 데이터 및 패리티 데이터를 불휘발성 메모리 장치에 저장하는 단계, 외부 호스트로부터, 제2 스트림 식별자를 포함하는 제2 쓰기 요청 및 제5 내지 제8 데이터를 수신하는 단계, 제2 쓰기 요청에 응답하여, 제2 스트림 식별자를 기반으로 제5 내지 제8 데이터를 불휘발성 메모리 장치에 저장하는 단계, 및 외부 호스트로부터, 제1 스트림 식별자 및 RAID 비활성화를 가리키는 RAID 정보를 포함하는 RAID 비활성화 요청을 수신하는 단계를 포함한다.
본 개시의 실시 예에 따른 RAID 엔진을 포함하고, 다중 스트림을 지원하는 스토리지 장치의 동작 방법에 있어서, 외부 호스트로부터 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 내지 제4 데이터를 수신하는 단계, 제1 쓰기 요청에 응답하여, 제1 스트림 식별자를 기반으로 제1 내지 제4 데이터를 불휘발성 메모리 장치에 저장하는 단계, 외부 호스트로부터 제1 스트림 식별자를 포함하는 RAID 활성화 요청을 수신하는 단계, RAID 활성화 요청을 수신한 이후에, 외부 호스트로부터 제1 스트림 식별자를 포함하는 제2 쓰기 요청 및 제5 내지 제8 데이터를 수신하는 단계, RAID 엔진에 의해, 제2 쓰기 요청 및 RAID 활성화 요청에 응답하여, 제5 내지 제8 데이터를 기반으로 패리티 데이터를 생성하는 단계, 제1 스트림 식별자를 기반으로 패리티 데이터 및 제5 내지 제8 데이터를 불휘발성 메모리 장치에 저장하는 단계, 제5 내지 제8 데이터를 불휘발성 메모리 장치에 저장한 이후에, 외부 호스트로부터 제1 스트림 식별자를 포함하는 RAID 비활성화 요청을 수신하는 단계, 외부 호스트로부터 제1 스트림 식별자를 포함하는 제3 쓰기 요청 및 제9 내지 제12 데이터를 수신하는 단계, RAID 비활성화 요청 및 제3 쓰기 요청에 응답하여, 제1 스트림 식별자를 기반으로 제9 내지 제12 데이터를 불휘발성 메모리 장치에 저장하는 단계, 외부 호스트로부터 제2 스트림 식별자를 포함하는 제4 쓰기 요청 및 제13 내지 제16 데이터를 수신하는 단계, 및 제4 쓰기 요청에 응답하여, 제2 스트림 식별자를 기반으로 제13 내지 제16 데이터를 불휘발성 메모리 장치에 저장하는 단계를 포함한다.
본 개시의 실시 예에 따른 호스트 및 스토리지 장치를 포함하고, 다중 스트림을 지원하는 스토리지 시스템의 동작 방법에 있어서, 호스트에 의해, 제1 스트림 식별자 및 RAID 활성화를 가리키는 RAID 정보를 포함하는 제1 디렉티브 전송 커맨드를 전송하는 단계, 스토리지 장치에 의해, 제1 디렉티브 전송 커맨드에 응답하여, 제1 스트림 식별자에 대응하는 제1 RAID 정보를 활성화 상태로 설정하는 단계, 호스트에 의해, 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 데이터를 스토리지 장치로 전송하는 단계, 스토리지 장치의 RAID 엔진에 의해, 활성화 상태를 가리키는 제1 RAID 정보 및 제1 쓰기 요청에 응답하여, 제1 데이터를 기반으로 패리티 데이터를 생성하는 단계, 스토리지 장치에 의해, 제1 스트림 식별자를 기반으로 제1 데이터 및 패리티 데이터를 불휘발성 메모리 장치에 저장하는 단계, 호스트에 의해, 제2 스트림 식별자를 포함하는 제2 쓰기 요청 및 제2 데이터를 스토리지 장치로 전송하는 단계, 스토리지 장치에 의해, 제2 쓰기 요청에 응답하여, 제2 스트림 식별자를 기반으로 제2 데이터를 불휘발성 메모리 장치에 저장하는 단계, 호스트에 의해, 제1 스트림 식별자 및 RAID 비활성화를 가리키는 RAID 정보를 포함하는 제2 디렉티브 전송 커맨드를 전송하는 단계, 및 스토리지 장치에 의해, 제2 디렉티브 전송 커맨드에 응답하여, 제1 RAID 정보를 비활성화 상태로 설정하는 단계를 포함한다.
본 개시에 따르면, 스토리지 장치는 다중 스트림을 지원하며, 특정 스트림에 대한 RAID 방식 사용 여부를 설정할 수 있다. 따라서, 향상된 성능 및 효율적으로 저장 공간을 관리하는 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법이 제공된다.
도 1의 불휘발성 메모리 장치를 예시적으로 보여주는 블록도이다.
도 2는 도 1의 스토리지 시스템의 소프트웨어 계층을 예시적으로 보여주는 도면이다.
도 3은 도 1의 불휘발성 메모리 장치를 예시적으로 보여주는 블록도이다.
도 4는 스토리지 장치에서 관리되는 스트림을 설명하기 위한 도면이다.
도 5는 도 3의 메모리 블록들 중 하나의 메모리 블록(BLK)의 예를 보여주는 회로도이다.
도 6은 도 1의 RAID 엔진의 동작을 설명하기 위한 도면이다.
도 7은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다.
도 8은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다.
도 9는 도 8의 동작 방법에 따라 스토리지 장치가 쓰기 동작을 수행하는 예를 보여주는 도면이다.
도 10은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다.
도 11은 도 10의 동작 방법에 따라 스토리지 장치가 읽기 동작을 수행하는 예를 보여주는 도면이다.
도 12는 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다.
도 13은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다.
도 14 내지 도 16c는 도 1의 스토리지 시스템의 동작 방법의 예를 보여주는 도면들이다.
도 17은 쓰기 요청의 예를 보여주는 도면이다.
도 18 내지 도 20은 RAID 설정 요청의 예를 보여주는 도면들이다.
도 21는 본 개시의 실시 예에 따른 스토리지 장치가 적용된 데이터 센터를 예시적으로 보여주는 블록도이다.
이하에서, 본 개시의 기술 분야에서 통상의 지식을 가진 자가 본 개시를 용이하게 실시할 수 있을 정도로, 본 개시의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 개시의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다. 도 1을 참조하면, 스토리지 시스템(10)은 호스트(11) 및 스토리지 장치(100)를 포함할 수 있다. 일 실시 예에서, 스토리지 시스템(10)은 개인용 컴퓨터, 랩탑, 서버, 워크스테이션, 스마트폰, 태블릿 PC, 디지털 카메라, 블랙박스 등과 같이 다양한 정보를 처리하고, 처리된 정보를 저장하도록 구성된 정보 처리 장치들 중 하나일 수 있다.
호스트(11)는 스토리지 시스템(10)의 제반 동작을 제어할 수 있다. 예를 들어, 호스트(11)는 스토리지 장치(100)에 데이터(DATA)를 저장하거나 또는 스토리지 장치(100)에 저장된 데이터(DATA)를 읽기 위한, 요청(RQ; request)을 스토리지 장치(100)로 전송할 수 있다. 일 실시 예에서, 호스트(11)는 스토리지 시스템(10)을 제어하도록 구성된 중앙 처리 유닛(CPU; central processing unit), 애플리케이션 프로세서(AP; application processor)와 같은 프로세서 코어이거나 또는 네트워크를 통해 연결된 컴퓨팅 노드일 수 있다.
일 실시 예에서, 호스트(11)는 호스트 컨트롤러(12) 및 호스트 메모리(13)를 포함할 수 있다. 호스트 컨트롤러(12)는 호스트(11)의 제반 동작을 제어하거나 또는 호스트(11) 측에서, 스토리지 장치(100)를 제어하도록 구성된 장치일 수 있다. 호스트 메모리(13)는 호스트(11)에서 사용되는 버퍼 메모리, 캐시 메모리 또는 동작 메모리일 수 있다.
일 실시 예에서, 호스트(11)로부터 수신된 데이터는 다양한 속성 또는 다양한 특성을 가질 수 있다. 이 때, 데이터에 대한 별도의 구분 없이 데이터가 불휘발성 메모리 장치(120)에 저장되는 경우, 불휘발성 메모리 장치(120)에 대한 유지 관리 동작(예를 들어, 가비지 컬렉션)이 빈번하게 발생할 수 있다. 일 예로서, 불휘발성 메모리 장치(120)의 빈번한 유지 관리 동작은 스토리지 장치(100)의 WAF(write amplification factor) 특성을 증가(즉, 성능을 하락)시킬 수 있다.
일 실시 예에서, 호스트(11)는 스트림(stream)을 기반으로 데이터를 관리할 수 있다. 예를 들어, 스트림 식별자는 데이터 특성에 따라 데이터를 구분하기 위한 정보일 수 있다 호스트(11)는 스토리지 장치(100)에 저장될 데이터에 대한 속성 또는 특성을 기반으로 각 데이터에 대한 스트림 식별자(SID; stream identifier)를 부여할 수 있다. 즉, 동일한 속성 또는 유사한 속성을 갖는 데이터는 동일한 스트림 식별자에 의해 관리될 수 있다. 또는, 서로 연관성 있는 데이터에 대하여 동일 스트림 식별자가 부여될 수 있다.
예를 들어, 호스트(11)는 서로 다른 애플리케이션의 실행에 따라 데이터에 대하여 각각 다른 스트림 식별자를 부여하고, 동일한 애플리케이션으로부터 생성된 데이터에 대하여 동일한 스트림 식별자를 부여할 수 있다. 그러나 본 개시의 범위가 이에 한정되는 것은 아니며, 동일한 애플리케이션으로부터 생성된 데이터에 대하여 데이터 특성에 따라 다른 스트림 식별자가 부여될 수 있다.
일 실시 예에서, 호스트(11)는 스트림 식별자(SID)를 포함하는 요청들을 스토리지 장치(100)로 전송할 수 있다. 예를 들어, 호스트(11)는 스트림 식별자(SID)를 포함하는 입출력 요청 및 관리자 요청을 스토리지 장치(100)로 전송할 수 있다.
일 실시 예에서, 호스트(11)는 복수의 스트림들 각각에 대한 RAID 정보를 설정할 수 있다. 예를 들어, 호스트(11)는 특정 스트림에 대한 RAID 설정 요청을 스토리지 장치(100)로 전송할 수 있다. 호스트(11)는 특정 스트림에 대해 RAID 사용하여 데이터를 저장하도록 RAID 활성화 요청을 스토리지 장치(100)로 전송할 수 있다. 호스트(11)는 특정 스트림에 대해 RAID 사용하지 않고 데이터를 저장하도록 RAID 비활성화 요청을 스토리지 장치(100)로 전송할 수 있다.
스토리지 장치(100)는 호스트(11)의 제어에 따라 동작할 수 있다. 스토리지 장치(100)는 스토리지 컨트롤러(110) 및 불휘발성 메모리 장치(120)를 포함할 수 있다. 스토리지 컨트롤러(110)는 호스트(11)의 제어에 따라 불휘발성 메모리 장치(120)에 데이터를 저장하거나 또는 불휘발성 메모리 장치(120)에 저장된 데이터를 읽을 수 있다. 일 실시 예에서, 스토리지 컨트롤러(110)는 불휘발성 메모리 장치(120)를 효율적으로 사용하기 위한 다양한 관리 동작을 수행할 수 있다.
스토리지 컨트롤러(110)는 중앙 처리 유닛(CPU; central processing unit)(111), 플래시 변환 계층(FTL; flash translation layer)(112), 에러 정정 코드(ECC; error correction code) 엔진(113), AES(advanced encryption standard) 엔진(114), 버퍼 메모리(115), 호스트 인터페이스 회로(116), 메모리 인터페이스 회로(117), 스트림 관리자(118), 및 RAID(Redundant Array of Independent Disks) 엔진(119)을 포함할 수 있다.
CPU(111)는 스토리지 컨트롤러(110)의 제반 동작을 제어할 수 있다. FTL(112)은 불휘발성 메모리 장치(120)를 효율적으로 사용하기 위한 다양한 동작을 수행할 수 있다. 예를 들어, 호스트(11)는 스토리지 장치(100)의 저장 공간을 논리 어드레스로서 관리할 수 있다. FTL(112)은 호스트(11)로부터의 논리 어드레스 및 스토리지 장치(100)의 물리 어드레스 사이의 어드레스 맵핑을 관리하도록 구성될 수 있다. FTL(112)은 웨어 레벨링 동작을 수행하여, 불휘발성 메모리 장치(120)의 메모리 블록(뜨는 블록)들 중 특정 메모리 블록에 대한 과도한 열화를 방지할 수 있다. FTL(112)의 웨어 레벨링 동작에 의해 불휘발성 메모리 장치(120)의 수명이 향상될 수 있다. FTL(112)은 불휘발성 메모리 장치(120)에 대한 가비지 컬렉션을 수행하여, 자유 메모리 블록을 확보할 수 있다.
일 실시 예에서, FTL(112)은 소프트웨어 또는 하드웨어 형태로 구현될 수 있다. FTL(112)이 소프트웨어 형태로 구현되는 경우, FTL(112)과 관련된 프로그램 코드 또는 정보는 버퍼 메모리(115)에 저장될 수 있고, CPU(111)에 의해 실행될 수 있다. FTL(112)이 하드웨어 형태로 구현되는 경우, FTL(112)의 동작을 수행하도록 구성된 하드웨어 가속기가 CPU(111)와 별도로 구비될 수 있다.
ECC 엔진(113)은 불휘발성 메모리 장치(120)로부터 읽은 데이터에 대한 에러 검출 및 에러 정정을 수행할 수 있다. 예를 들어, ECC 엔진(113)은 불휘발성 메모리 장치(120)에 기입될 데이터에 대한 에러 정정 코드(또는 패리티 비트)를 생성할 수 있다. 생성된 에러 정정 코드(또는 패리티 비트)는 기입될 데이터와 함께 불휘발성 메모리 장치(120)에 저장될 수 있다. 이후에, 불휘발성 메모리 장치(120)로부터 기입된 데이터가 독출될 경우, ECC 엔진(113)은 독출된 데이터 및 대응하는 에러 정정 코드(또는 대응하는 패리티 비트)를 기반으로 독출된 데이터의 에러를 검출하고 정정할 수 있다.
AES 엔진(114)은 호스트(11) 또는 불휘발성 메모리 장치(120)로부터 수신된 데이터에 대한 암호화(encryption) 동작 또는 복호화 동작(decryption) 동작을 수행할 수 있다. 일 실시 예에서, 암호화(encryption) 동작 또는 복호화 동작(decryption) 동작은 대칭 키 알고리즘(symmetric-key algorithm)을 기반으로 수행될 수 있다.
버퍼 메모리(115)는 스토리지 컨트롤러(110)로 입력된 데이터를 임시 저장하도록 구성된 쓰기 버퍼 또는 읽기 버퍼일 수 있다. 또는 버퍼 메모리(115)는 스토리지 컨트롤러(110)가 동작하는데 필요한 다양한 정보를 저장하도록 구성될 수 있다. 예를 들어, 버퍼 메모리(115)는 FTL(112)에 의해 관리되는 매핑 테이블을 저장할 수 있다. 또는 버퍼 메모리(115)는 FTL(112)과 관련된 소프트웨어, 펌웨어, 또는 정보를 저장할 수 있다. 좀 더 구체적으로, 버퍼 메모리(115)는 스트림 정보를 포함하는 스트림 테이블을 저장할 수 있다. 버퍼 메모리(115)는 메모리 블록들에 대한 메타 데이터를 저장할 수 있다.
일 실시 예에서, 버퍼 메모리(115)는 SRAM일 수 있으나, 본 개시의 범위가 이에 한정되는 것은 아니며, 버퍼 메모리(115)는 DRAM, MRAM, PRAM 등과 같은 다양한 종류의 메모리 장치로 구현될 수 있다. 도면의 간결성 및 설명의 편의를 위해, 버퍼 메모리(115)가 스토리지 컨트롤러(110)에 포함되는 것으로 도 1에 도시되어 있으나, 본 개시의 범위가 이에 한정되는 것은 아니다. 버퍼 메모리(115)는 스토리지 컨트롤러(110)의 외부에 위치할 수 있고, 스토리지 컨트롤러(110)는 별도의 통신 채널 또는 인터페이스를 통해 버퍼 메모리와 통신할 수 있다.
호스트 인터페이스 회로(116)는 미리 정해진 인터페이스 규약에 따라, 호스트(11)와 통신하도록 구성될 수 있다. 일 실시 예에서, 미리 정해진 인터페이스 규약은 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) 카드 인터페이스, 또는 네트워크 인터페이스 등과 같은 다양한 인터페이스 규약들 중 적어도 하나를 포함할 수 있다. 호스트 인터페이스 회로(116)는 미리 정해진 인터페이스 규약에 기반된 신호를 호스트(11)로부터 수신하고, 수신된 신호를 기반으로 동작할 수 있다. 또는 호스트 인터페이스 회로(116)는 미리 정해진 인터페이스 규약에 기반된 신호를 호스트(11)로 전송할 수 있다.
메모리 인터페이스 회로(117)는 미리 정해진 인터페이스 규약에 따라 불휘발성 메모리 장치(120)와 통신하도록 구성될 수 있다. 일 실시 예에서, 미리 정해진 인터페이스 규약은 토글 인터페이스, 온파이(ONFI) 인터페이스 등과 같은 다양한 인터페이스 규약들 중 적어도 하나를 포함할 수 있다. 일 실시 예에서, 메모리 인터페이스 회로(117)는 토글 인터페이스를 기반으로 불휘발성 메모리 장치(120)와 통신할 수 있다. 이 경우, 메모리 인터페이스 회로(117)는 복수의 채널들(CHs)을 통해 불휘발성 메모리 장치(120)와 통신할 수 있다. 일 실시 예에서, 복수의 채널들(CHs) 각각은 다양한 제어 신호들(예를 들어, /CE, CLE, ALE, /WE, /RE, R/B 등), 데이터 신호들(DQ), 및 데이터 스트로브 신호(DQS)를 전송하도록 구성된 복수의 신호 라인들을 포함할 수 있다.
스트림 관리자(118)는 호스트(11)로부터 수신된 데이터 또는 입출력 요청을 스트림 단위로 관리할 수 있다. 스트림 관리자(118)는 요청에 포함됨 스트림 식별자(SID)를 기반으로 데이터를 불휘발성 메모리 장치(120)에 저장할 수 있다. 이 경우, 유사한 특성을 갖는 데이터가 동일한 스트림으로 분류되기 때문에, 불휘발성 메모리 장치(120)에 대한 유지 관리 동작의 횟수가 감소될 수 있다. 따라서, 스토리지 장치(100)의 전체적인 성능 저하가 방지될 수 있다.
일 실시 예에서, 본 개시에 따른 스트림 관리자(118)는 스트림 단위로 스트림 정보를 스트림 테이블을 관리할 수 있다. 스트림 정보를 스트림에 대한 다양한 정보를 포함할 수 있다. 예를 들어, 스트림 정보는 RAID 정보 및 블록 상태 등을 포함할 수 있다.
예를 들어, RAID 정보는 대응하는 스트림에 대한 RAID 방식 사용 여부에 관한 정보일 수 있다. RAID 정보가 활성화 상태를 가리키는 경우, 스토리지 컨트롤러(110)는 RAID 방식을 사용하여 대응하는 스트림 데이터를 저장할 수 있다. RAID 정보가 비활성화 상태를 가리키는 경우, 스토리지 컨트롤러(110)는 RAID 방식을 사용하지 않고, 대응하는 스트림 데이터를 저장할 수 있다.
이하에서, 본 개시의 실시 예들을 용이하게 설명하기 위해, "스트림(stream)," "스트림 식별자(stream identifier)" 등의 용어들이 사용된다. 스트림(stream)은 동일하거나 또는 유사한 특성을 갖는 데이터 집합을 의미할 수 있다. 또는 스트림(stream)은 호스트(11)에 의해 관리되는 논리 블록 어드레스들이 연속인 데이터의 집합을 의미할 수 있다. 스트림 식별자(stream identifier)는 복수의 스트림들 각각에 대하여 부여됨으로써, 복수의 스트림들 각각을 구분하기 위한 고유한 정보일 수 있다.
RAID 엔진(119)은 불휘발성 메모리 장치(120)에 저장될 데이터에 대한 패리티 데이터를 생성하도록 구성될 수 있다. 예를 들어, 불휘발성 메모리 장치(120)에 복수의 데이터가 저장될 수 있다. 이 경우, 복수의 데이터는 하나의 스트라이프(stripe)를 구성할 수 있다. RAID 엔진(119)은 하나의 스트라이프에 포함된 데이터에 대한 연산을 수행하여, 하나의 스트라이프에 대한 패리티 데이터를 생성할 수 있다.
좀 더 상세한 예로서, 하나의 스트라이프가 7개의 단위 데이터를 포함하는 경우, RAID 엔진(119)은 7개의 단위 데이터에 대한 XOR 연산을 수행함으로써, 하나의 단위 데이터의 크기와 동일한 크기를 갖는 하나의 패리티 데이터를 생성할 수 있다. 이 때, 하나의 스트라이프는 7개의 단위 데이터 및 하나의 패리티 데이터로 구성될 수 있다. 단 본 개시의 범위가 이에 한정되지 아니하며, 하나의 스트라이프에 포함된 단위 데이터의 개수, 패리티 데이터의 크기, 및 패리티 데이터의 개수는 RAID 엔진(119)의 RAID 정책에 의해 결정될 수 있다.
RAID 방식을 사용하는 경우 패리티를 생성하는 등의 다양한 추가적인 연산이 수행된다. 데이터의 양이 많아질수록, 이러한 연산들을 수행하는 데에 대한 부하 및 레이턴시(Latency)가 증가하고, 이는 스토리지 장치 또는 스토리지 시스템의 성능의 저하를 야기한다. 또한, 패리티 데이터로 인한 스토리지 장치의 용량이 감소된다. 이에 따라, 일반적으로 스토리지 장치는 내부 메타 데이터만 RAID 방식을 사용하고, 사용자 데이터에 대해 RAID 방식을 사용하지 않는다.
일반적인 스토리지 장치는 사용자 데이터에 대해 RAID 방식을 사용하는 경우, 전체 영역에 대해 RAID 방식을 사용한다. 즉, 스토리지 장치는 사용자 데이터 중 일부만 RAID 방식을 사용할 수 없으며, 사용자 데이터 전부에 대해 RAID 방식을 사용해야 한다. 이에 따라, 스토리지 장치 또는 스토리지 시스템의 성능 및 용량의 손실이 발생한다.
반면에, 본 개시의 실시 예에 따른 스토리지 장치(100)는 사용자 데이터 중 일부만 RAID 방식을 사용할 수 있다. 스토리지 장치(100)는 멀티-스트림을 지원하며, 복수의 스트림들 중 특정 스트림에 대해서만 RAID 방식을 사용할 수 있다. 스토리지 장치(100)는 사용 중 또는 동작 중(즉, 파워-오프 또는 리셋 없이) 특정 스트림에 대해 RAID를 활성화시키거나 비활성화 시킬 수 있다. 다시 말해서, 스토리지 장치(100)는 펌웨어 변경(또는 갱신, 업데이트(update)) 없이 특정 스트림에 대해 RAID 옵션을 턴-온(ON) 또는 턴-오프(OFF)시킬 수 있다.
일 실시 예에서, 호스트(11)는 스트림 식별자를 포함하는 RAID 설정 요청을 스토리지 장치(100)로 전송 또는 제공할 수 있다. 호스트(11)는 RAID 설정 요청을 통해 스트림 식별자(SID)가 가리키는 스트림에 대한 RAID 정보를 설정할 수 있다. 또는 호스트(11)는 RAID 설정 요청을 통해 스트림 식별자(SID)가 가리키는 스트림에 대한 RAID 정보를 제공할 수 있다.
일 실시 예에서, RAID 설정 요청은 RAID 활성화 요청 및 RAID 비활성화 요청을 포함할 수 있다. 호스트(11)는 RAID 활성화 요청을 통해 특정 스트림에 대한 RAID를 활성화시킬 수 있다. 특정 스트림은 RAID 설정 요청에 포함된 스트림 식별자가 가리키는 스트림이다. 호스트(11)는 RAID 비활성 요청을 통해 특정 스트림에 대한 RAID를 비활성화 시킬 수 있다.
일 실시 예에서, 스토리지 장치(100)는 RAID 설정 요청을 수신할 수 있다. 예를 들어, 스토리지 장치(100)는 스트림 식별자(SID)를 포함하는 RAID 활성화 요청을 수신할 수 있다. 스토리지 장치(100)는 RAID 활성화 요청에서 스트림 식별자(SID)를 확인할 수 있다. 즉, 스토리지 장치(100)는 RAID 활성화 요청에 대응하는 스트림 식별자(SID)를 판별할 수 있다.
일 실시 예에서, 스토리지 장치(100)는 RAID 활성화 요청에 응답하여, 스트림 식별자(SID)가 가리키는 특정 스트림에 대하여, 이후에 수신되는 입출력 요청들에 대하여 RAID 방식을 적용 또는 사용할 수 있다. 스토리지 장치(100)는 스트림 식별자(SID)를 포함하는 RAID 비활성화 요청을 수신할 수 있다. 스토리지 장치(100)는 스트림 식별자(SID)가 가리키는 특정 스트림에 대하여, 이후에 수신되는 입출력 요청들에 대하여 RAID 방식을 적용 또는 사용하지 않을 수 있다.
상술된 바와 같이, 본 개시의 실시 예에 따르면, 스토리지 장치(100)는 높은 신뢰성이 요구되는 데이터에 대해서만 RAID를 사용 또는 적용할 수 있다. 반면에, 스토리지 장치(100)는 높은 신뢰성이 요구되지 않는 데이터에 대해서는 RAID를 사용하지 않을 수 있다. 또한, 펌웨어의 변경 없이 특정 스트림에 대한 RAID 설정을 변경할 수 있다. 이에 따라, 향상된 성능을 갖고 효율적으로 저장 공간을 관리하는 스토리지 장치(100)가 제공된다.
도 2는 도 1의 스토리지 시스템의 소프트웨어 계층을 예시적으로 보여주는 도면이다. 도 1 및 도 2를 참조하면, 스토리지 시스템(10)의 소프트웨어 계층은 애플리케이션 계층(APP), 파일 시스템 계층(FS), 장치 드라이버 계층(DD), 스트림 관리자(118), 및 플래시 변환 계층(112)을 포함할 수 있다.
애플리케이션 계층(APP)은 호스트(11)에서 구동되는 다양한 응응 프로그램들을 포함할 수 있다. 파일 시스템 계층(FS)은 애플리케이션 계층(APP)에서 의해 사용되는 파일 또는 데이터를 조직화하도록 구성될 수 있다. 예를 들어, 파일 시스템 계층(FS)은 스토리지 장치(100)의 저장 공간을 논리 블록 어드레스(LBA; logical block address)로서 관리할 수 있다. 파일 시스템 계층(FS)은 스토리지 장치(100)에 저장된 데이터에 대하여 논리 블록 어드레스를 부여하고 관리할 수 있다. 일 실시 예에서, 파일 시스템 계층(FS)은 호스트(11)의 운영 체제에 따라 다른 형태를 가질 수 있다. 파일 시스템 계층(FS)은 FAT(File Allocation Table), FAT32, NTFS(NT File System), HFS(Hierarchical File System), JSF2(Journaled File System2), XFS, ODS-5(On-Disk Structure-5), UDF, ZFS, UFS(Unix File System), ext2, ext3, ext4, ReiserFS, Reiser4, ISO 9660, Gnome VFS, BFS, WinFS 등과 같은 다양한 파일 시스템 형태들 중 적어도 하나를 포함할 수 있다. 장치 드라이버 계층(DD)은 파일 시스템 계층(FS) 또는 애플리케이션 계층(APP)으로부터의 정보를 스토리지 장치(100)에서 인식 가능한 정보로 변환하는 동작을 수행할 수 있다. 일 실시 예에서, 애플리케이션 계층(APP), 파일 시스템 계층(FS), 및 장치 드라이버 계층(DD)은 소프트웨어 형태로 구현될 수 있으며, 호스트(11) 상에서 구동될 수 있다. 일 실시 예에서, 애플리케이션 계층(APP)은 스토리지 장치(100)로 전송하는 입출력 요청에 대한 스트림 식별자를 할당하도록 구성될 수 있다. 단 본 개시의 범위가 이에 한정되니 아니하며, 파일 시스템 계층(FS) 또는 장지 드라이버 계층(DD)은 스토리지 장치(100)로 전송하는 입출력 요청에 대한 스트림 식별자를 할당하도록 구성될 수 있다.
스트림 관리자(118)는 호스트(11)로부터 수신된 요청에 대하여 스트림 식별자를 판별하도록 구성될 수 있다. 일 실시 예에서, 스트림 관리자(118)는 복수의 스트림 각각에 대한 스트림 정보들을 관리할 수 있다.
FTL(112)은 호스트(11)로부터 수신된 요청의 논리 블록 어드레스를 불휘발성 메모리 장치(120)에서 사용되는 물리 블록 어드레스(또는 물리 어드레스)로 변환하도록 구성될 수 있다. 일 실시 예에서, FTL(112)은 스트림 식별자에 대한 정보를 수신하고, 호스트(11)로부터 수신된 요청이 할당된 스트림 별로 불휘발성 메모리 장치(120)에 저장되도록 어드레스 매핑을 수행할 수 있다.
도 3은 도 1의 불휘발성 메모리 장치를 예시적으로 보여주는 블록도이다. 도 4는 스토리지 장치에서 관리되는 스트림을 설명하기 위한 도면이다. 도 1, 도 3 및 도 4를 참조하면, 불휘발성 메모리 장치(120)는 복수의 불휘발성 메모리들(NVM11~NVM44)을 포함할 수 있다. 복수의 불휘발성 메모리들(NVM11~NVM44) 각각은 하나의 반도체 칩, 하나의 반도체 다이, 또는 하나의 반도체 패키지로 구현될 수 있다.
불휘발성 메모리(NVM11)는 복수의 플레인들(PL1, PL2) 및 주변 회로(PERI)를 포함할 수 있다. 복수의 플레인들(PL1, PL2) 각각은 복수의 메모리 블록들(BLK11~BLK14, BLK21~BLK24)을 포함할 수 있다. 복수의 메모리 블록들(BLK11~BLK14, BLK21~BLK24) 각각은 복수의 페이지들을 포함할 수 있다. 일 실시 예에서, 동일한 플레인(예를 들어, PL1)에 포함된 복수의 메모리 블록들(예를 들어, BLK11~BLK14)은 동일한 비트라인을 공유하도록 구성될 수 있으나, 본 개시의 범위가 이에 한정되는 것은 아니다.
불휘발성 메모리(NVM11)의 주변 회로(PERI)는 복수의 채널들(CH1~CH4) 중 대응하는 채널(예를 들어, CH1)과 연결될 수 있다. 주변 회로(PERI)는 대응하는 채널을 통해 수신된 다양한 신호에 응답하여, 대응하는 채널을 통해 수신된 데이터를 복수의 플레인들(PL1, PL2)에 저장하거나 또는 복수의 플레인들(PL1, PL2)에 저장된 데이터를 대응하는 채널을 통해 출력할 수 있다. 상술된 동작을 위해, 주변 회로(PERI)는 어드레스 디코더, 전압 발생기, 페이지 버퍼 회로, 입출력 회로, 및 제어 로직 회로 등과 같은 다양한 구성 요소들을 포함할 수 있다.
도면의 간결성을 위하여, 하나의 불휘발성 메모리(NVM11)가 2개의 플레인들(PL2)을 포함하고, 하나의 플레인이 4개의 메모리 블록들을 포함하는 것으로 도시되어 있으나, 본 개시의 범위가 이에 한정되는 것은 아니며, 플레인들의 개수, 메모리 블록들의 개수, 또는 페이지들의 개수는 다양하게 변형될 수 있다. 일 실시 예에서, 나머지 불휘발성 메모리들(NVM12~NVM42)은 앞서 설명된 불휘발성 메모리(NVM11)와 유사한 구조를 가질 수 있으며, 이에 대한 상세한 설명은 생략된다.
복수의 불휘발성 메모리들(NVM11~NVM42) 중 제1 일부(NVM11, NVM12)는 제1 채널(CH1)을 통해 스토리지 컨트롤러(110)와 통신할 수 있고, 제2 일부(NVM21, NVM22)는 제2 채널(CH2)을 통해 스토리지 컨트롤러(110)와 통신할 수 있고, 제3 일부(NVM31, NVM32)는 제3 채널(CH3)을 통해 스토리지 컨트롤러(110)와 통신할 수 있고, 제4 일부(NVM41, NVM42)는 제4 채널(CH4)을 통해 스토리지 컨트롤러(110)와 통신할 수 있다.
복수의 불휘발성 메모리들(NVM11~NVM42) 중 제5 일부(NVM11, NVM21, NVM31, NVM41)는 제1 웨이(WAY1)를 구성할 수 있고, 제6 일부(NVM12, NVM22, NVM32, NVM42)는 제2 웨이(WAY2)를 구성할 수 있다. 즉, 불휘발성 메모리 장치(120)는 멀티-웨이/멀티-채널의 구조를 가질 수 있으며, 본 개시의 범위가 도 3에 도시된 구조에 한정되지 않음이 이해될 것이다.
일 실시 예에서, 스토리지 장치(100)는 불휘발성 메모리 장치(120)에 포함된 복수의 메모리 블록들을 복수의 스트림들을 기반으로 관리할 수 있다. 예를 들어, 도 4에 도시된 바와 같이, 스토리지 컨트롤러(110)는 복수의 메모리 블록들 중 제1 메모리 블록들(BLK1)을 제1 스트림 식별자(SID1)에 대응하는 스트림으로 관리할 수 있고, 제2 메모리 블록들(BLK2)을 제2 스트림 식별자(SID2)에 대응하는 스트림으로 관리할 수 있고, 제3 메모리 블록들(BLK3)을 제3 스트림 식별자(SID3)에 대응하는 스트림으로 관리할 수 있고, 제1 메모리 블록들(BLK4)을 제4 스트림 식별자(SID4)에 대응하는 스트림으로 관리할 수 있다.
일 실시 예에서, 동일한 스트림 식별자(예를 들어, SID1)에 대응하는 메모리 블록들(예를 들어, 제1 메모리 블록들(BLK1))은 동일한 플레인에 포함되거나, 동일한 불휘발성 메모리에 포함되거나, 동일한 채널과 연결된 불휘발성 메모리들에 포함되거나, 또는 동일한 웨이에 포함된 불휘발성 메모리들에 포함될 수 있다. 또는, 스트림 식별자(예를 들어, SID1)에 대응하는 메모리 블록들(예를 들어, 제1 메모리 블록들(BLK1))은 복수의 불휘발성 메모리들에 각각 분산될 수 있다. 그러나 상술된 내용은 단순 예시들이며, 본 개시의 범위가 이에 한정되는 것은 아니다.
상술된 바와 같이, 스토리지 시스템(10)은 유사한 특성을 갖는 데이터를 동일한 스트림으로서 관리할 수 있고, 이에 따라, 유사한 특성을 갖는 데이터들은 동일한 스트림에 대응하는 메모리 블록들에 저장될 것이다. 이 경우, 동일한 스트림에 저장된 데이터가 유사한 특성을 갖기 때문에, 스토리지 장치(100)의 유지 관리 동작(예를 들어, 가비지 컬렉션)로 인한 성능 저하가 감소되거나 또는 WAF(write amplification factor)가 감소될 수 있다.
도 5는 도 3의 메모리 블록들 중 하나의 메모리 블록의 예를 보여주는 회로도이다. 도 3 및 도 5를 참조하면, 복수의 셀 스트링들(CS)이 기판(SUB) 위에서 행들 및 열들로 배치될 수 있다. 복수의 셀 스트링들(CS)은 기판(SUB) 상에(또는 안에) 형성되는 공통 소스 라인(CSL)에 공통으로 연결될 수 있다. 도 5에서, 메모리 블록(BLKa)의 구조의 이해를 돕기 위하여, 기판(SUB)의 위치가 예시적으로 표시되어 있다.
도 5에서, 셀 스트링들(CS)의 하단에 공통 소스 라인(CSL)이 연결되는 것으로 도시되어 있다. 그러나 공통 소스 라인(CSL)은 셀 스트링들(CS)의 하단에 전기적으로 연결되는 것으로 충분하며, 물리적으로 셀 스트링들(CS)의 하단에 위치하는 것으로 한정되지 않는다. 예시적으로, 도 5에서 셀 스트링들(CS)은 4X4로 배열되는 것으로 도시되나 메모리 블록(BLKa)은 더 적은 또는 더 많은 수의 셀 스트링들을 포함할 수 있다.
각 행의 셀 스트링들은 접지 선택 라인(GSL1 또는 GSL2)에 공통으로 연결될 수 있다. 예를 들어, 제1 및 제2 행들의 셀 스트링들은 제1 접지 선택 라인(GSL1)에 공통으로 연결되고, 제3 및 제4 행들의 셀 스트링들은 제2 접지 선택 라인(GSL2)에 공통으로 연결될 수 있다.
각 행의 셀 스트링들은 제1 내지 제4 스트링 선택 라인들(SSL1~SSL4) 중 대응하는 스트링 선택 라인들에 연결될 수 있다. 각 열의 셀 스트링들은 제1 내지 제4 비트 라인들(BL1~BL4) 중 대응하는 비트 라인에 연결될 수 있다. 도면이 복잡해지는 것을 방지하기 위하여, 제2 및 제3 스트링 선택 라인들(SSL2, SSL3)에 연결된 셀 스트링들은 옅게 도시되어 있다.
각 셀 스트링은 접지 선택 라인(GSL1 또는 GSL2)에 연결되는 적어도 하나의 접지 선택 트랜지스터(GST), 복수의 워드 라인들(WL1~WL8)에 각각 연결되는 복수의 메모리 셀들(MC1~MC8), 그리고 스트링 선택 라인들(SSL1, SSL2, SSL3 또는 SSL4)에 각각 연결되는 스트링 선택 트랜지스터들(SST)을 포함할 수 있다.
각 셀 스트링에서, 접지 선택 트랜지스터(GST), 메모리 셀들(MC1~MC8), 그리고 스트링 선택 트랜지스터들(SST)은 기판(SUB)과 수직인 방향을 따라 직렬 연결되고, 기판(SUB)과 수직인 방향을 따라 순차적으로 적층될 수 있다. 각 셀 스트링(CS)에서, 메모리 셀들(MC1~MC8) 중 적어도 하나가 더미 메모리 셀로 사용될 수 있다. 더미 메모리 셀은 프로그램되지 않거나(예를 들어, 프로그램이 금지되거나) 또는 메모리 셀들(MC1~MC8)과 다르게 프로그램될 수 있다.
예시적으로, 동일한 높이에 위치하는 각 행의 셀 스트링들의 메모리 셀들은 하나의 물리 페이지를 형성할 수 있다. 하나의 물리 페이지의 메모리 셀들은 하나의 서브 워드 라인에 연결될 수 있다. 동일한 높이에 위치한 물리 페이지들의 서브 워드 라인들은 하나의 워드 라인(WL1~WL8 중 하나)에 공통으로 연결될 수 있다.
예시적으로, 동일한 높이에 위치한 물리 페이지들의 서브 워드 라인들은 서브 워드 라인들이 형성되는 높이에서 서로 연결될 수 있다. 다른 예로서, 동일한 높이에 위치한 물리 페이지들의 서브 워드 라인들은 메탈 층과 같은 서브 워드 라인들이 형성되는 높이와 다른 높이를 갖는 다른 층에서 서로 간접 연결될 수 있다.
예시적으로, 메모리 블록(BLKa)을 3차원 구조로 구현할 때, 메모리 셀들(MC)의 높이에 따라 메모리 셀들(MC)의 특성들이 다르게 구현될 수 있다. 예를 들어, 메모리 셀들(MC)의 높이에 따라 메모리 셀들(MC)의 사이즈들이 다를 수 있다.
도 6은 도 1의 RAID 엔진의 동작을 설명하기 위한 도면이다. 이하에서, 편의를 위하여, 스토리지 장치(100)의 동작을 설명하는데 불필요한 구성 요소들은 생략된다. 도 1 및 도 6을 참조하면, 스토리지 장치(100)는 RAID 방식으로 데이터를 불휘발성 메모리 장치(120)에 저장할 수 있다. 여기서 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)일 수도 있다.
일 실시 예에서, 스토리지 장치(100)를 RAID 방식으로 쓰기 동작을 수행할 수 있다. 즉, 스토리지 장치(100)는 복수의 단위 데이터에 대한 패리티 데이터를 생성하고, 복수의 단위 데이터 및 패리티 데이터로 구성된 하나의 스트라이프를 불휘발성 메모리 장치(120)어 저장할 수 있다. 이하에서, 설명의 편의를 위하여, RAID 방식을 사용하여 데이터를 저장하는 동작은 “RAID 쓰기 동작”이라 칭하고, RAID 방식을 사용하지 않고 데이터를 저장하는 동작(즉, 패리티 데이터를 생성하지 않으며, 패리티 데이터를 저장하지 않음)은 “일반 쓰기 동작”이라 칭한다.
예를 들어, 스토리지 장치(100)는 호스트(11)로부터 제1 내지 제7 데이터(D1~D7)를 수신할 수 있다. 수신된 제1 내지 제7 데이터(D1~D7)는 버퍼 메모리(115)에 저장될 수 있다. 일 실시 예에서, 비록 도면에 도시되지는 않았으나, 제1 내지 제7 데이터(D1~D7)가 버퍼 메모리(115)에 정상적으로 저장된 경우, 스토리지 장치(100)의 스토리지 컨트롤러(110)는 호스트(11)로 제1 내지 제7 데이터(D1~D7)가 정상적으로 수신되었음을 알리는 완료 엔트리(completion entry)를 호스트(11)로 전송할 수 있다. 호스트(11)는 완료 엔트리를 기반으로, 제1 내지 제7 데이터(D1~D7)가 스토리지 장치(100)에 정상적으로 저장된 것으로 인식할 수 있다.
스토리지 컨트롤러(110)는 버퍼 메모리(115)에 저장된 제1 내지 제7 데이터(D1~D7)를 불휘발성 메모리 장치(120)에 저장할 수 있다. 예를 들어, 제1 데이터(D1)는 불휘발성 메모리(NVM11)의 메모리 블록(BLK11)에 저장되고, 제2 데이터(D2)는 불휘발성 메모리(NVM21)의 메모리 블록(BLK11)에 저장되고, 제3 데이터(D3)는 불휘발성 메모리(NVM31)의 메모리 블록(BLK11)에 저장되고, 제4 데이터(D4)는 불휘발성 메모리(NVM41)의 메모리 블록(BLK11)에 저장되고, 제5 데이터(D5)는 불휘발성 메모리(NVM12)의 메모리 블록(BLK11)에 저장되고, 제6 데이터(D6)는 불휘발성 메모리(NVM22)의 메모리 블록(BLK11)에 저장되고, 제7 데이터(D7)는 불휘발성 메모리(NVM32)의 메모리 블록(BLK11)에 저장될 수 있다.
이 때, 스토리지 컨트롤러(110)의 RAID 엔진(1119)은 제1 내지 제7 데이터(D1~D7)를 기반으로 패리티 데이터(P)를 생성할 수 있다. 스토리지 컨트롤러(110)는 생성된 패리티 데이터(P)를 불휘발성 메모리(NVM42)의 메모리 블록(BLK11)에 저장할 수 있다.
즉, 제1 스트라이프(STR1)는 제1 내지 제7 데이터(D1~D7) 및 패리티 데이터(P)를 포함할 수 있다. 제1 스트라이프(STR1)가 패리티 데이터(P)를 포함하기 때문에, 제1 스트라이프(STR1)에 포함된 사용자 데이터 중 어느 하나(예를 들어, D2)가 정상적으로 식별되지 않더라도(예를 들어, ECC엔진(113)에 의해 에러가 정정되지 않더라도), 나머지 사용자 데이터(D1, D3~D7) 및 패리티 데이터(P)를 기반으로 제2 사용자 데이터(D2)가 복구될 수 있다.
도 7은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다. 도 1 및 도 7을 참조하면, S110 단계에서, 스토리지 장치(100)는 호스트(11)로부터 스트림 식별자(SID)를 포함하는 RAID 활성화 요청을 수신할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 호스트 메모리(13)의 관리자 제출 큐(ASQ; Admin Submission Queue)에서 관리자 커맨드(Admin command)인 RAID 활성화 요청을 페치(fetch)할 수 있다. 또는 스토리지 컨트롤러(110)는 호스트 메모리(13)의 제출 큐(SQ; Submission Queue)에서 입출력 커맨드(I/O command)인 RAID 활성화 요청을 페치할 수 있다. 스토리지 컨트롤러(110)는 수신된 RAID 활성화 요청에서 스트림 식별자(SID)를 확인할 수 있다.
S120 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 메모리 블록 또는 슈퍼 블록이 열린(open) 블록인지 판별 또는 결정할 수 있다. 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 메모리 블록이 열린 블록인 경우 S130 단계를 수행하고, 스트림 식별자(SID)에 대응하는 메모리 블록이 열린 블록이 아닌 경우 S140 단계를 수행한다.
일 실시 예에서, 스토리지 장치(100)는 서브 블록 단위, 블록 단위 또는 슈퍼 블록 단위로 동작될 수 있다. 서브 블록은 메모리 블록의 일부일 수 있다. 슈퍼 블록은 적어도 2개의 메모리 블록들을 포함할 수 있다. 이하에서, 설명의 편의를 위하여 “블록”, “서브 블록” “슈퍼 블록” 등의 용어 들이 교환적으로 사용된다. 이러한 용어들은 실시 예들의 맥락에 따라 동일한 의미를 갖거나 또는 서로 다른 의미를 가질 수 있으며, 각 용어들의 의미는 기재될 실시 예들의 맥락에 따라 이해될 것이다.
열린 블록은 프로그램 된 메모리 셀들과 연결된 워드 라인(이하, 프로그램 워드 라인으로 칭함)과 소거 상태의 메모리 셀들과 연결된 워드 라인(이하, 소거 워드 라인으로 칭함)을 포함하는 메모리 블록일 수 있다. 열린 블록은 프로그램 상태의 메모리 셀과 소거 상태의 메모리 셀을 포함할 수 있다. 프로그램 상태의 메모리 셀은 프로그램 워드 라인에 포함될 수 있고, 소거 상태의 메모리 셀은 소거 워드 라인에 포함될 수 있다. 닫힌 블록은 프로그램 된 메모리 셀들과 연결된 워드 라인만 포함하는 메모리 블록일 수 있다. 닫힌 블록은 프로그램 상태의 메모리 셀만 포함할 수 있다. 자유 블록은 소거 상태의 메모리 셀들과 연결된 워드 라인을 포함하는 메모리 블록일 수 있다. 자유 블록은 소거 상태의 메모리 셀만 포함할 수 있다.
S130 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 블록(또는 슈퍼 블록)을 닫을(close) 수 있다. 예를 들어, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 열린 블록에 대하여 더미 프로그램 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 더미 프로그램 커맨드를 불휘발성 메모리 장치(120)로 전송할 수 있다. 스토리지 컨트롤러(110)는 더미 프로그램 커맨드를 통해 열린 블록의 모든 소거 워드 라인을 프로그램 하여 열린 블록을 닫을 수 있다. 따라서, 열린 블록의 워드 라인과 연결된 모든 메모리 셀이 프로그램 상태가 되어 열린 블록은 닫힌 블록이 될 수 있다.
S140 단계에서, 스토리지 장치(100)는 스트림 정보를 갱신할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 단위로 스트림 정보를 스트림 테이블로 관리할 수 있다. 스트림 정보는 RAID 정보를 포함할 수 있다. 스트림 정보는 버퍼 메모리(115)에 저장될 수 있으며, 주기적으로 불휘발성 메모리 장치(120)로 플러시(flush)될 수 있다.
예를 들어, RAID 정보가 제1 논리 값(예를 들어, 'OFF' 또는 '0')인 경우, 스토리지 컨트롤러(110)는 대응하는 스트림에 대해 RAID 방식을 사용하지 않을 수 있다. RAID 정보가 제2 논리 값(또는 'ON' 또는 '1')인 경우, 스토리지 컨트롤러(110)는 대응하는 스트림에 대해 RAID 방식을 사용할 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 RAID 활성화 요청에 응답하여, 스트림 식별자(SID)에 대응하는 RAID 정보를 활성화 상태로 설정할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 식별자(SID)에 대응하는 스트림 테이블의 RAID 정보를 제1 논리 값(예를 들어, '0')에서 제2 논리 값(예를 들어, '1')으로 설정할 수 있다.
S150 단계에서, 스토리지 장치(100)는 완료 엔트리(completion entry)를 호스트(11)로 전송할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 RAID 활성화 요청에 대한 동작이 완료되었음을 알리는 완료 엔트리(CQE)를 호스트(11)의 완료 큐(completion queue) 또는 관리자 완료 큐에 기입할 수 있다. 이후에 스토리지 컨트롤러(110)는 인터럽트 신호를 호스트(11)로 전달할 수 있다. 스토리지 컨트롤러(110)는 인터럽트 신호를 통해 완료 엔트리가 완료 큐에 기입되었음을 호스트(11)에 알릴 수 있다.
상술된 바와 같이, 스토리지 시스템(10)은 RAID 활성화 요청을 통해 특정 스트림에 대해 RAID 설정을 턴-온시킬 수 있다. 즉, 스토리지 시스템(10)은 RAID 활성화 요청을 전송 전에는 특정 스트림에 대하여 일반 쓰기 동작을 수행할 수 있다. 이후에, 스토리지 시스템(10)은 RAID 활성화 요청을 통해 특정 스트림에 대한 RAID 옵션을 변경할 수 있다. 스토리지 시스템(10)은 RAID 활성화 요청 후에는 특정 스트림에 대하여 RAID 쓰기 동작을 수행할 수 있다.
도 8은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다. 도 9는 도 8의 동작 방법에 따라 스토리지 장치가 쓰기 동작을 수행하는 예를 보여주는 도면이다.
도 1, 및 도 8을 참조하면, S210 단계에서, 스토리지 장치(100)는 호스트(11)로부터 스트림 식별자(SID)를 포함하는 쓰기 요청을 수신할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 호스트(11)로부터 쓰기 요청(또는 제출 큐 엔트리(Submission queue entry; SQE))을 페치(fetch)할 수 있다. 스토리지 컨트롤러(110)는 호스트 메모리(13)의 제출 큐(SQ)에 저장된 쓰기 요청을 페치할 수 있다. 스토리지 컨트롤러(110)는 수신된 쓰기 요청에 응답하여, 스트림 식별자(SID)를 확인할 수 있다.
S220 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 블록 또는 슈퍼 블록이 열린 블록인지 여부를 판별할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 식별자(SID)에 대응하는 스트림 정보에서 블록 상태가 열린 상태인지 확인할 수 있다. 스트림 식별자(SID)에 대응하는 블록이 열린 블록인 경우 스토리지 장치(100)는 S240 단계를 진행하고, 스트림 식별자(SID)에 대응하는 블록이 열린 블록이 아닌 경우, 스토리지 장치(100)는 S230 단계를 진행한다.
S230 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)를 위한 새로운 블록 또는 슈퍼 블록을 선택할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 쓰기 요청에 대응하는 데이터를 저장할 블록 또는 슈퍼 블록을 선택할 수 있다. 스토리지 컨트롤러(110)는 소거 상태의 메모리 블록들 중 메모리 블록을 선택할 수 있다. 또는 스토리지 컨트롤러(110)는 소거 상태의 슈퍼 블록들 중 슈퍼 블록을 선택할 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 제1 리스트(list1)에서 메모리 블록을 선택할 수 있다. 예를 들어, 제1 리스트(list1)는 복수의 메모리 블록들 중 소거 상태의 자유 블록들의 집합 또는 리스트일 수 있다. 스토리지 컨트롤러(110)는 선택된 메모리 블록을 제1 리스트(list1)에서 제거할 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 선택된 메모리 블록에 대한 메타 데이터를 갱신할 수 있다. 예를 들어, 메타 데이터는 선택된 메모리 블록에 대한 다양한 정보를 포함할 수 있다. 메타 데이터는 RAID 플래그(flag)를 포함할 수 있다. RAID 플래그(flag)는 메모리 블록에 저장된 데이터에 대한 RAID 방식 사용 여부에 관한 정보일 수 있다. RAID 플래그가 활성화 상태를 가리키는 경우, 대응하는 메모리 블록은 RAID 방식으로 데이터가 저장되어 있을 수 있다. RAID 플래그가 비활성화 상태를 가리키는 경우, 대응하는 메모리 블록에 일반 방식으로 데이터가 저장되어 있을 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 선택된 메모리 블록의 RAID 플래그를 설정할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 식별자(SID)의 RAID 정보를 기반으로, 선택된 메모리 블록의 RAID 플래그를 설정할 수 있다. 스토리지 컨트롤러(110)는 스트림 식별자(SID)의 RAID 정보가 활성화 상태를 가리키는 경우, 선택된 메모리 블록의 RAID 플래그를 활성화 상태로 설정할 수 있다. 스토리지 컨트롤러(110)는 스트림 식별자(SID)의 RAID 정보가 비활성화 상태를 가리키는 경우, 선택된 메모리 블록의 RAID 플래그를 비활성화 상태로 설정할 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 메모리 블록과 관련된 메타 데이터를 버퍼 메모리(115)에 저장할 수 있다. 스토리지 컨트롤러(110)는 선택된 메모리 블록에 대한 메타 데이터를 선택된 메모리 블록 일부에 저장할 수 있다. 또는 스토리지 컨트롤러(110)는 선택된 메모리 블록에 대한 메타 데이터를 선택된 메모리 블록 이외에 불휘발성 메모리 장치(120)에 저장할 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 선택된 메모리 블록을 스트림 식별자(SID)에 연관시킬 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 식별자(SID)에 대응하는 스트림 정보에 선택된 메모리 블록의 어드레스를 저장할 수 있다.
S240 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 RAID 정보가 활성화 상태를 가리키는지 여부를 판별할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 테이블(ST)에서 스트림 식별자(SID)에 대응하는 RAID 정보를 로드(load)할 수 있다. 스트림 식별자(SID)에 대응하는 RAID 정보가 활성화 상태를 가리키는 경우 스토리지 컨트롤러(110)는 S250 단계를 수행하고, 스트림 식별자(SID)에 대응하는 RAID 정보가 비활성화 상태를 가리키는 경우 스토리지 컨트롤러(110)는 S260 단계를 수행한다. 스토리지 장치(100)는 RAID 정보를 기반으로 쓰기 동작을 수행할 수 있다.
S250 단계에서, 스토리지 장치(100)는 RAID 쓰기 동작을 수행할 수 있다. 예를 들어, 활성화 상태의 RAID 정보에 응답하여, 스토리지 컨트롤러(110)는 RAID 방식을 사용하여 쓰기 요청에 대응하는 데이터를 저장할 수 있다. 스트림 식별자(SID)에 대응하는 RAID 정보가 활성화 상태를 가리키므로, 스토리지 컨트롤러(110)는 사용자 데이터(즉, 쓰기 요청에 대응하는 데이터)에 대한 패리티 데이터를 생성하고, 사용자 데이터 및 패리티 데이터를 불휘발성 메모리 장치(120)에 저장할 수 있다.
S260 단계에서, 스토리지 장치(100)는 일반 쓰기 동작을 수행할 수 있다. 예를 들어, 비활성 상태의 RAID 정보에 응답하여, 스토리지 컨트롤러(110)는 RAID 방식을 사용하지 않고 쓰기 요청에 대응하는 데이터를 저장할 수 있다. 스트림 식별자(SID)에 대응하는 RAID 정보가 비활성화 상태를 가리키므로, 스토리지 컨트롤러(110)는 사용자 데이터에 대한 패리티 데이터를 생성하지 않으며, 사용자 데이터만 불휘발성 메모리 장치(120)에 저장할 수 있다.
S270 단계에서, 스토리지 장치(100)는 쓰기 동작을 수행한 페이지가 선택된 메모리 블록의 마지막 페이지인지 여부를 판별할 수 있다. 마지막 페이지인 경우, 스토리지 장치(100)는 S280 단계를 수행하고, 마지막 페이지가 아닌 경우, 이하의 동작을 수행하지 않을 수 있다.
S280 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 RAID 정보가 활성화 상태를 가리키는지 여부를 판별할 수 있다. 스트림 식별자(SID)에 대응하는 RAID 정보가 활성화 상태를 가리키는 경우 스토리지 장치(100)는 S290 단계를 수행하고, 스트림 식별자(SID)에 대응하는 RAID 정보가 활성화 상태를 가리키지 않는 경우(즉, RAID 정보가 비활성화 상태를 가리키는 경우) 스토리지 장치(100)는 S300 단계를 수행한다.
S290 단계에서, 스토리지 장치(100)는 선택된 메모리 블록을 제2 리스트(list2)에 추가 또는 삽입할 수 있다. 예를 들어, 제2 리스트(list2)는 복수의 메모리 블록들 중 닫힌 상태의 블록들(즉, 닫힌 블록들)이며, RAID 방식으로 데이터가 저장된 메모리 블록들의 집합 또는 리스트일 수 있다. 스토리지 컨트롤러(110)는 활성화 상태의 RAID 정보에 응답하여, 선택된 메모리 블록을 온-닫힌 블록 리스트인 제2 리스트(list2)에 추가할 수 있다.
S300 단계에서, 스토리지 장치(100)는 선택된 메모리 블록을 제3 리스트(list3)에 추가 또는 삽입할 수 있다. 예를 들어, 제3 리스트(list3)는 복수의 메모리 블록들 중 닫힌 블록들이며, 일반 방식으로(즉, RAID 방식을 사용하지 않음) 데이터가 저장된 메모리 블록들의 집합 또는 리스트일 수 있다. 스토리지 컨트롤러(110)는 비활성화 상태의 RAID 정보에 응답하여, 선택된 메모리 블록을 오프-닫힌 블록 리스트인 제3 리스트(list3)에 추가할 수 있다.
일 실시 예에서, S290 단계 및 S300 단계 이후에, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 스트림 정보에서 블록 상태를 닫힌 상태로 설정할 수 있다. 이에 따라, 이후에 스트림 식별자(SID)에 대응하는 데이터를 수신하는 경우, 스토리지 장치(100)는 현재 스트림 식별자(SID)에 대응하는 블록이 열린 블록이 아니므로, 새로운 블록을 선택할 수 있다.
도 1, 도 8 및 도 9를 참조하면, 스토리지 장치(100)는 제1 스트림 식별자(SID1) 및 제2 스트림 식별자(SID2)를 관리하는 것으로 가정한다. 제1 스트림 식별자(SID1)의 RAID 정보는 활성화 상태를 가리키고, 제2 스트림 식별자(SID2)의 RAID 정보는 비활성화 상태를 가리킨다고 가정한다.
불휘발성 메모리 장치(120)는 제1 슈퍼 블록 및 제2 슈퍼 블록을 포함할 수 있다. 제1 슈퍼 블록은 NVM11의 BLK11, NVM12의 BLK11, NVM21의 BLK11, NVM22의 BLK11, NVM31의 BLK11, NVM32의 BLK11, NVM41의 BLK11, 및 NVM42의 BLK11을 포함할 수 있다. 제2 슈퍼 블록은 NVM11의 BLK12, NVM12의 BLK12, NVM21의 BLK12, NVM22의 BLK12, NVM31의 BLK12, NVM32의 BLK12, NVM41의 BLK12, 및 NVM42의 BLK12을 포함할 수 있다.
스토리지 컨트롤러(110)는 제1 스트림 식별자(SID1)를 포함하는 쓰기 요청 및 데이터(D11)를 수신할 수 있다. 스토리지 컨트롤러(110)는 제1 스트림 식별자(SID1)에 대응하는 슈퍼 블록이 열린 블록인지 여부를 판별할 수 있다. 제1 스트림 식별자(SID1)에 대응하는 슈퍼 블록이 열린 블록이 아니므로, 스토리지 컨트롤러(110)는 제1 슈퍼 블록을 제1 스트림 식별자(SID1)에 할당할 수 있다. 스토리지 컨트롤러(110)는 제1 슈퍼 블록 중 메모리 블록(예를 들어, NVM11의 BLK11)에 데이터(D11)를 저장할 수 있다.
스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)를 포함하는 쓰기 요청 및 데이터(D21)를 수신할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 슈퍼 블록이 열린 블록인지 여부를 판별할 수 있다. 제2 스트림 식별자(SID2)에 대응하는 슈퍼 블록이 열린 블록이 아니므로, 스토리지 컨트롤러(110)는 제2 슈퍼 블록을 제2 스트림 식별자(SID2)에 할당할 수 있다. 스토리지 컨트롤러(110)는 제2 슈퍼 블록 중 메모리 블록(예를 들어, NVM11의 BLK12)에 데이터(D21)를 저장할 수 있다.
상술된 바와 같이, 멀티 스트림을 지원하는 스토리지 컨트롤러(110)는 스트림 식별자가 다른 경우, 각각 데이터를 불휘발성 메모리 장치 내 다른 물리적 영역(예를 들어, 블록 또는 슈퍼 블록)에 저장할 수 있다. 즉, 제1 슈퍼 블록이 열린 블록임에도 불구하고, 제1 슈퍼 블록에 대응하는 스트림 식별자(예를 들어, SID1)와 데이터(21)에 대응하는 스트림 식별자(예를 들어, SID2)가 서로 상이하므로, 데이터(D21)는 제1 슈퍼 블록에 저장되지 않고, 제1 슈퍼 블록과 다른 제2 슈퍼 블록에 저장될 수 있다.
스토리지 컨트롤러(110)는 제1 스트림 식별자(SID)를 포함하는 쓰기 요청 및 데이터(D12)를 수신할 수 있다. 제1 스트림 식별자(SID1) 대응하는 슈퍼 블록이 열린 블록이므로, 스토리지 컨트롤러(110)는 제1 슈퍼 블록 중 메모리 블록(NVM21의 BLK11)에 데이터(D12)를 저장할 수 있다. 나머지 데이터들(D13~D17)은 데이터(D12)와 유사하므로 상세한 설명은 생략된다.
제1 스트림 식별자(SID1)의 RAID 정보가 활성화 상태를 가리키므로, 스토리지 컨트롤러(110)는 패리티 데이터(P)를 생성하고, 패리티 데이터를 제1 슈퍼 블록 중 메모리 블록(NVM42의 BLK11)에 저장할 수 있다.
스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)를 포함하는 쓰기 요청 및 데이터(D22)를 수신할 수 있다. 제2 스트림 식별자(SID2)에 대응하는 슈퍼 블록이 열린 블록이므로, 스토리지 장치(100)는 제2 슈퍼 블록 중 메모리 블록(NVM21의 BLK12)에 데이터(22)를 저장할 수 있다. 나머지 데이터들(D23~D28)은 데이터(22)와 유사하므로 상세한 설명은 생략된다.
제2 스트림 식별자(SID2)의 RAID 정보가 비활성화 상태를 가리키므로, 스토리지 컨트롤러(110)는 패리티 데이터를 생성하지 않고, 이를 불휘발성 메모리 장치(120)에 저장하지 않을 수 있다.
상술된 바와 같이, 스트림 단위로 RAID 정보를 관리하므로, 제1 스트림 식별자에 대응하는 데이터는 RAID 방식으로 데이터를 저장하고, 제2 스트림 식별자에 대응하는 데이터는 일반 방식으로 데이터를 저장할 수 있다.
도 10은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다. 도 11은 도 10의 동작 방법에 따라 스토리지 장치가 읽기 동작을 수행하는 예를 보여주는 도면이다. 제3 채널과 연결된 불휘발성 메모리(NVM32)에 저장된 데이터(D17) 및 데이터(D27)는 손실되거나 손상된 것으로 가정한다.
도 1, 도 10 및 도 11을 참조하면, S310 단계에서, 스토리지 장치(100)는 호스트(11)로부터 읽기 요청을 수신할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 호스트 메모리(13)의 제출 큐(SQ)에 저장된 읽기 요청을 페치할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 데이터(D17)에 대응하는 어드레스를 포함하는 제1 읽기 요청을 수신할 수 있다. 스토리지 컨트롤러(110)는 데이터(D27)에 대응하는 어드레스를 포함하는 제2 읽기 요청을 수신할 수 있다.
S320 단계에서, 스토리지 장치(100)는 읽기 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 읽기 요청에 응답하여, 수신된 읽기 요청(또는 읽기 요청에 포함된 어드레스)에 대응하는 데이터를 불휘발성 메모리 장치(120)로부터 읽을 수 있다. 스토리지 컨트롤러(110)는 어드레스 변환 동작을 수행하여 읽기 요청에 포함된 어드레스(즉, 논리 어드레스)와 대응되는 불휘발성 메모리 장치(120)의 물리 어드레스를 선택할 수 있다. 스토리지 컨트롤러(110)는 선택된 물리 어드레스에 대응되는 영역에 저장된 데이터를 읽을 수 있다. FTL(112)은 맵핑 테이블을 통해 어드레스 변환 동작을 수행할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 제1 읽기 요청에 포함된 제1 논리 어드레스를 기반으로 제1 물리 어드레스를 선택할 수 있다. 스토리지 컨트롤러(110)는 제1 물리 어드레스에 대응되는 영역에 저장된 데이터(D17)를 읽을 수 있다. 스토리지 컨트롤러(110)는 제2 읽기 요청에 포함된 제2 논리 어드레스를 기반으로 제2 물리 어드레스를 선택할 수 있다. 스토리지 컨트롤러(110)는 제2 물리 어드레스에 대응되는 영역에 저장된 데이터(D27)를 읽을 수 있다.
S330 단계에서, 스토리지 장치(100)는 읽기 에러 검출여부를 판별할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 불휘발성 메모리 장치(120)로부터 제공된 읽기 데이터에 대한 에러를 검출할 수 있다. 스토리지 컨트롤러(110)는 읽기 데이터에 대한 에러가 검출된 경우 S340 단계를 수행하고, 에러가 검출되지 않은 경우 S370 단계를 수행한다.
예를 들어, 스토리지 컨트롤러(110)는 제1 읽기 요청에 응답하여 읽기 데이터(D17)에 대한 에러를 검출하고, 제2 읽기 요청에 응답하여 읽기 데이터(27)에 대한 에러를 검출할 수 있다.
S340 단계에서, 스토리지 장치(100)는 읽기 데이터가 저장된 메모리 블록의 RAID 플래그가 활성화 상태를 가리키는지 여부를 판별할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 버퍼 메모리(115)로부터 읽기 데이터가 저장된 메모리 블록에 대응하는 메타 데이터를 로드할 수 있다. 또는 스토리지 컨트롤러(110)는 불휘발성 메모리 장치(120)로부터 메타 데이터를 로드할 수 있다. 스토리지 컨트롤러(110)는 메타 데이터에 포함된 RAID 플래그를 확인할 수 있다.
일 실시 예에서, 스토리지 컨트롤러(110)는 RAID 플래그를 기반으로 읽기 데이터를 복구할지 여부를 결정할 수 있다. 예를 들어, RAID 플래그라 비활성화 상태를 가리키는 경우 스토리지 컨트롤러(110)는 S350 단계를 수행하고, RAID 플래그가 활성화 상태를 가리키는 경우 스토리지 컨트롤러(110)는 S360 단계를 수행한다.
예를 들어, 스토리지 컨트롤러(110)는 제1 읽기 요청에 대한 에러 검출에 응답하여, 제1 슈퍼 블록의 메타 데이터를 로드할 수 있다. 스토리지 컨트롤러(110)는 제1 데이터(D17)에 대응하는 메타 데이터의 제1 RAID 플래그를 확인할 수 있다. 스토리지 컨트롤러(110)는 활성화 상태를 가리키는 제1 RAID 플래그를 판별할 수 있다.
스토리지 컨트롤러(110)는 제2 읽기 요청에 대한 에러 검출에 응답하여, 제2 슈퍼 블록의 메타 데이터를 로드할 수 있다. 스토리지 컨트롤러(110)는 제2 데이터(D27)에 대응하는 메타 데이터의 제2 RAID 플래그를 확인할 수 있다. 스토리지 컨트롤러(110)는 비활성화 상태를 가리키는 제2 RAID 플래그를 판별할 수 있다.
S350 단계에서, 스토리지 장치(100)는 읽기 실패로 판정하고, 읽기 실패에 대한 정보를 호스트(11)로 전송할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 RAID 플래그가 비활성화 상태를 가리키므로, 일반 방식으로 데이터가 저장되어 있음을 알 수 있다. 이에 따라, 스토리지 컨트롤러(110)는 패리티 데이터가 존재하지 아니하므로 데이터 복구 동작을 수행할 수 없다. 스토리지 컨트롤러(110)는 읽기 요청에 응답하여 읽기 실패로 판정하고, 읽기 실패에 관한 정보를 포함하는 완료 엔트리를 호스트(11)로 전송할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 비활성화 상태를 가리키는 제2 RAID 플래그에 응답하여, 제2 슈퍼 블록은 RAID 방식을 사용하지 않음을 인식할 수 있다. 이에 따라, 스토리지 컨트롤러(110)는 읽기 실패로 판정하고, 읽기 실패에 대한 정보를 포함하는 완료 엔트리를 호스트(11)로 전송할 수 있다.
S360 단계에서, 스토리지 장치(100)는 패리티 데이터를 기반으로 복구 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 에러를 검출한 데이터를 포함하는 스트라이프를 확인할 수 있다. 스토리지 컨트롤러(110)는 스트라이프에 포함된 단위 데이터들 및 패리티 데이터를 불휘발성 메모리 장치(120)로부터 읽을 수 있다. 스토리지 컨트롤러(110)는 나머지 단위 데이터들 및 패리티 데이터를 기반으로 데이터를 복구할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 활성화 상태를 가리키는 제1 RAID 플래그에 응답하여 제1 슈퍼 블록은 RAID 방식을 사용하였음을 인식할 수 있다. 이에 따라, 스토리지 컨트롤러(110)는 나머지 단위 데이터들(D11~D16) 및 패리티 데이터(P)를 읽을 수 있다. 스토리지 컨트롤러(110)의 RAID 엔진(119)은 나머지 단위 데이터들(D11~D16) 및 패리티 데이터(P)를 기반으로 복구 동작을 수행하여 데이터(D17)를 복구할 수 있다.
S370 단계에서, 스토리지 장치(100)는 읽기 데이터를 호스트(11)로 전송할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 불휘발성 메모리 장치(120)로부터 읽은 데이터를 호스트 메모리(13)에 기입할 수 있다. 스토리지 컨트롤러(110)는 읽기 요청에 대응하는 완료 엔트리를 완료 큐에 기입할 수 있다. 이후에 스토리지 컨트롤러(110)는 호스트(11)로 인터럽트 신호를 호스트(11)로 전달할 수 있다.
도 12는 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다. 도 1 및 도 12를 참조하면, S410 단계에서, 스토리지 장치(100)는 호스트(11)로부터 스트림 식별자(SID)를 포함하는 RAID 비활성화 요청을 수신할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 호스트 메모리(13)의 관리자 제출 큐(ASQ)에서 관리자 커맨드인 RAID 비활성화 요청을 페치할 수 있다. 또는 스토리지 컨트롤러(110)는 호스트 메모리(13)의 제출 큐(SQ)에서 입출력 커맨드인 RAID 비활성화 요청을 페치할 수 있다. 스토리지 컨트롤러(110)는 수신된 RAID 비활성화 요청에서 스트림 식별자(SID)를 확인할 수 있다.
S420 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 블록 또는 슈퍼 블록이 열린 블록인지 판별할 수 있다. 예를 들어 스토리지 컨트롤러(110)는 RAID 비활성화 요청에 응답하여, 스트림 식별자(SID)에 대응하는 블록이 열린 블록인 경우 S430 단계를 수행하고, 스트림 식별자(SID)에 대응하는 블록이 열린 블록이 아닌 경우 S440 단계를 수행한다.
S430 단계에서, 스토리지 장치(100)는 스트림 식별자(SID)에 대응하는 블록 또는 슈퍼 블록을 닫을 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 식별자(SID)에 대응하는 열린 블록에 대하여 더미 프로그램 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 더미 프로그램 커맨드를 통해 불휘발성 메모리 장치(120)의 열린 블록을 닫을 수 있다. 더미 프로그램 커맨드는 프로그램 커맨드에 포함될 수 있다.
S440 단계에서, 스토리지 장치(100)는 스트림 정보를 갱신할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 RAID 비활성화 요청에 응답하여, 스트림 식별자(SID)에 대응하는 스트림 정보에서 RAID 정보를 비활성화 상태로 설정할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 스트림 식별자(SID)에 대응하는 RAID 정보를 제2 논리 값(예를 들어, '1')에서 제1 논리 값(예를 들어, '0')으로 설정할 수 있다.
이에 따라, 이후에 스트림 식별자(SID)에 대응하는 데이터에 대한 쓰기 요청을 수신하는 경우, 스토리지 컨트롤러(110)는 RAID 정보가 비활성화 상태를 가리키므로, 데이터에 대하여 RAID 방식을 사용하지 않을 수 있다. 즉, 스토리지 컨트롤러(110)는 스트림 식별자(SID)에 대응하는 데이터에 대해 일반 쓰기 동작을 수행할 수 있다.
S450 단계에서, 스토리지 장치(100)는 완료 엔트리를 호스트(11)로 전송할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 RAID 비활성화 요청에 대한 동작이 완료되었음을 알리는 완료 엔트리를 호스트(11)의 완료 큐 또는 관리자 완료 큐에 기입할 수 있다. 스토리지 컨트롤러(110)는 호스트(11)로 인터럽트 신호를 전달할 수 있다.
도 13은 도 1의 스토리지 장치의 동작 방법의 예를 보여주는 순서도이다. 도 1 및 도 13을 참조하면, S510 단계에서, 스토리지 장치(100)는 제2 리스트(list2)에 대한 가비지 컬렉션(GC; Garbage Collection) 조건이 만족되었는지 여부를 판별할 수 있다. 자유 블록들의 개수가 임계값보다 적은 경우, 가비지 컬렉션 조건이 만족될 수 있다. 단, 본 개시의 범위가 이에 한정되지 아니한다.
일 실시 예에서, 스토리지 장치(100)는 제2 리스트(list2)에 대한 가비지 컬렉션 조건이 만족된 경우 S520 단계를 수행하고, 제2 리스트(list2)에 대한 가비자 컬렉션 조건이 만족되지 않은 경우 S540 단계를 수행한다.
S520 단계에서, 스토리지 장치(100)는 제2 리스트(list2)에 대한 가비지 컬렉션 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제2 리스트(list2)에 포함된 닫힌 블록들 중 유효한 페이지 개수가 가장 적은 메모리 블록들을 선택할 수 있다. 스토리지 컨트롤러(110)는 제2 리스트(list2)에서 선택된 메모리 블록들을 제거할 수 있다. 스토리지 컨트롤러(110)는 선택된 메모리 블록들에 저장된 유효한 페이지들을 새로운 자유 블록에 저장할 수 있다. 스토리지 컨트롤러(110)는 유효한 페이지들을 모두 새로운 자유 블록에 저장하면, 선택된 메모리 블록들에 대한 소거 동작을 수행하여 자유 블록들로 생성할 수 있다.
S530 단계에서, 스토리지 장치(100)는 생성된 새로운 자유 블록들을 제1 리스트(list1)에 추가 또는 삽입할 수 있다. S540 단계에서, 스토리지 장치(100)는 제3 리스트(list3)에 대한 가비지 컬렉션 조건이 만족되었는지 여부를 판별할 수 있다. 스토리지 장치(100)는 제3 리스트(list3)에 대한 가비지 컬렉션 조건이 만족된 경우 S550 단계를 수행하고, 제3 리스트(list3)에 대한 가비지 컬렉션 조건이 만족되지 않은 경우, 이하의 단계들을 수행하지 않을 수 있다.
S550 단계에서, 스토리지 장치(100)는 제3 리스트(list3)에 대한 가비지 컬렉션 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제3 리스트(list)에 포함된 닫힌 블록들 중 유효한 페이지 개수가 가장 적은 메모리 블록들을 선택할 수 있다. 스토리지 컨트롤러(110)는 제3 리스트(list3)에서 선택된 메모리 블록들을 제거할 수 있다. 스토리지 컨트롤러(110)는 선택된 메모리 블록들에 저장된 유효한 페이지들을 새로운 자유 블록에 저장할 수 있다. 스토리지 컨트롤러(110)는 유효한 페이지들을 모두 새로운 자유 블록에 저장하면, 선택된 메모리 블록들에 대한 소거 동작을 수행하여 자유 블록들로 생성할 수 있다. S560 단계에서, 스토리지 장치(100)는 생성된 새로운 자유 블록들을 제1 리스트(list1)에 추가 또는 삽입할 수 있다.
상술된 바와 같이, 스토리지 컨트롤러(110)는 RAID 플래그(즉, RAID 방식 사용여부)를 기반으로 닫힌 블록들을 관리할 수 있다. 스토리지 컨트롤러(110)는 RAID 플래그를 기반으로 가비지 컬렉션 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 RAID 방식으로 기입된 데이터가 저장된 닫힌 블록들을 제2 리스트(list2)로 관리하고, 일반 방식으로 기입된 데이터가 저장된 닫힌 블록들을 제3 리스트(list3)로 관리할 수 있다. 스토리지 컨트롤러(110)는 모든 닫힌 블록들에 대하여 가비지 컬렉션 동작을 수행하지 않고, RAID 방식으로 기입된 데이터가 저장된 닫힌 블록들 사이에서 가비지 컬렉션 동작을 수행하고, 일반 방식으로 기입된 데이터가 저장된 닫힌 블록들 사이에서 가비지 컬렉션 동작을 수행할 수 있다.
도 14 내지 도 16c는 도 1의 스토리지 시스템의 동작 방법의 예를 보여주는 도면들이다. 스토리지 장치(100)는 제1 스트림 식별자(SID1) 및 제2 스트림 식별자(SID2)를 관리하는 것으로 가정한다. 제1 스트림 식별자(SID1)의 RAID 정보는 활성화 상태를 가리키고, 제2 스트림 식별자(SID2)의 RAID 정보는 비활성화 상태를 가리킨다고 가정한다.
불휘발성 메모리 장치(120)는 제1 내지 제4 슈퍼 블록들을 포함할 수 있다. 제1 슈퍼 블록은 NVM11의 BLK11, NVM12의 BLK11, NVM21의 BLK11, NVM22의 BLK11, NVM31의 BLK11, NVM32의 BLK11, NVM41의 BLK11, 및 NVM42의 BLK11을 포함할 수 있다. 제2 슈퍼 블록은 NVM11의 BLK12, NVM12의 BLK12, NVM21의 BLK12, NVM22의 BLK12, NVM31의 BLK12, NVM32의 BLK12, NVM41의 BLK12, 및 NVM42의 BLK12을 포함할 수 있다. 제3 슈퍼 블록은 NVM11의 BLK13, NVM12의 BLK13, NVM21의 BLK13, NVM22의 BLK13, NVM31의 BLK13, NVM32의 BLK13, NVM41의 BLK13, 및 NVM42의 BLK13을 포함할 수 있다. 제4 슈퍼 블록은 NVM11의 BLK14, NVM12의 BLK14, NVM21의 BLK14, NVM22의 BLK14, NVM31의 BLK14, NVM32의 BLK14, NVM41의 BLK14, 및 NVM42의 BLK14을 포함할 수 있다.
도 1, 도 14, 도 15, 및 도 16a을 참조하면, S601단계에서, 호스트(11)는 제1 스트림 식별자(SID1)를 포함하는 제1 쓰기 요청 및 데이터(DATA)(D11~D17)를 스토리지 장치(100)로 전송할 수 있다. S602 단계에서, 스토리지 장치(100)는 제1 쓰기 요청에 응답하여, 완료 엔트리를 호스트(11)로 전송할 수 있다.
S603 단계에서, 스토리지 장치(100)는 제1 쓰기 요청에 대응하는 데이터에 대한 RAID 쓰기 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제1 쓰기 요청에서 제1 스트림 식별자(SID1)를 확인할 수 있다. 스토리지 컨트롤러(110)는 제1 스트림 식별자(SID1)에 대응하는 RAID 정보가 활성화 상태를 가리키는 것을 판별할 수 있다. 스토리지 컨트롤러(110)는 RAID 정보가 제2 논리 값(예를 들어, '1')이므로, 제1 쓰기 요청에 대응하는 데이터(D11~D17)에 대한 RAID 쓰기 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 데이터(D11~D17)에 대한 제1 패리티 데이터(P1)를 생성할 수 있다. 스토리지 컨트롤러(110)는 제1 스트림 식별자(SID1)에 제1 슈퍼 블록을 할당하고, 제1 슈퍼 블록에 데이터(D11~D17) 및 제1 패리티 데이터(P1)를 저장할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 NVM11의 BLK11에 D11를 저장하고, NVM21의 BLK11에 D12를 저장하고, NVM31의 BLK11에 D13를 저장하고, NVM41의 BLK11에 D14를 저장하고, NVM12의 BLK11에 D15를 저장하고, NVM22의 BLK11에 D16를 저장하고, NVM32의 BLK11에 D17를 저장하고, NVM42의 BLK11에 패리티 데이터(P1)를 저장할 수 있다.
S604 단계에서, 호스트(11)는 제2 스트림 식별자(SID2)를 포함하는 제2 쓰기 요청 및 데이터(D21~D25)를 스토리지 장치(100)로 전송할 수 있다. S605 단계에서, 스토리지 장치(100)는 제2 쓰기 요청에 응답하여, 완료 엔트리를 호스트(11)로 전송할 수 있다. S606 단계에서, 스토리지 장치(100)는 제2 쓰기 요청에 대응하는 데이터에 대한 일반 쓰기 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제2 쓰기 요청에서 제2 스트림 식별자(SID2)를 확인할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 RAID 정보가 비활성화 상태를 가리키는 것을 판별할 수 있다. 스토리지 장치(100)는 RAID 정보가 제1 논리 값(예를 들어, '0')이므로, 제2 쓰기 요청에 대응하는 데이터(D21~D25)에 대한 일반 쓰기 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 제2 슈퍼 블록을 할당하고, 제2 슈퍼 블록에 데이터(D21~D25)를 저장할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 NVM11의 BLK12에 D21를 저장하고, NVM21의 BLK12에 D22를 저장하고, NVM31의 BLK12에 D23를 저장하고, NVM41의 BLK12에 D24를 저장하고, NVM12의 BLK12에 D25를 저장할 수 있다.
S607 단계에서, 호스트(11)는 제2 스트림 식별자(SID2)를 포함하는 RAID 활성화 요청을 스토리지 장치(100)로 전송할 수 있다. S608 단계에서, 스토리지 장치(100)는 RAID 활성화 요청에 응답하여, 스트림 정보를 갱신할 수 있다. 도 16b를 참조하면, 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 스트림 정보에서 RAID 정보를 활성화 상태로 설정할 수 있다. 스토리지 컨트롤러(110)는 RAID 정보를 제1 논리 값(예를 들어, '0')에서 제2 논리 값(예를 들어, '1')으로 설정할 수 있다.
일 실시 예에서, RAID 활성화 요청에 응답하여, 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 블록이 열린 블록이므로, 제2 스트림 식별자(SID2)에 대응하는 제2 슈퍼 블록을 닫을 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제2 슈퍼 블록에 대한 더미 프로그램 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 NVM22의 BLK12에 더미 데이터를 기입하고, NVM32의 BLK12에 더미 데이터를 기입하고, NVM42의 BLK12에 더미 데이터를 기입할 수 있다.
S609 단계에서, 스토리지 장치(100)는 RAID 활성화 요청에 응답하여 완료 엔트리를 호스트(11)로 전송할 수 있다. S610 단계에서, 호스트(11)는 제2 스트림 식별자(SID2)를 포함하는 제3 쓰기 요청 및 데이터(D31~D37)를 스토리지 장치(100)로 전송할 수 있다. S611 단계에서, 스토리지 장치(100)는 제3 쓰기 요청에 응답하여 완료 엔트리를 호스트(11)로 전송할 수 있다.
S612 단계에서, 스토리지 장치(100)는 제3 쓰기 요청에 대응하는 데이터에 대한 RAID 쓰기 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제3 쓰기 요청에서 제2 스트림 식별자(SID2)를 확인할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 RAID 정보가 활성화 상태를 가리키는 것을 판별할 수 있다. 스토리지 컨트롤러(110)는 RAID 정보가 제2 논리 값(예를 들어, '1')이므로, 제3 쓰기 요청에 대응하는 데이터(D31~D37)에 대한 RAID 쓰기 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 데이터(D31~D37)에 대한 제2 패리티 데이터(P2)를 생성할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 제3 슈퍼 블록을 할당하고, 제3 슈퍼 블록에 데이터(D31~D37) 및 제2 패리티 데이터(P2)를 저장할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 NVM11의 BLK13에 D31를 저장하고, NVM21의 BLK13에 D32를 저장하고, NVM31의 BLK13에 D33를 저장하고, NVM41의 BLK13에 D34를 저장하고, NVM12의 BLK13에 D35를 저장하고, NVM22의 BLK13에 D36를 저장하고, NVM32의 BLK13에 D37를 저장하고, NVM42의 BLK13에 제2 패리티 데이터(P2)를 저장할 수 있다.
S613 단계에서, 호스트(11)는 제2 스트림 식별자(SID2)를 포함하는 RAID 비활성화 요청을 스토리지 장치(100)로 전송할 수 있다. S614 단계에서, 스토리지 장치(100)는 RAID 비활성화 요청에 응답하여 스트림 정보를 갱신할 수 있다. 도 16c를 참조하면, 스토리지 컨트롤러(110)는 RAID 비활성화 요청에서 제2 스트림 식별자(SID2)를 판별할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 스트림 정보에서 RAID 정보를 비활성화 상태로 설정할 수 있다. 스토리지 컨트롤러(110)는 RAID 정보를 제2 논리 값(예를 들어, '1')에서 제1 논리 값(예를 들어, '0')으로 설정할 수 있다. S615 단계에서, 스토리지 장치(100)는 RAID 비활성화 요청에 응답하여 완료 엔트리를 호스트(11)로 전송할 수 있다.
S616 단계에서, 호스트(11)는 제2 스트림 식별자(SID2)를 포함하는 제4 쓰기 요청 및 데이터(D41~D48)를 스토리지 장치(100)로 전송할 수 있다. S617 단계에서, 스토리지 장치(100)는 제4 쓰기 요청에 응답하여 완료 엔트리를 호스트(11)로 전송할 수 있다.
S618 단계에서, 스토리지 장치(100)는 제4 쓰기 요청에 대응하는 데이터에 대한 일반 쓰기 동작을 수행할 수 있다. 예를 들어, 스토리지 컨트롤러(110)는 제4 쓰기 요청에서 제2 스트림 식별자(SID2)를 확인할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 대응하는 RAID 정보가 비활성화 상태를 가리키는 것을 판별할 수 있다. 스토리지 컨트롤러(110)는 RAID 정보가 제1 논리 값(예를 들어, '0')이므로, 제4 쓰기 요청에 대응하는 데이터(D41~48)에 대한 일반 쓰기 동작을 수행할 수 있다. 스토리지 컨트롤러(110)는 제2 스트림 식별자(SID2)에 제4 슈퍼 블록을 할당하고, 제4 슈퍼 블록에 데이터(D41~D48)를 저장할 수 있다.
예를 들어, 스토리지 컨트롤러(110)는 NVM11의 BLK14에 D41를 저장하고, NVM21의 BLK14에 D42를 저장하고, NVM31의 BLK14에 D43를 저장하고, NVM41의 BLK14에 D44를 저장하고, NVM12의 BLK14에 D45를 저장하고, NVM22의 BLK14에 D46를 저장하고, NVM32의 BLK14에 D47를 저장하고, NVM42의 BLK14에 D48를 저장할 수 있다.
도 17은 쓰기 요청의 예를 보여주는 도면이다. 도 17을 참조하면, 쓰기 요청의 포맷은 레지스터 레벨 인터페이스인 NVM Express(NVMe)를 예시로 설명될 것이다. 그러나, 이러한 도시는 설명의 편의를 위한 예시에 불과함은 잘 이해될 것이다. NVMe 프로토콜에서 요청(또는 커맨드)은 기본적으로 32bit(Dword) 단위로 배열될 수 있다. 쓰기 요청(또는 쓰기 커맨드)는 제1 내지 제16 더블 워드들(Dword0~Dword15)을 포함할 수 있다. 제1 더블 워드(Dword0)는 다양한 요소들(CID, PSDT, FUSE, OPC)을 포함할 수 있다. 예를 들어, 'CID(Command ID)'는 명령어 식별자를 나타내고, 'PSDT(PRP or SGL for Data Transfer)' 데이터 전송 정보를 나타내고, 'FUSE'는 커맨드 셋을 아토믹(atomic) 단위로 실행 여부를 나타내고, 'OPC(opcode)'는 커맨드에 대한 동적 속성을 특정하는 코드 값(즉, 동작 코드)을 나타낸다. 예를 들어, 쓰기 요청의 동작 코드(OPC)는 '01b'이고 읽기 요청의 동작 코드(OPC)는 '10b'일 수 있다.
제2 더블 워드(Dword1)는 'NSID(namespace ID)'를 포함할 수 있고, 'NSID'는 네임스페이스의 식별자를 나타낸다. 제5 및 제6 더블 워드들(Dword4, Dword5)은 'MPTR(Metadata Pointer)'를 포함하고, 'MPTR'은 메타 데이터의 어드레스에 관한 정보를 나타낸다. 제7 내지 제10 더블 워드들(Dword6~Dword9)은 'DPTR(Data Pointer)'을 포함하고, 'DPTR'은 데이터의 어드레스에 관한 정보를 나타낸다. 제11 및 제12 더블 워드들(Dword10, Dword11)은 'SLBA(Starting LBA)'를 포함하고, 'SLBA'는 시작 논리 어드레스를 나타낸다.
제13 더블 워드(Dword12)는 다양한 요소들(LR, FUA, PRINFO, STC, DTYPE, NLB)을 포함할 수 있다. 'LR(Limited Retry)'은 에러 복구 시도에 관한 정보를 나타낸다. 'FUA(Force Unit Access)'는 완료 엔트리 전송 전에 불휘발성 메모리 장치에 데이터 저장 여부를 나타낸다. 'PRINFO(Protection Information Field)'는 보호 정보를 나타낸다. 'STC(Storage Tag Check)'는 스토리지 태그 확인 여부에 관한 정보를 나타낸다. 'DTYPE(Directive Type)'은 디렉티브 유형에 관한 정보를 나타낸다. 'NLB(Number of Logical Blocks)'는 데이터 크기에 관한 정보를 나타낸다.
제14 더블 워드(Dword13)는 'DSPEC' 및 'DSM'를 포함할 수 있다. 'DSPEC(Directive Specific)'는 디렉티브 유형에 따른 디렉티브 구체적인 값(즉, 디렉티브 값)을 나타내고, 'DSM(Dataset Management)'은 데이터의 속성을 나타낸다.
제16 더블 워드(Dword15)는 'LBATM' 및 'LBAT'를 포함할 수 있다. 'LBATM(Logical Block Application Tag Mask)'는 애플리케이션 태그 마스크 값에 관한 정보를 나타내고, 'LBAT(Logical Block Application Tag)'는 애플리케이션 태그 값에 관한 정보를 나타낸다.
NVMe 프로토콜에서, 호스트(11)는 디렉티브 매커니즘을 통해 스토리지 장치(100)와 정보를 교환할 수 있다. 호스트(11)는 디렉티브 수신 커맨드(Directive Receive command)를 통해 스토리지 장치(100)로부터 디렉티브 유형과 관련된 데이터를 수신할 수 있다. 호스트(11)는 디렉티브 전송 커맨드(Directive Send command)를 통해 스토리지 장치(100)로 디렉티브 유형과 관련된 데이터를 전송할 수 있다. 디렉티브 유형은 식별(Identify) 및 스트림(streams)을 포함할 수 있다. 식별에 대한 디렉티브 유형의 값은 '00h'이고, 스트림에 대한 디렉티브 유형의 값은 '01h'이다.
일 실시 예에서, 본 개시의 실시 예에 따른 호스트(11)는 스트림 식별자(SID)를 포함하는 입출력 요청(예를 들어, 쓰기 요청)을 스토리지 장치(100)로 전송할 수 있다. 호스트(11)는 'DTYPE' 및 'DSPEC'를 통해 스트림 식별자(SID)를 전송할 수 있다. 예를 들어, 호스트(11)는 쓰기 요청에서 디렉티브 유형(DTYPE)을 스트림(예를 들어, '01h')으로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)(또는 스트림 식별자(SID)의 값)로 설정할 수 있다. 스토리지 장치(100)는 쓰기 요청에서 디렉티브 유형(DTYPE) 및 디렉티브 값(DSPEC)을 기반으로 스트림 식별자(SID)를 판별할 수 있다.
도 18 내지 도 20은 RAID 설정 요청의 예를 보여주는 도면들이다. 도 18 내지 도 20을 참조하면, 쓰기 요청의 포맷은 레지스터 레벨 인터페이스인 NVM Express(NVMe)를 예시로 설명될 것이다. 그러나, 이러한 도시는 설명의 편의를 위한 예시에 불과함은 잘 이해될 것이다.
일 실시 예에서, 호스트(11)는 RAID 설정 요청을 스토리지 장치(100)로 전송할 수 있다. 예를 들어, 호스트(11)는 특정 스트림에 대한 RAID 옵션을 활성화하기 위하여, 특정 스트림에 대응하는 스트림 식별자(SID)를 포함하는 RAID 활성화 요청을 스토리지 장치(100)로 전송할 수 있다. 호스트(11)는 특정 스트림에 대한 RAID 옵션을 비활성화하기 위하여, 특정 스트림에 대응하는 스트림 식별자(SID)를 포함하는 RAID 비활성화 요청을 스토리지 장치(100)로 전송할 수 있다.
도 18을 참조하면, RAID 설정 요청은 디렉티브 전송 커맨드일 수 있다. 호스트(11)는 디렉티브 전송 커맨드를 통해 특정 스트림에 대한 스토리지 장치(100)의 RAID 사용 여부를 설정할 수 있다. 디렉티브 전송 커맨드는 제1 내지 제16 더블 워드들(Dword0~Dword15)을 포함할 수 있다. 설명의 편의를 위하여, 앞서 설명된 요소들에 대한 상세한 설명은 생략된다.
디렉티브 전송 커맨드는 관리자 커맨드이며, 디렉티브 전송 커맨드의 동작 코드는 '19h'일 수 있다. 제12 더블 워드(Dword11)는 'DSPEC', 'DTRYPE', 'DOPER'를 포함할 수 있다. 'DOPER(Directive Operation)'은 디렉티브 동작을 나타낸다.
디렉티브 동작(DOPER)은 식별자 해제(Release Identifier), 자원 해제(Release Resource), RAID 활성화, 및 RAID 비활성화를 포함할 수 있다. 식별자 해제의 값은 '01h'이고, 자원 해제의 값은 '02h'이고, RAID 활성화의 값은 '03h'이고, RAID 비활성화의 값의 '04h'일 수 있다.
일 실시 예에서, 호스트(11)는 RAID 활성화 요청을 스토리지 장치(100)로 전송할 수 있다. RAID 활성화 요청은 디렉티브 전송 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드를 디렉티브 전송('19b')으로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)로 설정하고, 디렉티브 유형(DTYPE)을 스트림('01h')으로 설정하고, 디렉티브 동작(DOPER)을 RAID 활성화('03h')로 설정할 수 있다. 스토리지 장치(100)는 관리자 커맨드의 동작 코드(OPC), 디렉티브 값(DSPEC), 디렉티브 유형(DTYPE), 디렉티브 동작(DOPER)을 기반으로 RAID 활성화 요청을 판별할 수 있다.
일 실시 예에서, 호스트(11)는 RAID 비활성화 요청을 스토리지 장치(100)로 전송할 수 있다. RAID 비활성화 요청은 디렉티브 전송 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드는 디렉티브 전송('19b')으로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)로 설정하고, 디렉티브 유형(DTYPE)을 스트림('01h')으로 설정하고, 디렉티브 동작(DOPER)을 RAID 비활성화('04h')로 설정할 수 있다. 스토리지 장치(100)는 관리자 커맨드의 동작 코드(OPC), 디렉티브 값(DSPEC), 디렉티브 유형(DTYPE), 디렉티브 동작(DOPER)을 기반으로 RAID 비활성화 요청을 판별할 수 있다.
도 19를 참조하면, RAID 설정 요청은 디렉티브 전송 커맨드일 수 있다. 호스트(11)는 디렉티브 전송 커맨드를 통해 특정 스트림에 대한 스토리지 장치(100)의 RAID 사용 여부를 설정할 수 있다.
일 실시 예에서, 도 18의 디렉티브 동작(DOPER)과 다르게, 도 19의 디렉티브 동작(DOPER)은 식별자 해제(Release Identifier), 자원 해제(Release Resource), RAID 정보 설정을 포함할 수 있다. 식별자 해제의 값은 '01h'이고, 자원 해제의 값은 '02h'이고, RAID 정보 설정의 값은 '03h'일 수 있다.
제13 더블 워드(Dword12)는 RAID 정보(RINFO)를 포함할 수 있다. RAID 정보(RINFO)는 RAID 비활성화 및 RAID 활성화를 포함할 수 있다. RAID 비활성화의 값은 '0b'이고, RAID 활성화의 값은 '1b'일 수 있다.
일 실시 예에서, 호스트(11)는 RAID 활성화 요청을 스토리지 장치(100)로 전송할 수 있다. RAID 활성화 요청은 디렉티브 전송 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드를 디렉티브 전송('19b')으로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)로 설정하고, 디렉티브 유형(DTYPE)을 스트림('01h')으로 설정하고, 디렉티브 동작(DOPER)을 RAID 정보 설정('03h')으로 설정하고, RAID 정보(RINFO)를 RAID 활성화('01b')로 설정할 수 있다. 스토리지 장치(100)는 관리자 커맨드의 동작 코드(OPC), 디렉티브 값(DSPEC), 디렉티브 유형(DTYPE), 디렉티브 동작(DOPER), RAID 정보(RINFO)를 기반으로 RAID 활성화 요청을 판별할 수 있다.
일 실시 예에서, 호스트(11)는 RAID 비활성화 요청을 스토리지 장치(100)로 전송할 수 있다. RAID 비활성화 요청은 디렉티브 전송 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드는 디렉티브 전송('19b')으로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)로 설정하고, 디렉티브 유형(DTYPE)을 스트림('01h')으로 설정하고, 디렉티브 동작(DOPER)을 RAID 정보 설정('03h')으로 설정하고, RAID 정보(RINFO)를 RAID 비활성화('04h')로 설정할 수 있다. 스토리지 장치(100)는 관리자 커맨드의 동작 코드(OPC), 디렉티브 값(DSPEC), 디렉티브 유형(DTYPE), 디렉티브 동작(DOPER), RAID 정보(RINFO)를 기반으로 RAID 비활성화 요청을 판별할 수 있다.
일 실시 예에서, 호스트(11)는 복수의 스트림 각각에 대한 RAID 정보를 스토리지 장치(100)로부터 수신할 수 있다. 호스트(11)는 RAID 상태 요청을 스토리지 장치(100)로 전송할 수 있다. 스토리지 장치(100)는 RAID 상태 요청에 응답하여 복수의 스트림 각각에 대한 RAID 사용 여부에 관한 정보를 호스트(11)로 전송할 수 있다.
예를 들어, RAID 상태 요청은 디렉티브 수신 커맨드일 수 있다. 호스트(11)는 디렉티브 수신 커맨드를 통해 복수의 스트림 각각에 대한 RAID 정보를 스토리지 장치(100)로부터 수신할 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드(OPC)를 디렉티브 수신('1Ah')로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)로 설정하고, 디렉티브 유형(DTYPE)을 스트림('01h')로 설정하고, 디렉티브 동작(DOPER)을 파라미터 리턴('01h')으로 설정할 수 있다. 또는 호스트(11)는 관리자 커맨드의 동작 코드(OPC)를 디렉티브 수신('1Ah')로 설정하고, 디렉티브 값(DSPEC)을 스트림 식별자(SID)로 설정하고, 디렉티브 유형(DTYPE)을 스트림('01h')로 설정하고, 디렉티브 동작(DOPER)을 스트림 RAID 상태로 설정할 수 있다. 스토리지 장치(100)는 디렉티브 수신 커맨드에 응답하여, 스트림 정보의 RAID 정보를 기반으로 복수의 스트림 각각에 대한 RAID 사용 여부에 관한 정보를 포함하는 데이터를 호스트(11)로 전송할 수 있다.
도 20을 참조하면, RAID 설정 요청은 셋 피쳐(Set Feature) 커맨드일 수 있다. 호스트(11)는 셋 피쳐 커맨드를 통해 특정 스트림에 대한 스토리지 장치(100)의 RAID 사용 여부를 설정할 수 있다. 셋 피쳐 커맨드는 제1 내지 제16 더블 워드들(Dword0~Dword15)을 포함할 수 있다. 설명의 편의를 위하여, 앞서 설명된 요소들에 대한 상세한 설명은 생략된다.
셋-피쳐 커맨드는 관리자 커맨드이며, 셋-피쳐 커맨드의 동작 코드(OPC)는 '09h'일 수 있다. 제11 더블 워드(Dword10)는 'SV' 및 'FID'를 포함할 수 있다. 'SV(save)'는 속성 저장 여부를 나타내고, 'FID(Feature Identifier)'는 피쳐(속성 또는 특성) 식별자를 나타낼 수 있다. 예를 들어, 피쳐 식별자(FID)는 스트림 RAID 구성(또는 설정)을 더 포함할 수 있다. 제14 더블 워드(Dword13)는 스트림 식별자(SID) 및 RAID 정보(RINFO)를 포함할 수 있다. RAID 정보(RINFO)는 RAID 비활성화 및 RAID 활성화를 포함할 수 있다. RAID 비활성화의 값은 '0b'이고, RAID 활성화의 값은 '1b'일 수 있다.
일 실시 예에서, 호스트(11)는 RAID 활성화 요청을 스토리지 장치(100)로 전송할 수 있다. RAID 활성화 요청은 셋 피쳐 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드를 셋 피쳐('09h')로 설정하고, 피쳐 식별자(FID)를 스트림 RAID 구성으로 설정하고, 스트림 식별자(SID)의 값을 설정하고, RAID 정보(RINFO)를 RAID 활성화('01b')로 설정할 수 있다. 스토리지 장치(100)는 관리자 커맨드의 동작 코드(OPC), 피쳐 식별자(FID), 스트림 식별자(SID), RAID 정보(RINFO)를 기반으로 RAID 활성화 요청을 판별할 수 있다.
일 실시 예에서, 호스트(11)는 RAID 비활성화 요청을 스토리지 장치(100)로 전송할 수 있다. RAID 비활성화 요청은 셋 피쳐 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드를 셋 피쳐('09h')로 설정하고, 피쳐 식별자(FID)를 스트림 RAID 구성을 설정하고, 스트림 식별자(SID)의 값을 설정하고, RAID 정보(RINFO)를 RAID 비활성화('00b')로 설정할 수 있다. 스토리지 장치(100)는 관리자 커맨드의 동작 코드(OPC), 피쳐 식별자(FID), 스트림 식별자(SID), RAID 정보(RINFO)를 기반으로 RAID 비활성화 요청을 판별할 수 있다.
일 실시 예에서, 호스트(11)를 RAID 상태 요청을 스토리지 장치(100)로 전송할 수 있다. 예를 들어, RAID 상태 요청은 겟 피쳐 커맨드일 수 있다. 호스트(11)는 관리자 커맨드의 동작 코드를 겟 피쳐('0Ah')로 설정하고, 피쳐 식별자(FID)를 스트림 RAID 구성으로 설정할 수 있다. 스토리지 장치(100)는 겟 피쳐 커맨드에 응답하여, 스트림 정보의 RAID 정보를 기반으로 복수의 스트림 각각에 대한 RAID 사용 여부에 관한 정보를 포함하는 데이터를 호스트(11)로 전송할 수 있다.
도 21는 본 개시의 실시 예에 따른 스토리지 장치가 적용된 데이터 센터를 예시적으로 보여주는 블록도이다. 데이터 센터(1000)는 다양한 데이터를 유지 관리하고, 다양한 데이터에 대한 다양한 서비스를 제공하는 시설로서, 데이터 스토리지 센터로 불릴 수 있다. 데이터 센터(1000)는 검색 엔진 또는 데이터 베이스 운용을 위한 시스템일 수 있으며, 다양한 기관에서 사용된 컴퓨팅 시스템일 수 있다. 데이터 센터(1000)는 복수의 애플리케이션 서버들(1100_1~1100_n) 및 복수의 스토리지 서버들(1200_1~1200_m)을 포함할 수 있다. 복수의 애플리케이션 서버들(1100_1~1100_n)의 개수 및 복수의 스토리지 서버들(1200_1~1200_m)의 개수는 다양하게 변형될 수 있다.
이하에서, 설명의 편의를 위해, 제1 스토리지 서버(1200_1)의 예시가 설명된다. 나머지 스토리지 서버들(1200_2~1200_m) 및 복수의 애플리케이션 서버들(1100_1~1100_n) 각각은 제1 스토리지 서버(1200_1)와 유사한 구조를 가질 수 있다.
제1 스토리지 서버(1200_1)는 프로세서(1210_1), 메모리(1220_1), 스위치(1230_1), 네트워크 인터페이스 커넥터(NIC; network interface connector)(1240_1), 및 스토리지 장치(1250_1)를 포함할 수 있다. 프로세서(1210_1)는 제1 스토리지 서버(1200_1)의 전반적인 동작을 제어할 수 있다. 메모리(1220_1)는 프로세서(1210_1)의 제어에 따라 다양한 명령어 또는 데이터를 저장할 수 있다. 프로세서(1210_1)는 메모리(1220_1)를 액세스하여 다양한 명령어를 실행하거나 또는 데이터를 처리하도록 구성될 수 있다. 일 실시 예에서, 메모리(1220_1)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 또는 NVDIMM(Non-Volatile DIMM)과 같은 다양한 종류의 메모리 장치들 중 적어도 하나를 포함할 수 있다.
일 실시 예에서, 제1 스토리지 서버(1200_1)에 포함된 프로세서(1210_1)의 개수 및 메모리(1220_1)의 개수는 다양하게 변형될 수 있다. 일 실시 예에서, 제1 스토리지 서버(1200_1)에 포함된 프로세서(1210_1) 및 메모리(1220_1)는 프로세서-메모리 페어를 구성할 수 있으며, 제1 스토리지 서버(1200_1)에 포함된 프로세서-메모리 페어의 개수는 다양하게 변형될 수 있다. 일 실시 예에서, 제1 스토리지 서버(1200_1)에 포함된 프로세서(1210_1)의 개수 및 메모리(1220_1)의 개수는 서로 다를 수 있다. 프로세서(1210_1)는 싱글 코어 프로세서 또는 멀티 코어 프로세서를 포함할 수 있다.
스위치(1230_1)는 프로세서(1210_1)의 제어에 따라 프로세서(1210_1) 및 스토리지 장치(1250_1) 사이를 선택적으로 연결시키거나 또는 NIC(1240_1) 및 스토리지 장치(1250_1) 사이를 선택적으로 연결시킬 수 있다.
NIC(1240_1)는 제1 스토리지 서버(1200_1)를 네트워크(NT)와 연결시키도록 구성될 수 있다. NIC(1240_1)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(1240_1)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(NT)에 연결될 수 있다. NIC(1240_1)는 내부 메모리, DSP, 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(1210_1) 또는 스위치(1230_1) 등과 연결될 수 있다. 호스트 버스 인터페이스는, 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) 카드 인터페이스 등과 같은 다양한 인터페이스들 중 적어도 하나를 포함할 수 있다. 일 실시 예에서, NIC(1240_1)는 프로세서(1210_1), 스위치(1230_1), 및 스토리지 장치(1250_1) 중 적어도 하나와 통합될 수도 있다.
스토리지 장치(1250_1)는 프로세서(1210_1)의 제어에 따라 데이터를 저장하거나 또는 저장된 데이터를 출력할 수 있다. 스토리지 장치(1250_1)는 컨트롤러(1251_1), 불휘발성 메모리(1252_1), DRAM(1253_1), 및 인터페이스(1254_1)를 포함할 수 있다. 일 실시 예에서, 스토리지 장치(1250_1)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 더 포함할 수 있다.
컨트롤러(1251_1)는 스토리지 장치(1250_1)의 제반 동작을 제어할 수 있다. 일 실시 예에서, 컨트롤러(1251_1)는 SRAM을 포함할 수 있다. 컨트롤러(1251_1)는 인터페이스(1254_1)를 통해 수신된 신호들에 응답하여 불휘발성 메모리(1252_1)에 데이터를 저장하거나 또는 불휘발성 메모리(1252_1)에 저장된 데이터를 출력할 수 있다. 일 실시 예에서, 컨트롤러(1251_1)는 토글 인터페이스 또는 ONFI 인터페이스를 기반으로 불휘발성 메모리(1252_1)를 제어하도록 구성될 수 있다.
DRAM(1253_1)은 불휘발성 메모리(1252_1)에 저장될 데이터 또는 불휘발성 메모리(1252_1)로부터 읽어진 데이터를 임시 저장하도록 구성될 수 있다. DRAM(1253_1)은 컨트롤러(1251_1)가 동작하는데 필요한 다양한 데이터(예를 들어, 메타 데이터, 매핑 데이터 등)를 저장하도록 구성될 수 있다. 인터페이스(1254_1)는 프로세서(1210_1), 스위치(1230_1), 또는 NIC(1240_1)와 컨트롤러(1251_1) 사이의 물리적 연결을 제공할 수 있다. 일 실시 예에서, 인터페이스(1254_1)는 스토리지 장치(1250_1)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 일 실시 예에서, 인터페이스(1254_1)는 앞서 호스트 인터페이스 버스를 통해 설명된 다양한 인터페이스들 중 적어도 하나를 기반으로 구성될 수 있다.
상술된 제1 스토리지 서버(1200_1)의 구성들은 예시적인 것이며, 본 개시의 범위가 이에 한정되는 것은 아니다. 상술된 제1 스토리지 서버(1200_1)의 구성들은 다른 스토리지 서버들 또는 복수의 애플리케이션 서버들 각각에 적용될 수 있다. 일 실시 예에서, 복수의 애플리케이션 서버들(1100_1~1100_n) 각각에서, 스토리지 장치(1150_1)는 선택적으로 생략될 수 있다.
복수의 애플리케이션 서버들(1100_1~1100_n) 및 복수의 스토리지 서버들(1200_1~1200_m)은 네트워크(NT)를 통해 서로 통신할 수 있다. 네트워크(NT)는 FC(Fibre Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(NT)의 액세스 방식에 따라 스토리지 서버들(1200_1~1200_m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
일 실시 예에서, 네트워크(NT)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 또는, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 일 실시 예에서, 네트워크(NT)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(NT)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
일 실시 예에서, 복수의 애플리케이션 서버들(1100_1~1100_n) 중 적어도 하나는 네트워크(NT)를 통해 복수의 애플리케이션 서버들(1100_1~1100_n) 중 적어도 다른 하나 또는 복수의 스토리지 서버들(1200_1~1200_m) 중 적어도 하나를 액세스하도록 구성될 수 있다.
예를 들어, 제1 애플리케이션 서버(1100_1)는 사용자 또는 클라이언트가 요청한 데이터를 네트워크(NT)를 통해 복수의 스토리지 서버들(1200_1~1200_m) 중 적어도 하나에 저장할 수 있다. 또는 제1 애플리케이션 서버(1100_1)는 사용자 또는 클라이언트가 요청한 데이터를 네트워크(NT)를 통해 복수의 스토리지 서버들(1200_1~1200_m) 중 적어도 하나로부터 획득할 수 있다. 이 경우, 제1 애플리케이션 서버(1100_1)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
즉, 제1 애플리케이션 서버(1100_1)의 프로세서(1110_1)는 네트워크(NT)를 통해, 다른 애플리케이션 서버(예를 들어, 1100_n)의 메모리(1120_n) 또는 스토리지 장치(1150_n)를 액세스할 수 있다. 또는 제1 애플리케이션 서버(1100_1)의 프로세서(1110_1)는 네트워크(NT)를 통해, 제1 스토리지 서버(1200_1)의 메모리(1220_1) 또는 스토리지 장치(1250_1)를 액세스할 수 있다. 이를 통해, 제1 애플리케이션 서버(1100_1)는 다른 애플리케이션 서버들(1100_2~1100_n) 또는 복수의 스토리지 서버들(1200_1~1200_m)에 저장된 데이터에 대한 다양한 동작들을 수행할 수 있다. 예를 들어, 제1 애플리케이션 서버(1100_1)는 다른 애플리케이션 서버들(1100_2~1100_n) 또는 복수의 스토리지 서버들(1200_1~1200_m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행하거나 또는 발행할 수 있다. 이 경우, 이동 또는 카피되는 데이터는 스토리지 서버들(1200_1~1200_m)의 스토리지 장치들(1250_1~1250_m)로부터 스토리지 서버들(1200_1~1200_m)의 메모리들(1220_1~1220_m)을 거치거나 또는 직접 애플리케이션 서버들(1100_1~1100_n)의 메모리들(1120_1~1120_n)로 이동될 수 있다. 네트워크(NT)를 통해 전달되는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
일 실시 예에서, 상술된 스토리지 서버들(1200_1~1200_m) 또는 스토리지 장치들(1150_1~1150_n, 1250_1~1250_m)은 본 개시의 실시 예에 따른 스트림 관리자를 포함할 수 있다. 즉, 스토리지 서버들(1200_1~1200_m) 또는 스토리지 장치들(1150_1~1150_n, 1250_1~1250_m) 중 적어도 하나는 도 1 내지 도 12를 참조하여 설명된 방법을 기반으로 입력된 데이터에 대한 스트림을 할당하고 관리하도록 구성될 수 있다.
상술된 내용은 본 개시를 실시하기 위한 구체적인 실시 예들이다. 본 개시는 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 개시는 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 개시의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.
10: 스토리지 시스템
11: 호스트
12: 호스트 컨트롤러
13: 호스트 메모리
100: 스토리지 장치
110: 스토리지 컨트롤러
120: 불휘발성 메모리 장치

Claims (20)

  1. RAID 엔진을 포함하고, 다중 스트림을 지원하고, 특정 스트림에 대한 RAID 방식 사용 여부를 설정하는 스토리지 장치의 동작 방법에 있어서,
    외부 호스트로부터, 제1 스트림 식별자 및 RAID 활성화를 가리키는 RAID 정보를 포함하는 RAID 활성화 요청을 수신하는 단계;
    상기 외부 호스트로부터, 상기 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 내지 제4 데이터를 수신하는 단계;
    상기 RAID 엔진에 의해, 상기 RAID 활성화 요청 및 상기 제1 쓰기 요청에 응답하여, 상기 제1 내지 제4 데이터를 기반으로 패리티 데이터를 생성하는 단계;
    상기 제1 스트림 식별자를 기반으로 상기 제1 내지 제4 데이터 및 상기 패리티 데이터를 불휘발성 메모리 장치에 저장하는 단계;
    상기 외부 호스트로부터, 제2 스트림 식별자를 포함하는 제2 쓰기 요청 및 제5 내지 제8 데이터를 수신하는 단계;
    상기 제2 쓰기 요청에 응답하여, 상기 제2 스트림 식별자를 기반으로 상기 제5 내지 제8 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계; 및
    상기 RAID 활성화 요청을 수신한 이후에, 상기 외부 호스트로부터, 상기 제1 스트림 식별자 및 RAID 비활성화를 가리키는 RAID 정보를 포함하는 RAID 비활성화 요청을 수신하는 단계를 포함하는 동작 방법.
  2. 제 1 항에 있어서,
    상기 RAID 비활성화 요청을 수신한 이후에, 상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 제3 쓰기 요청 및 제9 내지 제12 데이터를 수신하는 단계;
    상기 RAID 비활성화 요청 및 제3 쓰기 요청에 응답하여, 상기 제1 스트림 식별자를 기반으로 상기 제9 내지 제12 데이터를 불휘발성 메모리 장치에 저장하는 단계를 더 포함하는 동작 방법.
  3. 제 2 항에 있어서,
    상기 제1 쓰기 요청을 수신한 후 상기 제3 쓰기 요청을 수신하기 이전에, 상기 스토리지 장치의 펌웨어 갱신이 수행되지 않는 동작 방법.
  4. 제 1 항에 있어서,
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 RAID 활성화 요청을 수신하는 단계는, 상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 디렉티브 전송 커맨드를 수신하는 단계를 포함하는 동작 방법.
  5. 제 1 항에 있어서,
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 RAID 활성화 요청을 수신하는 단계는, 상기 외부 호스트로부터 상기 제1 스트림 식별자, 스트림 RAID 구성을 가리키는 피쳐 식별자, 및 RAID 활성화를 가리키는 RAID 정보를 포함하는 셋 피쳐 커맨드를 수신하는 단계를 포함하는 동작 방법.
  6. 제 1 항에 있어서,
    상기 RAID 활성화 요청에 응답하여, 상기 제1 스트림 식별자에 대응하는 제1 메모리 블록이 적어도 하나의 소거 워드 라인을 포함하는 열린 메모리 블록인지 판별하는 단계;
    상기 제1 메모리 블록이 열린 메모리 블록인 경우, 상기 제1 메모리 블록의 상기 적어도 하나의 소거 워드 라인에 프로그램 전압을 인가하여 열린 메모리 블록을 닫는 단계; 및
    상기 제1 스트림 식별자에 대응하는 제1 RAID 정보를 활성화 상태로 설정하는 단계를 더 포함하는 동작 방법.
  7. 제 6 항에 있어서,
    상기 RAID 엔진에 의해, 상기 RAID 활성화 요청 및 상기 제1 쓰기 요청에 응답하여, 상기 제1 내지 제4 데이터를 기반으로 패리티 데이터를 생성하는 단계는:
    상기 제1 스트림 식별자에 대응하는 상기 제1 RAID 정보를 판별하는 단계; 및
    상기 제1 RAID 정보가 활성화 상태를 가리키는 경우, 상기 제1 내지 제4 데이터를 기반으로 상기 패리티 데이터를 생성하는 단계를 포함하는 동작 방법.
  8. 제 1 항에 있어서,
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 가리키는 디렉티브 값(DSPEC) 및 스트림 RAID 상태를 가리키는 디렉티브 동작(DOPER)을 포함하는 디렉티브 수신 커맨드를 수신하는 단계; 및
    상기 디렉티브 수신 커맨드에 응답하여, 제1 및 제2 스트림 식별자에 대한 RAID 사용 여부에 관한 정보를 상기 외부 호스트로 전송하는 단계를 더 포함하는 동작 방법.
  9. 제 1 항에 있어서,
    상기 제1 내지 제4 데이터를 저장한 이후에, 상기 외부 호스트로부터 상기 제2 데이터에 대응하는 어드레스 및 상기 제1 스트림 식별자를 포함하는 제1 읽기 요청을 수신하는 단계;
    상기 제1 읽기 요청에 응답하여, 상기 제2 데이터를 상기 불휘발성 메모리 장치로부터 읽는 단계;
    상기 제2 데이터의 에러를 검출하는 단계;
    상기 제1, 제3, 및 제4 데이터 및 상기 패리티 데이터를 상기 불휘발성 메모리 장치로부터 읽는 단계;
    상기 제1, 제3, 및 제4 데이터 및 상기 패리티 데이터를 기반으로 제2 데이터의 복구 동작을 수행하는 단계; 및
    상기 복구된 제2 데이터를 상기 외부 호스트로 전송하는 단계를 더 포함하는 동작 방법.
  10. 제 1 항에 있어서,
    상기 제5 내지 제8 데이터를 저장한 이후에, 상기 외부 호스트로부터 상기 제8 데이터에 대응하는 어드레스 및 상기 제2 스트림 식별자를 포함하는 제2 읽기 요청을 수신하는 단계;
    상기 제2 읽기 요청에 응답하여, 상기 제8 데이터를 상기 불휘발성 메모리 장치로부터 읽는 단계;
    상기 제8 데이터의 에러를 검출하는 단계; 및
    상기 제2 읽기 요청에 대응하고, 읽기 실패에 관한 정보를 포함하는 완료 엔트리를 상기 외부 호스트로 전송하는 단계를 더 포함하는 동작 방법.
  11. 제 1 항에 있어서,
    상기 RAID 비활성화 요청에 응답하여, 상기 제1 스트림 식별자에 대응하는 제2 메모리 블록이 적어도 하나의 소거 워드 라인을 포함하는 열린 메모리 블록인지 판별하는 단계;
    상기 제2 메모리 블록이 열린 메모리 블록인 경우, 상기 제2 메모리 블록의 상기 적어도 하나의 소거 워드 라인에 프로그램 전압을 인가하여 열린 메모리 블록을 닫는 단계; 및
    상기 제1 스트림 식별자에 대응하는 제1 RAID 정보를 비활성화 상태로 설정하는 단계를 더 포함하는 동작 방법.
  12. 제 11 항에 있어서,
    상기 RAID 비활성화 요청을 수신한 이후에, 상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 제3 쓰기 요청 및 제9 내지 제12 데이터를 수신하는 단계;
    상기 비활성화 상태를 가리키는 상기 제1 RAID 정보에 응답하여, 제9 내지 제12 데이터를 기반으로 패리티 데이터를 생성하지 않는 단계; 및
    상기 제1 스트림 식별자를 기반으로 상기 제9 내지 제12 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계를 더 포함하는 동작 방법.
  13. 제 12 항에 있어서,
    상기 제1 스트림 식별자를 기반으로 상기 패리티 데이터 및 상기 제1 내지 제4 데이터를 불휘발성 메모리 장치에 저장하는 단계는, 상기 패리티 데이터 및 상기 제1 내지 제4 데이터를 상기 불휘발성 메모리 장치의 제1 메모리 블록에 저장하는 단계를 포함하고,
    상기 제2 스트림 식별자를 기반으로 상기 제5 내지 제8 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계는, 상기 제5 내지 제8 데이터를 상기 불휘발성 메모리 장치의 상기 제1 메모리 블록과 다른 제2 메모리 블록에 저장하는 단계를 포함하고,
    상기 제1 스트림 식별자를 기반으로 상기 제9 내지 제12 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계는, 상기 제9 내지 제12 데이터를 상기 불휘발성 메모리 장치의 제3 메모리 블록에 저장하는 단계를 포함하고,
    상기 제3 메모리 블록은 상기 제1 및 제2 메모리 블록들과 상이한 동작 방법.
  14. RAID 엔진을 포함하고, 다중 스트림을 지원하고, 특정 스트림에 대한 RAID 방식 사용 여부를 설정하는 스토리지 장치의 동작 방법에 있어서,
    외부 호스트로부터 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 내지 제4 데이터를 수신하는 단계;
    상기 제1 쓰기 요청에 응답하여, 상기 제1 스트림 식별자를 기반으로 상기 제1 내지 제4 데이터를 불휘발성 메모리 장치에 저장하는 단계;
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 RAID 활성화 요청을 수신하는 단계;
    상기 RAID 활성화 요청을 수신한 이후에, 상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 제2 쓰기 요청 및 제5 내지 제8 데이터를 수신하는 단계;
    상기 RAID 엔진에 의해, 상기 제2 쓰기 요청 및 상기 RAID 활성화 요청에 응답하여, 상기 제5 내지 제8 데이터를 기반으로 패리티 데이터를 생성하는 단계;
    상기 제1 스트림 식별자를 기반으로 상기 패리티 데이터 및 상기 제5 내지 제8 데이터를 불휘발성 메모리 장치에 저장하는 단계;
    상기 제5 내지 제8 데이터를 상기 불휘발성 메모리 장치에 저장한 이후에, 상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 RAID 비활성화 요청을 수신하는 단계;
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 제3 쓰기 요청 및 제9 내지 제12 데이터를 수신하는 단계;
    상기 RAID 비활성화 요청 및 상기 제3 쓰기 요청에 응답하여, 상기 제1 스트림 식별자를 기반으로 제9 내지 제12 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계;
    상기 외부 호스트로부터 제2 스트림 식별자를 포함하는 제4 쓰기 요청 및 제13 내지 제16 데이터를 수신하는 단계; 및
    상기 제4 쓰기 요청에 응답하여, 상기 제2 스트림 식별자를 기반으로 상기 제13 내지 제16 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계를 포함하는 동작 방법.
  15. 제 14 항에 있어서,
    상기 제1 내지 제4 데이터를 저장한 이후에, 상기 외부 호스트로부터 상기 제4 데이터에 대응하는 어드레스 및 상기 제1 스트림 식별자를 포함하는 제1 읽기 요청을 수신하는 단계;
    상기 제1 읽기 요청에 응답하여, 상기 제4 데이터를 상기 불휘발성 메모리 장치로부터 읽는 단계;
    상기 제4 데이터의 에러를 검출하는 단계; 및
    상기 제1 읽기 요청에 대응하고, 읽기 실패에 관한 정보를 포함하는 완료 엔트리를 상기 외부 호스트로 전송하는 단계를 더 포함하는 동작 방법.
  16. 제 15 항에 있어서,
    상기 제5 내지 제8 데이터를 저장한 이후에, 상기 외부 호스트로부터 상기 제6 데이터에 대응하는 어드레스 및 상기 제1 스트림 식별자를 포함하는 제2 읽기 요청을 수신하는 단계;
    상기 제2 읽기 요청에 응답하여, 상기 제6 데이터를 상기 불휘발성 메모리 장치로부터 읽는 단계;
    상기 제6 데이터의 에러를 검출하는 단계;
    상기 제5, 제7, 및 제8 데이터 및 상기 패리티 데이터를 상기 불휘발성 메모리 장치로부터 읽는 단계;
    상기 제5, 제7, 및 제8 데이터 및 상기 패리티 데이터를 기반으로 제6 데이터의 복구 동작을 수행하는 단계; 및
    상기 복구된 제6 데이터를 상기 외부 호스트로 전송하는 단계를 더 포함하는 동작 방법.
  17. 제 14 항에 있어서,
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 RAID 활성화 요청을 수신하는 단계는, 상기 외부 호스트로부터 상기 제1 스트림 식별자 및 RAID 활성화 정보를 포함하는 제1 디렉티브 전송 커맨드를 수신하는 단계를 포함하고,
    상기 외부 호스트로부터 상기 제1 스트림 식별자를 포함하는 RAID 비활성화 요청을 수신하는 단계는, 상기 외부 호스트로부터 상기 제1 스트림 식별자 및 RAID 비활성화 정보를 포함하는 제2 디렉티브 전송 커맨드를 수신하는 단계를 포함하는 동작 방법.
  18. 제 14 항에 있어서,
    상기 제1 쓰기 요청을 수신한 후 상기 제4 쓰기 요청을 수신하기 이전에, 상기 스토리지 장치의 펌웨어 갱신이 수행되지 않는 동작 방법.
  19. 호스트 및 스토리지 장치를 포함하고, 다중 스트림을 지원하고, 특정 스트림에 대한 RAID 방식 사용 여부를 설정하는 스토리지 시스템의 동작 방법에 있어서,
    상기 호스트에 의해, 제1 스트림 식별자 및 RAID 활성화를 가리키는 RAID 정보를 포함하는 제1 디렉티브 전송 커맨드를 전송하는 단계;
    상기 스토리지 장치에 의해, 상기 제1 디렉티브 전송 커맨드에 응답하여, 상기 제1 스트림 식별자에 대응하는 제1 RAID 정보를 활성화 상태로 설정하는 단계;
    상기 호스트에 의해, 상기 제1 스트림 식별자를 포함하는 제1 쓰기 요청 및 제1 데이터를 상기 스토리지 장치로 전송하는 단계;
    상기 스토리지 장치의 RAID 엔진에 의해, 상기 활성화 상태를 가리키는 상기 제1 RAID 정보 및 상기 제1 쓰기 요청에 응답하여, 상기 제1 데이터를 기반으로 패리티 데이터를 생성하는 단계;
    상기 스토리지 장치에 의해, 상기 제1 스트림 식별자를 기반으로 상기 제1 데이터 및 상기 패리티 데이터를 불휘발성 메모리 장치에 저장하는 단계;
    상기 호스트에 의해, 제2 스트림 식별자를 포함하는 제2 쓰기 요청 및 제2 데이터를 상기 스토리지 장치로 전송하는 단계;
    상기 스토리지 장치에 의해, 상기 제2 쓰기 요청에 응답하여, 상기 제2 스트림 식별자를 기반으로 상기 제2 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계;
    상기 제1 디렉티브 전송 커맨드를 전송한 이후에, 상기 호스트에 의해, 상기 제1 스트림 식별자 및 RAID 비활성화를 가리키는 RAID 정보를 포함하는 제2 디렉티브 전송 커맨드를 전송하는 단계; 및
    상기 스토리지 장치에 의해, 상기 제2 디렉티브 전송 커맨드에 응답하여, 상기 제1 RAID 정보를 비활성화 상태로 설정하는 단계를 포함하는 동작 방법.
  20. 제 19 항에 있어서,
    상기 제2 디렉티브 전송 커맨드를 전송한 이후에, 상기 호스트에 의해, 상기 제1 스트림 식별자를 포함하는 제3 쓰기 요청 및 제3 데이터를 상기 스토리지 장치로 전송하는 단계; 및
    상기 스토리지 장치에 의해, 상기 비활성화 상태를 가리키는 상기 제1 RAID 정보 및 상기 제3 쓰기 요청에 응답하여, 상기 제1 스트림 식별자를 기반으로 상기 제3 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계를 더 포함하는 동작 방법.
KR1020210157669A 2021-11-16 2021-11-16 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법 KR102493864B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020210157669A KR102493864B1 (ko) 2021-11-16 2021-11-16 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법
US17/864,653 US20230153019A1 (en) 2021-11-16 2022-07-14 Operation methods of storage devices, and operation methods of storage systems including hosts and storage devices
EP22191405.4A EP4180935A1 (en) 2021-11-16 2022-08-22 Operation methods of storage devices, and operation methods of storage systems including hosts and storage devices
CN202211167068.XA CN116136743A (zh) 2021-11-16 2022-09-23 存储设备的操作方法及存储系统的操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210157669A KR102493864B1 (ko) 2021-11-16 2021-11-16 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법

Publications (1)

Publication Number Publication Date
KR102493864B1 true KR102493864B1 (ko) 2023-01-31

Family

ID=85108919

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210157669A KR102493864B1 (ko) 2021-11-16 2021-11-16 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법

Country Status (3)

Country Link
US (1) US20230153019A1 (ko)
KR (1) KR102493864B1 (ko)
CN (1) CN116136743A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230350752A1 (en) * 2022-04-27 2023-11-02 Dell Products L.P. Flexible raid scheme allowing fast rebuild
CN117289876B (zh) * 2023-11-22 2024-02-23 苏州元脑智能科技有限公司 一种数据写入方法、系统、装置、介质及四级单元闪存

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070046844A (ko) * 2004-08-24 2007-05-03 샌디스크 쓰리디 엘엘씨 소거/재기록 가능 메모리를 위해 고안된 호스트 장치에사용할 수 있는 한 번 또는 몇 번의 프로그램이 가능한메모리를 위한 방법 및 장치
KR20160044289A (ko) * 2014-10-15 2016-04-25 삼성전자주식회사 데이터 저장 시스템, 데이터 저장 장치 및 raid 컨트롤러
KR20180133982A (ko) * 2017-06-07 2018-12-18 삼성전자주식회사 저장 장치 및 그것의 동작 방법
KR20190129500A (ko) * 2018-05-11 2019-11-20 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
KR20200053204A (ko) * 2018-11-08 2020-05-18 삼성전자주식회사 저장 장치, 저장 장치의 동작 방법 및 저장 장치를 제어하는 호스트의 동작 방법
KR20210085674A (ko) * 2019-12-31 2021-07-08 삼성전자주식회사 다중-스트림을 지원하도록 구성된 스토리지 장치 및 그것의 동작 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201234171A (en) * 2011-02-11 2012-08-16 Hon Hai Prec Ind Co Ltd System and method for testing the RAID automatically
US9507671B2 (en) * 2013-09-16 2016-11-29 Globalfoundries Inc. Write cache protection in a purpose built backup appliance
KR102318477B1 (ko) * 2016-08-29 2021-10-27 삼성전자주식회사 Ssd 어레이 관리를 위한 스트림 식별자 기반 스토리지 시스템
US10776201B2 (en) * 2018-12-28 2020-09-15 Micron Technology, Inc. Extended error correction in storage device

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070046844A (ko) * 2004-08-24 2007-05-03 샌디스크 쓰리디 엘엘씨 소거/재기록 가능 메모리를 위해 고안된 호스트 장치에사용할 수 있는 한 번 또는 몇 번의 프로그램이 가능한메모리를 위한 방법 및 장치
KR20160044289A (ko) * 2014-10-15 2016-04-25 삼성전자주식회사 데이터 저장 시스템, 데이터 저장 장치 및 raid 컨트롤러
KR20180133982A (ko) * 2017-06-07 2018-12-18 삼성전자주식회사 저장 장치 및 그것의 동작 방법
KR20190129500A (ko) * 2018-05-11 2019-11-20 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
KR20200053204A (ko) * 2018-11-08 2020-05-18 삼성전자주식회사 저장 장치, 저장 장치의 동작 방법 및 저장 장치를 제어하는 호스트의 동작 방법
KR20210085674A (ko) * 2019-12-31 2021-07-08 삼성전자주식회사 다중-스트림을 지원하도록 구성된 스토리지 장치 및 그것의 동작 방법

Also Published As

Publication number Publication date
US20230153019A1 (en) 2023-05-18
CN116136743A (zh) 2023-05-19

Similar Documents

Publication Publication Date Title
US11704210B2 (en) Custom error recovery in selected regions of a data storage device
US20220244869A1 (en) File system storage allocation based on zones of a memory device
US11449443B2 (en) Identification and classification of write stream priority
KR102493864B1 (ko) 스토리지 장치의 동작 방법 및 호스트 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법
US11461041B2 (en) Storage device that receives inode address information to reduce external communication overhead
KR20180011665A (ko) 데이터 저장 장치 및 이를 포함하는 컴퓨팅 시스템
US11520500B2 (en) Managing capacity reduction when downshifting multi-level memory cells
US20220300377A1 (en) Managing storage reduction and reuse in the presence of storage device failures
KR20220165855A (ko) 스토리지 장치 및 그의 동작 방법
US11907568B2 (en) Storage controller, storage device, and operation method of storage device
US11947419B2 (en) Storage device with data deduplication, operation method of storage device, and operation method of storage server
KR20210039185A (ko) 메모리 시스템에서 멀티 스트림 동작을 제공하는 방법 및 장치
US11662949B2 (en) Storage server, a method of operating the same storage server and a data center including the same storage server
US11733884B2 (en) Managing storage reduction and reuse with failing multi-level memory cells
US20220300372A1 (en) Managing capacity reduction and recovery due to storage device failure
EP4180935A1 (en) Operation methods of storage devices, and operation methods of storage systems including hosts and storage devices
US20220291864A1 (en) Operation method of storage device configured to support multi-stream
KR102435910B1 (ko) 스토리지 장치 및 그것의 동작 방법
US20230114199A1 (en) Storage device
US20230333761A1 (en) Tracking Data Usage in Storage Devices
US20230135891A1 (en) Storage device including storage controller and operating method
US11892909B2 (en) Managing capacity reduction due to storage device failure
US20230205427A1 (en) Storage device including memory controller and operating method of the same
US20230153237A1 (en) Method and device for storing data
US20230266897A1 (en) Dynamic zone group configuration at a memory sub-system

Legal Events

Date Code Title Description
GRNT Written decision to grant