KR20210158043A - 스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법 - Google Patents

스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법 Download PDF

Info

Publication number
KR20210158043A
KR20210158043A KR1020200076310A KR20200076310A KR20210158043A KR 20210158043 A KR20210158043 A KR 20210158043A KR 1020200076310 A KR1020200076310 A KR 1020200076310A KR 20200076310 A KR20200076310 A KR 20200076310A KR 20210158043 A KR20210158043 A KR 20210158043A
Authority
KR
South Korea
Prior art keywords
data
block
stream
controller
stream classification
Prior art date
Application number
KR1020200076310A
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 KR1020200076310A priority Critical patent/KR20210158043A/ko
Priority to US17/185,001 priority patent/US20210397550A1/en
Priority to EP21159911.3A priority patent/EP3929753B1/en
Priority to CN202110535812.6A priority patent/CN113836047A/zh
Publication of KR20210158043A publication Critical patent/KR20210158043A/ko
Priority to US18/144,335 priority patent/US20230273878A1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification
    • 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/0608Saving storage space on 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7209Validity control, e.g. using flags, time stamps or sequence numbers
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

가비지 콜렉션을 통해, 동일한 스트림을 갖는 데이터들을 동일한 블록에 효율적으로 마이그레이션하는 스토리지 장치 및 그 동작 방법이 제공된다. 몇몇 실시예에 따른 스토리지 장치는 외부로부터 제1 데이터와 제2 데이터를 수신하여, 제1 페이지에 저장하는 버퍼; 제1 데이터와 제2 데이터를 제1 블록에 저장하는 비휘발성 메모리; 및 가비지 콜렉션(GC: Garbage Collection)을 통해, 제1 데이터와 제2 데이터를 서로 다른 프리 블록에 프로그램을 수행하는 컨트롤러를 포함하되, 제1 데이터는 제1 데이터의 특성을 식별하는 제1 스트림 분류 번호를 포함하고, 제2 데이터는 제2 데이터의 특성을 식별하고, 제1 스트림 분류 번호와 다른 제2 스트림 분류 번호를 포함하며, 컨트롤러는, 프로그램을 수행하기 전에 외부에 프로그램 동작 정보를 전송하고, 외부로부터 프로그램 수행 허가 명령을 수신하면 프로그램을 수행한다.

Description

스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법{Storage device for classifying data based on stream class number and operating method thereof}
본 발명은 스트림 분류 스토리지 장치 및 그 동작 방법에 관한 것이다.
데이터 저장 장치, 예를 들어, NAND 기반 드라이브들은 고성능 및 저전력 소비로 인해 그 수요가 점점 증가하고 있는 추세이다. NAND 기반 드라이브들의 특성상 오버 라이트(overwrite)가 불가능하기 때문에, 사용자 데이터를 새로운 저장 블록들에 복사하고, 유효하지 않은 데이터 저장 블록들을 소거하는 등 가비지 콜렉션(garbage collection)을 사용할 수 있다.
그러나, 가비지 콜렉션은 NAND 기반 드라이브의 읽기 및 쓰기 성능을 모두 감소시킬 수 있다. 데이터 쓰기 요청들이 매체에 여러 개의 내부 SSD 쓰기들을 야기할 수 있기 때문에, 가비지 콜렉션은 쓰기 증폭(write amplification)을 증가 시킬 수 있다. 쓰기 증폭은, 예를 들어 유효 데이터가 소거될 미디어 블록으로부터 먼저 읽혀지고 나서, 새로운 호스트 데이터를 저장하기 위한 쓰기를 동반하는 다른 미디어 저장 블록에 다시 쓰기(rewrite) 되는 경우에 발생할 수 있다.
호스트에서, 관련되거나 유사한 데이터들을 동일한 스트림 분류 번호로 분류할 수 있다. 동일한 스트림 분류 번호의 데이터를 동일 소거 블록 또는 동일 드라이브에 저장함으로써, 가비지 콜렉션이 제거되거나 감소될 수 있다.
그러나, 다양한 스트림 분류 번호들을 포함하는 데이터들을 각각의 블록으로 따로 저장한다면, 데이터들을 각각의 블록으로 분배하여 저장하기 때문에 따로 전력이 소모될 수 있고, 시간적 손실이 발생할 수 있다.
본 발명이 해결하고자 하는 기술적 과제는 가비지 콜렉션을 통해, 동일한 스트림을 갖는 데이터들을 동일한 블록에 효율적으로 마이그레이션하는 스토리지 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 가비지 콜렉션을 통해, 동일한 스트림을 갖는 데이터들을 동일한 블록에 효율적으로 마이그레이션하는 스토리지 장치의 동작 방법을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 스토리지 장치는, 외부로부터 제1 데이터와 제2 데이터를 수신하여, 제1 페이지에 저장하는 버퍼; 제1 데이터와 제2 데이터를 제1 블록에 저장하는 비휘발성 메모리; 및 가비지 콜렉션(GC: Garbage Collection)을 통해, 제1 데이터와 제2 데이터를 서로 다른 프리 블록에 프로그램을 수행하는 컨트롤러를 포함하되, 제1 데이터는 제1 데이터의 특성을 식별하는 제1 스트림 분류 번호를 포함하고, 제2 데이터는 제2 데이터의 특성을 식별하고, 제1 스트림 분류 번호와 다른 제2 스트림 분류 번호를 포함하며, 컨트롤러는, 프로그램을 수행하기 전에 외부에 프로그램 동작 정보를 전송하고, 외부로부터 프로그램 수행 허가 명령을 수신하면 프로그램을 수행한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 스토리지 장치는, 데이터의 특성에 따라 분류된 스트림 분류 번호를 포함하는 데이터를 전송하는 호스트; 호스트로부터 수신된 데이터가, 스트림 분류 번호에 상관 없이, 임의로 저장되는 복수의 블록을 포함하는 비휘발성 메모리; 및 데이터의 특성에 따라 분류된 스트림 분류 번호를 바탕으로, 동일한 스트림 분류 번호를 갖는 데이터끼리 동일한 블록에 프로그램하는 컨트롤러를 포함하되, 컨트롤러는, 프로그램을 수행하기 전에 호스트에 프로그램의 동작 정보를 전송하고, 호스트로부터 프로그램 수행 허가 명령을 수신하면 프로그램을 수행한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 스토리지 장치의 동작 방법은, 호스트로부터, 데이터의 특성에 따라 분류된 스트림 분류 번호를 포함하는 데이터들을 수신 받고, 데이터들을 비휘발성 메모리 내의 프리 블록에 저장하고, 컨트롤러를 통해, 데이터들에 대해, 스트림 분류 번호에 따라 분류될 필요가 있는지 판단하고, 스트림 분류 번호에 따라 데이터들이 분류될 필요가 있다고 판단된 경우, 비휘발성 메모리 내 데이터가 저장된 블록들 중 가비지 콜렉션을 통해 분류가 수행될 희생 블록을 결정하고, 희생 블록에 대한 가비지 콜렉션을 수행할 경우에 대한 정보를 호스트에 전송하고, 호스트로부터 가비지 콜렉션의 수행 가능 메시지를 전달받으면, 희생 블록에 대한 가비지 컬렉션을 수행하여, 희생 블록 내 데이터들을 스트림 분류 번호에 따라 분류하여 프리 블록에 프로그램하는 것을 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 몇몇 실시예에 따른 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다.
도 2는 몇몇 실시예에 따른 호스트로부터 수신되는 데이터를 설명하기 위한 예시적인 도면이다.
도 3은 몇몇 실시예에 따른 비휘발성 메모리에 포함된 블록을 설명하기 위한 예시적인 도면이다.
도 4는 몇몇 실시예에 따른 버퍼가 호스트로부터 데이터를 수신하는 동작을 설명하기 위한 예시적인 도면이다.
도 5는 몇몇 실시예에 따른 물리적 맵핑 테이블 버퍼를 포함하는 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다.
도 6은 몇몇 실시예에 따른 물리적 맵핑 테이블을 설명하기 위한 예시적인 도면이다.
도 7은 몇몇 실시예에 따른 스트림 맵핑 테이블 버퍼를 포함하는 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다.
도 8은 몇몇 실시예에 따른 스트림 맵핑 테이블을 설명하기 위한 예시적인 도면이다.
도 9는 몇몇 실시예에 따른 물리적 맵핑 테이블 버퍼와 스트림 맵핑 테이블 버퍼를 포함하는 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다.
도 10은 몇몇 실시예에 따른 비휘발성 메모리 장치 내 데이터의 여분 공간을 활용하는 동작을 예시적으로 설명하는 도면이다.
도 11은 몇몇 실시예에 따른 버퍼로부터 비휘발성 메모리 장치로 데이터를 프로그램하는 동작을 설명하는 예시적인 도면이다.
도 12는 몇몇 실시예에 따른 멀티 스트림 블록 내 데이터를 스트림 분류 번호에 따라 분류하는 가비지 콜렉션 동작을 설명하는 예시적인 도면이다.
도 13은 몇몇 실시예에 따른 스토리지 장치를 포함하는 스토리지 시스템의 동작을 설명하는 예시적인 흐름도이다.
도 14는 몇몇 실시예에 따른 희생 블록을 결정하는 동작을 설명하기 위한 예시적인 도면이다.
도 15는 몇몇 실시예에 따른 희생 블록을 결정하는 도 14의 동작을 설명하기 위한 예시적인 흐름도이다.
도 16은 몇몇 실시예에 따른 희생 블록을 결정하는 동작을 설명하기 위한 예시적인 도면이다.
도 17은 몇몇 실시예에 따른 희생 블록을 결정하는 도 16의 동작을 설명하기 위한 예시적인 흐름도이다.
도 18 및 도 19는 몇몇 실시예에 따른 희생 블록을 결정하는 동작을 설명하기 위한 예시적인 도면이다.
도 20은 몇몇 실시예에 따른 희생 블록을 결정하는 도 18 및 도 19의 동작을 설명하기 위한 예시적인 흐름도이다.
도 21은 몇몇 실시예에 따른 호스트와 스토리지 장치 사이의 신호 전달 동작을 설명하기 위한 예시적인 도면이다.
도 1은 몇몇 실시예에 따른 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다.
도 1을 참조하면, 몇몇 실시예에 따른 스토리지 시스템은 스토리지 장치(Storage Device, 100)와 스토리지 장치(100) 외부의 호스트(200)를 포함한다. 여기에서, 각각의 구성은 별개의 칩, 모듈, 혹은 장치로 구성될 수 있고, 하나의 장치 내에 포함될 수도 있다. 예를 들어, 스토리지 장치(100)는 별개의 호스트(200)에 연결되어 사용될 수도 있다. 다만, 본 발명이 이에 제한되는 것은 아니고, 스토리지 장치(100)와 호스트(200)가 하나의 장치에 집적될 수 있다.
호스트(200)는 어플리케이션이나 파일 시스템(210)을 이용하여 스토리지 장치(100)로 쓰기 커맨드를 포함하는 커맨드(CMD) 및 쓰기 데이터를 포함하는 데이터(DATA)를 스토리지 장치(100)에 전송할 수 있다. 또한, 호스트(200)는 어플리케이션이나 파일 시스템(210)을 이용하여 스토리지 장치(100)로 읽기 커맨드를 포함하는 커맨드(CMD) 및 읽기 데이터를 포함하는 데이터(DATA)를 스토리지 장치(100)에 전송할 수 있다.
호스트(200)는 운영 체제(operating system; OS)를 실행하여 구동될 수 있다. 운영 체제는 파일 관리를 위한 파일 시스템(210) 및 데이터 스토리지 장치를 포함하는 주변 기기를 운영 체제 레벨에서 제어하기 위한 장치 드라이버를 포함할 수 있다. 파일 시스템(210)은 호스트(200)의 요청에 따라 액세스되는 파일들에 대한 파일명, 확장자, 파일 속성, 파일 크기, 클러스터 정보 등을 관리할 수 있다. 또한, 파일 시스템(210)에 의해 파일 단위의 데이터가 생성, 삭제 및 관리될 수 있다. 장치 드라이버는 데이터 스토리지 장치를 제어하기 위한 커널(Kernel)의 소프트웨어 모듈일 수 있다. 호스트(200)는 장치 드라이버를 통하여 데이터 스토리지 장치(100)에 대한 쓰기 동작 및 읽기 동작을 요청할 수 있다. 또한, 호스트(200)는 다양한 서비스를 제공하기 위하여 동영상 어플리케이션, 게임 어플리케이션, 웹 브라우저 어플리케이션 등을 실행할 수 있다.
호스트(200)는 예를 들어, PC(personal computer), 노트북(laptop), 휴대폰(mobile phone), 스마트 폰(smart phone), 태블릿(tablet) PC, MP3 플레이어, PDA(personal digital assistant), EDA(enterprise digital assistant), PMP(portable multimedia player), 디지털 카메라(digital camera), 음악 재생기(music player), 휴대용 게임 콘솔(portable game console), 네비게이션(navigation) 기기, 웨어러블(wearable) 기기, IoT(internet of things;) 기기, IoE(internet of everything:) 기기, e-북(e-book), VR(virtual reality) 기기, AR(augmented reality) 기기 등의 임의의 전자 기기일 수 있다.
호스트(200)가 스토리지 장치(100)로 전달하는 데이터(DATA)는, 데이터(DATA)의 특성을 식별하는 스트림 분류 번호에 대한 정보를 포함할 수 있다. 이를 도 2를 통해 자세히 살펴본다.
도 2는 몇몇 실시예에 따른 호스트로부터 수신되는 데이터를 설명하기 위한 예시적인 도면이다.
도 2를 참조하면, 호스트(200)로부터 수신되는 데이터(500, 510)는 데이터(500) 및 데이터(500)의 특성을 식별하는 스트림 분류 번호(510)를 포함할 수 있다. 본 명세서에서, 데이터(500)의 특성을 식별하는 스트림 분류 번호(510)는, 데이터(500)의 종류, 데이터(500)의 유형, 데이터(500)의 수명 및/또는 데이터(500)의 업데이트 빈도 등 다양한 인자에 의해 결정될 수 있다. 예를 들어, 제1 데이터(Data#1)의 특성을 식별하는 스트림 분류 번호는 스트림 분류 번호1(Stream1)일 수 있다. 제2 데이터(Data#2)의 특성을 식별하는 스트림 분류 번호는 스트림 분류 번호4(Steam4)일 수 있다. 제3 데이터(Data#3)의 특성을 식별하는 스트림 분류 번호는 스트림 분류 번호3(Stream3)일 수 있다. 제4 데이터(Data#4)의 특성을 식별하는 스트림 분류 번호는 스트림 분류 번호1(Stream1)일 수 있다. 여기에서, 스트림 분류 번호1을 포함하는 제1 데이터(Data#1) 및 제4 데이터(Data#4)는 서로 동일하거나 유사한 수명을 가질 수 있다.
다만, 도 5에 도시된 제1 내지 제4 데이터(Data#1~Data#4) 및 스트림 분류 번호1(Stream1), 스트림 분류 번호3(Stream3), 스트림 분류 번호4(Stream4)는 설명을 용이하게 하기 위해 임의적으로 선택한 용어이며, 본 발명이 이에 제한되지는 않는다. 예를 들어, 스트림 분류 번호는 Hot, Warm, 및 Cold 페이지로 구분될 수 있다.
또한, 도면에 도시하지는 않았지만, 호스트(200)로부터 수신한 데이터는 데이터(500), 및 데이터(500)의 특성을 식별하는 스트림 분류 번호(510) 외에도 어드레스 정보 및/또는 오류 정정 패리티(ECC parity)를 포함할 수 있다.
다시 도 1을 참조하면, 호스트(200)는 다이렉티브(directive) 기능을 포함할 수 있다. 다이렉티브 기능은 호스트(200)에서 데이터의 유형 및 종류 등에 따라 스트림 분류 번호를 미리 결정하여, 스토리지 장치(100)로 전달하는 기능일 수 있다. 다시 말해서, 호스트(200)로부터 수신되는 데이터에는 해당 데이터와 이의 스트림 분류 번호가 포함되어 있을 수 있다. 즉, 스토리지 장치(100)에서 따로 스트림 분류 번호를 분류할 필요가 없을 수 있다.
동일한 스트림 분류 번호를 갖는 데이터는 서로 연관되거나 유사한 수명을 가질 수 있다. 예를 들어, 반복적으로 빈번하게 업데이트되는 데이터는 동일한 스트림 분류 번호를 가질 수 있다. 또한, 예를 들어, 유사한 유형의 데이터는 동일한 스트림 분류 번호를 가질 수 있다. 유사한 유형의 데이터는 수명이 유사한 것으로 가정할 수 있으므로, 동일한 스트림 분류 번호를 갖는 데이터들은 서로 유사한 수명을 가질 수 있다.
스토리지 장치(100)는 호스트(200)로부터의 요청에 따라 내부 동작(예를 들면, 읽기 또는 쓰기 등)을 제어할 수 있다.
스토리지 장치(100)는 인터페이스(Interface, 110), 컨트롤러(Controller, 120), 버퍼(Buffer, 130), 및 비휘발성 메모리(Non-volatile memory, 140)를 포함할 수 있다.
인터페이스(110)는 호스트(200) 및 컨트롤러(120) 사이의 데이터 교환을 수행하기 위한 프로토콜을 포함할 수 있다. 예시적으로, 인터페이스(110)는 USB (Universal Serial Bus) 프로토콜, MMC (multimedia card) 프로토콜, PCI (peripheral component interconnection) 프로토콜, PCI-E (PCI-express) 프로토콜, ATA (Advanced Technology Attachment) 프로토콜, Serial-ATA 프로토콜, Parallel-ATA 프로토콜, SCSI (small computer small interface) 프로토콜, ESDI (enhanced small disk interface) 프로토콜, IDE (Integrated Drive Electronics) 프로토콜, NVMe(Non-Volatile Memory express) 프로토콜, 그리고 쿼리 응답(Query Request) 프로토콜 등과 같은 다양한 인터페이스 프로토콜들 중 적어도 하나를 통해 호스트(200)와 통신하도록 구성될 수 있다. 또한, 인터페이스(110)는 적어도 하나의 프로세서(processor)를 포함할 수 있다. 인터페이스(110)에 포함된 프로세서는 마이크로 프로세서(micro-processor)일 수 있으나, 이에 제한되지는 않는다.
컨트롤러(120)는 인터페이스(110), 버퍼(130), 및 비휘발성 메모리(140)를 제어할 수 있다. 컨트롤러(120)는 인터페이스(110)를 통하여 호스트(200)와 비휘발성 메모리(140) 및 호스트(200)와 버퍼(130) 사이의 명령어 및 데이터 교환을 수행할 수 있다. 또한, 데이터 스토리지 장치(100)의 일련의 동작은, 컨트롤러(120)에 의해 수행될 수 있다. 또한, 컨트롤러(120)는 적어도 하나의 프로세서(processor)를 포함할 수 있다. 컨트롤러(120)에 포함된 프로세서는 마이크로 프로세서(micro-processor)일 수 있으나, 이에 제한되지는 않는다.
버퍼(130)는 호스트(200)로부터 수신한 데이터를 임시로 저장할 수 있다. 버퍼(130)는 고속의 휘발성 메모리 또는 비휘발성 메모리를 포함할 수 있다. 예를 들어, 버퍼(130)는 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 또는 플래시 메모리(Flash Memory)의 SLC(Single Level Cell) 영역일 수 있으나, 본 발명이 이에 한정되는 것은 아니다.
비휘발성 메모리(140)는 버퍼(130)에 임시로 저장된 데이터를 저장할 수 있다. 예를 들어, 비휘발성 메모리(140)는 낸드 플래시(NAND flash)를 포함하는 플래시 메모리일 수 있다. 상기 플래시 메모리는 SLC(Single Level Cell) 및 MLC(Multi Level Cell) 영역을 포함할 수 있다. 다만, 본 발명이 이에 한정되는 것은 아니다. 예를 들어, 비휘발성 메모리(140)는 PC 카드(PCMCIA: personal computer memory card international association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억장치(UFS), 임베디드 멀티미디어 카드(eMMC), 낸드 플래시 메모리(NAND Flash Memory), 노어 플래시 메모리(NOR Flash Memory), 브이 낸드 플래시 메모리(V-NAND Flash Memory) 등을 포함할 수 있다. 다만, 본 발명이 이에 한정되는 것은 아니다. 비휘발성 메모리(140)에 대한 구체적인 설명을 위해 도 3을 참조한다.
도 3은 몇몇 실시예에 따른 비휘발성 메모리에 포함된 블록을 설명하기 위한 예시적인 도면이다.
도 3을 참조하면, 비휘발성 메모리(140)는 복수개의 메모리 블록(Block1~BlockN)을 포함할 수 있다.
복수개의 메모리 블록(Block1~BlockN) 중 일부는 다양한 스트림 분류 번호를 포함하는 데이터가 저장될 수 있다. 즉, 버퍼(130)에 저장된 복수개의 데이터는 복수개의 메모리 블록(Block1~BlockN) 중 일부 각각에 스트림 분류 번호에 상관없이 임의로 저장될 수 있다. 예를 들어, 제1 메모리 블록(Block1)에 제1 스트림 분류 번호가 포함된 데이터와, 제2 스트림 분류 번호가 포함된 데이터가 함께 저장될 수 있다.
또는, 복수개의 메모리 블록(Block1~BlockN) 중 일부는 동일한 스트림 분류 번호를 포함하는 데이터가 저장될 수 있다. 즉, 버퍼(130)에 저장된 복수개의 데이터는 복수개의 메모리 블록(Block1~BlockN) 중 일부 각각에 할당된 스트림 분류 번호를 포함하는 데이터만 저장될 수 있다. 예를 들어, 제K+1 메모리 블록(BlockK+1)에는 제1 스트림 분류 번호가 포함된 데이터만 저장될 수 있고, 제K+2 전용 메모리 블록(BlockK+2)에는 제2 스트림 분류 번호가 포함된 데이터만 저장될 수 있다. 즉, 복수개의 메모리 블록(Block1~BlockN) 중 일부 각각은 단 하나의 스트림 분류 번호에 대해서만 저장될 수 있다. 예를 들어, 제1 및 제2 데이터 각각은 제1 스트림 분류 번호를 포함하고, 제3 데이터는 제2 스트림 분류 번호를 포함한다고 가정하면, 제1 및 제2 데이터는 제K+1 전용 메모리 블록(BlockK+1)에 저장될 수 있고, 제3 데이터는 제K+2 전용 메모리 블록(BlockK+2)에 저장될 수 있다.
복수개의 메모리 블록(Block1~BlockN)은 각각 복수개의 페이지(Page1~PageM)를 포함할 수 있다. 페이지는 데이터를 쓰기 위한 최소 단위일 수 있다. 다시 말해, 저장 장치(100)의 쓰기 동작의 최소 단위가 페이지일 수 있다.
다시 도 1을 참조하면, 스토리지 장치(100)는 인터페이스(110) 컨트롤러(120), 버퍼(130), 및 비휘발성 메모리(140)가 서로 데이터 통신을 하는데 이용될 수 있는 데이터 버스(150)를 포함할 수 있다. 데이터 버스(150)는 데이터들이 이동되는 통로(path)에 해당하며, 데이터 교환을 수행하기 위한 프로토콜을 포함할 수 있다.
도 3을 통해 상술한 설명들 중에서, 복수개의 메모리 블록(Block1~BlockN) 중 일부 각각에 다양한 스트림 분류 번호를 포함하는 데이터가 저장되는 경우, 스토리지 장치의 동작 특성이 악화될 수 있다. 예를 들어, 스토리지 장치의 WAF(Write Amplification Factor) 특성이 악화될 수 있다. 따라서, 복수개의 메모리 블록(Block1~BlockN) 중 일부 각각에 다양한 스트림 분류 번호를 포함하는 데이터들에 대해, 스트림 분류 번호에 따른 데이터 분류가 요구된다. 더 자세히는, 몇몇 실시예에 따른 스토리지 장치를 통해, 가비지 콜렉션을 이용하여, 복수개의 메모리 블록(Block1~BlockN) 중 일부 각각에 단 하나의 스트림 분류 번호에 대한 데이터에 대해서서만 프로그램할 수 있다. 이후의 설명을 통해 자세히 설명한다.
도 4는 몇몇 실시예에 따른 버퍼가 호스트로부터 데이터를 수신하는 동작을 설명하기 위한 예시적인 도면이다.
도 4를 참조하면, 호스트(200)가 전송하는 멀티 스트림(multi-stream)의 스트림 분류 번호 수보다 스토리지 장치의 버퍼(130)가 관리할 수 있는 스트림 분류 번호 자원의 수가 더 작을 수 있다. 즉, 스토리지 장치의 버퍼(130)에 상술한 바와 같이, 복수개의 메모리 블록 중 일부 각각에 다양한 스트림 분류 번호를 포함하는 데이터가 저장되는 경우가 발생할 수 있다.
예를 들어, 호스트(200)에서 전송하는 데이터들의 스트림 분류 번호 종류의 수가 M개라고 가정한다. 즉, 호스트(200)가 제1 스트림 분류 번호(Stream 1)를 갖는 제1 데이터(Data #1), 제2 스트림 분류 번호(Stream 2)를 갖는 제2 데이터(Data #2), 제3 스트림 분류 번호(Stream 3)를 갖는 제3 데이터(Data #3), 내지 제M 스트림 분류 번호(Stream M)를 갖는 제M 데이터(데이터 #M)를 스토리지 장치의 버퍼(130)로 전송할 수 있다.
이때, 스토리지 장치의 버퍼(130)가 호스트(200)로부터 데이터를 수신할 때 관리할 수 있는 스트림 분류 번호의 수가 N개라고 가정한다. 여기서 M과 N은 0보다 큰 자연수이며, M은 N보다 더 큰 자연수라 가정한다.
스토리지 장치의 버퍼(130)는 호스트(200)로부터 전송 받은 제1 데이터(Data #1) 내지 제N-1 데이터(DATA #N-1)까지는 각각의 스트림 분류 번호(예를 들어, 제1 스트림 분류 번호(Stream 1) 내지 제N-1 스트림 분류 번호(Stream N-1))에 따라 관리가 가능하다. 하지만, 제N 데이터(데이터 #N) 내지 제M 데이터(데이터 #M)까지의 데이터에 대해선 각각의 스트림 분류 번호(예를 들어, 제N 스트림 분류 번호(Stream N) 내지 제M 스트림 분류 번호(Stream M))에 따라 관리가 불가능할 수 있다. 즉, 스토리지 장치의 버퍼(130) 내에는 제N 스트림 분류 번호(Stream N) 내지 제M 스트림 분류 번호(Stream M)의 데이터들(예를 들어, 제N 데이터(데이터 #N) 내지 제M 데이터(데이터 #M))을 스트림 분류 번호에 따라 관리하지 못하는 버퍼 멀티 스트림 영역(B_MSR)이 생성될 수 있다.
참고적으로, 스토리지 장치의 버퍼(130)에 데이터들이 저장되면서, 각각의 데이터들에 대한 논리 블록 어드레스(LBA: Logical Block Address)에 대응하는 물리 블록 어드레스(PBA: Physical Block Address)가 저장되는 물리적 맵핑 테이블(Physical Mapping Table)이 업데이트될 수 있다. 이에 대해, 도 5 및 도 6을 참조하여 자세히 살펴본다.
도 5는 몇몇 실시예에 따른 물리적 맵핑 테이블 버퍼를 포함하는 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다. 도 6은 몇몇 실시예에 따른 물리적 맵핑 테이블을 설명하기 위한 예시적인 도면이다.
도 5 및 도 6을 참조하면, 몇몇 실시예에 따른 스토리지 장치는 도 1과 달리 물리적 맵핑 테이블 버퍼(160)를 더 포함할 수 있다. 참고적으로, 도 1과 중복되는 구성 및 동작은 설명을 생략하고, 차이점을 중심으로 설명한다.
컨트롤러(120)는 도 1에서 설명한 구성들 외에, 물리적 맵핑 테이블 버퍼(130)를 제어할 수 있다.
물리적 맵핑 테이블 버퍼(160)는 상술한 물리적 맵핑 테이블(Physical Mapping Table) 정보를 저장한다. 더 자세히는, 물리적 맵핑 테이블(Physical Mapping Table)은 호스트(200)에 의해 요청된 데이터를 찾을 수 있도록 도와줄 수 있다. 또는, 물리적 맵핑 테이블(Physical Mapping Table)은 호스트(200)가 기록하고자 하는 데이터가 기록될 위치를 찾도록 도와줄 수 있다.
예를 들어, 물리적 맵핑 테이블(Physical Mapping Table)에는 제1 논리 블록 어드레스(LBA #1)와, 제1 논리 블록 어드레스(LBA #1)에 대응하는 제1 물리 블록 어드레스(PBA #1)가 저장될 수 있다. 또한, 물리적 맵핑 테이블(Physical Mapping Table)에는 제2 논리 블록 어드레스(LBA #2)와, 제2 논리 블록 어드레스(LBA #2)에 대응하는 제2 물리 블록 어드레스(PBA #2)가 저장될 수 있다. 물리적 맵핑 테이블(Physical Mapping Table)에는 제N 논리 블록 어드레스(LBA #N)와, 제N 논리 블록 어드레스(LBA #N)에 대응하는 제N 물리 블록 어드레스(PBA #N)가 저장될 수 있다.
물리적 맵핑 테이블 버퍼(160)는 예를 들어, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 또는 플래시 메모리(Flash Memory)의 SLC(Single Level Cell) 영역일 수 있으나, 본 발명이 이에 한정되는 것은 아니다.
다시 도 4를 참조하면, 버퍼 멀티 스트림 영역(B_MSR)에 대해, 스트림 분류 번호를 바탕으로, 동일한 스트림 분류 번호를 갖는 데이터끼리 동일한 블록에 프로그램하는 분류 동작이 도 1의 컨트롤러(120)에 의해, 수행될 수 있다. 상술한 분류 동작은 도 1의 컨트롤러(120)를 통한 가비지 콜렉션(GC: Garbage Collection)을 통해 수행될 수 있다.
이때, 도 1의 컨트롤러(120)는 버퍼 멀티 스트림 영역(B_MSR)에 포함된 각각의 데이터들(예를 들어, 제N 데이터(데이터 #N) 내지 제M 데이터(데이터 #M)) 각각에 대한 스트림 분류 번호(예를 들어, 제N 스트림 분류 번호(Stream N) 내지 제M 스트림 분류 번호(Stream M))를 식별해야 한다. 도 1의 컨트롤러(120)는 아래와 같이 스트림 맵핑 테이블을 이용하거나, 데이터 여분 공간을 활용하여 각각의 데이터에 대한 스트림 분류 번호를 식별할 수 있다.
먼저, 도 1의 컨트롤러(120)가 스트림 맵핑 테이블을 이용하여, 각각의 데이터에 대한 스트림 분류 번호를 식별하는 동작에 대해 도 7 및 도 8을 참조하여 설명한다.
도 7은 몇몇 실시예에 따른 스트림 맵핑 테이블 버퍼를 포함하는 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다. 도 8은 몇몇 실시예에 따른 스트림 맵핑 테이블을 설명하기 위한 예시적인 도면이다. 참고적으로, 도 1과 중복되는 구성 및 동작은 설명을 생략하고, 차이점을 중심으로 설명한다.
컨트롤러(120)는 도 1에서 설명한 구성들 외에, 스트림 맵핑 테이블 버퍼(130)를 제어할 수 있다.
도 7 및 도 8을 참조하면, 몇몇 실시예에 따른 스토리지 장치는 도 1과 달리 스트림 맵핑 테이블 버퍼(170)를 더 포함할 수 있다.
스트림 맵핑 테이블 버퍼(170)는 상술한 스트림 맵핑 테이블(Stream Mapping Table) 정보를 저장한다. 더 자세히는, 스트림 맵핑 테이블(Stream Mapping Table)은 컨트롤러(120)가 데이터의 스트림 분류 번호를 식별할 수 있도록 도와줄 수 있다.
예를 들어, 스트림 맵핑 테이블(Stream Mapping Table)에는 제1 논리 블록 어드레스(LBA #1)와, 제1 논리 블록 어드레스(LBA #1)에 대응하는 제1 스트림 분류 번호(Stream 1)가 저장될 수 있다. 또한, 스트림 맵핑 테이블(Stream Mapping Table)에는 제2 논리 블록 어드레스(LBA #2)와, 제2 논리 블록 어드레스(LBA #2)에 대응하는 제2 스트림 분류 번호(Stream 2)가 저장될 수 있다. 스트림 맵핑 테이블(Stream Mapping Table)에는 제N 논리 블록 어드레스(LBA #N)와, 제N 논리 블록 어드레스(LBA #N)에 대응하는 제N 스트림 분류 번호(Stream N)가 저장될 수 있다.
스트림 맵핑 테이블 버퍼(170)는 예를 들어, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 또는 플래시 메모리(Flash Memory)의 SLC(Single Level Cell) 영역일 수 있으나, 본 발명이 이에 한정되는 것은 아니다.
참고적으로, 몇몇 실시예에 따른 스토리지 장치(100)는 상술한 물리적 맵핑 테이블 버퍼(160)와 스트림 맵핑 테이블 버퍼(170)를 모두 포함할 수 있다. 이는 도 9를 통해 예시적으로 설명될 수 있다.
도 9는 몇몇 실시예에 따른 물리적 맵핑 테이블 버퍼와 스트림 맵핑 테이블 버퍼를 포함하는 스토리지 장치를 포함하는 스토리지 시스템을 설명하기 위한 예시적인 블록도이다. 참고적으로, 도 1과 중복되는 구성 및 동작은 설명을 생략하고, 차이점을 중심으로 설명한다.
도 9를 참조하면, 도 1의 몇몇 실시예에 따른 스토리지 장치(100)와는 달리, 물리적 맵핑 테이블 버퍼(160)와 스트림 맵핑 테이블 버퍼(170)를 모두 포함할 수 있다.
즉, 컨트롤러(120)는 호스트(200)로부터 수신한 데이터의 물리 블록 어드레스를 찾기 위해, 물리적 맵핑 테이블 버퍼(130)가 저장한 물리적 맵핑 테이블(Physical Mapping Table)을 참조할 수 있다. 또한, 컨트롤러(120)는 데이터의 물리 블록 어드레스가 변경되면, 물리적 맵핑 테이블 버퍼(130)가 저장한 물리적 맵핑 테이블(Physical Mapping Table)을 실시간으로 업데이트할 수 있다.
또한, 컨트롤러(120)는 데이터의 스트림 분류 번호를 파악하기 위해, 스트림 맵핑 테이블 버퍼(130)가 저장한 스트림 맵핑 테이블(Stream Mapping Table)을 참조할 수 있다. 참고적으로, 스트림 분류 번호는 상술한 바와 같이 스트림 맵핑 테이블(Stream Mapping Table)에 저장될 수도 있으나, 도 10과 같이, 비휘발성 메모리(140)의 블록에 저장되는 데이터의 데이터 여분 공간에 저장될 수도 있다. 이를 도 10을 통해 설명한다.
도 10은 몇몇 실시예에 따른 비휘발성 메모리 장치 내 데이터의 여분 공간을 활용하는 동작을 예시적으로 설명하는 도면이다.
도 1과 도 10을 참조하면, 비휘발성 메모리(140)에 저장되는 데이터는 데이터가 저장되지 않는 여분 공간(SPARE)을 포함할 수 있다.
데이터 여분 공간(SPARE)은 데이터의 정보가 저장되지 않는 여분의 공간으로, 데이터의 특성을 나타내는 스트림 분류 번호가 저장될 수 있다. 데이터 여분 공간(SPARE)에 해당 데이터의 스트림 분류 번호를 저장함으로써, 컨트롤러(120)는 별도의 구성(예를 들어, 도 9의 스트림 맵핑 테이블 버퍼(170))를 참조하지 않고, 바로 데이터의 스트림 분류 번호를 식별할 수 있다.
다시 도 4를 참조하면, 호스트(200)로부터 전달받은 데이터들을, 비휘발성 메모리에 저장할 수 있다. 이를 도 11을 통해 살펴본다.
도 11은 몇몇 실시예에 따른 버퍼로부터 비휘발성 메모리 장치로 데이터를 프로그램하는 동작을 설명하는 예시적인 도면이다. 참고적으로, 도 4에서 설명한 바와 같이, 계속해서 M과 N은 1보다 큰 자연수이며, M이 N보다 큰 자연수인 것으로 가정하여 설명한다.
도 1 및 도 11을 참조하면, 호스트(200)로부터 데이터를 전송받은 스토리지 장치(100)는 버퍼(130)에 데이터를 임시로 저장해 두었다가, 비휘발성 메모리(140)의 블록에 데이터를 프로그램하여 저장한다.
더 자세히는, 비휘발성 메모리(140)는 프로그램이 가능한 복수의 프리 블록들(예를 들어, 제1 프리 블록(Free Block 1) 내지 제N-1 프리 블록(Free Block N-1), 및 제N 프리 블록(Free Block N))을 포함한다. 복수의 프리 블록들(예를 들어, 제1 프리 블록(Free Block 1) 내지 제N-1 프리 블록(Free Block N-1), 및 제N 프리 블록(Free Block N))은 데이터가 프로그램 될 수 있는 블록들일 수 있다.
예를 들어, 버퍼(130)에 임시로 저장되어 있던 제1 데이터(Data #1) 내지 제M 데이터(데이터 #M)가 제1 프리 블록(Free Block 1) 내지 제N 프리 블록(Free Block N)에 프로그램 될 수 있다. 이때, 제1 데이터(Data #1) 내지 제M 데이터(데이터 #M)는 각각 서로 다른 스트림 분류 번호(예를 들어, 제1 스트림 분류 번호 내지 제M 스트림 분류 번호)를 갖는다고 가정한다.
제1 데이터(Data #1) 내지 제N-1 데이터(DATA #N-1)는 각각 제1 프리 블록(Free Block 1) 내지 제N-1 프리 블록(Free Block N-1)에 프로그램되어, 제1 블록(Block 1)에는 제1 스트림 분류 번호를 갖는 제1 데이터만이 프로그램된다. 마찬가지로, 제N-1 블록(Block N-1)에는 제N-1 스트림 분류 번호를 갖는 제N-1 데이터만이 프로그램된다.
하지만, 제N 프리 블록(Free Block N)에는 제N 데이터(데이터 #N) 내지 제M 데이터(데이터 #M)가 프로그램 될 수 있다. 즉, 하나의 제N 블록 내에 복수의 스트림 분류 번호(예를 들어, 제N 스트림 분류 번호(Stream N) 내지 제M 스트림 분류 번호(Stream M))를 갖는 제N 데이터(데이터 #N) 내지 제M 데이터(데이터 #M)가 프로그램 될 수 있다.
비휘발성 메모리(140) 내에, 하나의 블록(예를 들어, 제N 블록(Block N))에 복수의 스트림 분류 번호를 갖는 복수의 데이터들(예를 들어, 제N 데이터(데이터 #N) 내지 제 M 데이터(DATA #M))이 프로그램된 로직 블록 멀티 스트림(LB_MSR) 블록이 존재할 수 있다.
하나의 블록(예를 들어, 제N 블록(Block N))에 복수의 스트림 분류 번호를 갖는 복수의 데이터들(예를 들어, 제N 데이터(데이터 #N) 내지 제 M 데이터(DATA #M))이 저장되면, 도 4에서 상술한 바와 같이, 스토리지 장치(100)의 WAF 특성이 악화될 수 있다. 따라서, 컨트롤러(120)가 로직 블록 멀티 스트림(LB_MSR)과 같이 멀티 스트림들이 존재하는 블록을 희생 블록(Victim block)으로 결정하고, 희생 블록에 대해 가비지 콜렉션을 수행함으로써, 희생 블록에 포함된 데이터들에 대해 스트림 분류 번호에 따른 데이터 분류를 수행할 수 있다. 즉, 컨트롤러(120)가 희생 블록의 데이터들에 대해, 동일한 스트림 분류 번호를 갖는 데이터들끼리 동일한 블록에 프로그램 될 수 있도록, 가비지 콜렉션을 통해 분류 동작을 수행할 수 있다. 이러한 분류 동작을 도 12을 통해 자세히 살펴본다.
도 12는 몇몇 실시예에 따른 멀티 스트림 블록 내 데이터를 스트림 분류 번호에 따라 분류하는 가비지 콜렉션 동작을 설명하는 예시적인 도면이다.
도 1 및 도 12를 참조하면, 호스트(200)로부터 전송 받은 데이터들에 대해, 컨트롤러(120)가 수행하는 분류 동작을 예시적으로 설명한다. 참고적으로, 본 도면에서의 설명은 예시적인 것으로, 데이터들의 종류, 블록의 수, 블록의 종류, 등은 모두 예시적인 것으로 본 도면에 제한되지 않는다.
제1 데이터(Data #1), 제3 데이터(Data #3), 및 제4 데이터(Data #4)는 모두 제1 스트림 분류 번호를 갖는다고 가정한다. 제2 데이터(Data #2), 및 제5 데이터(Data #5)는 모두 제2 스트림 분류 번호를 갖는다고 가정한다. 또한, 제6 데이터(Data #6), 제7 데이터(Data #7), 및 제8 데이터(Data #8)는 모두 제3 스트림 분류 번호를 갖는다고 가정한다. 본 도면에서의 각각의 데이터들이 갖는 스트림 분류 번호는 예시적인 것이다.
제1 블록(Block 1)에는 제1 데이터(Data #1)와 제3 데이터(Data #3)가 저장되어 있다. 제7 블록(Block 7)에는 제4 데이터(Data #4)가 저장되어 있다. 제8 블록(Block 8)에는 제2 데이터(Data #2)와 제8 데이터(Data #8)가 저장되어 있다. 또한, 제9 블록(Block 9)에는 제5 데이터(Data #5), 제6 데이터(Data #6), 및 제7 데이터(Data #7)가 저장되어 있다. 본 도면은 예시적인 것으로, 각각의 데이터들이 저장되는 블록의 종류, 위치 등은 이에 제한되지 않는다.
즉, 비휘발성 메모리(140)의 블록들 중 일부에, 서로 다른 스트림 분류 번호를 갖는 데이터가 저장되어 있는 블록(예를 들어, 제8 블록(Block 8), 및 제9 블록(Block 9))이 존재할 수 있다.
컨트롤러(120)는 서로 동일한 스트림 분류 번호를 갖는 데이터들을 하나의 블록에 프로그램시키기 위해 가비지 콜렉션을 수행할 수 있다. 즉, 컨트롤러(120)는 비휘발성 메모리(140)의 복수의 블록들 중 일부를 희생 블록(Victim Block)으로 설정하여, 분류 동작을 수행할 수 있다.
예를 들어, 컨트롤러(120)는 비휘발성 메모리(140)의 복수의 블록들 중 제1 블록(Block 1), 제7 블록(Block 7), 제8 블록(Block 8), 및 제9 블록(Block 9)을 희생 블록(Victim Block)으로 설정하고, 제1 블록(Block 1), 제7 블록(Block 7), 제8 블록(Block 8), 및 제9 블록(Block 9)에 대해, 가비지 콜렉션을 수행함으로써, 데이터의 특성에 따라 분류된 스트림 분류 번호를 바탕으로, 동일한 스트림 분류 번호를 갖는 데이터끼리 동일한 블록에 프로그램시킬 수 있다.
더 자세히는, 컨트롤러(120)는 희생 블록(Victim Block)으로 설정된 제1 블록(Block 1), 제7 블록(Block 7), 제8 블록(Block 8), 및 제9 블록(Block 9)에 프로그램된 데이터들(예를 들어, 제1 데이터(Data #1) 내지 제8 데이터(Data #8))을 비휘발성 메모리(140) 내 프리 블록들(예를 들어, 제5 블록(Block 5) 내지 제7 블록(Block 7))에 가비지 콜렉션을 통해 프로그램 할 수 있다. 즉, 컨트롤러(120)는 가비지 콜렉션을 통해, 희생 블록(Victim Block)으로부터, 하나의 블록에 동일한 스트림 분류 번호를 갖는 데이터들만 프로그램되는 목적 블록(Destination Block)을 생성해낼 수 있다. 참고적으로, 컨트롤러(120)가 생성하는 목적 블록(Destination Block)은 이에 제한되지 않고, 다른 종류의 프리 블록일 수 있다.
예를 들어, 컨트롤러(120)는 제1 블록(Block 1)의 제1 데이터(Data #1)와 제3 데이터(Data #3)를 제5 블록(Block 5)에 프로그램 할 수 있다. 또한, 컨트롤러(120)는 제7 블록(Block 7)의 제4 데이터(Data #4)를 제5 블록(Block 5)에 프로그램 할 수 있다. 또한, 컨트롤러(120)는 제8 블록(Block 8)의 제2 데이터를 제6 블록(Block 6)에 프로그램할 수 있다. 또한, 컨트롤러(120)는 제8 블록(Block 8)의 제8 데이터를 제7 블록(Block 7)에 프로그램할 수 있다. 또한, 컨트롤러(120)는 제9 블록(Block 9)의 제5 데이터를 제6 블록(Block 6)에 프로그램할 수 있다. 또한, 컨트롤러(120)는 제9 블록(Block 9)의 제6 데이터와 제7 데이터(Data #7)를 제7 블록(Block 7)에 프로그램할 수 있다.
컨트롤러(120)는 상술한 바와 같이, 가비지 콜렉션을 통해, 하나의 블록에 동일한 스트림 분류 번호를 갖는 데이터들만 프로그램되는 목적 블록(Destination Block)을 생성해낼 수 있다. 더 자세히는, 컨트롤러(120)의 가비지 콜렉션을 통한 분류 동작을 통해, 제5 블록(Block 5)은 제1 스트림 분류 번호를 갖는 제1 데이터(Data #1), 제3 데이터(Data #3), 및 제4 데이터(Data #4)만을 포함할 수 있다. 또한, 컨트롤러(120)의 가비지 콜렉션을 통한 분류 동작을 통해, 제6 블록(Block 6)은 제2 스트림 분류 번호를 갖는 제2 데이터(Data #2), 및 제5 데이터(Data #5)를 포함할 수 있다. 또한, 컨트롤러(120)의 가비지 콜렉션을 통한 분류 동작을 통해, 제7 블록(Block 7)은 제3 스트림 분류 번호를 갖는 제6 데이터(Data #6), 제7 데이터(Data #7), 및 제8 데이터(Data #8)만을 포함할 수 있다.
이를 통해, 몇몇 실시예에 따른 스토리지 장치(100)의 WAF 특성을 향상시킬 수 있고, 스토리지 장치(100)의 동작 신뢰성도 향상시킬 수 있다. 이하에서, 몇몇 실시예에 따른 스토리지 장치(100)의 동작 방법을 흐름도를 통해 자세히 살펴본다.
도 13은 몇몇 실시예에 따른 스토리지 장치를 포함하는 스토리지 시스템의 동작을 설명하는 예시적인 흐름도이다.
도 1 및 도 13을 참조하면, 스토리지 장치(100)가, 호스트(200)로부터 데이터의 특성에 따라 분류된 스트림 분류 번호를 포함하는 데이터들을 수신한다(S100). 호스트(200)로부터 전송받은 데이터들은 버퍼(130)에 임시로 저장될 수 있다(S200). 버퍼(130)에 임시로 저장된 데이터들은 비휘발성 메모리(140) 내 프리 블록에 프로그램 될 수 있다(S300). 이후, 컨트롤러(120)는 비휘발성 메모리(140) 내에 프로그램된 데이터들에 대해, 스트림 분류 번호가 동일한 데이터들끼리 동일한 블록에 프로그램될 필요가 있는지 판단한다(S400).
이때, 컨트롤러(120)가 비휘발성 메모리(140) 내에 프로그램된 데이터들에 대해, 분류 동작이 필요 없다고 판단되는 경우(No), 추가적인 동작 없이 호스트(200)로부터 추가적인 데이터를 수신할 수 있다.
만약, 컨트롤러(120)가 비휘발성 메모리(140) 내에 프로그램된 데이터들에 대해, 분류 동작이 필요하다고 판단한 경우(Yes), 컨트롤러(120)는 비휘발성 메모리(140)의 복수의 블록들 중 적어도 일부를 분류 동작이 수행될 희생 블록(Victim Block)으로 결정한다(S500).
이때, 컨트롤러(120)는 몇몇 실시예에 따른 희생 블록(Victim Block)의 결정 방식을 이용하여 분류 동작이 수행될 대상 희생 블록(Victim Block)을 결정할 수 있다. 몇몇 실시예에 따른 컨트롤러(120)는 예를 들어, 비휘발성 메모리(140) 내 블록들 각각에 포함된 스트림 분류 번호의 종류의 수를 기준으로 희생 블록(Victim Block)을 결정할 수 있다. 몇몇 실시예에 따른 컨트롤러(120)는 다른 예를 들어, 비휘발성 메모리(140) 내 블록들 각각에 포함된 유효(valid) 데이터의 개수를 기준으로 희생 블록(Victim Block)을 결정할 수 있다. 몇몇 실시예에 따른 컨트롤러(120)는 다른 예를 들어, 비휘발성 메모리(140) 내 블록들 중 일부 블록을 희생 블록(Victim Block)으로 설정한 것을 가정하여, 가비지 콜렉션이 수행되어 생성될 프리 블록과, 가비지 콜렉션이 수행되어 소멸될 프리 블록의 수를 비교함으로써 희생 블록(Victim Block)을 결정할 수 있다.
컨트롤러(120)는 몇몇 실시예에 따른 희생 블록(Victim Block)의 결정 방식을 이용하여 분류 동작이 수행될 대상 희생 블록(Victim Block)을 결정하는 방식을 도 14 내지 도 20을 통해 살펴본다.
먼저, 도 14 및 도 15를 통해, 몇몇 실시예에 따른 컨트롤러(120)가 예를 들어, 비휘발성 메모리(140) 내 블록들 각각에 포함된 스트림 분류 번호의 종류의 수를 기준으로 희생 블록(Victim Block)을 결정하는 동작(S500-1)을 살펴본다.
도 14는 몇몇 실시예에 따른 희생 블록을 결정하는 동작을 설명하기 위한 예시적인 도면이다.
도 1 및 도 14를 참조하면, 비휘발성 메모리(140) 내의 제1 블록(Block 1)과 제2 블록(Block 2)에 데이터가 저장되어 있을 수 있다. 비록, 도 14에서는 비휘발성 메모리(140) 내에 데이터가 프로그램된 블록을 제1 블록(Block 1)과 제2 블록(Block 2)만 도시하였으나, 이는 설명의 편의를 위한 것이며, 본 발명이 이에 제한되는 것은 아니다.
또한, 도 14에서는 제1 블록(Block 1)과 제2 블록(Block 2)에 스트림 분류 번호만 저장되어 있는 것으로 도시하였으나, 이는 설명의 편의를 위한 것일 뿐이다. 전술한 바와 같이, 제1 블록(Block 1)과 제2 블록(Block 2)에는 데이터 및 데이터와 관련된 스트림 분류 번호가 함께 저장되어 있을 수 있고, 어드레스 정보 및 에러 정정 패러티도 함께 저장되어 있을 수 있다.
몇몇 실시예에 따른 컨트롤러(120)는, 제1 블록(Block 1)과 제2 블록(Block 2) 중 저장된 스트림 분류 번호의 종류의 수가 미리 지정된 수(pre-defined amount)보다 작은 블록을 희생 블록(Victim Block)으로 결정할 수 있다. 또는 컨트롤러(120)는 제1 블록(Block 1)과 제2 블록(Block 2) 중 저장된 스트림 분류 번호의 종류의 수가 적은 블록을 희생 블록(Victim Block)으로 결정할 수 있다.
예를 들어, 제1 블록(Block 1)은 스트림 분류 번호1 내지 스트림 분류 번호8(Stream1~Stream8)가 저장되어 있을 수 있다. 다시 말해서, 제1 블록(Block1)에 저장된 스트림 분류 번호의 종류의 수는 8개가 될 수 있다. 제2 블록(Block2)은 스트림 분류 번호1 내지 스트림 분류 번호3(Stream1~Stream3)가 저장되어 있을 수 있다. 다시 말해서, 제2 블록(Block2)에 저장된 스트림 분류 번호의 종류의 수는 3개가 될 수 있다.
만약, 미리 지정된 수(pre-defined amount)가 5라고 한다면, 컨트롤러(120)는 제1 블록(Block1)과 제2 블록(Block2) 중 제2 블록(Block2)을 희생 블록(Victim Block)으로 선택할 수 있다. 또는, 컨트롤러(120)는 제1 블록(Block1)과 제2 블록(Block2) 중 제2 블록(Block2)을 희생 블록(Victim Block)으로 선택할 수 있다.
복수개의 블록들 중 저장된 스트림 분류 번호의 종류의 수가 미리 지정된 수(pre-defined amount)보다 작은 블록을 희생 블록(Victim Block)으로 선택하면, 쓰기 증폭 계수(WAF: Write Amplification Factor)를 최소화할 수 있고, 스토리지 장치(100)의 소비 전력을 낮출 수 있다. 또는, 저장된 스트림 분류 번호의 종류의 수가 가장 적은 블록을 희생 블록(Victim Block)으로 선택하면, 쓰기 증폭 계수(WAF: Write Amplification Factor)를 최소화할 수 있고, 스토리지 장치(100)의 소비 전력을 낮출 수 있다. 이에 대한 구체적인 동작의 방법을 도 15를 통해 살펴본다.
도 15는 몇몇 실시예에 따른 희생 블록을 결정하는 도 14의 동작을 설명하기 위한 예시적인 흐름도이다.
도 1 및 도 15를 참조하면, 먼저 컨트롤러(120)는 비휘발성 메모리(140) 내의 블록들 각각에 포함된 스트림 분류 번호의 종류의 수를 측정한다(S500-1A). 이후, 컨트롤러(120)는 측정된 스트림 분류 번호의 종류의 수와 미리 지정된 수(pre-defined amount)를 비교한다(S500-1B). 이후, 컨트롤러(120)는 측정된 스트림 분류 번호의 종류의 수가 미리 지정된 수(pre-defined amount)보다 작다고 판단되는 블록들을 희생 블록(Victim Block)으로 정할 수 있다(S500-1C). 혹은, 컨트롤러(120)는 단계 S500-1B에서, 단계 S500-1A에서 측정된 블록들 중에서 가장 작은 스트림 분류 번호의 종류의 수를 갖는 블록을 희생 블록(Victim Block)으로 정할 수 있다(S500-1C).
다음으로, 도 16 및 도 17를 통해, 몇몇 실시예에 따른 컨트롤러(120)가 예를 들어, 비휘발성 메모리(140) 내 블록들 각각에 포함된 유효(valid) 데이터의 개수를 기준으로 희생 블록(Victim Block)을 결정하는 동작(S500-2)을 살펴본다.
도 16은 몇몇 실시예에 따른 희생 블록을 결정하는 동작을 설명하기 위한 예시적인 도면이다. 도 17은 몇몇 실시예에 따른 희생 블록을 결정하는 도 16의 동작을 설명하기 위한 예시적인 흐름도이다.
도 1 및 도 16을 참조하면, 스토리지 장치(100)의 비휘발성 메모리(140)는 복수의 블록을 포함할 수 있다. 설명의 편의를 위해, 도 14의 설명 내용과 중복되는 설명은 생략하거나, 간단히 설명한다.
몇몇 실시예에 따른 컨트롤러(120)는 복수의 블록들 각각에 저장된 데이터 중 유효 데이터(Valid Data)의 개수가 미리 지정된 개수(pre-defined number)보다 작은 블록을 희생 블록(Victim Block)으로 결정할 수 있다. 또는, 몇몇 실시예에 따른 컨트롤러(120)는 복수의 블록들 각각에 저장된 데이터 중 유효 데이터(Valid Data)의 개수가 가장 작은 블록을 희생 블록(Victim Block)으로 결정할 수 있다.
예를 들어, 도 16에 도시된 유효 데이터(Valid Data)의 넓이와 무효 데이터(Invalid Data)의 넓이는 각각 제1 블록(Block1) 및 제2 블록(Block2)에 저장된 데이터 중 유효 데이터(Valid Data)와 무효 데이터(Invalid Data)가 차지하는 비율을 의미할 수 있다.
예를 들어, 제1 블록(Block1)의 유효 데이터(Valid Data)의 개수는 제1 블록(Block1)의 무효 데이터(Invalid Data)의 개수보다 많을 수 있다. 또한, 제2 블록(Block2)의 유효 데이터(Valid Data) 개수는 제2 블록(Block2)의 무효 데이터(Invalid Data)의 개수보다 적을 수 있다. 뿐만 아니라, 제1 블록(Block1)과 제2 블록(Block2)의 크기가 동일하다면, 제1 블록(Block1)의 유효 데이터(Valid Data)의 개수는 제2 블록(Block2)의 유효 데이터(Valid Data)의 개수보다 많을 수 있다.
만약, 미리 지정된 개수(pre-defined number)가 5이고, 제1 블록(Block 1)의 유효 데이터의 개수가 10이고, 제2 블록(Block 2)의 유효 데이터의 개수가 3이라면, 몇몇 실시예에 따른 컨트롤러(120)는 제2 블록(Block 2)을 희생 블록(Victim Block)으로 결정할 수 있다. 또는, 몇몇 실시예에 따른 컨트롤러(120)는 제1 블록(Block1)과 제2 블록(Block2) 중 유효 데이터(Valid Data)가 가장 작은 제2 블록(Block2)을 희생 블록(Victim Block)으로 결정할 수 있다.
몇몇 실시예에 따른 컨트롤러(120)가 복수개의 블록들 중 유효 데이터(Valid data)의 개수가 미리 지정된 개수(pre-defined number)보다 작은 블록을 희생 블록(Victim Block)으로 선택하면, 쓰기 증폭 계수(WAF)를 최소화할 수 있고, 스토리지 장치(100)의 소비 전력을 낮출 수 있다. 또는, 몇몇 실시예에 따른 컨트롤러(120)가 복수개의 블록들 중 유효 데이터(Valid data)의 개수가 가장 적은 블록을 희생 블록(Victim Block)으로 선택하면, 쓰기 증폭 계수(WAF)를 최소화할 수 있고, 스토리지 장치(100)의 소비 전력을 낮출 수 있다. 이에 대한 구체적인 동작의 방법을 도 17을 통해 살펴본다.
도 1 및 도 17을 참조하면, 먼저 컨트롤러(120)는 비휘발성 메모리(140) 내의 블록들 각각에 포함된 유효 데이터(Valid data)의 개수를 측정한다(S500-2A). 이후, 컨트롤러(120)는 측정된 유효 데이터(Valid data)의 개수와 미리 지정된 개수(pre-defined number)를 비교한다(S500-2B). 이후, 컨트롤러(120)는 측정된 유효 데이터(Valid data)의 개수가 미리 지정된 개수(pre-defined number)보다 작다고 판단되는 블록들을 희생 블록(Victim Block)으로 정할 수 있다(S500-2C). 혹은, 컨트롤러(120)는 단계 S500-2B에서, 단계 S500-2A에서 측정된 블록들 중에서 가장 작은 유효 데이터(Valid data)의 개수를 갖는 블록을 희생 블록(Victim Block)으로 정할 수 있다(S500-2C).
다음으로, 도 18 내지 도 20을 통해, 몇몇 실시예에 따른 컨트롤러(120)가 예를 들어, 비휘발성 메모리(140) 내 블록들 중 일부 블록을 희생 블록(Victim Block)으로 설정한 것을 가정하여, 가비지 콜렉션이 수행되어 생성될 프리 블록과, 가비지 콜렉션이 수행되어 소멸될 프리 블록의 수를 비교함으로써 희생 블록(Victim Block)을 결정하는 동작(S500-3)을 살펴본다.
도 18 및 도 19는 몇몇 실시예에 따른 희생 블록을 결정하는 동작을 설명하기 위한 예시적인 도면이다. 도 20은 몇몇 실시예에 따른 희생 블록을 결정하는 도 18 및 도 19의 동작을 설명하기 위한 예시적인 흐름도이다. 비휘발성 메모리(140) 내의 블록들과 데이터에 대한 설명은 상술한 설명들과 중복되는 설명은 생략하거나 간략히 설명한다.
먼저, 도 1 및 도 18을 참조하면, 예를 들어, 비휘발성 메모리(140) 내의 제1 블록(Block 1) 내지 제3 블록(Block 3)에 제1 데이터(Data #1) 내지 제6 데이터(Data #6)가 저장되어 있을 수 있다. 제1 데이터(Data #1) 내지 제6 데이터(Data #6)는 모두 서로 다른 스트림 분류 번호(예를 들어, 제1 스트림 분류 번호 내지 제6 스트림 분류 번호)를 갖는다고 가정한다.
컨트롤러(120)는 비휘발성 메모리(140) 내의 블록들 중 제1 블록(Block 1) 내지 제3 블록(Block 3)을 희생 블록(Victim Block)으로 결정할 것으로 가정한다. 컨트롤러(120)는 희생 블록(Victim Block)에 대해 가비지 콜렉션을 수행하여 분류 동작이 수행된 후의 목적 블록(Destination Block)을 계산한다.
예를 들어, 컨트롤러(120)는 제1 블록(Block 1) 내지 제3 블록(Block 3)을 희생 블록(Victim Block)으로 가정한다. 컨트롤러(120)는 희생 블록(Victim Block)에 대해 가비지 콜렉션을 통해 분류 동작을 수행한 후의 목적 블록(Destination Block)을 계산한다. 목적 블록(Destination Block)은 예를 들어, 제1 스트림 분류 번호를 갖는 제1 데이터(Data #1)가 저장된 제4 블록(Block 4)을 포함한다. 또한, 목적 블록(Destination Block)은 예를 들어, 제2 스트림 분류 번호를 갖는 제2 데이터(Data #2)가 저장된 제5 블록(Block 5)을 포함한다. 또한, 목적 블록(Destination Block)은 예를 들어, 제3 스트림 분류 번호를 갖는 제3 데이터(Data #3)가 저장된 제6 블록(Block 6)을 포함한다. 또한, 목적 블록(Destination Block)은 예를 들어, 제4 스트림 분류 번호를 갖는 제4 데이터(Data #4)가 저장된 제7 블록(Block 7)을 포함한다. 또한, 목적 블록(Destination Block)은 예를 들어, 제5 스트림 분류 번호를 갖는 제5 데이터(Data #5)가 저장된 제8 블록(Block 8)을 포함한다. 또한, 목적 블록(Destination Block)은 예를 들어, 제6 스트림 분류 번호를 갖는 제6 데이터(Data #6)가 저장된 제9 블록(Block 9)을 포함한다.
컨트롤러(120)는 제1 블록(Block 1) 내지 제3 블록(Block 3)을 희생 블록(Victim Block)으로 결정할 경우, 목적 블록(Destination Block) 생성을 위해 소멸된 프리 블록의 수는 총 6개(제4 블록(Block 4) 내지 제9 블록(Block 9))이고, 생성된 프리 블록의 수는 총 3개(제1 블록(Block 1) 내지 제3 블록(Block 3))임을 측정할 수 있다. 즉, 컨트롤러(120)는 총 3개의 생성된 프리 블록의 수보다 총 6개의 소멸된 프리 블록의 수가 더 많다고 판단하고, 제1 블록(Block 1) 내지 제3 블록(Block 3)을 희생 블록(Victim Block)으로 결정하지 않을 수 있다.
도 1 및 도 19를 참조하여, 컨트롤러(120)가 제1 블록(Block 1)만을 희생 블록(Victim Block)으로 결정할 것으로 가정한 경우를 설명한다. 컨트롤러(120)는 희생 블록(Victim Block)에 대해 가비지 콜렉션을 수행하여 분류 동작이 수행된 후의 목적 블록(Destination Block)을 계산한다.
예를 들어, 컨트롤러(120)는 제1 블록(Block 1)을 희생 블록(Victim Block)으로 가정한다. 컨트롤러(120)는 희생 블록(Victim Block)에 대해 가비지 콜렉션을 통해 분류 동작을 수행한 후의 목적 블록(Destination Block)을 계산한다. 목적 블록(Destination Block)은 예를 들어, 제1 스트림 분류 번호를 갖는 제1 데이터(Data #1)가 저장된 제4 블록(Block 4)을 포함한다. 또한, 목적 블록(Destination Block)은 예를 들어, 제2 스트림 분류 번호를 갖는 제2 데이터(Data #2)가 저장된 제5 블록(Block 5)을 포함한다.
컨트롤러(120)는 제1 블록(Block 1)을 희생 블록(Victim Block)으로 결정할 경우, 목적 블록(Destination Block) 생성을 위해 소멸된 프리 블록의 수는 총 2개(제4 블록(Block 4) 내지 제5 블록(Block 5))이고, 생성된 프리 블록의 수는 총 1개(제1 블록(Block 1) 내지 제3 블록(Block 3))임을 측정할 수 있다. 즉, 컨트롤러(120)는 총 1개의 생성된 프리 블록의 수보다 총 2개의 소멸된 프리 블록의 수가 더 많다고 판단하고, 제1 블록(Block 1) 내지 제3 블록(Block 3)을 희생 블록(Victim Block)으로 결정하지 않을 수 있다.
상술한 바와 반대의 경우, 즉, 컨트롤러(120)가 희생 블록(Victim Block)으로 결정할 블록에 대해 가비지 콜렉션을 수행할 경우를 가정하여, 생성될 프리 블록의 수가 소멸될 프리 블록의 수보다 많다고 판단하는 경우에 해당 희생 블록(Victim Block)에 대해 가비지 콜렉션을 수행할 수 있다.
몇몇 실시예에 따른 컨트롤러(120)가 희생 블록(Victim Block)에 대한 가비지 콜렉션을 수행한 경우의 생성될 프리 블록의 수를 최대화 함으로써, 쓰기 증폭 계수(WAF)를 최소화할 수 있고, 스토리지 장치(100)의 소비 전력을 낮출 수 있다. 이에 대한 구체적인 동작의 방법을 도 20을 통해 살펴본다.
도 1 및 도 20을 참조하면, 먼저 컨트롤러(120)는 가비지 콜렉션을 수행할 희생 블록(Victim Block)을 가정하여, 가비지 콜렉션이 수행된 후 생성될 프리 블록과 가비지 콜렉션이 수행된 후 소멸될 프리 블록의 수를 각각 측정한다(S500-3A). 이후, 컨트롤러(120)는 생성될 프리 블록과 상기 소멸될 프리 블록을 비교한다(S500-3B). 이후, 컨트롤러(120)는 생성될 프리 블록의 수가 소멸될 프리 블록의 수보다 많다고 판단하는 S500-1A에서 가정한 희생 블록(Victim Block)을 희생 블록(Victim Block)으로 정할 수 있다(S500-3C).
다시 도 1 및 도 13을 참조하면, 컨트롤러(120)가 가비지 콜렉션을 수행할 희생 블록(Victim Block)을 결정한 후, 가비지 콜렉션을 수행하기 전에, 외부 장치(예를 들어, 호스트(200), 이하에서는 외부 장치는 호스트(200)임을 가정하고 설명한다.)에 가비지 콜렉션과 관련된 동작 정보를 전송하고, 호스트(200)로부터 가비지 콜렉션을 수행할 지 말 지에 대한 응답을 기다린다(S600). 이에 대해, 도 21을 통해 자세히 살펴본다.
도 21은 몇몇 실시예에 따른 호스트와 스토리지 장치 사이의 신호 전달 동작을 설명하기 위한 예시적인 도면이다.
도 1 및 도 21을 참조하면, 스토리지 장치(100)는 가비지 콜렉션이 수행될 희생 블록(Victim Block)에 대한 가비지 콜렉션 수행 동작 관련 정보(Info)를 호스트(200)에 전달한다.
스토리지 장치(100)가 호스트(200)에 전달하는 정보(Info)는 가비지 콜렉션이 수행될 경우 필요한 시간, 자원, 전력 등이 될 수 있다. 또는, 이에 제한되지 않고, 스토리지 장치(100)가 호스트(200)에 전달하는 정보(Info)는 가비지 콜렉션이 수행될 경우 생성될 프리 블록의 수, 소멸될 프리 블록의 수일 수도 있다. 또는, 이에 제한되지 않고, 스토리지 장치(100)가 호스트(200)에 전달하는 정보(Info)는 현재 비휘발성 메모리(140) 내에 포함된 프리 블록의 개수일 수도 있다. 스토리지 장치(100)가 호스트(200)에 전달하는 정보(Info)는 이에 제한되지 않고, 컨트롤러(120)가 수행하는 가비지 콜렉션과 관련된 그 어느 정보도 가능할 수 있다.
호스트(200)는 정보(Info)를 스토리지 장치(100)로부터 수신하고, 현재 호스트(200)가 아이들(Idle) 상태인지 판단할 수 있다. 호스트(200)는 호스트(200)가 아이들 상태라고 판단하여, 스토리지 장치(100)에 호스트(200)가 아이들이라는 신호를 전달하여 스토리지 장치(100)가 가비지 콜렉션을 수행하는 것을 허락할 수 있다.
예를 들어, 호스트(200)는 호스트(200)가 전력을 차단할 예정이 없거나, 호스트(200)가 무리한 전력을 소모할 예정이 없다고 판단하여, 스토리지 장치(100)가 가비지 콜렉션을 수행하여도 괜찮다고 판단할 경우, 스토리지 장치(100)에 가비지 콜렉션 허가 신호를 전달할 수 있다.
다시 도 1 및 도 13을 참조하면, 단계 S600에서 스토리지 장치(100)가 호스트(200)로부터 가비지 콜렉션 수행 허가 명령을 전달받지 못한다면(No) 스토리지 장치(100)는 가비지 콜렉션을 수행하지 않고, 다시 호스트(200)로부터 데이터를 수신받을 수 있다.
만약, 단계 S600에서 스토리지 장치(100)가 호스트(200)로부터 가비지 콜렉션 수행 허가 명령을 전달 받는다면(Yes), 스토리지 장치(100)는 목적 블록(Destination Block)을 생성하는 가비지 콜렉션을 수행할 수 있다(S700).
상술한 스토리지 장치의 가비지 콜렉션은 백그라운드 동작(background operation)으로 수행될 수 있다. 다시 말해서, 스토리지 장치의 컨트롤러는 호스트(200)로부터 수신되는 명령(command)이 없어도, 컨트롤러(120)가 분류 동작이 필요하다고 판단하는 경우, 가비지 콜렉션을 수행할 수 있다. 예를 들어, 가비지 콜렉션은 호스트(200)로부터 수신되는 명령(command)이 없을 때, 즉 스토리지 장치(100)가 아이들(idle) 상태일 때 수행될 수 있으나, 이에 제한되지는 않는다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
100: 스토리지 장치 110: 인터페이스 120: 컨트롤러 130: 버퍼 140: 비휘발성 메모리 150: 버스 200: 호스트 210: 파일 시스템

Claims (10)

  1. 외부로부터 제1 데이터와 제2 데이터를 수신하여, 제1 페이지에 저장하는 버퍼;
    상기 제1 데이터와 상기 제2 데이터를 제1 블록에 저장하는 비휘발성 메모리; 및
    가비지 콜렉션(GC: Garbage Collection)을 통해, 상기 제1 데이터와 상기 제2 데이터를 서로 다른 프리 블록에 프로그램을 수행하는 컨트롤러를 포함하되,
    상기 제1 데이터는 상기 제1 데이터의 특성을 식별하는 제1 스트림 분류 번호를 포함하고,
    상기 제2 데이터는 상기 제2 데이터의 특성을 식별하고, 상기 제1 스트림 분류 번호와 다른 제2 스트림 분류 번호를 포함하며,
    상기 컨트롤러는,
    상기 프로그램을 수행하기 전에 상기 외부에 상기 프로그램 동작 정보를 전송하고,
    상기 외부로부터 상기 프로그램 수행 허가 명령을 수신하면 상기 프로그램을 수행하는 스토리지 장치.
  2. 제 1항에 있어서,
    물리적 맵핑 테이블 버퍼를 더 포함하되,
    상기 물리적 맵핑 테이블 버퍼는 상기 제1 데이터의 제1 논리 블록 어드레스(LBA: Logical Block Address)에 대응하는 제1 물리 블록 어드레스(PBA: Physical Block Address)를 저장하고, 상기 제2 데이터의 제2 논리 블록 어드레스에 대응하는 제2 물리 블록 어드레스를 저장하는 물리적 맵핑 테이블(Physical Mapping Table)을 저장하며,
    상기 컨트롤러는,
    상기 프로그램 동작이 수행되면, 상기 물리적 맵핑 테이블을 업데이트하는 스토리지 장치.
  3. 제 1항에 있어서,
    스트림 맵핑 테이블 버퍼를 더 포함하되,
    상기 스트림 맵핑 테이블 버퍼는 상기 제1 데이터의 제1 논리 블록 어드레스에 대응하는 상기 제1 스트림 분류 번호를 저장하고, 상기 제2 데이터의 제12논리 블록 어드레스에 대응하는 상기 제2 스트림 분류 번호를 저장하는 스트림 맵핑 테이블을 저장하며,
    상기 컨트롤러는,
    상기 제1 데이터의 특성과 상기 제2 데이터의 특성을 상기 스트림 맵핑 테이블을 통해 판단하는 스토리지 장치.
  4. 제 1항에 있어서,
    상기 비휘발성 메모리에 저장되는 상기 제1 데이터는 제1 데이터 여분 공간을 포함하고, 상기 제2 데이터는 제2 데이터 여분 공간을 포함하며,
    상기 제1 스트림 분류 번호는 상기 제1 데이터 여분 공간에 저장되고, 상기 제2 스트림 분류 번호는 상기 제2 데이터 여분 공간에 저장되는 스토리지 장치.
  5. 제 1항에 있어서,
    상기 컨트롤러는 상기 제1 블록에 포함된 스트림 분류 번호의 종류의 수가 미리 지정된 수(pre-defined amount)보다 작은 지를 판단하고,
    작다고 판단되는 경우, 상기 가비지 콜렉션을 수행하고,
    작다고 판단하지 않는 경우, 상기 가비지 콜렉션을 수행하지 않는 스토리지 장치.
  6. 제 1항에 있어서,
    상기 컨트롤러는 상기 제1 블록에 포함된 유효(valid) 데이터의 개수가 미리 지정된 개수(pre-defined number)보다 작은 지를 판단하고,
    작다고 판단되는 경우, 상기 가비지 콜렉션을 수행하고,
    작다고 판단하지 않는 경우, 상기 가비지 콜렉션을 수행하지 않는 스토리지 장치.
  7. 제 1항에 있어서,
    상기 컨트롤러는,
    상기 프로그램을 통해 소모되는 프리 블록의 수와, 상기 프로그램을 통해 생성되는 프리 블록의 수 사이의 차이값을 계산하고,
    상기 차이값이 미리 지정된 값(pre-defined value)보다 큰 경우, 상기 가비지 콜렉션을 수행하는 스토리지 장치.
  8. 제 1항에 있어서,
    상기 프로그램 동작 정보는 상기 프리 블록의 개수, 상기 프로그램시 필요한 전력, 상기 프로그램 후 생성되는 프리 블록의 개수 중 적어도 하나를 포함하는 스토리지 장치.
  9. 데이터의 특성에 따라 분류된 스트림 분류 번호를 포함하는 데이터를 전송하는 호스트;
    상기 호스트로부터 수신된 데이터가, 상기 스트림 분류 번호에 상관 없이, 임의로 저장되는 복수의 블록을 포함하는 비휘발성 메모리; 및
    상기 데이터의 특성에 따라 분류된 스트림 분류 번호를 바탕으로, 동일한 상기 스트림 분류 번호를 갖는 상기 데이터끼리 동일한 블록에 프로그램하는 컨트롤러를 포함하되,
    상기 컨트롤러는,
    상기 프로그램을 수행하기 전에 상기 호스트에 상기 프로그램의 동작 정보를 전송하고,
    상기 호스트로부터 상기 프로그램 수행 허가 명령을 수신하면 상기 프로그램을 수행하는 스토리지 장치.
  10. 호스트로부터, 데이터의 특성에 따라 분류된 스트림 분류 번호를 포함하는 데이터들을 수신 받고,
    상기 데이터들을 비휘발성 메모리 내의 프리 블록에 저장하고,
    컨트롤러를 통해, 상기 데이터들에 대해, 상기 스트림 분류 번호에 따라 분류될 필요가 있는지 판단하고,
    상기 스트림 분류 번호에 따라 상기 데이터들이 분류될 필요가 있다고 판단된 경우, 상기 비휘발성 메모리 내 상기 데이터가 저장된 블록들 중 가비지 콜렉션을 통해 상기 분류가 수행될 희생 블록을 결정하고,
    상기 희생 블록에 대한 상기 가비지 콜렉션을 수행할 경우에 대한 정보를 상기 호스트에 전송하고,
    상기 호스트로부터 상기 가비지 콜렉션의 수행 가능 메시지를 전달받으면, 상기 희생 블록에 대한 가비지 컬렉션을 수행하여, 상기 희생 블록 내 데이터들을 상기 스트림 분류 번호에 따라 분류하여 상기 프리 블록에 프로그램하는 것을 포함하는 스토리지 장치의 동작 방법.
KR1020200076310A 2020-06-23 2020-06-23 스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법 KR20210158043A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020200076310A KR20210158043A (ko) 2020-06-23 2020-06-23 스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법
US17/185,001 US20210397550A1 (en) 2020-06-23 2021-02-25 Storage device for classifying data based on stream class number and operating method thereof
EP21159911.3A EP3929753B1 (en) 2020-06-23 2021-03-01 Storage device for classifying data based on stream class number and operating method thereof
CN202110535812.6A CN113836047A (zh) 2020-06-23 2021-05-17 存储装置及其操作方法
US18/144,335 US20230273878A1 (en) 2020-06-23 2023-05-08 Storage device for classifying data based on stream class number, storage system, and operating method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200076310A KR20210158043A (ko) 2020-06-23 2020-06-23 스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법

Publications (1)

Publication Number Publication Date
KR20210158043A true KR20210158043A (ko) 2021-12-30

Family

ID=74844809

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200076310A KR20210158043A (ko) 2020-06-23 2020-06-23 스트림 분류 번호에 따른 데이터 분류 스토리지 장치 및 그 동작 방법

Country Status (4)

Country Link
US (2) US20210397550A1 (ko)
EP (1) EP3929753B1 (ko)
KR (1) KR20210158043A (ko)
CN (1) CN113836047A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11663123B2 (en) * 2021-04-27 2023-05-30 Micron Technology, Inc. Page validity table colors for garbage collection

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8799561B2 (en) * 2012-07-27 2014-08-05 International Business Machines Corporation Valid page threshold based garbage collection for solid state drive
KR101549569B1 (ko) * 2014-02-14 2015-09-03 고려대학교 산학협력단 가비지 컬렉션 수행 방법 및 그 방법을 이용한 플래시 메모리 장치
US9696935B2 (en) * 2015-04-24 2017-07-04 Kabushiki Kaisha Toshiba Storage device that secures a block for a stream or namespace and system having the storage device
US10133490B2 (en) * 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US11048624B2 (en) * 2017-04-25 2021-06-29 Samsung Electronics Co., Ltd. Methods for multi-stream garbage collection
KR102387935B1 (ko) * 2017-10-23 2022-04-15 삼성전자주식회사 공용 메모리 영역 및 전용 메모리 영역을 포함하는 데이터 저장 장치
KR102457400B1 (ko) * 2017-11-16 2022-10-21 삼성전자주식회사 가비지 컬렉션 방법, 이를 수행하는 저장 장치 및 이를 포함하는 컴퓨팅 시스템
KR102178717B1 (ko) 2018-12-19 2020-11-27 주식회사 포스코 도금 밀착성 및 내식성이 우수한 Zn-Mg 합금 도금 강재 및 그 제조방법
KR20200141212A (ko) * 2019-06-10 2020-12-18 에스케이하이닉스 주식회사 가비지콜렉션 동작을 위한 메모리 시스템 및 메모리 시스템의 동작방법
KR20200142698A (ko) * 2019-06-13 2020-12-23 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법

Also Published As

Publication number Publication date
EP3929753B1 (en) 2023-06-07
US20230273878A1 (en) 2023-08-31
CN113836047A (zh) 2021-12-24
US20210397550A1 (en) 2021-12-23
EP3929753A1 (en) 2021-12-29

Similar Documents

Publication Publication Date Title
US11640353B2 (en) Memory system, data storage device, user device and data management method thereof
EP3118745B1 (en) A heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
JP4422652B2 (ja) 漸進的マージ方法及びそれを利用したメモリシステム
US10126959B2 (en) Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
JP6568387B2 (ja) ストレージコントローラ及びストレージ装置
KR101638061B1 (ko) 플래시 메모리 시스템 및 그것의 플래시 조각 모음 방법
US9128618B2 (en) Non-volatile memory controller processing new request before completing current operation, system including same, and method
US9053007B2 (en) Memory system, controller, and method for controlling memory system
US20140337566A1 (en) Solid state memory (ssm), computer system including an ssm, and method of operating an ssm
WO2011010348A1 (ja) フラッシュメモリ装置
US20110264884A1 (en) Data storage device and method of operating the same
KR102649131B1 (ko) 메모리 시스템 내 대용량 데이터 저장이 가능한 블록에서의 유효 데이터 체크 방법 및 장치
US20110208898A1 (en) Storage device, computing system, and data management method
KR20140112303A (ko) 불휘발성 메모리 장치, 전자 장치 그리고 그것을 포함하는 컴퓨팅 시스템
KR20190056211A (ko) 가비지 컬렉션 방법, 이를 수행하는 저장 장치 및 이를 포함하는 컴퓨팅 시스템
KR20200016075A (ko) 메모리 시스템에서의 유효 데이터 탐색 방법 및 장치
KR20200132495A (ko) 메모리 시스템, 컨트롤러 및 컨트롤러의 동작 방법
KR20200114212A (ko) 데이터 저장 장치 및 그것의 동작 방법
CN114077389A (zh) 控制器、存储器系统以及数据处理系统
CN112306898A (zh) 存储设备、其操作方法及包括其的电子设备
KR20210144249A (ko) 저장 장치 및 이의 동작 방법
US20230273878A1 (en) Storage device for classifying data based on stream class number, storage system, and operating method thereof
WO2021035555A1 (zh) 一种固态硬盘的数据存储方法、装置及固态硬盘ssd
KR20210039185A (ko) 메모리 시스템에서 멀티 스트림 동작을 제공하는 방법 및 장치
KR20160119607A (ko) 데이터 저장 장치 및 그것의 동작 방법