KR102656959B1 - 존 구획 네임스페이스를 갖는 호스트 관리 하드웨어 압축 - Google Patents

존 구획 네임스페이스를 갖는 호스트 관리 하드웨어 압축 Download PDF

Info

Publication number
KR102656959B1
KR102656959B1 KR1020210082726A KR20210082726A KR102656959B1 KR 102656959 B1 KR102656959 B1 KR 102656959B1 KR 1020210082726 A KR1020210082726 A KR 1020210082726A KR 20210082726 A KR20210082726 A KR 20210082726A KR 102656959 B1 KR102656959 B1 KR 102656959B1
Authority
KR
South Korea
Prior art keywords
data
host
lba
storage device
zone
Prior art date
Application number
KR1020210082726A
Other languages
English (en)
Other versions
KR20220022092A (ko
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 웨스턴 디지털 테크놀로지스, 인코포레이티드
Publication of KR20220022092A publication Critical patent/KR20220022092A/ko
Application granted granted Critical
Publication of KR102656959B1 publication Critical patent/KR102656959B1/ko

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/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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • 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/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/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/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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/0658Controller construction 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/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]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • 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/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Abstract

본 개시내용은 일반적으로 저장 디바이스들, 예컨대 솔리드 스테이트 드라이브들에 관한 것이다. 데이터 저장 디바이스는 압축 엔진을 포함하는 제어기를 포함한다. 제어기는 데이터를 매체, 예컨대 비휘발성 메모리에 기입하라는 ZNS 부가 커맨드를 수신한다. 압축 엔진은 제1 개수의 논리 블록들로부터 제2 개수의 논리 블록들로 데이터를 압축한다. 압축된 데이터는 매체로 프로그래밍된다. 압축 데이터는 매체 논리 블록 어드레스 및 호스트 논리 블록 어드레스를 가지며, 여기서 매체 논리 블록 어드레스는 ZNS 부가가 데이터를 매체에 배치하는 실제 LBA이며, 호스트 논리 블록 어드레스는 호스트의 관점으로부터 매체에 저장된 데이터의 위치이다. 호스트는 저장된 데이터의 위치의 인덱스를 생성시키고, 제어기는 매체 내의 적절한 위치에 인덱스를 프로그래밍한다.

Description

존 구획 네임스페이스를 갖는 호스트 관리 하드웨어 압축{HOST-MANAGED HARDWARE COMPRESSION WITH ZONED NAMESPACES}
관련 출원의 상호 참조
본 출원은 2020년 8월 17일에 출원된 미국 가특허 출원 제63/066,739호의 이익을 주장하며, 이 출원은 본 명세서에 참고로 포함되어 있다.
기술분야
본 개시내용의 실시예들은 일반적으로 저장 디바이스들, 예컨대 솔리드 스테이트 드라이브(SSD)들에 관한 것이다.
저장 디바이스들, 예컨대 SSD들은 비교적 낮은 레이턴시와 고용량 저장이 요구되는 응용분야들에서 컴퓨터들에 사용될 수 있다. 예를 들어, SSD들은 특히 랜덤 판독들 및 기입들에 대해 하드 디스크 드라이브(HDD)들보다 더 낮은 레이턴시를 보일 수 있다. 전형적으로, SSD의 제어기는 판독 커맨드를 수신한다.
또는, 호스트 디바이스로부터 메모리 디바이스로 데이터를 기입한다. 데이터는 메모리 디바이스 내의 하나 이상의 블록에 판독 및 기입된다. 블록들의 각각은 SSD 및/또는 호스트 디바이스가 데이터가 저장된 위치를 알도록 논리 블록 어드레스와 연관되어 있다.
하나 이상의 블록들은 존 구획 네임스페이스(ZNS) 아키텍처 내의 복수의 존을 형성하기 위해 그들 각자의 논리 블록 어드레스에 의해 함께 그룹핑될 수 있다. 임의의 특정 존 내에서, 호스트로부터의 데이터는 단지 순차적으로 매체에 기입될 수 있다. 존 내에 더 이상의 기입가능 블록들이 없을 때, 존은 충전되어 있거나 용량에 도달한 것이다. 호스트는 충전되어 있거나 용량에 도달한 존을 리셋하도록 SSD에 요청할 수 있다. 존이 리셋되면, 그 존에 저장된 데이터가 소거되므로, 호스트는 새로운 데이터를 새로 소거된 존에 기입할 수 있다.
SSD의 제어기는 존마다 기입 포인터를 유지하는데, 이 포인터는 새로운 호스트 데이터가 존에 부가될 곳을 지시한다. 호스트는 ZNS 존 부가 커맨드를 통해 기입 동작들을 발행할 수 있다. ZNS 존 부가 커맨드를 이용하여 호스트가 데이터를 존에 부가할 때마다, SSD는 기입된 데이터의 제1 블록의 섹터 또는 LBA를 반환한다. 기입된 데이터의 제1 블록의 반환된 섹터 또는 LBA는 매체에 대한 프로그래밍된 데이터의 위치를 지시한다. 호스트는 매체에 대한 데이터의 레이아웃을 관리하고 추적하기 위해 이 정보를 사용할 수 있다.
호스트 디바이스는 임의의 크기의 기입 커맨드들을 저장 디바이스에게 전송할 수 있다. 기입 커맨드들이 임의의 크기일 수 있기 때문에, 저장 디바이스에 기입된 데이터의 총 크기는 저장 디바이스의 메모리 용량에 빠르게 도달할 수 있다. 그러나, 압축 알고리즘을 활용함으로써, 블록들에 기입된 데이터의 크기는 호스트로부터 수신된 데이터의 크기 미만일 수 있다. 현재의 압축 해법들은 저장 디바이스 하드웨어 및 펌웨어를 복잡하게 할 수 있으며, 그 결과 압축 신뢰도의 불확실성뿐만 아니라 비용 및 생산 스케줄 증가를 초래할 수 있다.
따라서, 데이터를 압축하는 새로운 방법이 필요하다.
본 개시내용은 일반적으로 데이터 저장 디바이스들, 예컨대 솔리드 스테이트 드라이브들에 관한 것이다. 데이터 저장 디바이스는 압축 엔진을 포함하는 제어기를 포함한다. 제어기는 데이터를 매체, 예컨대 비휘발성 메모리에 기입하라는 ZNS 존 부가 커맨드를 수신한다. 압축 엔진은 제1 개수의 논리 블록들로부터 제2 개수의 논리 블록들로 데이터를 압축한다. 압축된 데이터는 매체로 프로그래밍된다. 압축 데이터는 매체 논리 블록 어드레스 및 호스트 논리 블록 어드레스를 가지며, 여기서 매체 논리 블록 어드레스는 데이터 저장 디바이스가 데이터를 매체에 배치하는 실제 LBA이며, 호스트 논리 블록 어드레스는 호스트의 관점으로부터 매체에 저장된 데이터의 위치이다.
일 실시예에서, 데이터 저장 디바이스는 용량이 복수의 존으로 분할된 비휘발성 저장 유닛 및 비휘발성 저장 유닛에 결합된 제어기를 포함한다. 제어기는 압축 엔진을 포함한다. 제어기는 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고 - 여기서 커맨드 각각은 하나 이상의 데이터 청크(chunk)를 포함함 -, 압축 엔진을 활용하여 하나 이상의 데이터 청크 중 하나 이상의 청크를 압축 데이터로 압축하고 - 여기서 하나 이상의 청크는 하나 이상의 그레인(grain)으로 압축됨 -, 압축 데이터를 제1 존 내의 제1 위치에 기입하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 용량이 복수의 존으로 분할된 비휘발성 저장 유닛 및 비휘발성 저장 유닛에 결합된 제어기를 포함한다. 제어기는 압축 엔진을 포함한다. 제어기는 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고, 하나 이상의 커맨드와 연관된 데이터를 호스트 디바이스로부터 수신하고, 수신된 데이터를 청크들로 그룹핑하고, 압축 엔진을 일정 압축비로 활용하여 하나 이상의 커맨드와 연관된 데이터를 청크로부터 정수 개의 그레인으로 압축하고, 제1 존 내의 제1 위치에 하나 이상의 커맨드와 연관된 압축 데이터를 기입하고, 매체 논리 블록 어드레스(LBA) 및 호스트 LBA를 포함하는 제1 위치를 기록하고, 호스트 LBA를 호스트 디바이스에 보고하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 비휘발성 저장 유닛을 포함하며, 비휘발성 저장 유닛의 용량은 복수의 존으로 분할된다. 데이터 저장 디바이스는 비휘발성 저장 유닛에 결합되어 호스트 디바이스로부터 수신된 데이터를 압축하기 위한 수단, 비휘발성 저장 유닛에 결합에 결합되어 복수의 존 중 적어도 하나의 존 내의 논리 블록 어드레스(LBA) 범위에 압축 데이터를 기입하기 위한 수단, 및 비휘발성 저장 유닛에 결합되어 호스트 디바이스에 호스트 LBA 범위를 보고하기 위한 수단 - 호스트 LBA 범위는 압축 데이터가 기입되는 LBA 범위와 상이함 - 을 더 포함한다.
앞서 언급된 본 개시내용의 특징들이 상세히 이해될 수 있는 방식으로, 앞서 간략하게 요약된 본 개시내용의 보다 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 이들 실시예 중 일부가 첨부 도면에 예시되어 있다. 그러나, 첨부 도면은 단지 본 개시내용의 전형적인 실시예들을 도시하는 것이므로 그 범주를 제한하는 것으로 간주되지 않아야 한다는 것에 유의해야 하는데, 이는 본 개시내용이 다른 균등하게 유효한 실시예들을 허용할 수 있기 때문이다.
도 1은 일 실시예에 따른 저장 시스템을 예시한 개략적 블록도이다.
도 2a는 일 실시예에 따라 저장 디바이스에서 활용되는 존 구획 네임스페이스를 예시한다.
도 2b는 일 실시예에 따라 도 2a의 저장 디바이스의 존 구획 네임스페이스들을 위한 상태도를 예시한다.
도 3a는 일 실시예에 따른 종래의 압축 해법을 예시한다.
도 3b는 일 실시예에 따른 ZNS 프로토콜을 레버리징하는 호스트 관리 압축을 예시한다.
도 4는 일 실시예에 따라 청크(chunk)로부터 다수의 그레인(grain)으로의 데이터 압축을 예시한다.
도 5a는 일 실시예에 따른 선형 논리 블록 어드레스 범위를 예시한다.
도 5b는 다른 실시예에 따른 비선형 논리 블록 어드레스 범위를 예시한다.
도 6은 일 실시예에 따라 헤더를 매체 LBA에 부가하는 것을 예시한다.
도 7은 일 실시예에 따른 ZNS 프로토콜을 레버리징하는 호스트 관리 압축의 구현을 예시한다.
도 8은 일 실시예에 따라 비휘발성 메모리에서의 위치로 데이터를 기입하기 위한 방법을 예시한다.
도 9는 일 실시예에 따라 비휘발성 메모리에서의 위치로부터 데이터를 판독하기 위한 방법을 예시한다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지정하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
하기에서, 본 개시내용의 실시예들을 참조한다. 그러나, 본 개시내용은 구체적으로 설명된 실시예들로 제한되지 않는다는 것이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합이, 상이한 실시예들과 관련되든지 또는 그렇지 않든지 간에, 본 개시내용을 구현하고 실시하기 위해 고려된다. 더욱이, 본 개시내용의 실시예들이 다른 가능한 해법들에 비해 그리고/또는 종래 기술에 비해 이점들을 달성할 수 있지만, 특정 이점이 주어진 실시예에 의해 달성되는지 여부는 본 개시내용의 제한이 아니다. 따라서, 하기의 양태들, 특징들, 실시예들, 및 이점들은 단지 예시적인 것이며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한으로 간주되지 않는다. 마찬가지로, "본 개시내용"에 대한 언급은 본 명세서에 개시되는 임의의 발명의 주제의 일반화로서 해석되어서는 안되며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한인 것으로 간주되지 않아야 한다.
본 개시내용은 일반적으로 저장 디바이스들, 예컨대 솔리드 스테이트 드라이브들에 관한 것이다. 데이터 저장 디바이스는 압축 엔진을 포함하는 제어기를 포함한다. 제어기는 데이터를 매체, 예컨대 비휘발성 메모리에 기입하라는 ZNS 존 부가 커맨드를 수신한다. 압축 엔진은 제1 개수의 논리 블록들로부터 제2 개수의 논리 블록들로 데이터를 압축한다. 압축된 데이터는 매체로 프로그래밍된다. 압축 데이터는 매체 논리 블록 어드레스 및 호스트 논리 블록 어드레스를 가지며, 여기서 매체 논리 블록 어드레스는 ZNS 부가가 데이터를 매체에 배치하는 실제 LBA이며, 호스트 논리 블록 어드레스는 호스트의 관점으로부터 매체에 저장된 데이터의 위치이다.
도 1은 본 개시내용의 하나 이상의 기법들에 따른 데이터 저장 디바이스(106)가 호스트 디바이스(140)를 위한 저장 디바이스로서 기능할 수 있는 저장 시스템(100)을 예시한 개략적 블록도이다. 예를 들어, 호스트 디바이스(104)는 데이터 저장 디바이스(106)에 포함된 비휘발성 메모리(NVM; 110)를 활용하여 데이터를 저장 및 검색할 수 있다. 호스트 디바이스(104)는 호스트 DRAM(138)을 포함한다. 일부 예들에서, 저장 시스템(100)은 저장 어레이로서 동작할 수 있는 복수의 데이터 저장 디바이스, 예컨대 데이터 저장 디바이스(106)를 포함할 수 있다. 예를 들어, 저장 시스템(100)은 호스트 디바이스(104)를 위한 대용량 저장 디바이스로서 집합적으로 기능하는 저가/독립 디스크들(RAID)의 중복 어레이로서 구성된 복수의 데이터 저장 디바이스들(106)을 포함할 수 있다.
호스트 시스템(100)은 하나 이상의 저장 디바이스, 예컨대 데이터 저장 디바이스(106)로 그리고/또는 그로부터 데이터를 저장 및/또는 검색할 수 있는 호스트 디바이스(104)를 포함한다. 도 1에 예시된 바와 같이, 호스트 디바이스(104)는 인터페이스(114)를 통해 데이터 저장 디바이스(106)와 통신한다. 호스트 디바이스(104)는 컴퓨터 서버, NAS(network attached storage) 유닛, 데스크톱 컴퓨터, 노트북(즉, 랩톱) 컴퓨터, 태블릿 컴퓨터, 셋톱 박스, 소위 "스마트" 폰과 같은 전화 핸드셋, 소위 "스마트" 패드, 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게임 콘솔, 비디오 스트리밍 디바이스, 등을 비롯하여 광범위한 디바이스들 중 임의의 디바이스를 포함할 수 있다.
데이터 저장 디바이스(106)는 제어기(108), NVM(110), 전원 공급기(111), 휘발성 메모리(112), 인터페이스(114), 및 기입 버퍼(116)를 포함한다. 일부 예들에서, 데이터 저장 디바이스(106)는 명료함을 위해 도 1에 도시되지 않은 추가 컴포넌트들을 포함할 수 있다. 예를 들어, 데이터 저장 디바이스(106)는 데이터 저장 디바이스(106)의 컴포넌트들이 기계적으로 부착되고 데이터 저장 디바이스(106)의 컴포넌트 등을 전기적으로 상호 접속하는 전기 전도성 트레이스들을 포함하는 인쇄 회로 기판(PCB)을 포함할 수 있다. 일부 예들에서, 데이터 저장 디바이스(106)의 물리적 치수들 및 커넥터 구성들은 하나 이상의 표준 폼 팩터를 따를 수 있다. 일부 예시적인 표준 폼 팩터들은 3.5" 데이터 저장 디바이스(예컨대, HDD 또는 SSD), 2.5" 데이터 저장 디바이스, 1.8" 데이터 저장 디바이스, PCI(peripheral component interconnect), PCI - X(PCI - extended), PCIe(PCI Express)(예컨대, PCIe x1, x4, x8, x16, PCIe Mini Card, MiniPCI 등)를 포함하지만, 이로 제한되지 않는다. 일부 예들에서, 데이터 저장 디바이스(106)는 호스트 디바이스(104)의 마더보드에 직접 결합(예컨대, 직접 솔더링)될 수 있다.
데이터 저장 디바이스(106)의 인터페이스(114)는 호스트 디바이스(104)와 데이터를 교환하기 위한 데이터 버스 및 호스트 디바이스(104)와 커맨드들을 교환하기 위한 제어 버스 중 하나 또는 둘 모두를 포함할 수 있다. 인터페이스(114)는 임의의 적합한 프로토콜에 따라 동작할 수 있다. 예를 들어, 인터페이스(114)는 다음의 프로토콜들, 즉 ATA(advanced technology attachment)(예컨대, SATA(serial - ATA) 및 PATA(parallel - ATA)), FCP(Fibre Channel Protocol), SCSI(small computer system interface), SAS(serially attached SCSI), PCI, 및 PCIe, NVMe(non-volatile memory express), OpenCAPI, GenZ, CCIX(Cache Coherent Interface Accelerator), OCSSD(Open Channel SSD) 등 중 하나 이상의 프로토콜에 따라 동작할 수 있다. 인터페이스(114)의 전기 접속부(예컨대, 데이터 버스, 제어 버스, 또는 둘 모두)은 제어기(108)에 전기적으로 접속되어, 호스트 디바이스(104)와 제어기(108) 사이의 전기 접속을 제공하여서, 데이터가 호스트 디바이스(104)와 제어기(108) 사이에서 교환될 수 있게 한다. 일부 예들에서, 인터페이스(114)의 전기 접속부는 또한 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 전력을 수신하도록 허용할 수 있다. 예를 들어, 도 1에 예시된 바와 같이, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 전력을 수신할 수 있다.
데이터 저장 디바이스(106)는 NVM(110)을 포함하는데, NVM(110)는 복수의 메모리 디바이스들 또는 메모리 유닛들을 포함할 수 있다. NVM(110)은 데이터를 저장 및/또는 검색하도록 구성될 수 있다. 예를 들어, NVM(110)의 메모리 유닛은 데이터, 및 데이터를 저장하라고 메모리 유닛에게 명령하는 제어기(108)로부터 메시지를 수신할 수 있다. 이와 유사하게, NVM(110)의 메모리 유닛은 데이터를 검색하라고 메모리 유닛에게 명령하는 제어기(108)로부터 메시지를 수신할 수 있다. 일부 예들에서, 메모리 유닛들 각각은 다이로 지칭될 수 있다. 일부 예들에서, 단일 물리 칩이 복수의 다이들(즉, 복수의 메모리 유닛들)을 포함할 수 있다. 일부 예들에서, 각각의 메모리 유닛은 비교적 많은 양의 데이터(예를 들어, 128MB, 256MB, 512MB, 1GB, 2GB, 4GB, 8GB, 16GB, 32GB, 64GB, 128GB, 256GB, 512GB, 1TB 등)를 저장하도록 구성될 수 있다.
일부 예들에서, NVM(110)의 각각의 메모리 유닛은 임의의 유형의 비휘발성 메모리 디바이스들, 예컨대 플래시 메모리 디바이스들, PCM(phase - change memory) 디바이스들, ReRAM(resistive random - access memory) 디바이스들, MRAM(magnetoresistive random - access memory) 디바이스들, F - RAM(ferroelectric random - access memory), 홀로그래픽 메모리 디바이스들, 및 임의의 다른 유형의 비휘발성 메모리 디바이스들을 포함할 수 있다.
NVM(110)은 복수의 플래시 메모리 디바이스 또는 메모리 유닛을 포함할 수 있다. 플래시 메모리 디바이스들은 NAND 또는 NOR 기반 플래시 메모리 디바이스들을 포함할 수 있고, 각각의 플래시 메모리 셀에 대한 트랜지스터의 플로팅 게이트에 포함된 전하에 기초하여 데이터를 저장할 수 있다. NAND 플래시 메모리 디바이스들에서, 플래시 메모리 디바이스는 복수의 블록들로 분할될 수 있으며, 이들 블록은 복수의 페이지들로 분할될 수 있다. 특정 메모리 디바이스 내의 복수의 블록들 각각의 블록은 복수의 NVM 셀들을 포함할 수 있다. NVM 셀들의 행(row)들은 워드 라인을 이용하여 전기적으로 접속되어 복수의 페이지들 중 소정 페이지를 정의할 수 있다. 복수의 페이지들 각각 내의 각자의 셀들은 각자의 비트 라인들에 전기적으로 접속될 수 있다. 더욱이, NAND 플래시 메모리 디바이스들은 2D 또는 3D 디바이스들일 수 있고, 싱글 레벨 셀(SLC), 멀티 - 레벨 셀(MLC), 트리플 레벨 셀(TLC), 또는 쿼드 레벨 셀(QLC)일 수 있다. 제어기(108)는 NAND 플래시 메모리 디바이스들에 데이터를 기입하고 그로부터 데이터를 페이지 레벨로 판독할 수 있고, NAND 플래시 메모리 디바이스들로부터 데이터를 블록 레벨로 소거할 수 있다.
데이터 저장 디바이스(106)는 데이터 저장 디바이스(106)의 하나 이상의 컴포넌트에 전력을 제공할 수 있는 전력 공급부(111)를 포함한다. 표준 모드에서 동작할 때, 전력 공급부(111)는 외부 디바이스, 예컨대 호스트 디바이스(104)에 의해 제공되는 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 예를 들어, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 수신된 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 일부 예들에서, 전력 공급부(111)는 셧다운 모드에서 동작할 때, 예컨대 외부 디바이스로부터의 전력 수신이 중단되는 경우, 하나 이상의 컴포넌트에 전력을 제공하도록 구성된 하나 이상의 전력 저장 컴포넌트를 포함할 수 있다. 이러한 방식으로, 전력 공급부(111)는 온보드 백업 전원으로서 기능할 수 있다. 하나 이상의 전력 저장 컴포넌트의 일부 예들은 커패시터들, 슈퍼커패시터들, 배터리들 등을 포함하지만, 이들로 제한되는 것은 아니다. 일부 예들에서, 하나 이상의 전력 저장 컴포넌트에 의해 저장될 수 있는 전력의 양은 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기(예를 들어, 면적/부피)의 함수일 수 있다. 다시 말해서, 하나 이상의 전력 저장 컴포넌트에 의해 저장되는 전력의 양이 증가함에 따라, 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기가 또한 증가한다.
데이터 저장 디바이스(106)는 또한 휘발성 메모리(112)를 포함하며, 이는 제어기(108)에 의해 정보를 저장하는 데 사용될 수 있다. 휘발성 메모리(112)는 하나 이상의 휘발성 메모리 디바이스들을 포함할 수 있다. 일부 예들에서, 제어기(108)는 휘발성 메모리(112)를 캐시로서 사용할 수 있다. 예를 들어, 제어기(108)는 캐싱된 정보가 비휘발성 메모리(110)에 기입될 때까지 캐싱된 정보를 휘발성 메모리(112)에 저장할 수 있다. 도 1에 예시된 바와 같이, 휘발성 메모리(112)는 전력 공급부(111)로부터 수신된 전력을 소비할 수 있다. 휘발성 메모리(112)의 예들은 RAM(random - access memory), DRAM(dynamic random access memory), SRAM(static RAM), 및 SDRAM(synchronous dynamic RAM)(예컨대, DDR1, DDR2, DDR3, DDR3L, LPDDR3, DDR4, LPDDR4 등)을 포함하지만, 이들로 제한되지 않는다.
데이터 저장 디바이스(106)는 제어기(108)를 포함하며, 이는 데이터 저장 디바이스(106)의 하나 이상의 동작을 관리할 수 있다. 제어기(108)는 압축 엔진(120)을 포함하는데, 이는 데이터 압축 알고리즘을 활용하여 데이터를 NVM(110)에 프로그래밍하기 전에 제어기에 의해 수신된 데이터의 크기를 감소시킬 수 있다. 예를 들어, 제어기(108)는 NVM(110)으로부터의 데이터의 판독 및/또는 그에 대한 데이터의 기입을 관리할 수 있다. 일부 실시예들에서, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 NVM(110)에 데이터를 저장하라는 데이터 저장 커맨드를 개시하고 데이터 저장 커맨드의 진행을 모니터링할 수 있다. 제어기(108)는 저장 시스템(100)의 적어도 하나의 동작 특성을 결정하고 적어도 하나의 동작 특성을 NVM(110)에 저장할 수 있다. 일부 실시예들에서, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 NVM(110)에 데이터를 전송하기 전에 기입 커맨드와 연관된 데이터를 내부 메모리 또는 기입 버퍼(116)에 임시로 저장한다.
도 2a는 일 실시예에 따라 저장 디바이스(200)에서 활용되는 존 구획 네임스페이스(ZNS)(202) 뷰를 예시한다. 저장 디바이스(200)는 호스트 디바이스에 ZNS(202) 뷰를 제시할 수 있다. 도 2b는 일 실시예에 따라 저장 디바이스(200)의 ZNS(202)를 위한 상태도(250)를 예시한다. 저장 디바이스(200)는 도 1의 저장 시스템(100)의 저장 디바이스(106)일 수 있다. 저장 디바이스(200)는 하나 이상의 ZNS(202)를 가질 수 있고, 각각의 ZNS(202)는 상이한 크기를 가질 수 있다. 저장 디바이스(200)는 하나 이상의 존 구획 네임스페이스(202)에 추가하여 하나 이상의 종래 네임스페이스를 더 포함할 수 있다. 더구나, ZNS(202)는 SAS를 위한 존 구획 블록 커맨드(ZBC), SATA를 위한 존 구획 디바이스 ATA 커맨드 세트(ZAC), 및/또는 NVMe를 위한 존 구획 네임스페이스일 수 있다. 호스트측 존 활동은 가능한 논리적 활동과 물리적 활동의 관계로 인해 존 구획 드라이브들에서 매체 활동과 더 직접적으로 관련될 수 있다.
저장 디바이스(200)에서, ZNS(202)는 용량이 복수의 존(206a 내지 206n)(존들(206)로 통칭됨)으로 분할되도록 논리 블록들로 포맷될 수 있는 NVM의 양이다. NVM은 도 1의 NVM(110) 또는 저장 유닛일 수 있다. 존들(206) 각각은 메모리 유닛 또는 NVM(204)의 복수의 물리적 블록들(도시되지 않음)을 포함하고, 블록들 각각은 복수의 논리 블록들(도시되지 않음)과 연관되어 있다. 존들(206) 각각은 NVM 또는 NAND 디바이스의 하나 이상의 블록의 용량에 정렬된 크기를 가질 수 있다. 제어기(208)가 예컨대 호스트 디바이스(도시되지 않음) 또는 호스트 디바이스의 제출 큐로부터 커맨드를 수신할 때, 제어기(208)는 ZNS(202)의 복수의 블록과 연관된 복수의 논리 블록으로부터 데이터를 판독하고 그에 데이터를 기입할 수 있다. 논리 블록들 각각은 고유 LBA 또는 섹터와 연관되어 있다.
일 실시예에서, NVM(204)는 NAND 디바이스이다. NAND 디바이스는 하나 이상의 다이를 포함한다. 하나 이상의 다이 각각은 하나 이상의 평면을 포함한다. 하나 이상의 평면 각각은 하나 이상의 블록을 포함한다. 하나 이상의 블록 각각은 하나 이상의 워드 라인(예를 들어, 256개의 워드 라인)을 포함한다. 하나 이상의 워드 라인 각각은 하나 이상의 페이지에서 어드레싱될 수 있다. 예를 들어, MLC NAND 다이는 전체 워드 라인(예컨대, 페이지당 16KiB)의 각각의 셀 내의 2개의 비트에 도달하기 위해 상위 페이지 및 하위 페이지를 이용할 수 있다. 더욱이, 각각의 페이지는 전체 페이지와 동일하거나 그보다 작은 입도(granularity)로 액세스될 수 있다. 제어기는 512 바이트의 사용자 데이터 입도 논리 블록 어드레스(LBA) 크기들로 NAND에 자주 액세스할 수 있다. 따라서, 하기 설명에서 언급되는 바와 같이, NAND 위치들은 512 바이트의 입도와 같다. 이처럼, 결과적으로 MLC NAND의 2개의 페이지에 대한 16KiB의 페이지 사이즈 및 512바이트의 LBA 크기는 워드 라인당 32개의 LBA를 야기한다. 그러나, 이 NAND 위치 크기는 제한적인 것으로 의도되지 않으며, 단지 일례로 사용된다.
데이터가 존에 기입되면, 데이터가 NVM(204) 내에 위치하는 곳을 추적하기 위해 존(206) 내에서 하나 이상의 논리 블록이 대응하여 업데이트된다. 데이터는 존(206)이 가득 찰 때까지 한 번에 하나의 존(206)에 기입되거나 또는 다수의 존(206)이 부분적으로 찰 수 있도록 다수의 존(206)에 기입될 수 있다. 이와 유사하게, 특정 존(206)에 데이터를 기입할 때, 데이터는 인접한 블록으로 이동할 때까지 한번에 하나의 블록씩, NAND 위치들의 순차적 순서로, 페이지 별로, 또는 워드 라인 별로 복수의 블록들에 기입될 수 있고(즉, 제2 블록으로 이동하기 전에 제1 블록이 가득 찰 때까지 제1 블록에 기입함), 또는 병렬 방식으로 각각의 블록을 부분적으로 채우기 위해 한 번에 한번에 다수의 블록에, NAND 위치들의 순차적 순서로, 페이지 별로, 또는 워드 라인 별로 기입될 수 있다(즉, 각 블록의 제2 NAND 위치에 기입하기 전에 각 블록의 제1 NAND 위치 또는 페이지를 기입함). 모든 NAND 위치의 이러한 순차적 프로그래밍은 많은 NAND 블록들의 전형적인 비제한적인 요건이다.
제어기(208)가 각각의 존에 대한 데이터를 저장할 블록들을 선택할 때, 제어기(208)는 존 개방 시간에 블록들을 선택할 수 있고, 또는 특정 블록의 제1 워드라인을 채울 필요성에 도달함에 따라 블록을 선택할 수도 있다. 이는 다음 블록을 시작하기 전에 하나의 블록을 완전히 채우는 앞서 설명된 방법이 활용될 때 더 차별화될 수 있다. 제어기(208)는 적시(just-in-time) 기반으로 더 최적의 블록을 선택하기 위해 시간차를 이용할 수 있다. 각각의 존 및 그의 인접 LBA에 대해 어느 블록이 할당되고 배정되는 지의 결정은 제어기(208) 내에서 항상 0개 이상의 동시 존에 대해 발생할 수 있다.
존들(206) 각각은 존 시작 논리 블록 어드레스(ZSLBA) 또는 존 시작 섹터와 연관되어 있다. ZSLBA는 존(206) 내의 제1 가용 LBA이다. 예를 들어, 제1 존(206a)은 ZaSLBA와 연관되어 있고, 제2 존(206b)은 ZbSLBA와 연관되어 있고, 제3 존(206c)은 ZcSLBA와 연관되어 있고, 제4 존(206d)은 ZdSLBA와 연관되어 있고, 제n 존(206n)(즉, 마지막 존)은 ZnSLBA와 연관되어 있다. 각각의 존(206)은 자신의 ZSLBA에 의해 식별되고 순차 기입들을 수신하도록 구성된다(즉, 기입 커맨드들이 수신된 순서로 데이터를 NVM(110)에 기입함).
데이터가 존(206)에 기입됨에 따라, 기입 포인터(210)는 다음 기입 시작 지점(즉, 이전 기입의 완료 지점이 후속 기입의 시작 지점과 동일함)을 추적하기 위해 데이터를 기입할 존(206) 내의 다음 가용 블록을 가리키거나 지시하도록 진전 또는 업데이트된다. 따라서, 기입 포인터(210)는 존(206)에 대한 후속 기입이 시작될 곳을 지시한다. 후속 기입 커맨드들은 존 부가 커맨드들이며, 여기서 후속 기입 커맨드와 관련된 데이터는 다음 시작 지점으로서 기입 포인터(210)가 지시하고 있는 위치에서 존(206)에 부가된다. 기입 순서 설정을 위해 존(206) 내의 LBA들의 순서 리스트가 저장될 수 있다. 각 존(206)은 자기 자신의 기입 포인터(210)를 가질 수 있다. 따라서, 기입 커맨드가 수신될 때, 존(406)이 자신의 ZSLBA에 의해 식별되고, 기입 포인터(210)는 식별된 존 내에서 데이터의 기입이 시작되는 곳을 결정한다.
도 2b는 도 2a의 ZNS(202)에 대한 상태도(250)를 예시한다. 상태도(250)에서, 각 존은 상이한 상태, 예컨대 비어있음, 열림, 닫힘, 가득 참, 읽기 전용, 또는 오프라인일 수 있다. 존이 비어있으면, 존에는 데이터가 없고(즉, 존 내의 어떤 블록도 현재 데이터를 저장하고 있지 않음), 기입 포인터가 ZSLBA에 있다(즉, WP=ZSLBA). 예를 들어, NVM이 NAND 플래시인 경우, 존이 비어 있으면, 존 내의 블록들 모두는 새로이 소거된다. 일단 기입이 존에 스케줄링되면 또는 존 개방 커맨드가 호스트에 의해 발행되면, 비어 있는 존은 개방된 활성 존으로 전환된다. 둘 모두 활성 상태인 존 개방 상태와 존 폐쇄 상태 사이에서 존을 이동하는 데 존 관리(ZM) 커맨드들이 사용될 수 있다. 존이 활성이면, 존은 기입될 수 있는 개방 블록들을 포함하고, 호스트는 활성 상태에서 추천 시간에 대한 기술을 제공받을 수 있다. 제어기(208)는 ZM을 포함한다. 존 메타데이터는 ZM 및/또는 제어기(208)에 저장될 수 있다.
"에 기입된"이라는 용어는 블록 내의 0개 이상의 NAND 위치들 및/또는 사용자 데이터가 사용 가능한 모든 NAND 위치를 채우지 않았을 때 블록 내의 부분적으로 채워진 NAND 위치들에 사용자 데이터를 프로그래밍하는 것을 포함한다. "에 기입된"이라는 용어는 내부 드라이브 처리 요구들(오류 비트들이 개발 블록들에 대해 더 빨리 축적되기 때문에 개방 블록 데이터 보존성 우려들)로 인해 존을 가득 채움으로 이동시키는 것, 너무 많은 추적 대상 개방 존들, 발견된 경함 상태 등과 같이 저장 디바이스(200)가 리소스 제약들로 인해 존을 폐쇄하거나 채우는 것, 또는 호스트 디바이스가 드라이브에 전송할 데이터가 더 이상 없거나, 컴퓨터 셧다운, 호스트 상의 오류 처리, 추적을 위한 제한된 호스트 리소스 등과 같은 우려들로 인해 존을 폐쇄하는 것을 더 포함할 수 있다.
활성 존들은 열린 상태 또는 닫힌 상태일 수 있다. 개방 존은 기입될 준비가 되고 현재 리소스들이 할당되어 있는 비어 있거나 부분적으로 찬 존이다. 기입 커맨드 또는 존 부가 커맨드와 함께 호스트 디바이스로부터 수신된 데이터는 현재 이전 데이터로 채워지지 않은 개방 블록에 프로그래밍될 수 있다. 폐쇄 존은 현재 계속적으로 호스트로부터 기입들을 수신하고 있지 않은 비어 있거나 부분적으로 찬 존이다. 개방 상태로부터 폐쇄 상태로의 존의 이동은 제어기(208)가 다른 태스크들에 리소스들을 재할당하도록 허용한다. 이들 태스크는 개방된 다른 존들, 다른 종래의 존이 아닌 영역들, 또는 다른 제어기 요구들을 포함할 수 있지만, 이들로 제한되는 것은 아니다.
개방 존과 폐쇄 존 둘 다 모두에서, 기입 포인터는 ZSLBA와 존의 마지막 LBA의 끝 사이의 어딘가의 존 내의 위치를 가리키고 있다(즉, WP>ZSLBA). 활성 존들은 ZM에 의한 지정마다, 또는 존에 대해 기입이 스케줄링되면 개방 상태와 폐쇄 상태 사이에서 전환될 수 있다. 또한, ZM은 존이 다시 비어 있는 상태로 전환되도록 존에 저장된 데이터를 클리어하거나 소거하기 위해 활성 존을 리셋할 수 있다. 일단 활성 존이 가득 차면, 존은 완충 상태로 전환된다. 가득 찬 존은 데이터로 완전히 채워진 존이며, 더 이상 데이터를 기입할 가용 섹터들 또는 LBA들이 없다(즉, WP=ZSLBA+존 용량(ZCAP)). 가득 찬 존에서, 기입 포인터는 존의 기입 가능 용량의 끝을 가리킨다. 가득 찬 존들에 저장된 데이터의 판독 커맨드들은 여전히 실행될 수 있다.
이 존들은 256MiB 또는 512MiB와 같은 임의의 총 크기를 가질 수 있다. 다만, 하나 이상의 제외된 블록들 및 패리티 데이터를 저장하는 각 존의 부위와 같이, 각 존의 작은 부분이 데이터를 기입하기 위해 액세스 가능하지 않을 수 있지만, 여전히 판독될 수 있다. 예를 들어, 존(206)의 총 크기가 512MiB이면, 데이터를 기입하는 데 이용 가능한 용량인 ZCAP은 470MiB일 수 있는 반면, 42MiB는 데이터를 기입하는데 이용 불가능하다. 존의 존 용량(ZCAP) 또는 기입 가능 용량은 총 존 저장 크기 이하이다. 저장 디바이스(200)는 존 리셋 시에 각 존의 ZCAP을 결정할 수 있다. 예를 들어, 제어기(208) 또는 ZM은 각 존의 ZCAP을 결정할 수 있다. 저장 디바이스(200)는 존이 리셋되면 존의 ZCAP을 결정할 수 있다.
ZM은 가득 찬 존을 리셋하여, 존이 다시 비어 있는 존으로 전환되도록 존에 저장된 데이터의 소거를 스케줄링할 수 있다. 가득 찬 존이 리셋되면, 존이 기입될 준비가 된 비어 있는 존으로서 마킹될 수 있음에도 불구하고, 존에서 데이터가 즉시 클리어되지 않을 수 있다. 그러나, 리셋 존은 개방된 활성 존으로 전환되기 전에 소거되어야 한다. ZM 리셋과 ZM 개방 사이의 임의의 시점에 존이 소거될 수 있다. 존의 리셋 시에, 저장 디바이스(200)는 리셋 존의 새로운 ZCAP을 결정할 수 있고, 존 메타데이터에서 기입 가능 ZCAP 속성을 업데이트할 수 있다. 오프라인 존은 데이터를 기입하는 데 이용 가능하지 않은 존이다. 오프라인 존은 활성 상태임이 없이 가득 찬 상태, 비어 있는 상태, 또는 부분적으로 찬 상태에 있을 수 있다.
존을 리셋하는 것은 존에 저장된 모든 데이터의 소거를 스케줄링하거나 클리어하기 때문에, 개별 블록들의 가비지 컬렉션에 대한 필요성이 없어지며, 저장 디바이스(200)의 전반적인 가비지 컬렉션 프로세스를 개선한다. 저장 디바이스(200)는 소거를 위해 하나 이상의 블록을 마킹할 수 있다. 새로운 존이 형성될 예정이고 저장 디바이스(200)가 ZM 개방을 기다리는 경우, 소거를 위해 마킹된 하나 이상의 블록이 소거될 수 있다. 저장 디바이스(200)는 블록들의 소거 시에 존의 물리적 배킹(backing)을 더 결정하고 생성할 수 있다. 따라서, 일단 새로운 존이 개방되고 존을 형성하기 위해 블록들이 선택되고 있으면, 블록들은 소거되었을 것이다. 더구나, 존이 리셋될 때마다, 존(206)에 대한 기입 포인터(210) 및 LBA들에 대한 새로운 순서가 선택될 수 있어, 존(206)이 순차적 순서를 벗어나 커맨드들을 수신하는 것에 관대하게 할 수 있다. 기입 포인터(210)는 어떤 시작 LBA가 커맨드에 대해 지시될지라도 커맨드가 기입될 수 있도록 선택적으로 턴 오프될 수 있다.
도 2a를 다시 참조하면, 호스트가 데이터를 존(206)에 기입하도록 기입 커맨드를 송신할 때, 제어기(208)는 기입 커맨드를 인입하고 새로 개방된 존(206)에 대한 기입으로서 기입 커맨드를 식별한다. 제어기(208)는 새로 개방된 존(206)의 기입 커맨드들과 연관된 데이터를 저장하기 위해 블록들의 세트를 선택하고, 새로 개방된 존(206)은 활성 존(206)으로 전환된다. 기입 커맨드는 새로운 데이터를 기입하라는 커맨드이거나, 가비지 컬렉션 목적으로 유효 데이터를 다른 존으로 이동시키라는 커맨드일 수 있다. 제어기(208)는 호스트 디바이스에 의해서 채워진 제출 큐로부터 새로운 커맨드들을 DMA 판독하도록 구성된다.
활성 존(206)으로 방금 전환된 비어 있는 존(206)에서, 기입 포인터(210)가 ZSLBA와 연관된 논리 블록을 제1 가용 논리 블록으로서 지시하고 있기 때문에 ZSLBA에서 시작하여 존(206) 및 존(206)의 순차적 LBA들의 연관된 세트에 데이터가 배정된다. 데이터는 존(206)의 물리적 위치에 할당되었던 하나 이상의 블록 또는 NAND 위치에 기입될 수 있다. 기입 커맨드와 연관된 데이터가 존(206)에 기입된 후에, 기입 포인터(210)는 호스트 기입에 이용 가능한 다음 가용 LBA(즉, 제1 기입의 완료 지점)를 가리키도록 업데이트된다. 이 호스트 기입 커맨드로부터의 기입 데이터는 존의 물리적 배킹을 위해 선택된 블록 내의 다음 가용 NAND 위치로 순차적으로 프로그래밍된다.
예를 들어, 제어기(208)는 제3 존(206c)에 대한 제1 기입 커맨드 또는 제1 존 부가 커맨드를 수신할 수 있다. 호스트는 제1 커맨드와 연관된 데이터가 존(206)의 어느 논리 블록에 기입할지를 순차적으로 식별한다. 이어서 제1 커맨드와 연관된 데이터는 기입 포인터(210)에 의해 지시된 바와 같이 제3 존(206c) 내의 제1 또는 다음 가용 LBA(들)에 기입되며, 기입 포인터(210)는 호스트 기입을 위해 이용 가능한 다음 가용 LBA를 가리키도록 진전 또는 업데이트된다(즉, WP>0). 제어기(208)가 제3 존(206c)에 대한 제2 기입 커맨드 또는 제2 존 부가 커맨드를 수신하면, 제2 기입 커맨드와 연관된 데이터는 기입 포인터(210)에 의해 식별된 제3 존(206c) 내의 다음 가용 LBA(들)에 기입된다. 일단 제2 커맨드와 연관된 데이터가 제3 존(206c)에 기입되면, 기입 포인터(210)는 호스트 기입에 이용 가능한 다음 가용 LBA를 가리키도록 다시 한번 진전 또는 업데이트된다. 제3 존(206c)을 리셋하는 것은 기입 포인터(210)를 다시 ZcSLBA로 이동시키며(즉, WP=0), 제3 존(206c)은 비어 있는 존으로 전환된다.
도 3a는 일 실시예에 따른 종래의 압축 해법을 예시한다. 호스트, 예컨대 도 1의 호스트 디바이스(104)는 시작 LBA에서 다수의 논리 블록(NLB)을 기입하기 위해 기입 커맨드를 저장 디바이스(302), 예컨대 도 1의 데이터 저장 디바이스(106)를 전송한다. 기입 커맨드는 다수의 버퍼, 예컨대 약 4개의 데이터 버퍼가 기입 커맨드와 연관된 데이터를 저장하도록 요구할 수 있다. 저장 디바이스(302)의 NVMe 프론트 엔드 모듈(304)은 NLB 및 출발 LBA 위치를 수신한다. 기입 커맨드를 처리한 후에, 저장 디바이스(302)는 데이터, 및 기입 커맨드와 연관된 버퍼들을 하드웨어(HW) 압축 모듈(306)로 이동시키며, 여기서 NLB가 압축된다. 압축된 데이터는 매체(308), 예컨대 도 1의 NVM(110)에 저장되고, 매체(308)에 저장된 압축 데이터의 최종 LBA는 플래시 변환 층(FTL) 매핑 테이블(310)에 기록된다. 압축 데이터가 매체(308)에 기입되고 압축 데이터의 위치가 FTL 매핑 테이블(310)에 기록된 후, 저장 디바이스(302)는 호스트에게 기입 커맨드가 완료되었다는 것을 지시하는 커맨드 완료 응답을 반환한다.
도 3b는 일 실시예에 따른 ZNS 프로토콜을 레버리징하는 호스트 관리 압축을 예시한다. 호스트, 예컨대 도 1의 호스트 디바이스(104)는 존의 LBA에서 다수의 논리 블록(NLB)을 기입하기 위해 기입 커맨드를 저장 디바이스(302), 예컨대 도 1의 데이터 저장 디바이스(106)로 전송한다. 호스트가 저장 디바이스의 메모리 내의 존, 예컨대 도 1의 NVM(110)의 제1 존에 대한 NLB의 배치를 지령할 수 있기 때문에, 호스트는 NVM에 기입된 데이터의 기록을 가질 수 있다. 저장 디바이스(352)의 NVMe 프론트 엔드 모듈(354)은 NLB 및 존의 목적 LBA를 수신한다. 기입 커맨드를 처리한 후에, 저장 디바이스(352)는 데이터, 및 기입 커맨드와 연관된 버퍼들을 HW 압축 모듈(356)로 이동시키며, 여기서 NLB가 압축된다. 압축 데이터는 매체(358), 예컨대 도 1의 NVM(110)에 저장된다. 압축 데이터가 매체(358)에 기입된 후에, 저장 디바이스(352)는 기입 커맨드가 완료되었다는 것을 지시하는 커맨드 완료 응답을 호스트에게 반환한다. 더욱이, 프로그래밍된 기입 커맨드를 위해 배정된 LBA는 호스트로 반환되며, 이로써 호스트는 NVM 내의 압축 데이터의 위치를 통지 받는다.
도 4는 일 실시예에 따라 청크로부터 다수의 그레인으로의 데이터 압축을 예시한다. 하드웨어 압축 모듈, 예컨대 도 3a 및 도 3b의 HW 압축 모듈(306, 356)은 데이터의 청크 상에서 작동한다. 데이터의 청크는 2의 거듭 제곱 배의 논리 블록들이다. 예를 들어, 데이터의 청크는 약 2개, 약 4개, 약 8개, 약 16개, 약 32개, 그 이상의 논리 블록을 포함할 수 있다. 각 논리 블록은 약 4KB의 사이즈를 가질 수 있는데, 여기서 논리 블록들의 기입들은 각각의 4KB 논리 블록 사이즈와 정렬될 수 있다. 게다가, 약 4KB 사이즈의 각각의 논리 블록은 그레인으로 지칭될 수 있다. 데이터의 청크는 압축비에 의존하여 정수 개의 그레인들로 압축된다. 예를 들어, 데이터의 제1 청크는 약 16KB의 데이터 또는 약 4개의 그레인을 포함한다. 최대 압축비가 약 4:1이면, 약 16KB의 데이터가 약 4KB의 데이터 또는 약 1개의 그레인으로 압축될 수 있다. 그러나, 4:1 압축은 약 1개, 약 2개, 또는 약 3개의 그레인으로 16KB의 데이터를 압축할 수 있다. 일부 실시예들에서, 압축은 작용하지 않을 수 있고, 최종 "압축" 데이터 크기는 데이터를 압축하기 전의 데이터 크기와 같다. 최대 달성 가능 압축비는 압축되지 않은 청크 내의 그레인들의 개수에 의해 제한될 수 있다.
예를 들어, 도 4에서, 각각의 청크(402, 404, 406, 또는 408)는 4개의 논리 블록을 포함한다. 압축비가 약 4:1이면, 청크 크기로부터 그레인 크기로의 논리 블록들의 최대 압축은 약 4배이다. 압축비는 청크 크기를 그레인 크기로 나눔으로써 결정될 수 있다. 예를 들어, 데이터의 청크가 각각 크기가 4KB인 4개의 그레인을 포함하면, 청크의 크기는 약 16KB이다. 최대 달성 가능 압축비는 16KB/4KB 또는 약 4:1로서 계산될 수 있다. 제1 청크(402)가 4개의 논리 블록(A 내지 D)을 포함한다. 압축 후에, 제1 청크(402)에 대응하는 그레인들은 2개의 그레인을 포함하는 제1 압축 청크(410)이다. 따라서, 최대 압축비가 4:1인 반면, 청크(402)의 경우 단지 2:1의 비로 데이터를 압축할 수 있었다. 마찬가지로, 제2 청크(404)는 압축비가 최대 4:1보다는 4:3이 되도록 4개의 논리 블록 또는 그레인으로부터 제2 압축 청크(412) 내의 3개의 논리 블록 또는 그레인으로 압축된다. 제3 청크(406)는 완벽한 압축을 위해 4개의 논리 블록 또는 그레인으로부터 제3 압축 청크(414) 내의 1개의 논리 블록 또는 그레인으로 압축된다. 4개의 논리 블록 또는 그레인으로부터 1개의 논리 블록 또는 그레인으로의 압축은 완전 압축된 청크 또는 최상의 경우의 시나리오를 나타낼 수 있다. 그러나, 데이터가 전혀 압축되지 않으면, 청크와 적절한 그레인 사이의 논리 블록의 개수는 동일하게 유지된다. 예를 들어, 제4 청크(408)는 4개의 논리 블록 또는 그레인을 포함한다. 제4 청크(408)를 압축한 후에, 4개의 블록 또는 그레인은 제4 비압축 청크(416) 내에 남아 있는데, 이는 제4 청크(408)와 연관된 4개의 논리 블록 또는 그레인이 압축되지 않았다는 것을 지시한다. 본 명세서에서의 설명에서, "논리 블록"이라는 용어는 예시적인 목적을 위해 "그레인"과 혼용되어 지칭될 수 있다.
도 5a는 일 실시예에 따른 선형 호스트 논리 블록 어드레스 범위를 예시한다. 호스트 내의 블록들의 시퀀스는 논리 블록들(A 내지 D)을 포함하는 제1 청크, 논리 블록들(E 내지 H)을 포함하는 제2 청크, 논리 블록들(I 내지 L)을 포함하는 제3 청크, 및 논리 블록들(M 내지 P)을 포함하는 제4 청크를 포함한다. 호스트는 16개의 블록을 존, 예컨대 복수의 존 중 제1 존에 부가한다. 압축 엔진, 예컨대 도 1의 제어기(108)의 압축 엔진(120)이 논리 블록을 수신하면, 압축 엔진은 압축비, 예컨대 약 4:1과 관련하여 데이터를 압축한다. 복수의 청크의 논리 블록들을 정수 개의 그레인들로 압축한 후에, 압축 데이터가 제1 존에 기입된다. 본 명세서에 설명된 바와 같이, 호스트 LBA는 호스트가 드라이브와 통신하기 위해 활용하는 논리 블록 어드레스를 지칭하고, 매체 LBA는 ZNS 부가 커맨드가 NVM 내에 데이터를 배치하는 데이터 위치를 지칭한다. 호스트 LBA 및 매체 LBA는 호스트 LBA=(매체 LBA*상수)+압축 블록 내의 블록 오프셋(예컨대, 압축 청크 섹션의 시작으로부터의 그레인들의 개수)와 같은 관계를 가질 수 있다.
도 5a에서, 제1 청크(A 내지 D)는 압축이 2:1 압축을 달성할 수 있음에 따라 논리 블록 0 및 1을 포함하는 제1 압축 청크 섹션으로 압축된다. 논리 블록 0 및 1은 매체에 저장되고 매체 LBA 0 및 매체 LBA 1로서 기록된다. 제2 청크(E 내지 H)가 제2 압축 청크 섹션으로 압축되면, 압축이 4:3 압축을 달성할 수 있었기 때문에 최종 매체 LBA들은 매체 LBA 2, 매체 LBA 3, 및 매체 LBA 4이다. 그러나, 최대 달성 가능 4:1 압축비 때문에, 호스트의 관점에서 LBA 공간 내의 다음 가용 위치가 호스트 LBA 8인데, 왜냐하면 호스트는 제1 그레인 섹션이 LBA 0 내지 LBA 7를 활용했다고 믿기 때문이다(즉, 2개의 매체 LBA 곱하기 4의 완전 압축은 8개의 호스트 LBA와 같음). 제2 청크는 호스트 LBA 8 내지 LBA 19를 LBA 공간의 호스트의 뷰에서 활용하는데, 그 이유는 호스트가 제2 그레인 섹션이 12개의 LBA를 활용했다고 믿기 때문이다(즉, 3개의 매체 LBA 곱하기 4의 완전 압축은 12개의 호스트 LBA와 같음). 이와 유사하게, 제3 청크(I 내지 L)가 4:1의 완전 압축비로 인해 단일의 매체 LBA 5를 포함하는 제3 압축 청크 섹션으로 압축되면, 호스트 LBA 20 내지 LBA 23은 제3 청크(I 내지 L)에 의해 사용되는 바와 같이 호스트에 보고되는데, 왜냐하면 매체에 저장된 데이터에는 단일 매체 LBA가 기록됨에도 불구하고 호스트는 제3 그레인 섹션이 4개의 LBA를 활용했다고 믿기 때문이다(즉, 1개의 매체 LBA 곱하기 4의 완전 압축이 4개의 호스트 LBA와 같음). 청크, 예컨대 제4 청크(M 내지 P)가 압축되지 않으면, 활용되는 매체 LBA의 개수는 활용된 호스트 LBA들의 개수와 일치한다. 선형 논리 블록 어드레스 범위를 활용함으로써, 저장 디바이스는 압축비가 곱해진 저장 디바이스의 실제 용량인 용량을 디바이스에 보고할 수 있다. 예를 들어, 최대 압축비가 약 4:1이고 저장 디바이스의 실제 용량이 약 128GB이면, 보고된 용량은 약 512GB이거나 실제 용량의 4배일 수 있다.
판독될 호스트 LBA를 포함하는 판독 요청을 수신하면, 제어기는 관련 LBA를 판독하고 압축 해제하는 데 호스트 LBA를 활용한다. 예들 들어, 호스트 LBA가 22이면, 드라이브는 매체 LBA에서 LBA 5를 판독하고 압축 해제한다. LBA 5는 최대 압축비에 의해 나눠진 호스트 LBA를 취함으로써 발견되며, 여기서 결과에는 내림(round down)이 적용되었다. 이어서, 호스트 LBA 22와 연관된 적절한 블록은 판독되어 호스트로 전송된다.
도 5b는 다른 실시예에 따른 비선형 호스트 논리 블록 어드레스 범위를 예시한다. 호스트 내의 블록들의 시퀀스는 논리 블록들(A 내지 D)을 포함하는 제1 청크, 논리 블록들(E 내지 H)을 포함하는 제2 청크, 논리 블록들(I 내지 L)을 포함하는 제3 청크, 및 논리 블록들(M 내지 P)을 포함하는 제4 청크를 포함한다. 호스트는 16개의 블록을 존, 예컨대 복수의 존 중 제1 존에 부가한다. 압축 엔진, 예컨대 도 1의 제어기(108)의 압축 엔진(120)이 논리 블록을 수신하면, 압축 엔진은 최대 압축비, 예컨대 약 4:1과 관련하여 데이터를 압축한다. 복수의 청크의 논리 블록들을 정수 개의 그레인들로 압축한 이후에, 압축 데이터가 제1 존에 기입된다. 본 명세서에 설명된 바와 같이, 호스트 LBA는 호스트가 드라이브와 통신하기 위해 활용하는 논리 블록 어드레스를 지칭하고, 매체 LBA는 ZNS 부가 커맨드가 NVM 내에 데이터를 배치하는 데이터 위치를 지칭한다. 호스트 LBA 및 매체 LBA는 호스트 LBA=(매체 LBA*상수)+압축 블록 내의 블록 오프셋(예컨대, 그레인 섹션의 시작으로부터의 그레인들의 개수)와 같은 관계를 가질 수 있다.
도 5a의 선형 논리 블록 어드레스 범위와는 달리, 도 5b의 호스트 논리 블록 어드레스 범위의 용량은 드라이브의 용량과 같다. 더욱이, 선형 호스트 논리 블록 어드레스 범위 대신에, 도 5b의 호스트 논리 블록 어드레스 범위가 단차형이다. 예를 들어, NLB가 4인 경우, 각 스텝의 각 라인은 4개의 호스트 LBA를 포함한다. 마찬가지로, NLB가 8인 경우, 각 스텝의 각 라인은 8개의 호스트 LBA를 포함한다.
다음 설명에서, NLB는 4와 같다. 압축 데이터를 매체에 부가한 후에, 호스트는 LBA의 위치를 호스트 LBA로서 기록하는 반면, 매체 상의 위치는 매체 LBA이다. 예를 들어, 제1 청크(A 내지 D)는 제1 매체 LBA 0 및 제2 매체 LBA 1로 압축 및 프로그래밍된다. 호스트가 데이터의 호스트 LBA를 저장할 때, 제1 스텝은 호스트 LBA 0 내지 3을 포함하는데, 이들은 데이터를 압축하기 전의 논리 블록의 개수에 대응한다. 제2 청크(E 내지 H)는 4개의 논리 블록 또는 그레인로부터 3개의 그레인(즉, 3개의 논리 블록)으로 압축되고 매체 LBA 2 내지 4로서 매체에 프로그래밍된다. 호스트 논리 블록 어드레스 범위의 제2 스텝은 호스트 LBA 2 내지 5를 포함하는데, 여기서 제2 스텝의 호스트 LBA 2 및 호스트 LBA 3은 제1 스텝의 호스트 LBA 2 및 호스트 LBA 3 아래에 위치한다. 제1 청크가 2개의 매체 LBA로 압축되었기 때문에, 제2 청크의 호스트 LBA들은 제3 호스트 LBA, LBA 2에서 시작한다. 더욱이, 호스트 LBA의 각각의 스텝의 시작은 매체 LBA들의 각각의 그레인 섹션의 제1 그레인에 대응한다.
도 6은 일 실시예에 따라 헤더를 매체 LBA에 부가하는 것을 예시한다. 도 6의 양태들은 도 5a 및 도 5b에 설명된 실시예들과 유사할 수 있다. 도 6에서, 제어기, 예컨대 도 1의 제어기(108)는 호스트 내의 블록들의 시퀀스가 부가된 이후에 헤더를 매체 LBA들에 첨부한다. 헤더는 매체 LBA 내의 각각의 압축 청크의 시작 논리 블록과 같은 정보를 포함한다. 예를 들어, 제1 청크(A 내지 D)는 2개의 그레인 0 및 1을 압축하고, 제2 청크(E 내지 H)는 3개의 그레인 2 내지 4를 압축하고, 제3 청크(I 내지 L)는 하나의 그레인 5를 압축하고, 제4 청크는 압축하지 않는다. 헤더는 매체 LBA 0, 매체 LBA 2, 매체 LBA 5, 및 매체 LBA 6을 가리키는 포인터들을 포함한다. 매체 LBA 0는 제1 블록(A)에 대응하고, 매체 LBA 2는 제5 블록(E)에 대응하고, 매체 LBA 5는 제9 블록 I에 대응하고, 및 매체 LBA 6은 제13 블록 M에 대응한다.
도 7은 일 실시예에 따른 ZNS 프로토콜을 레버리징하는 호스트 관리 압축의 구현을 예시한다. 호스트, 예컨대 도 1의 호스트 디바이스(104)는 데이터의 하나의 블록을 저장 디바이스, 예컨대 SSD의 하나 이상의 존에 부가한다. 제어기, 예컨대 도 1의 제어기(108)가 하나 이상의 블록을 수신하면, 압축 엔진, 예컨대 도 1의 압축 엔진(120)은 제1 개수의 논리 블록 또는 그레인을 포함하는 다수의 청크들로부터 제2 개수의 논리 블록 또는 그레인으로 데이터를 압축한다. 압축 후에, 제어기는 ZNS 부가 커맨드들에 의해 반환된 기입 포인터들을 반환한다. 기입 포인터들은 호스트에 의해 보여지는 바와 같이 LBA의 위치에 대응한다. 예를 들어, 기입 포인터(wrptr)(8)는 호스트 LBA 8일 수 있다. 그러나, 대응하는 매체 LBA는 매체 LBA 2일 수 있다. 호스트는 기입 포인터를 활용하여 인덱스 블록을 구축할 수 있으며, 여기서 인덱스 블록은 기입 포인터를 나타내는 오프셋 값, 데이터의 크기, 및 데이터에 대응하는 키를 포함한다. 호스트의 인덱스 블록은 플래시 매체의 관련 존(예컨대, 도 1의 NVM(110))에 인덱스로서 부가되며, 여기서 인덱스는 압축 데이터 구조의 마지막 논리 블록(예컨대, 매체 LBA 9)에 첨부될 수 있다.
도 8은 일 실시예에 따라 비휘발성 메모리에서의 위치로 데이터를 기입하기 위한 방법(800)을 예시한다. 블록 802에서, 저장 디바이스, 예컨대 도 1의 데이터 저장 디바이스(106)의 제어기, 예컨대 도 1의 제어기(108)는 호스트, 예컨대 도 1의 호스트(104)로부터 하나 이상의 커맨드를 수신하여 복수의 존 중 제1 존에 데이터를 기입한다. 블록 804에서, 압축 엔진, 예컨대 도 1의 압축 엔진(120)은 최대 압축비를 활용하여 제1 개수의 논리 블록 또는 그레인을 포함하는 제1 청크로부터 복수의 그레인의 제2 개수의 논리 블록을 포함하는 제1 압축 청크로 기입 커맨드와 연관된 데이터를 압축한다. 제1 개수의 논리 블록 또는 그레인은 제2 개수의 논리 블록 또는 그레인 이상일 수 있다.
더욱이, 압축 엔진은 최대 압축비, 예컨대, 4:1의 비를 활용할 수 있다. 압축비는 제1 개수의 논리 블록들로부터 제2 개수의 논리 블록들로 최대 가능 변화를 결정할 수 있다. 예를 들어, 압축비가 4:1이면, 4개의 논리 블록은 1개의 논리 블록, 2개의 논리 블록, 또는 3개의 논리 블록으로 압축될 수 있고 또는 압축되지 않을 수도 있는데, 여기서 1개의 논리 블록은 4개의 논리 블록이 최대 압축비와 관련하여 완전히 압축되었음을 나타낸다. 마찬가지로, 압축비가 4:1이고 8개의 논리 블록이 압축되면, 가능한 최소량의 제2 논리 블록은 2개의 논리 블록이다.
블록 806에서, 압축 데이터는 제1 존에 기입된다. 일 실시예에서, 압축 데이터 전에 헤더가 기입될 수 있다. 헤더는 각각의 압축 청크의 시작에 대응하는 그레인들을 가리키는 포인터들을 포함할 수 있다. 제1 존에 기입된 각각의 그레인은 매체 LBA에 대응하며, 여기서 매체 LBA는 매체 내의 그레인의 위치를 나타낸다. 블록 808에서, 압축 데이터에 관한 정보, 예컨대 각각의 그레인의 위치가 호스트에 보고된다. 호스트가 ZNS 부가 프로토콜, 예컨대 도 2a 및 도 2b에 설명된 ZNA 부가 커맨드를 이용하여 동작하기 때문에, 호스트는 호스트 LBA로서 압축 데이터의 위치를 확인 응답한다. 일 실시예에서, 각각의 청크에 대한 호스트 LBA 범위는 압축 데이터의 매체 LBA 범위보다 크다. 예를 들어, 호스트 LBA 22는 매체 LBA 10에 대응할 수 있다. 일 실시예에서, 호스트 LBA 범위는 도 5b에 설명된 바와 같이 비선형 호스트 논리 블록 저장 공간일 수 있다. 다른 실시예에서, 호스트 LBA 범위는 도 5a에 설명된 바와 같이 선형 호스트 논리 블록 저장 공간일 수 있다.
도 9는 일 실시예에 따라 비휘발성 메모리에서의 위치로부터 데이터를 판독하기 위한 방법(99)을 예시한다. 블록 902에서, 제어기, 예컨대 도 1의 제어기(108)는 저장 디바이스의 NVM, 예컨대 도 1의 저장 디바이스(106)의 NVM(110)에 저장된 압축 데이터를 위한 판독 커맨드를 호스트, 예컨대 도 1의 호스트(104)로부터 수신한다. 블록 904에서, 제어기는 판독 커맨드와 연관된 압축 데이터의 위치를 결정한다. 판독 커맨드는 판독될 데이터의 호스트 LBA, 예컨대 호스트 LBA 22를 포함할 수 있다. 제어기는 압축 엔진의 압축비 및 호스트 LBA를 활용하여 판독될 매체 LBA를 결정할 수 있다. 예를 들어, 호스트 LBA 22는 매체 LBA 10 내지 매체 LBA 13을 포함하는 그레인들의 세트에 대응할 수 있다. 더욱이, 제어기는 압축 데이터에 첨부된 헤더를 활용하여 각각의 압축 청크의 시작 그레인을 결정할 수 있다.
블록 906에서, 제어기는 판독 커맨드와 연관된 압축 데이터를 판독한다. 데이터가 정수 개의 그레인들로 압축되기 때문에, 판독 커맨드와 연관된 데이터가 별도의 인접 그레인들에 배치될 수 있다. 예를 들어, 호스트 LBA 22와 연관된 데이터는 매체 LBA 11 및 매체 LBA 12에 있을 수 있다. 블록 908에서, 제어기는 압축 데이터가 압축 해제될 필요가 있는지 여부를 결정한다. 압축 엔진이 데이터의 청크를 압축하지 않을 수도 있기 때문에, 최종적인 복수의 그레인은 청크의 논리 블록들 또는 그레인들과 동일하다. 그러나, 블록 908에서 압축 데이터가 압축 해제될 필요가 있으면, 블록 910에서 압축 엔진은 데이터를 압축 해제할 수 있다. 블록 912에서, 판독 커맨드와 연관된 압축해제 데이터가 호스트에 전달된다.
데이터를 압축 및 프로그래밍할 때 ZNS 프로토콜을 레버리징함으로써, 저장 디바이스는 메타데이터에 필요한 저장량이 감소되고, 저장 매체, 예컨대 NVM으로 및 그로부터의 유효 처리량이 높고, 저장 매체에 액세스하기 위한 전력 요구사항이 낮고, 저장 매체 내구성이 증가할 수 있다.
일 실시예에서, 데이터 저장 디바이스는 용량이 복수의 존으로 분할된 비휘발성 저장 유닛 및 비휘발성 저장 유닛에 결합된 제어기를 포함한다. 제어기는 압축 엔진을 포함한다. 제어기는 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고 - 여기서 커맨드 각각은 하나 이상의 데이터 청크를 포함함 -, 압축 엔진을 활용하여 하나 이상의 데이터 청크 중 하나 이상의 청크를 압축 데이터로 압축하고 - 여기서 하나 이상의 청크는 하나 이상의 그레인으로 압축됨 -, 압축 데이터를 제1 존 내의 제1 위치에 기입하도록 구성된다.
제어기는 제1 위치를 호스트 디바이스에 보고하도록 더 구성되고, 호스트 디바이스에 보고하는 것은 압축 데이터의 실제 논리 블록 어드레스(LBA) 범위보다 큰 압축 데이터의 각 청크에 대한 호스트 전달 LBA 범위를 호스트 디바이스에 제공하는 것을 포함한다. 제어기는 호스트 디바이스에 보고한 후에 호스트 디바이스로부터 인덱스를 수신하도록 더 구성된다. 논리 블록 어드레스 범위는 비선형 논리 블록 저장 공간이다. 제어기는 압축 데이터에 헤더를 부가하도록 추가로 구성된다. 헤더는 하나 이상의 청크의 위치를 지시하는 메타데이터를 포함한다. 압축 엔진은 압축비로 데이터를 압축할 수 있고, 여기서 압축비는 데이터를 압축할 때 제1 개수의 논리 블록으로부터 제2 개수의 논리 블록으로의 최대 변화를 결정한다.
다른 실시예에서, 데이터 저장 디바이스는 용량이 복수의 존으로 분할된 비휘발성 저장 유닛 및 비휘발성 저장 유닛에 결합된 제어기를 포함한다. 제어기는 압축 엔진을 포함한다. 제어기는 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고, 하나 이상의 커맨드와 연관된 데이터를 호스트 디바이스로부터 수신하고, 수신된 데이터를 청크들로 그룹핑하고, 압축 엔진을 일정 압축비로 활용하여 하나 이상의 커맨드와 연관된 데이터를 청크로부터 정수 개의 그레인으로 압축하고, 제1 존 내의 제1 위치에 하나 이상의 커맨드와 연관된 압축 데이터를 기입하고, 제1 위치를 기록하고 - 제1 위치는 매체 논리 블록 어드레스(LBA) 및 호스트 LBA를 포함함 -, 호스트 LBA를 호스트 디바이스에 보고하도록 구성된다.
제어기는 제1 존에 저장된 압축 데이터에 대한 판독 커맨드를 수신하고, 판독 커맨드와 연관된 압축 데이터의 제1 위치를 결정하고, 판독 커맨드와 연관된 데이터를 판독하고, 데이터를 호스트 디바이스에 전달하도록 더 구성된다. 판독 커맨드는 호스트 LBA를 포함한다. 제1 위치를 결정하는 것은 압축비를 활용하여 호스트 LBA를 매체 LBA로 변환하는 것이다. 매체 LBA는 헤더를 포함한다. 헤더는 압축 청크 각각의 제1 위치를 저장한다. 제어기는 상기 압축 데이터가 압축 해제될 필요가 있는지 여부를 결정하고, 압축 해제될 필요가 있다고 결정된 데이터를 압축 해제하도록 더 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 비휘발성 저장 유닛을 포함하며, 비휘발성 저장 유닛의 용량은 복수의 존으로 분할된다. 데이터 저장 디바이스는 비휘발성 저장 유닛에 결합되어 호스트 디바이스로부터 수신된 데이터를 압축하기 위한 수단, 비휘발성 저장 유닛에 결합되어 복수의 존 중 적어도 하나의 존 내의 논리 블록 어드레스(LBA) 범위에 압축 데이터를 기입하기 위한 수단, 및 비휘발성 저장 유닛에 결합되어 호스트 디바이스에 호스트 LBA 범위를 보고하기 위한 수단 - 여기서 호스트 LBA 범위는 압축 데이터가 기입되는 LBA 범위와 상이함 - 를 더 포함한다.
데이터 저장 디바이스는 호스트 디바이스로부터 인덱스를 수신하고 비휘발성 저장 유닛에 인덱스를 기입하기 위한 수단을 더 포함한다. 인덱스는 비휘발성 저장에 저장된 압축 데이터의 위치 및 크기를 포함한다. 데이터 저장 디바이스는 용량보다 큰 값으로서 하나 이상의 존의 용량을 보고하기 위한 수단을 더 포함한다. 데이터 저장 디바이스는 비휘발성 저장 유닛에 결합되어 데이터를 압축 해제하는 수단을 더 포함한다.
전술한 것은 본 개시내용의 실시예들에 관한 것이지만, 본 개시내용의 다른 및 추가 실시예들이 그 기본 범주로부터 벗어남이 없이 고안될 수 있으며, 그 범주는 후속하는 청구범위에 의해 결정된다.

Claims (20)

  1. 데이터 저장 디바이스로서,
    용량이 복수의 존으로 분할된, 비휘발성 저장 유닛; 및
    상기 비휘발성 저장 유닛에 결합되고 압축 엔진을 포함하는 제어기
    를 포함하되, 상기 제어기는,
    상기 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고 - 커맨드 각각은 하나 이상의 데이터 청크를 포함함 - ;
    상기 압축 엔진을 이용하여 상기 하나 이상의 데이터 청크 중 하나 이상의 청크를 압축 데이터로 압축하고 - 상기 하나 이상의 청크는 하나 이상의 그레인으로 압축됨 - ;
    상기 압축 데이터를 상기 제1 존 내의 제1 위치에 기입하고;
    상기 제1 위치를 상기 호스트 디바이스에 보고하도록 - 상기 호스트 디바이스에 보고하는 것은 상기 압축 데이터의 실제 논리 블록 어드레스(LBA) 범위보다 큰 압축 데이터의 각 청크에 대한 호스트 전달 LBA 범위를 상기 호스트 디바이스에 제공하는 것을 포함함 -
    구성되는, 데이터 저장 디바이스.
  2. 제1항에 있어서, 상기 호스트 전달 LBA 범위는 비선형 논리 블록 저장 공간인, 데이터 저장 디바이스.
  3. 제1항에 있어서, 상기 제어기는 상기 압축 데이터에 헤더를 부가하도록 추가로 구성되는, 데이터 저장 디바이스.
  4. 제3항에 있어서, 상기 헤더는 상기 하나 이상의 청크의 위치를 지시하는 메타데이터를 포함하는, 데이터 저장 디바이스.
  5. 제1항에 있어서, 상기 압축 엔진은 압축비로 데이터를 압축할 수 있고, 상기 압축비는 상기 데이터를 압축할 때 제1 개수의 논리 블록으로부터 제2 개수의 논리 블록으로의 최대 변화를 결정하는, 데이터 저장 디바이스.
  6. 데이터 저장 디바이스로서,
    용량이 복수의 존으로 분할된, 비휘발성 저장 유닛; 및
    상기 비휘발성 저장 유닛에 결합되고 압축 엔진을 포함하는 제어기
    를 포함하되, 상기 제어기는,
    상기 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고 - 커맨드 각각은 하나 이상의 데이터 청크를 포함함 - ;
    상기 압축 엔진을 이용하여 상기 하나 이상의 데이터 청크 중 하나 이상의 청크를 압축 데이터로 압축하고 - 상기 하나 이상의 청크는 하나 이상의 그레인으로 압축됨 - ;
    상기 압축 데이터를 상기 제1 존 내의 제1 위치에 기입하고;
    상기 제1 위치를 상기 호스트 디바이스에 보고하고;
    상기 호스트 디바이스에 보고한 후에, 상기 호스트 디바이스로부터 인덱스를 수신하도록
    구성되는, 데이터 저장 디바이스.
  7. 제6항에 있어서, 상기 제어기는 상기 압축 데이터에 헤더를 부가하도록 추가로 구성되는, 데이터 저장 디바이스.
  8. 제7항에 있어서, 상기 헤더는 상기 하나 이상의 청크의 위치를 지시하는 메타데이터를 포함하는, 데이터 저장 디바이스.
  9. 제6항에 있어서, 상기 압축 엔진은 압축비로 데이터를 압축할 수 있고, 상기 압축비는 상기 데이터를 압축할 때 제1 개수의 논리 블록으로부터 제2 개수의 논리 블록으로의 최대 변화를 결정하는, 데이터 저장 디바이스.
  10. 데이터 저장 디바이스로서,
    용량이 복수의 존으로 분할된, 비휘발성 저장 유닛; 및
    상기 비휘발성 저장 유닛에 결합되고 압축 엔진을 포함하는 제어기
    를 포함하되, 상기 제어기는
    상기 복수의 존 중 제1 존에 데이터를 기입하라는 하나 이상의 커맨드를 호스트 디바이스로부터 수신하고;
    상기 하나 이상의 커맨드와 연관된 데이터를 상기 호스트 디바이스로부터 수신하고;
    상기 수신된 데이터를 청크들로 그룹핑하고;
    상기 압축 엔진을 일정 압축비로 활용하여 상기 하나 이상의 커맨드와 연관된 데이터를 청크로부터 정수 개의 그레인으로 압축하고;
    상기 제1 존 내의 제1 위치에 하나 이상의 커맨드와 연관된 압축 데이터를 기입하고;
    상기 제1 위치를 기록하고 - 상기 제1 위치는 매체 논리 블록 어드레스(LBA) 및 호스트 LBA를 포함함 - ;
    상기 호스트 LBA를 상기 호스트 디바이스에 보고하도록 - 상기 호스트 디바이스에 보고하는 것은 상기 압축 데이터의 실제 LBA 범위보다 큰 압축 데이터의 각 청크에 대한 호스트 전달 LBA 범위를 상기 호스트 디바이스에 제공하는 것을 포함함 -
    구성되는, 데이터 저장 디바이스.
  11. 제10항에 있어서, 상기 제어기는,
    상기 제1 존에 저장된 압축 데이터에 대한 판독 커맨드를 수신하고;
    상기 판독 커맨드와 연관된 압축 데이터의 제1 위치를 결정하고;
    상기 판독 커맨드와 연관된 데이터를 판독하고;
    상기 데이터를 상기 호스트 디바이스에 전달하도록
    더 구성되는, 데이터 저장 디바이스.
  12. 제11항에 있어서, 상기 판독 커맨드는 상기 호스트 LBA를 포함하는, 데이터 저장 디바이스.
  13. 제11항에 있어서, 상기 제1 위치를 결정하는 것은 상기 압축비를 활용하여 상기 호스트 LBA를 상기 매체 LBA로 변환하는 것인, 데이터 저장 디바이스.
  14. 제13항에 있어서, 상기 매체 LBA는 헤더를 포함하는, 데이터 저장 디바이스.
  15. 제14항에 있어서, 상기 헤더는 압축 청크 각각의 제1 위치를 저장하는, 데이터 저장 디바이스.
  16. 제10항에 있어서, 상기 제어기는,
    상기 압축 데이터가 압축 해제될 필요가 있는지 여부를 결정하고;
    압축 해제될 필요가 있다고 결정된 데이터를 압축 해제하도록
    더 구성되는, 데이터 저장 디바이스.
  17. 데이터 저장 디바이스로서,
    용량이 복수의 존으로 분할된, 비휘발성 저장 유닛;
    상기 비휘발성 저장 유닛에 결합되어 호스트 디바이스로부터 수신된 데이터를 압축하기 위한 수단;
    상기 비휘발성 저장 유닛에 결합되어 상기 복수의 존 중 적어도 하나의 존 내의 매체 논리 블록 어드레스(LBA) 범위에 압축 데이터를 기입하기 위한 수단;
    상기 비휘발성 저장 유닛에 결합되어 상기 호스트 디바이스에 호스트 LBA 범위를 보고하기 위한 수단 - 상기 호스트 LBA 범위는 상기 압축 데이터가 기입되는 상기 매체 LBA 범위와 상이함 - ; 및
    상기 호스트 디바이스로부터 인덱스를 수신하고 상기 비휘발성 저장 유닛에 상기 인덱스를 기입하기 위한 수단
    을 포함하는, 데이터 저장 디바이스.
  18. 제17항에 있어서, 상기 인덱스는 상기 비휘발성 저장 유닛에 저장된 상기 압축 데이터의 위치 및 크기를 포함하는, 데이터 저장 디바이스.
  19. 제17항에 있어서, 상기 용량보다 큰 값으로서 상기 하나 이상의 존의 용량을 보고하기 위한 수단을 더 포함하는, 데이터 저장 디바이스.
  20. 제17항에 있어서, 상기 비휘발성 저장 유닛에 결합되어 데이터를 압축 해제하는 수단을 더 포함하는, 데이터 저장 디바이스.
KR1020210082726A 2020-08-17 2021-06-24 존 구획 네임스페이스를 갖는 호스트 관리 하드웨어 압축 KR102656959B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063066739P 2020-08-17 2020-08-17
US63/066,739 2020-08-17
US17/184,170 US11481115B2 (en) 2020-08-17 2021-02-24 Host-managed hardware compression with zoned namespaces
US17/184,170 2021-02-24

Publications (2)

Publication Number Publication Date
KR20220022092A KR20220022092A (ko) 2022-02-24
KR102656959B1 true KR102656959B1 (ko) 2024-04-11

Family

ID=80000667

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210082726A KR102656959B1 (ko) 2020-08-17 2021-06-24 존 구획 네임스페이스를 갖는 호스트 관리 하드웨어 압축

Country Status (4)

Country Link
US (1) US11481115B2 (ko)
KR (1) KR102656959B1 (ko)
CN (1) CN114077547A (ko)
DE (1) DE102021115500A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220164146A1 (en) * 2020-11-25 2022-05-26 Hitachi, Ltd. Storage system and control method for storage system
CN114579051B (zh) * 2022-02-25 2024-04-23 阿里巴巴(中国)有限公司 识别硬盘读模式的方法以及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6443794B2 (ja) * 2013-08-16 2018-12-26 エルエスアイ コーポレーション ホストとコントローラとの間でパーティション化された変換レイヤ
US10073647B2 (en) * 2015-07-21 2018-09-11 Seagate Technology Llc Thinly provisioned disk drives with zone provisioning and compression in relation to zone granularity
KR20200006379A (ko) * 2018-07-10 2020-01-20 에스케이하이닉스 주식회사 컨트롤러 및 그것의 동작방법
KR102267477B1 (ko) * 2020-02-20 2021-06-22 삼성전자주식회사 스토리지 장치 및 이의 동작 방법

Also Published As

Publication number Publication date
US20220050599A1 (en) 2022-02-17
US11481115B2 (en) 2022-10-25
DE102021115500A1 (de) 2022-02-17
CN114077547A (zh) 2022-02-22
KR20220022092A (ko) 2022-02-24

Similar Documents

Publication Publication Date Title
US11640266B2 (en) Rate limit on the transitions of zones to open
US11520660B2 (en) Storage devices hiding parity swapping behavior
WO2021050107A1 (en) Non-sequential zoned namespaces
US20170206170A1 (en) Reducing a size of a logical to physical data address translation table
WO2020263322A1 (en) Hold of write commands in zoned namespaces
US11500727B2 (en) ZNS parity swapping to DRAM
KR102656959B1 (ko) 존 구획 네임스페이스를 갖는 호스트 관리 하드웨어 압축
US11520523B2 (en) Data integrity protection of ZNS needs
US11436153B2 (en) Moving change log tables to align to zones
US11960753B2 (en) Solution for super device imbalance in ZNS SSD
WO2023027782A1 (en) Purposeful super device imbalance for zns ssd efficiency
US11847337B2 (en) Data parking for ZNS devices
US11960741B2 (en) Implied streams
US11853565B2 (en) Support higher number of active zones in ZNS SSD
US11656984B2 (en) Keeping zones open with intermediate padding
US11537293B2 (en) Wear leveling methods for zoned namespace solid state drive
WO2023101719A1 (en) Full die recovery in zns ssd
WO2023027783A1 (en) Super block allocation across super device in zns ssd
WO2023027784A1 (en) Controlled imbalance in super block allocation in zns ssd

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant