KR102663302B1 - Zns 드라이브에서의 데이터 취합 - Google Patents

Zns 드라이브에서의 데이터 취합 Download PDF

Info

Publication number
KR102663302B1
KR102663302B1 KR1020210077077A KR20210077077A KR102663302B1 KR 102663302 B1 KR102663302 B1 KR 102663302B1 KR 1020210077077 A KR1020210077077 A KR 1020210077077A KR 20210077077 A KR20210077077 A KR 20210077077A KR 102663302 B1 KR102663302 B1 KR 102663302B1
Authority
KR
South Korea
Prior art keywords
zone
data
programming
chunk
additional
Prior art date
Application number
KR1020210077077A
Other languages
English (en)
Other versions
KR20220066814A (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
Priority claimed from US17/184,154 external-priority patent/US11599304B2/en
Application filed by 웨스턴 디지털 테크놀로지스, 인코포레이티드 filed Critical 웨스턴 디지털 테크놀로지스, 인코포레이티드
Publication of KR20220066814A publication Critical patent/KR20220066814A/ko
Application granted granted Critical
Publication of KR102663302B1 publication Critical patent/KR102663302B1/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/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
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1647Handling requests for interconnection or transfer for access to memory bus based on arbitration with interleaved bank access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • 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

Abstract

본 개시내용은 일반적으로, 구역화된 이름공간(ZNS)에 대한 구역 부가 커맨드들의 효율적인 데이터 전송 관리에 관한 것이다. ZNS 저장 디바이스는 복수의 메모리 다이들을 가지는 메모리 디바이스, 및 메모리 디바이스에 결합된 제어기를 포함한다. 제어기는 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하고, 부가 기입 버퍼에서 구역 식별정보에 의해 각각의 구역 부가 커맨드와 연관된 데이터를 페치하고 취합한다. 취합된 데이터는 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에 메모리 디바이스에, 또는 미리 결정된 기입 크기가 충족되지 않을 경우에 임시 버퍼에 기입된다. 각각의 구역은 프로그래밍을 위한 취합된 데이터를 메모리 디바이스로 전송할 때에 별도의 채널을 이용하여, 다수의 채널들이 병렬로 사용되게 한다.

Description

ZNS 드라이브에서의 데이터 취합{DATA AGGREGATION IN ZNS DRIVE}
관련된 출원들에 대한 상호-참조
본 출원은 참조로 본 명세서에 원용되는, 2020년 11월 16일로 출원된 미국 가특허 출원 제63/114,397호의 이익을 주장한다.
발명의 배경
발명의 분야
본 개시내용의 실시예들은 일반적으로, 구역화된 이름공간(zoned namespace)(ZNS)에 대한 구역 부가 커맨드(zone-append command)들의 효율적인 데이터 전송 관리에 관한 것이다.
구역화된 이름공간(ZNS)들은 데이터 저장 디바이스가 기입들을 순차적인 구역들로 한정하는 저장에서 새로운 방향이다. 호스트 기입 패턴들을 내부 디바이스 기하구조(geometry)와 정렬하고 호스트 기입에 직접적으로 링크되지 않는 디바이스측 기입들에 대한 필요성을 감소시킴으로써, ZNS는 디바이스측 기입 증폭 및 오버프로비저닝(overprovisioning)을 감소시키도록 의도된다.
ZNS는 SSD(Solid State Drive)(솔리드 스테이트 드라이브)당 최소 DRAM 요건들로 인한 감소된 비용; NAND 매체들의 오버프로비저닝에 대한 감소된 필요성으로 인한 잠재적인 절감들; 기입 증폭을 감소시킴으로써 더 양호한 SSD 수명; 극적으로 감소된 레이턴시(latency); 상당히 개선된 스루풋(throughput); 및 강력한 소프트웨어 및 하드웨어 생태계를 가능하게 하는 표준화된 인터페이스를 포함하는 많은 장점들을 제공한다.
전형적으로, ZNS 환경에서, 각각의 구역 부가 커맨드와 연관된 데이터 전송 크기는 블록 크기(예컨대, NAND 블록 크기) 또는 다수의 전체 블록 크기들(즉, 완전한 블록보다 작은 크기들 없음)이다. 예를 들어, NAND 블록과 같은 블록이 단일 NAND 다이에 존재한다. 메모리 디바이스 병렬처리는 다수의 NAND 다이들을 병렬로 액세스하는 것을 수반한다. 병렬처리를 증가시키기 위하여, 더 많은 NAND 다이들이 병렬로 액세스될 필요가 있다. 메모리 디바이스 병렬처리를 효율적으로 이용하기 위하여, 인터리빙된 데이터 전송(interleaved data transfer)을 가지면서, 많은 구역 부가 커맨드들이 병렬로 실행되어야 한다. 그렇지 않을 경우에, 메모리 디바이스를 사용하기 위하여 기입 캐시 버퍼는 상당히 증가될 것이다.
따라서, 당업계에서는 구역 부가 커맨드들을 더욱 효율적으로 관리하는 ZNS 디바이스가 필요하다.
본 개시내용은 일반적으로, 구역화된 이름공간(ZNS)에 대한 구역 부가 커맨드들의 효율적인 데이터 전송 관리에 관한 것이다. ZNS 저장 디바이스는 복수의 메모리 다이들을 가지는 메모리 디바이스, 및 메모리 디바이스에 결합된 제어기를 포함한다. 제어기는 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보(zone identification)와 연관됨 - 을 수신하고, 부가 기입 버퍼에서 구역 식별정보에 의해 각각의 구역 부가 커맨드와 연관된 데이터를 페치(fetch)하고 취합(aggregate)한다. 취합된 데이터는 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기(programming chunk size)에 도달할 시에 메모리 디바이스에, 또는 미리 결정된 기입 크기가 충족되지 않을 경우에 임시 버퍼(temporary buffer)에 기입된다. 각각의 구역은 프로그래밍을 위한 취합된 데이터를 메모리 디바이스로 전송할 때에 별도의 채널을 이용하여, 다수의 채널들이 병렬로 사용되게 한다.
일 실시예에서, 데이터 저장 디바이스는 복수의 메모리 다이들을 가지는 메모리 디바이스, 복수의 채널들 - 각각의 채널은 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -, 및 메모리 디바이스에 결합된 제어기를 포함한다. 제어기는 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하고, 각각의 구역 부가 커맨드에 대하여 호스트 디바이스로부터 데이터를 페치하고, 부가 기입 버퍼에서 각각의 구역 부가 커맨드와 연관된 구역 식별정보에 의해 페치된 데이터 - 페치된 데이터는 식별된 각각의 구역에 대한 별도의 프로그래밍 청크들로 취합됨 - 를 취합하고, 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에, 복수의 채널들 중 하나 이상의 채널들을 병렬로 이용하여 취합된 데이터를 메모리 디바이스에 기입하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 호스트 디바이스에 결합된 인터페이스, 복수의 메모리 다이들 - 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함함 - 을 가지는 메모리 디바이스, 복수의 채널들 - 각각의 채널은 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -, 및 메모리 디바이스 및 인터페이스에 결합된 제어기 - 제어기는 부가 기입 버퍼를 포함함 - 를 포함한다. 제어기는 복수의 구역들 중 제1 구역과 연관된 제1 구역 부가 커맨드들을 수신하고, 복수의 구역들 중 제2 구역과 연관된 제2 구역 부가 커맨드들을 수신하고, 제1 프로그래밍 청크가 부가 기입 버퍼에서 미리 결정된 프로그래밍 청크 크기로 채워질 때까지 제1 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 페치하고 취합하고, 동시에, 제2 프로그래밍 청크가 부가 기입 버퍼에서 미리 결정된 프로그래밍 청크 크기로 채워질 때가지 제2 구역 부가 커맨드 데이터의 하나 이상의 제2 청크들을 페치하고 취합하고, 복수의 채널들 중 제1 채널을 이용하여 제1 프로그래밍 청크를 제1 구역과 연관된 복수의 블록들 중 제1 블록에 기입하고, 복수의 채널들 중 제2 채널을 이용하여 제2 프로그래밍 청크를 제2 구역과 연관된 복수의 블록들 중 제2 블록에 기입하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 복수의 메모리 다이들 - 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함함 - 을 가지는 메모리 디바이스, 복수의 채널들 - 각각의 채널은 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -, 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하기 위한 수단, 각각의 구역 부가 커맨드에 대하여 호스트 디바이스로부터 데이터를 페치하기 위한 수단, 부가 기입 버퍼에서 각각의 구역 부가 커맨드와 연관된 구역 식별정보에 의해 페치된 데이터 - 페치된 데이터는 식별된 각각의 구역에 대한 별도의 프로그래밍 청크들로 취합됨 - 를 취합하기 위한 수단, 복수의 채널들 중 하나 이상의 채널들을 병렬로 이용하여, 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에 취합된 데이터를 메모리 디바이스에 기입하기 위한 수단, 및 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에 취합된 데이터를 복수의 메모리 다이들의 메모리 다이의 임시 블록에 기입하기 위한 수단을 포함한다.
본 개시내용의 상기 인용된 특징들이 상세하게 이해될 수 있도록, 위에서 간략하게 요약된 개시내용의 더 특정한 설명은 실시예들을 참조하여 행해질 수 있고, 실시예들의 일부는 첨부된 도면들에서 예시된다. 그러나, 첨부된 도면들은 이 개시내용의 전형적인 실시예들만을 예시하고, 따라서, 개시내용이 다른 동일하게 효과적인 실시예들을 인정할 수 있기 때문에, 그 범주의 제한으로 고려되지 않아야 한다는 점에 유의해야 한다.
도 1은 이 개시내용의 하나 이상의 기법들에 따라, 호스트 디바이스에 대한 저장 디바이스로서 기능할 수 있는 저장 디바이스를 가지는 저장 시스템을 예시하는 개략 블록도이다.
도 2a는 전통적인 SSD의 디바이스 제어의 개략 예시도이다.
도 2b는 실시예에 따른 ZNS SSD의 디바이스 제어의 개략 예시도이다.
도 3은 구역 부가 커맨드의 개략 예시도이다.
도 4는 일 실시예에 따른 ZNS SSD에 대한 상태 다이어그램의 개략 예시도이다.
도 5는 일 실시예에 따른 구역 이름공간 구조의 개략 예시도이다.
도 6은 ZNS 비인터리빙된 데이터 전송(non-interleaved data transfer)의 개략 예시도이다.
도 7a 및 도 7b는 다양한 실시예들에 따른, ZNS 인터리빙된 및 최적화된 데이터 전송을 구현하는 저장 시스템의 개략 예시도이다.
도 8은 다양한 실시예들에 따른, ZNS 인터리빙된 및 최적화된 데이터 전송에서 사용된 다양한 표들의 개략 예시도이다.
이해를 용이하게 하기 위하여, 가능한 경우, 도면들에 공통적인 동일한 요소들을 지정하기 위하여 동일한 참조 번호들이 이용되었다. 일 실시예에서 개시된 요소들은 특정 설명 없이 다른 실시예들 상에서 유익하게 사용될 수 있다는 점이 고려된다.
하기에서, 개시내용의 실시예들에 대해 참조가 행해진다. 그러나, 개시내용은 특정 설명된 실시예들로 제한되지는 않는다는 점이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합은, 상이한 실시예들에 관련되든지 또는 그렇지 않든지 간에, 개시내용을 구현하고 실시하도록 고려된다. 또한, 개시내용의 실시예들은 다른 가능한 해결책들에 비해 및/또는 종래 기술에 비해 장점들을 가질 수 있지만, 특정한 장점이 주어진 실시예에 의해 달성되는지 또는 그렇지 않은지의 여부는 개시내용의 제한이 아니다. 따라서, 하기의 양태들, 특징들, 실시예들, 및 장점들은 단지 예시적이고, 청구항(들)에서 명시적으로 인용될 경우를 제외하고는, 첨부된 청구항들의 요소들 또는 제한들로 고려되지 않는다. 마찬가지로, "개시내용"에 대한 참조는 본 명세서에 개시된 임의의 발명 요지의 일반화로서 해석되지 않을 것이고, 청구항(들)에서 명시적으로 인용될 경우를 제외하고는, 첨부된 청구항들의 요소 또는 제한인 것으로 고려되지 않을 것이다.
본 개시내용은 일반적으로, 구역화된 이름공간(ZNS)에 대한 구역 부가 커맨드들의 효율적인 데이터 전송 관리에 관한 것이다. ZNS 저장 디바이스는 복수의 메모리 다이들을 가지는 메모리 디바이스, 및 메모리 디바이스에 결합된 제어기를 포함한다. 제어기는 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하고, 부가 기입 버퍼에서 구역 식별정보에 의해 각각의 구역 부가 커맨드와 연관된 데이터를 페치(fetch)하고 취합한다. 취합된 데이터는 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에 메모리 디바이스에, 또는 미리 결정된 기입 크기가 충족되지 않을 경우에 임시 버퍼에 기입된다. 각각의 구역은 프로그래밍을 위한 취합된 데이터를 메모리 디바이스로 전송할 때에 별도의 채널을 이용하여, 다수의 채널들이 병렬로 사용되게 한다.
도 1은 이 개시내용의 하나 이상의 기법들에 따라, 데이터 저장 디바이스(106)가 호스트 디바이스(104)에 대한 저장 디바이스로서 기능할 수 있는 저장 시스템(100)을 예시하는 개략 블록도이다. 예를 들어, 호스트 디바이스(104)는 데이터를 저장하고 검색하기 위하여 데이터 저장 디바이스(106)에 포함된 NVM(110)을 사용할 수 있다 호스트 디바이스(104)는 호스트 DRAM(138)을 포함한다. 일부 예들에서, 저장 시스템(100)은 저장 어레이로서 동작할 수 있는, 데이터 저장 디바이스(106)와 같은 복수의 저장 디바이스들을 포함할 수 있다. 예를 들어, 저장 시스템(100)은 호스트 디바이스(104)에 대한 대용량 저장 디바이스로서 집합적으로 기능하는 저렴한/독립적 디스크들의 중복적 어레이(edundant array of inexpensive/independent disks)(RAID)로서 구성된 복수의 데이터 저장 디바이스들(106)을 포함할 수 있다.
저장 시스템은(100)은 데이터 저장 디바이스(106)와 같은 하나 이상의 저장 디바이스들에 데이터를 저장할 수 있고 그리고/또는 이러한 하나 이상의 저장 디바이스들로부터 데이터를 검색할 수 있는 호스트 디바이스(104)를 포함한다. 도 1에 예시된 바와 같이, 호스트 디바이스(104)는 인터페이스(114)를 통해 데이터 저장 디바이스(106)와 통신할 수 있다. 호스트 디바이스(104)는 컴퓨터 서버들, 네트워크 연결 스토리지(network attached storage)(NAS) 유닛들, 데스크톱 컴퓨터들, 노트북(즉, 랩톱) 컴퓨터들, 태블릿 컴퓨터들, 셋톱 박스들, 소위 "스마트(smart)" 폰들과 같은 전화 핸드셋들, 소위 "스마트" 패드들, 텔레비전들, 카메라들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔들, 비디오 스트리밍 디바이스들 등을 포함하는 임의의 광범위한 디바이스들을 포함할 수 있다.
데이터 저장 디바이스(106)는 제어기(108), 비휘발성 메모리(non-volatile memory)(110)(NVM(110)), 전력 공급부(111), 휘발성 메모리(112), 인터페이스(114), 및 기입 버퍼(116)를 포함한다. 일부 예들에서, 데이터 저장 디바이스(106)는 명확함을 위하여 도 1에 도시되지 않은 추가 컴포넌트들을 포함할 수 있다. 예를 들어, 데이터 저장 디바이스(106)는, 데이터 저장 디바이스(106)의 컴포넌트들이 기계적으로 부착되고, 데이터 저장 디바이스(106)의 컴포넌트들 등을 전기적으로 상호접속하는 전기적 전도성 트레이스(conductive trace)들을 포함하는 인쇄 회로 기판(printed circuit board)(PCB)을 포함할 수 있다. 일부 예들에서, 데이터 저장 디바이스(106)의 물리적 치수들 및 커넥터 구성들은 하나 이상의 표준 폼 팩터(form factor)들을 준수할 수 있다. 일부 예시적인 표준 폼 팩터들은 3.5" 데이터 저장 디바이스(예컨대, HDD 또는 SSD), 2.5" 데이터 저장 디바이스, 1.8" 데이터 저장 디바이스, 주변 컴포넌트 상호접속(peripheral component interconnect)(PCI), PCI-확장형(PCI-extended)(PCI-X), PCI 익스프레스(PCI Express)(PCIe)(예컨대, PCIe x1, x4, x8, x16, PCIe 미니 카드(Mini Card), MiniPCI 등)를 포함하지만, 이것으로 제한되지는 않는다. 일부 예들에서, 데이터 저장 디바이스(106)는 호스트 디바이스(104)의 마더보드(motherboard)에 직접적으로 결합(예컨대, 직접적으로 납땜)될 수 있다.
데이터 저장 디바이스(106)의 인터페이스(114)는 호스트 디바이스(104)와 데이터를 교환하기 위한 데이터 버스, 및 호스트 디바이스(104)와 커맨드들을 교환하기 위한 제어 버스 중 하나 또는 둘 모두를 포함할 수 있다. 인터페이스(114)는 임의의 적당한 프로토콜에 따라 동작할 수 있다. 예를 들어, 인터페이스(114)는 하기의 프로토콜들 중 하나 이상에 따라 따라 동작할 수 있다: 고급 기술 결합(advanced technology attachment)(ATA)(예컨대, 직렬-ATA(serial-ATA)(SATA) 및 벙렬-ATA(parallel-ATA)(PATA)), 파이버 채널 프로토콜(Fibre Channel Protocol)(FCP), 소형 컴퓨터 시스템 인터페이스(small computer system interface)(SCSI), 직렬 연결된 SCSCI(serially attached SCSI)(SAS), PCI, 및 PCIe, 비휘발성 메모리 익스프레스(non-volatile memory express)(NVMe), OpenCAPI, GenZ, 캐시 일관성 인터페이스 가속기(Cache Coherent Interface Accelerator)(CCIX), 개방형 채널 SSD(Open Channel SSD)(OCSSD) 등. 인터페이스(114)의 전기적 접속(예컨대, 데이터 버스, 제어 버스, 또는 둘 모두)은 제어기(108)에 전기적으로 접속되어, 호스트 디바이스(104)와 제어기(108) 사이의 전기적 접속을 제공하여, 데이터가 호스트 디바이스(104)와 제어기(108) 사이에서 교환되도록 한다. 일부 예들에서, 인터페이스(114)의 전기적 접속은 또한, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 전력을 수신하는 것을 허용할 수 있다. 예를 들어, 도 1에 예시된 바와 같이, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 전력을 수신할 수 있다.
데이터 저장 디바이스(106)는 복수의 메모리 디바이스들 또는 메모리 유닛들을 포함할 수 있는 NVM(110)을 포함한다. NVM(110)은 데이터를 저장하고 그리고/또는 검색하도록 구성될 수 있다. 예를 들어, NVM(110)의 메모리 유닛은 제어기(108)로부터, 데이터를 저장할 것을 메모리 유닛에 명령하는 메시지 및 데이터를 수신할 수 있다. 유사하게, NVM(110)의 메모리 유닛은 제어기(108)로부터, 데이터를 검색할 것을 메모리 유닛에 명령하는 메시지를 수신할 수 있다. 일부 예들에서, 메모리 유닛들 각각은 다이(die)로서 지칭될 수 있다. 일부 예들에서, 단일 물리적 칩은 복수의 다이들(즉, 복수의 메모리 유닛들)을 포함할 수 있다. 일부 예들에서, 각각의 메모리 유닛은 상대적으로 다량의 데이터(예컨대, 128MB, 256MB, 512MB, 1GB, 2GB, 4GB, 8GB, 16GB, 32GB, 64GB, 128GB, 256GB, 512GB, 1TB 등)를 저장하도록 구성될 수 있다.
일부 예들에서, NVM(110) 각각의 메모리 유닛은 플래시 메모리(flash memory) 디바이스들, 상변화 메모리(phase-change memory)(PCM) 디바이스들, 저항성 랜덤-액세스 메모리(resistive random-access memory)(ReRAM) 디바이스들, 자기저항성 랜덤-액세스 메모리(magnetoresistive random-access memory)(MRAM) 디바이스들, 강자성 랜덤-액세스 메모리(ferroelectric random-access memory)(F-RAM), 홀로그래픽 메모리(holographic memory) 디바이스들과 같은 임의의 유형의 비휘발성 메모리 디바이스들, 및 임의의 다른 유형의 비휘발성 메모리 디바이스들을 포함할 수 있다.
NVM(110)은 복수의 플래시 메모리 디바이스들 또는 메모리 유닛들을 포함할 수 있다. 플래시 메모리 디바이스들은 NAND 또는 NOR 기반 플래시 메모리 디바이스들을 포함할 수 있고, 각각의 플래시 메모리 셀에 대한 트랜지스터의 플로팅 게이트(floating gate)에 포함된 전하에 기초하여 데이터를 저장할 수 있다. NAND 플래시 메모리 디바이스들에서, 플래시 메모리 디바이스는 복수의 페이지들로 분할될 수 있는 복수의 블록들로 분할될 수 있다. 특정한 메모리 디바이스 내의 복수의 블록들 각각의 블록은 복수의 NAND 셀들을 포함할 수 있다. NAND 셀들의 행(row)들은 복수의 페이지들의 페이지를 정의하기 위하여, 워드 라인을 이용하여 전기적으로 접속될 수 있다. 복수의 페이지들 각각에서 각각의 셀들은 각각의 비트 라인들에 전기적으로 접속될 수 있다. 또한, NAND 플래시 메모리 디바이스들은 2D 또는 3D 디바이스들일 수 있고, 단일 레벨 셀(single level cell)(SLC), 멀티 레벨 셀(multi-level cell)(MLC), 트리플 레벨 셀(triple level cell)(TLC), 쿼드 레벨 셀(quad level cell)(QLC), 또는 더 많은 레벨 셀들일 수 있다. 제어기(108)는 페이지 레벨에서 데이터를 NAND 플래시 메모리 디바이스들에 기입할 수 있고 NAND 플래시 메모리 디바이스들로부터 데이터를 판독할 수 있고, 블록 레벨에서 NAND 플래시 메모리 디바이스들로부터 데이터를 소거할 수 있다.
데이터 저장 디바이스(106)는 전력을 데이터 저장 디바이스(106)의 하나 이상의 컴포넌트들에 제공할 수 있는 전력 공급부(111)를 포함한다. 표준 모드에서 동작할 때, 전력 공급부(111)는 호스트 디바이스(104)와 같은 외부 디바이스에 의해 제공된 전력을 이용하여 전력을 하나 이상의 컴포넌트들에 제공할 수 있다. 예를 들어, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 수신된 전력을 이용하여 전력을 하나 이상의 컴포넌트들에 제공할 수 있다. 일부 예들에서, 전력 공급부(111)는 전력이 외부 디바이스로부터 수신되는 것을 중단할 경우와 같은 셧다운 모드에서 동작할 때, 전력을 하나 이상의 컴포넌트들에 제공하도록 구성된 하나 이상의 전력 저장 컴포넌트들을 포함할 수 있다. 이러한 방식으로, 전력 공급부(111)는 온보드 백업 전원(onboard backup power source)으로서 기능할 수 있다. 하나 이상의 전력 저장 컴포넌트들의 일부 예들은 커패시터들, 수퍼 커패시터들, 배터리들 등을 포함하지만, 이것으로 제한되지는 않는다. 일부 예들에서, 하나 이상의 전력 저장 컴포넌트들에 의해 저장될 수 있는 전력의 양은 하나 이상의 전력 저장 컴포넌트들의 비용 및/또는 크기(예컨대, 면적/체적)의 함수일 수 있다. 다시 말해서, 하나 이상의 전력 저장 컴포넌트들에 의해 저장된 전력의 양이 증가함에 따라, 하나 이상의 저장 컴포넌트들의 비용 및/또는 크기가 또한 증가한다.
데이터 저장 디바이스(106)는 정보를 저장하기 위하여 제어기(108)에 의해 이용될 수 있는 휘발성 메모리(112)를 또한 포함한다. 휘발성 메모리(112)는 하나 이상의 휘발성 메모리 디바이스들로 이루어질 수 있다. 일부 예들에서, 제어기(108)는 캐시(cache)로서 휘발성 메모리(112)를 이용할 수 있다. 예를 들어, 제어기(108)는 캐시된 정보가 비휘발성 메모리(110)에 기입될 때까지, 캐시된 정보를 휘발성 메모리(112)에 저장할 수 있다. 도 1에 예시된 바와 같이, 휘발성 메모리(112)는 전력 공급부(111)로부터 수신된 전력을 소비할 수 있다. 휘발성 메모리(112)의 예들은 랜덤-액세스 메모리(random-access memory)(RAM), 동적 랜덤 액세스 메모리(dynamic random access memory)(DRAM), 정적 RAM(static RAM)(SRAM), 및 동기식 동적 RAM(synchronous dynamic RAM)(SDRAM(예컨대, DDR1, DDR2, DDR3, DDR3L, LPDDR3, DDR4, LPDDR4 등)을 포함하지만, 이것으로 제한되지는 않는다.
데이터 저장 디바이스(106)는 데이터 저장 디바이스(106)의 하나 이상의 동작들을 관리할 수 있는 제어기(108)를 포함한다. 예를 들어, 제어기(108)는 NVM(110)으로부터의 판독 및/또는 NVM(110)으로의 데이터의 기입을 관리할 수 있다. 일부 실시예들에서, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 데이터를 NVM(110)에 저장하기 위한 데이터 저장 커맨드를 개시(initiate)할 수 있고, 데이터 저장 커맨드의 진행을 모니터링할 수 있다. 제어기(108)는 저장 시스템(100)의 적어도 하나의 동작 특성을 결정할 수 있고, 적어도 하나의 동작 특성을 NVM(110)에 저장할 수 있다. 일부 실시예들에서, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 데이터를 NVM(110)으로 전송하기 전에, 기입 커맨드와 연관된 데이터를 내부 메모리 또는 기입 버퍼(116)에 임시로 저장한다.
도 2a 및 도 2b는 다양한 실시예들에 따른 SSD의 디바이스 제어의 개략 예시도들이다. 일 실시예에서, 도 2a 및 도 2b의 플래시 디바이스는 도 1의 데이터 저장 디바이스(106)의 NVM(110)일 수 있다. 또한, 다양한 실시예들에 따르면, 도 2a 및 도 2b의 플래시 디바이스는 열거되지 않은 멀티-레벨 셀의 임의의 다른 반복을 포함하는, SLC, MLC, TLC, QLC, 또는 더 많은 것과 같은 멀티-레벨 셀일 수 있다. 도 2a 및 도 2b의 블록 저장 디바이스 각각의 정사각형은 데이터 저장을 위하여 이용 가능한 블록을 표현한다. 음영표시된 정사각형 또는 블록은 블록이 데이터를 포함한다는 것을 나타낸다. 데이터는 SSD의 플래시에 저장될 사용자 데이터, XOR 또는 패리티 데이터, 디바이스 메타데이터, 또는 임의의 다른 적당한 데이터일 수 있다.
도 2a는 전통적인 SSD의 디바이스 제어의 개략 예시도이다. SSD는 애플리케이션 1, 애플리케이션 2, 및 애플리케이션 3과 같은 다수의 애플리케이션들로부터 데이터를 수신한다. 데이터는 SSD의 플래시에 저장된다. SSD에서, 저장 디바이스는 데이터 배치를 제어한다. 데이터는 플래시에 순차적으로 기입되어, 데이터가 수신되는 순서로 각각의 애플리케이션으로부터의 데이터가 기입될 수 있도록 한다. 각각의 애플리케이션으로부터의 데이터는 순차적인 기입들 전반에 걸쳐 무작위적일 수 있으므로, 레이턴시는 증가될 수 있고 스루풋은 방해받을 수 있다.
도 2b는 ZNS SSD의 디바이스 제어의 개략 예시도이다. 도 2a와 유사하게, SSD는 애플리케이션 1, 애플리케이션 2, 및 애플리케이션 3과 같은 다수의 애플리케이션들로부터 데이터를 수신한다. 데이터는 SSD의 플래시에 저장된다. SSD에서, 애플리케이션들, 또는 도 1의 호스트 디바이스(104)와 같은 호스트는 구역들에서 데이터 배치를 제어한다. SSD의 플래시는 다양한 동일 용량 구역들로 구획(partition)된다. 구역들은 호스트 디바이스(104)가 작업부하(workload)들 또는 데이터를 특정 병렬 유닛으로 보낼 수 있는(즉, 호스트는 플래시의 블록 액세스를 가짐) 병렬 유닛들로 고려될 수 있다. 예를 들어, 애플리케이션 1과 연관된 데이터는 제1 구역에 위치되는 반면, 애플리케이션 2와 연관된 데이터는 제2 구역에 위치되고 애플리케이션 3과 연관된 데이터는 제3 구역에 위치된다. 구역 프로비저닝(zone provisioning)으로 인해, 레이턴시는 전통적인 SSD 디바이스 제어의 레이턴시로부터 감소되고, 스루풋은 전통적인 SSD 디바이스 제어의 스루풋으로부터 개선된다.
도 3은 구역 부가 커맨드의 개략 예시도이다. 도 1의 호스트 디바이스(104)와 같은 호스트는 구역을 묵시적으로 또는 명시적으로 개방한다. 호스트 디바이스(104)는 몇몇 구역 부가 커맨드들을 동일한 어드레스에 발행한다. 도 1의 데이터 저장 디바이스(106)와 같은 저장 디바이스는 호스트 디바이스(104)로부터의 데이터를 파퓨레이팅(populating)하는 것과, 데이터가 각각의 커맨드에 대하여 구역 내에 정확하게 어디에 기입되는지를 호스트 디바이스(104)에 통지하는 것을 담당한다. 도 1의 NVM(110)과 같은 NVM에 기입된 데이터의 위치는 도 1의 휘발성 메모리(112)와 같은 휘발성 메모리 및 NVM(110)에서 논리 대 물리(logical to physical)(L2P) 테이블 내에 저장된다. L2P 테이블은 사용자 데이터와 같은 데이터를 저장하는 하나 이상의 논리 블록 어드레스(logical block address)(LBA)들에 대한 포인터(pointer)들을 포함한다.
도 3에 예시된 바와 같이, 구역에서 각각의 블록은 4 K 크기이다. 용어 "블록"은 예시적인 목적들을 위하여 사용되고, 4 K 크기로 제약되지 않는다. 3개의 기입 커맨드들(즉, 3개의 구역 부가 커맨드들)은 4 K Write0, 8 K Write1, 및 16 K Write2의 순서로 데이터 저장 디바이스(106)에 의해 수신된다. 또한, 구역의 기입 포인터(write pointer)(WP)는 기입 커맨드에 대한 다음 이용 가능한 위치에 대응한다. 도 3에서, 4 K Write0는 제1 블록에 기입되고, 새로운 기입 포인터 위치는 제2 블록의 시작부(즉, 구역에서 4 K 크기 위치)이다. Write0가 제1 블록에 기입된 후에, 8 K Write1는 다음 이용 가능한 블록들에 기입되어, 다음 2개의 블록들(즉, 2개의 4 K 크기 블록들)을 점유한다. 기입 포인터는 다음 기입 커맨드에 대한 구역의 16 K 크기 위치를 반영하도록 업데이트된다. 최후의 16 K Write2 커맨드는 다음 4개의 블록들(즉, 4개의 4 K 크기 블록들)에 기입된다. 기입 포인터는 28 K의 총 구역 크기를 반영하도록 업데이트되고, 여기서, 다음 기입 커맨드는 28 K 크기 위치에 기입될 것이다. 각각의 위치에서, 호스트는 각각의 구역 부가 커맨드와 연관된 완료 메시지를 통해 구역에서 기입된 데이터의 정확한 위치로 업데이트된다. 위의 순서로 예증되었지만, 동시에 수신된 기입 커맨드들은 임의의 순서로(즉, 순서 없이) 순차적으로 기입될 수 있어서, ZNS 환경으로 인해 Write2가 구역에 Write0 이전에 기입될 수 있다.
도 4는 일 실시예에 따른 ZNS SSD에 대한 상태 다이어그램의 개략 예시도이다. 도 4에서, 다양한 구역 상태들(zone states)(ZS)은 비어 있음(즉, ZSE:Empty), 묵시적으로 개방됨(즉, ZSIO:Implicitly Opened), 명시적으로 개방됨(즉, ZSEO:Explicitly Opened), 폐쇄됨(즉, ZSC:Closed), 가득 차 있음(즉, ZSF:Full), 판독 전용(즉, ZSRO:Read Only), 및 오프라인(즉, ZSO:Offline)이다. 구역에 대한 일반적인 흐름 경로는 비어 있는 상태로부터, 묵시적으로 개방되어 있을 수 있거나 명시적으로 개방되어 있을 수 있는 개방 상태까지일 수 있다. 개방 상태로부터, 구역은 ZNS가 가득 차도록 한 용량일 수 있다. 가득 찬 상태 후에, 구역 내용들은 소거될 수 있고, 이것은 ZNS를 비어 있는 것으로 재설정한다.
도 1의 제어기(108)와 같은 제어기 파워-온 또는 재설정 이벤트 후 각각의 구역에 대한 초기 상태는 각각의 구역의 구역 특성들에 의해 결정된다. 예를 들어, 구역 상태, ZSE:Empty는 구역에의 최저 LBA(즉, 구역 시작 LBA)를 지시하는 유효한 기입 포인터(WP)에 의해 나타내어진다. 구역 상태, ZSC:Closed는 구역에서 최저 LBA를 지시하지 않는 WP에 의해 나타내어진다. 구역 상태, ZSF:Full은 가장 최근 구역 조건이 가득 차 있었을 경우에 초기 상태이다. 구역 상태, ZSRO:Read Only는 가장 최근 구역 조건이 판독 전용이었을 경우에 초기 상태이다. 구역 상태, ZSO:Offline은 가장 최근 구역 조건이 오프라인이었을 경우에 초기 상태이다.
구역들은 256 MiB 또는 512 MiB와 같은 임의의 총 용량 또는 총 크기를 가질 수 있다. 그러나, 각각의 구역의 작은 일 부분은 XOR 데이터, 메타데이터, 및 하나 이상의 제외된 소거 블록들을 저장하는 각각의 구역의 일 부분과 같이, 데이터를 기입하기 위하여 액세스불가능할 수 있지만, 여전히 판독될 수 있다. 예를 들어, 구역의 총 용량이 512 MiB일 경우에, 구역 용량(ZCAP)은 470 MiB일 수 있고, 이것은 데이터를 기입하기 위하여 이용 가능한 용량인 반면, 42 MiB는 데이터를 기입하기 위하여 이용 불가능하다. 구역의 ZCAP는 총 구역 저장 용량 또는 총 구역 저장 크기 이하이다. 도 1의 데이터 저장 디바이스(106) 또는 도 2b의 SSD와 같은 저장 디바이스는 구역 재설정 시에 각각의 구역의 ZCAP를 결정할 수 있다. 예를 들어, 도 1의 제어기(108)와 같은 제어기는 각각의 구역의 ZCAP를 결정할 수 있다. 저장 디바이스는 구역이 재설정될 때, 구역의 ZCAP를 결정할 수 있다.
구역이 비어 있을 때(즉, ZSE:Empty), 구역에는 데이터가 없고(즉, 구역에서 소거 블록들 중 어느 것도 데이터를 현재 저장하고 있지 않음), 기입 포인터(WP)는 구역 시작부 LBA(ZSLBA)(즉, WP=0)에 있다. ZSLBA는 구역의 시작부(즉, 구역의 제1 NAND 위치)를 지칭한다. 기입 포인터는 저장 디바이스의 구역에서 데이터 기입의 위치를 나타낸다. 일단 기입이 구역으로 예정되면, 또는 구역 개방 커맨드가 호스트에 의해 발행될 경우에(즉, ZSIO:Implicitly Opened 또는 ZSEO:Explicitly Opened), 비어 있는 구역은 개방 및 활성 구역으로 전환한다. 구역 관리(zone management)(ZM) 커맨드들은 둘 모두 활성 상태들인 구역 개방 및 구역 폐쇄된 상태들 사이에서 구역을 이동시키기 위하여 이용될 수 있다. 구역이 활성일 경우에, 구역은 기입될 수 있는 개방 블록들을 포함하고, 호스트는 활성 상태에서 추천된 시간의 설명을 제공받을 수 있다. 제어기(108)는 ZM(도시되지 않음)을 포함한다. 구역 메타데이터는 ZM 및/또는 제어기(108)에 저장될 수 있다.
용어 "~에 기입된"은 소거 블록에서 0 또는 더 많은 NAND 위치들 및/또는 사용자 데이터가 모든 이용 가능한 NAND 위치들을 채우지 않았을 때에 소거 블록에서 부분적으로 채워진 NAND 위치들 상에 사용자 데이터를 프로그래밍하는 것을 포함한다. NAND 위치는 도 2a 및 도 2b에서 참조된 바와 같이, 플래시 위치일 수 있다. 용어 "~에 기입된"은 내부 드라이브 필요성들((에러인 비트들이 개방 소거 블록들 상에서 더 신속하게 누적되기 때문에 개방 블록 데이터 유지 우려들)로 인해 구역을 가득 찬(즉, ZSF:Full) 것으로 이동하는 것, 그 중에서도 결함 상태를 추적하거나 탐지하기 위한 너무 많은 개방 구역들과 같은 자원 제약들로 인해, 데이터 저장 디바이스(106)가 구역을 폐쇄하거나 채우는 것, 또는 그 중에서도 드라이브로 전송하기 위한 데이터가 더 없다는 것, 컴퓨터 셧다운, 호스트 상에서의 에러 취급, 추적하기 위한 제한된 호스트 자원들과 같은 우려들에 대하여, 도 1의 호스트 디바이스(104)와 같은 호스트 디바이스가 구역을 폐쇄하는 것을 더 포함할 수 있다.
활성 구역들은 개방(즉, ZSIO:Implicitly Opened 또는 ZSEO:Explicitly Opened)될 수 있거나 폐쇄(즉, ZSC:Closed)될 수 있다. 개방 구역은, 기입될 준비가 되어 있고 현재 할당된 자원들을 가지는 비어 있거나 부분적으로 가득 찬 구역이다. 기입 커맨드 또는 구역 부가 커맨드와 함께 호스트 디바이스로부터 수신된 데이터는 이전의 데이터로 현재 채워지지 않은 개방 소거 블록으로 프로그래밍될 수 있다. 폐쇄된 구역은 지속적으로 호스트로부터 기입들을 현재 수신하고 있지 않은 비어 있는 또는 부분적으로 가득 찬 구역이다. 개방 상태로부터 폐쇄된 상태로의 구역의 이동은 제어기(108)가 자원들을 다른 태스크(task)들로 재할당하도록 한다. 이러한 태스크들은 개방되어 있는 다른 구역들, 다른 기존의 비-구역 영역들, 또는 다른 제어기 필요성들을 포함할 수 있지만, 이것으로 제한되지는 않는다.
개방 및 폐쇄된 구역들 모두에서, 기입 포인터는 ZSLBA와 구역의 최후 LBA의 종료부(즉, WP>0) 사이의 어딘가의 구역에서 장소를 지시하고 있다. 활성 구역들은 ZM에 의한 지정에 따라, 또는 기입이 구역으로 예정될 경우에, 개방 및 폐쇄된 상태들 사이에서 전환할 수 있다. 추가적으로, ZM은 구역이 비어 있는 구역으로 다시 전환하도록, 구역에 저장된 데이터를 클리어(clear)하거나 소거하기 위하여 활성 구역을 재설정할 수 있다. 일단 활성 구역이 가득 차 있으면, 구역은 가득 찬 상태로 전환한다. 가득 찬 구역은 데이터로 완전히 채워진 구역이고, 데이터를 기입하기 위한 더 많은 이용 가능한 블록들을 가지지 않는다(즉, WP=구역 용량(ZCAP)). 가득 찬 구역에서, 기입 포인터는 구역의 기입가능한 용량의 종료부를 지시한다. 가득 찬 구역들에 저장된 데이터의 판독 커맨드들은 여전히 실행될 수 있다.
ZM은 가득 찬 구역(즉, ZSF:Full)을 재설정할 수 있어서, 구역이 비어 있는 구역(즉, ZSE:Empty)으로 다시 전환하도록, 구역에 저장된 데이터의 소거를 예정할 수 있다. 가득 찬 구역이 재설정될 때, 구역은 기입될 준비가 된 비어 있는 구역으로서 표기(mark)될 수 있지만, 구역은 즉각적으로 데이터가 클리어되지 않을 수 있다. 그러나, 재설정된 구역은 개방 및 활성 구역으로 전환하기 이전에 소거되어야 한다. 구역은 ZM 재설정과 ZM 개방 사이의 임의의 시간에 소거될 수 있다. 구역을 재설정할 시에, 데이터 저장 디바이스(106)는 재설정된 구역의 새로운 ZCAP를 결정할 수 있고, 구역 메타데이터에서 기입가능한 ZCAP 속성을 업데이트할 수 있다. 오프라인 구역은 데이터를 기입하기 위하여 이용 불가능한 구역이다. 오프라인 구역은 가득 찬 상태, 비어 있는 상태, 또는 활성화되지 않는 부분적으로 가득 찬 상태에 있을 수 있다.
구역을 재설정하는 것은 구역에 저장된 모든 데이터의 소거를 클리어하거나 예정하기 때문에, 개별적인 소거 블록들의 가비지 수집(garbage collection)에 대한 필요성이 제거되어, 데이터 저장 디바이스(106)의 전체적인 가비지 수집 프로세스를 개선시킨다. 데이터 저장 디바이스(106)는 소거를 위한 하나 이상의 소거 블록들을 표기할 수 있다. 새로운 구역이 형성되려고 하고 데이터 저장 디바이스(106)가 ZM 개방을 예상할 때, 이어서, 소거를 위하여 표기된 하나 이상의 소거 블록들이 소거될 수 있다. 데이터 저장 디바이스(106)는 추가로, 소거 블록들의 소거 시에 구역의 물리적 백킹(physical backing)을 판정할 수 있고 생성할 수 있다. 따라서, 일단 새로운 구역이 개방되고 소거 블록들이 구역을 형성하도록 선택되고 있으면, 소거 블록들은 소거되었을 것이다. 게다가, 구역이 재설정될 때마다, LBA들에 대한 새로운 순서 및 구역에 대한 기입 포인터가 선택될 수 있어서, 구역이 순차적인 순서에서 벗어나서 커맨드들을 수신하는 것을 용이하게 한다. 시작 LBA가 커맨드에 대하여 나타내어지는 것이 무엇이든지, 커맨드가 기입될 수 있도록, 기입 포인터가 임의로 턴오프될 수 있다.
구역 활성 제한이 비제로(non-zero) 값일 경우에, 제어기는 ZSIO:Implicitly Opened, ZSEO:Explicitly Opened, 또는 ZSC:Closed 상태의 어느 하나인 구역을 ZSF:Full 상태로 전이시킬 수 있다. 구역이 ZSIO:Implicitly Opened 상태 또는 ZSEO:Explicitly Opened 상태로 전이될 때, 초(second) 단위인 내부 타이머가 시작되어, 호스트 디바이스(104) 또는 데이터 저장 디바이스(106)가 ZAL 값이 언제 초과되는지를 인식하도록 한다. ZAL 값 또는 타이머 제한이 초과될 경우에, 제어기(108)는 구역이 종결을 요구한다는 점(즉, 구역은 용량에 있을 필요가 있음)을 호스트 디바이스(104)에 경고할 수 있거나, 구역을 ZSF:Full 상태로 전이시킬 수 있다. 호스트 디바이스(104)가 구역이 종결을 요구한다는 점을 경고받을 때, 구역 종결 추천 필드는 1로 설정되고, 구역 정보 변경된 이벤트가 호스트 디바이스(104)로 보고된다. 구역이 ZSF:Full 상태로 전이될 때, 제어기에 의해 종결된 필드는 1로 설정되고, 구역 정보 변경된 이벤트가 호스트 디바이스(104)로 보고된다. ZAL 값은 저장 디바이스 각각의 구역에 대한 글로벌 파라미터(global parameter)이므로, 구역은 너무 조기에 폐쇄되어 최적보다 적은 저장 드라이브 동작을 허용할 수 있거나, 늦게 폐쇄되어 허용 불가능한 양의 비트 에러들이 누적되는 것을 허용할 수 있고, 이것은 데이터 저장 디바이스의 감소된 무결성으로 귀착될 수 있다. 비트 에러들의 허용 불가능한 누적은 또한, 데이터 저장 디바이스의 감소된 성능으로 귀착될 수 있다. 글로벌 ZAL 파라미터는 정적 파라미터이고, 호스트가 직면할 수 있는 조건들의 최악의 경우 추정치(worst-case estimate)를 기반으로 할 수 있다.
도 5는 일 실시예에 따른 구역 이름공간 구조(500)의 개략 예시도이다. 구역 이름공간 구조(500)는 복수의 NAND 채널들(502a 내지 502n)을 포함하고, 여기서, 각각의 NAND 채널(502a 내지 502n)은 하나 이상의 다이들(504a 내지 504n)을 포함한다. 각각의 NAND 채널(502a 내지 502n)은 전용 하드웨어(HW) 인터페이스를 가질 수 있어서, 각각의 NAND 채널(502A 내지 502n)은 다른 NAND 채널(502a 내지 502n)로부터 독립적이다. NAND 채널들(502a 내지 502n)은 플래시 인터페이스 모듈(flash interface module)(FIM) 채널들일 수 있다. 하나 이상의 다이들(504a 내지 504n) 각각은 하나 이상의 소거 블록들(508a 내지 508n)을 포함한다. 구역 이름공간 구조(500)는 하나 이상의 구역들(506a 내지 506n)을 더 포함하고, 여기서, 각각의 구역(506a 내지 506n)은 복수의 다이들 각각으로부터의 하나 이상의 소거 블록들(508a 내지 508n)을 포함한다. 일 실시예에서, 복수의 구역들 각각의 크기는 동일하다. 다른 실시예에서, 복수의 구역들 각각의 크기는 동일하지 않다. 또 다른 실시예에서, 하나 이상의 구역들의 크기는 동일하고, 나머지 하나 이상의 구역들의 크기는 동일하지 않다.
예를 들어, 제1 구역(506a)은 각각의 NAND 채널(502a 내지 502n)의 각각의 다이(504a 내지 504n)로부터의 제1 소거 블록(508a) 및 제2 소거 블록(508b)을 포함한다. 구역(506a 내지 506n)은 각각의 다이(504a 내지 504n)로부터의 2개의 소거 블록들(508a 내지 508n)을 포함할 수 있어서, 2개의 소거 블록들(508a 내지 508n)은 데이터를 판독하거나 데이터를 다이(504a 내지 504n) 및/또는 구역(506a 내지 506n)에 기입할 때에 병렬처리를 증가시킨다. 일 실시예에서, 구역은 각각의 다이로부터의 짝수 개의 소거 블록들을 포함할 수 있다. 다른 실시예에서, 구역은 각각의 다이로부터의 홀수 개의 소거 블록들을 포함할 수 있다. 또 다른 실시예에서, 구역은 하나 이상의 다이들로부터의 하나 이상의 소거 블록들을 포함할 수 있고, 여기서, 하나 이상의 소거 블록들은 하나 이상의 다이들로부터 선택되지 않을 수 있다.
또한, 구역(506a 내지 506n)에 대한 각각의 구역 부가 커맨드와 연관된 데이터 전송 크기는 NAND 병렬처리를 활용하고 NAND 특징부들에 대한 구역 부가 커맨드를 최적화하기 위한 소거 블록 또는 페이지의 크기일 수 있다. 구역 부가 커맨드와 연관된 데이터 전송 크기(예컨대, 기입 크기)가 소거 블록 또는 페이지의 크기와 같은 최소 전송 크기(예컨대, 기입 크기)보다 작을 경우에, 버퍼에서 유지된 하나 이상의 구역 부가 커맨드들이 최소 전송 크기로 취합될 때까지, 구역 부가 커맨드는 도 1의 기입 버퍼(116)와 같은 버퍼에서 유지될 수 있다. 하나 이상의 구역 부가 커맨드들을 병렬로 실행할 때, 기입 캐시 버퍼(예컨대, 기입 버퍼(116)의 크기를 최소화하기 위하여 데이터 전송은 각각의 구역 부가 커맨드와 인터리빙된다.
도 6은 ZNS 비인터리빙된 데이터 전송의 개략 예시도이다. ZNS 비인터리빙된 데이터 전송은 일정 기간 동안의 데이터 전송으로서 예시된다. 도 6에서, 4개의 구역 부가 커맨드들은 구역에 기입되도록 하기 위하여 저장 디바이스로 전송된다. 4개의 구역 부가 커맨드들 각각과 연관된 데이터의 크기는 1 MB이다. 예를 들어, 제1 구역 부가 커맨드와 연관된 데이터의 크기는 1 MB이고, 제2 구역 부가 커맨드와 연관된 데이터의 크기는 1 MB이고, 기타 등등이다.
구역 부가 커맨드들의 각각에 대한 데이터는 PCIe 버스와 같은 데이터 버스 상에서 전송되고, 여기서, 도 1의 제어기(108)와 같은 제어기는 기입될 구역 부가 커맨드들을 각각의 구역의 다이에서 각각의 위치로 큐잉(queue)한다. 데이터 버스 상에서 제1 구역 부가 커맨드에 대한 제1 데이터의 1 MB의 전송은 약 0.14 mSec가 걸릴 수 있다. 열거된 시간 값은 제한하도록 의도되는 것이 아니라, 실시예의 예를 제공하도록 의도된다. 제1 구역 부가 커맨드에 대한 제1 데이터의 전송이 완료된 후에, 제2 구역 부가 커맨드와 연관된 제2 데이터가 전송될 수 있고, 제3 구역 부가 커맨드에 대한 제3 데이터에 대하여 마찬가지일 수 있고, 기타 등등일 수 있다.
구역 부가 커맨드에 대한 데이터가 데이터 버스 상에서 전송된 후에, 데이터는 NAND 인터페이스로 전송되고 프로그래밍된다. NAND 인터페이스로의 데이터의 프로그램은 약 32 KB, 약 64 KB, 약 96 KB, 또는 열거되지 않은 임의의 다른 적절한 크기와 같은 NAND 페이지 세분화도(granularity)를 통해 발생한다. 각각의 데이터 프로그램 동작은 약 2 mSec가 걸릴 수 있고, 여기서, 1 MB의 데이터를 기입하는 것은 약 20 mSec가 걸릴 수 있다. 예를 들어, 1 MB의 데이터를 기입하기 위한 시간이 기입될 데이터를 페치하기 위한 시간(즉, 0.14 mSec)보다 훨씬 더 크다는 것을 고려한다. 기입하기 이전에, 모든 페치된 데이터는 내부적으로 캐시된다. 데이터를 페치하기 위한 시간이 데이터를 기입하기 위한 시간보다 훨씬 더 작으므로, 다량의 데이터가 캐시될 것이어서, 매우 큰 캐시 크기를 필요로 할 것이다. 이전에 페치된 커맨드와 병렬로 다음 커맨드의 실행을 시작하기 위하여, 제1 페치된 커맨드와 연관된 모든 데이터가 캐시될 때에 캐시가 가득 차게 되지 않을 것이라는 것을 보장하기 위하여, 캐시는 충분히 클 것이다. 캐시가 가득 차지 않을 경우에, 제2 커맨드가 병렬로 상이한 다이로 페치될 수 있고 프로그래밍될 수 있다. 페치하는 것과 기입하는 것 사이의 매우 큰 시간 차이로 인해, 병렬로 상이한 다이들을 프로그래밍하기 위하여 매우 큰 내부 캐시가 필요할 것이다.
도 6에서, 제어기는 각각이 상이한 다이에 대한 것인 4개의 구역 부가 커맨드들을 수신한다. 예를 들어, 제1 구역 부가 커맨드는 제1 다이 0에 대한 제1 데이터에 대한 것이고, 제2 구역 부가 커맨드는 제2 다이 1에 대한 제2 데이터에 대한 것이고, 제3 구역 부가 커맨드는 제3 다이 2에 대한 제3 데이터에 대한 것이고, 제4 구역 부가 커맨드는 제4 다이 3으로의 제4 데이터에 대한 것이다. 현재의 실시예에서, 제어기는 4개의 이용 가능한 기입 버퍼들을 가져서, 4개의 구역 부가 커맨드들과 연관된 데이터를 수신한 후에, 각각의 커맨드가 실행될 수 있다. 제5 데이터와 연관된 제5 구역 부가 커맨드가 수신될 경우에, 기입 버퍼가 자유로워질 때까지, 제5 구역 부가 커맨드가 제어기 버퍼(예컨대, 기입 캐시 버퍼)에서 큐잉된다. 그러나, 각각의 구역 부가 커맨드에 대한 데이터 크기가 1 MB이므로, 많은 구역 부가 커맨드들은 제어기 버퍼에 저장될 수 있어서, 따라서, 기입 캐시 버퍼에 대하여 요구된 크기를 증가시킬 수 있다. 기입 캐시 버퍼의 추가 크기는 비용을 증가시키고 동작을 위한 더 많은 전력을 요구한다.
도 7a 및 도 7b는 다양한 실시예들에 따른, ZNS 인터리빙된 데이터 전송을 구현하는 저장 시스템(700)을 예시한다. 저장 시스템(700)은 도 1의 저장 시스템(100)일 수 있다. 저장 시스템(700)은 데이터 버스(724)를 통해 저장 디바이스(704)에 결합된 호스트 디바이스(702)를 포함한다. 저장 디바이스(704)는 구역들로 그룹화된 복수의 소거 블록들 또는 복수의 다이들을 포함하는 ZNS 저장 디바이스이다. 저장 디바이스(704)는 도 2b의 ZNS SSD일 수 있다. 일부 실시예들에서, 저장 디바이스(704)는 도 5의 ZNS 구조(500)를 포함한다.
호스트 디바이스(702)는 호스트 부가 커맨드 큐(706)를 포함한다. 저장 디바이스(704)는 부가 기입 버퍼(708)를 포함한다. 부가 기입 버퍼(708)는 커맨드 페치(command fetch)이고, 도 1의 기입 버퍼(116)일 수 있다. 부가 기입 버퍼(708)는 저장 디바이스(704)의 제어기(710) 내에 저장될 수 있거나, 제어기(710)에 결합될 수 있다. 부가 기입 버퍼(708)는 아래에 더 상세하게 논의된 바와 같이, 호스트 디바이스(702)로부터 페치되거나 수신된 데이터의 청크들을 프로그래밍 청크들(714a 내지 714n)(프로그래밍 청크들(714)로서 집합적으로 지칭됨)로서 취합한다.
도 7a에 도시된 바와 같이, 호스트 디바이스(702)는 구역 부가 커맨드들(712a 내지 712h)(구역 부가 커맨드들(712)로서 집합적으로 지칭됨)을 호스트 부가 커맨드 큐(706)에서 큐잉한다. 8개의 구역 부가 커맨드들(712a 내지 712h)이 호스트 부가 커맨드 큐(706)에 도시되지만, 임의의 수의 구역 부가 커맨드들(712)이 임의의 시간에 호스트 부가 커맨드 큐(706)에 저장될 수 있고, 구역 부가 커맨드들(712)의 수는 제한하도록 의도되지 않는다. 구역 부가 커맨드들(712)은 예를 들어, 수 킬로바이트(Kilobyte) 내지 수 메가바이트(Megabyte)의 다양한 크기들을 가질 수 있다. 이와 같이, 하나 이상의 구역 부가 커맨드들(712)은 도 7a에 예시된 바와 같이, 상이한 크기들을 가질 수 있다.
구역 부가 커맨드들(712a 내지 712h) 각각은 구역 부가 커맨드들(712a 내지 712h)의 데이터가 어디에 저장되어야 하는지(즉, 특정 구역과 어느 소거 블록(들)이 연관되는지)를 저장 디바이스(704)에 통지하기 위하여 구역 식별정보(ID)를 포함하거나 구역 식별정보(ID)와 연관된다. 구역 ID는 도 8에서 아래에 추가로 논의된 바와 같이, 특정 구역과 연관된 블록의 시작 LBA일 수 있다. 예를 들어, 제1 구역 부가 커맨드(712a), 제2 구역 부가 커맨드(712b), 제5 구역 부가 커맨드(712e), 및 제6 구역 부가 커맨드(712f)는 제1 구역 0과 연관된, LBA 0의 구역 ID를 가진다. 제3 구역 부가 커맨드(712c) 및 제4 구역 부가 커맨드(712d)는 제5 구역 4와 연관된, LBA 2000의 구역 ID를 가진다. 제7 구역 부가 커맨드(712g) 및 제8 구역 부가 커맨드(712h)는 제3 구역 2와 연관된, LBA 1000의 구역 ID를 가진다. 이 예에서, 각각의 구역 크기는 500 LBA들로 설정되지만; 그러나, 구역들의 크기는 변동될 수 있고, 구역 크기는 제한하도록 의도되지 않는다.
저장 디바이스(704)의 제어기(710)는 구역 부가 커맨드들(712a 내지 712h)에 의해 식별된 각각의 구역에 대하여 호스트 디바이스(702)로부터 구역 부가 커맨드들(712a 내지 712h)의 데이터의 하나 이상의 일 부분들 또는 청크들을 페치한다. 일단 데이터가 호스트 디바이스(702)로부터 페치되면, 저장 디바이스(704)는 부가 기입 버퍼(708)에서 각각의 청크와 연관된 구역 ID에 따라 데이터의 하나 이상의 청크들을 프로그래밍 청크들(714a 내지 714n)로서 분류하고 취합한다. 부가 기입 버퍼(708)는 복수의 버퍼들을 포함할 수 있다. 이와 같이, 구역 ID와 연관된 각각의 구역은 프로그래밍 청크들(714)을 취합하기 위한 부가 기입 버퍼(708) 내의 개별적인 버퍼를 가질 수 있다.
구역과 연관된 데이터의 하나 이상의 청크들이 96 K의 NAND 페이지 크기와 같은 미리 결정된 프로그래밍 청크 크기로 취합될 시에, 프로그래밍 청크(714)는 도 7b에 도시된 바와 같이, 프로그래밍 청크(714)의 구역 ID에 따라 다양한 채널들(716a 내지 716n)(채널들(716)로서 집합적으로 지칭됨)을 통해 프로그래밍하기 위하여 전송된다. 채널들(716a 내지 716n)은 도 5의 NAND 또는 FIM 채널들(502a 내지 502n)일 수 있다. 각각의 채널(716)은 전용 하드웨어 인터페이스를 가질 수 있어서, 각각의 채널(716)은 다른 채널(716)로부터 독립적이다. 96 K의 NAND 페이지 크기의 프로그래밍 청크 크기가 전반에 걸쳐 참조되지만, 프로그래밍 청크는 임의의 크기를 가질 수 있고, 이와 같이, 제한하도록 의도되지 않는다. 일부 실시예들에서, 프로그래밍 청크 크기는 페이지 크기보다 크거나 작을 수 있다. 프로그래밍 청크 크기가 페이지 크기와 동일할 때, 부가 기입 버퍼(708)에 의해 병렬로 서빙(serve)될 수 있는 구역 부가 커맨드들(712)의 최대 수는 페이지 크기로 나누어진 부가 기입 버퍼(708)의 크기이다. 일부 실시예들에서, 부가 기입 버퍼(708)에 의해 병렬로 서빙될 수 있는 구역 부가 커맨드들(712)의 최대 수는 채널들(716)의 수를 초과하여 모든 채널들(716)이 병렬로 사용될 수 있도록 한다. 게다가, 3개의 채널들(716)이 도시되지만, 더 크거나 더 작은 수의 채널들(716)이 포함될 수 있고, 채널들(716)의 수는 제한하도록 의도되지 않는다. 예를 들어, 8개의 채널들, 16개의 채널들, 또는 더 많은 채널들이 있을 수 있다.
미리 결정된 프로그래밍 청크 크기로 취합된 프로그래밍 청크들(714)은 다양한 채널들(716)을 통해 복수의 다이들(718a 내지 718c)(다이들(718)로서 집합적으로 지칭됨) 상에 포함된 하나 이상의 블록들(도시되지 않음)로 프로그래밍하기 위하여 전송된다. 각각의 채널(716)은 복수의 다이들(718)에 결합되고, 각각의 다이(718)는 복수의 블록들을 포함한다. 각각의 구역은 특정 채널(716)에 결합된 복수의 다이들(718) 각각으로부터의 하나 이상의 블록들과 연관된다. 예를 들어, 도 7b에 도시된 바와 같이, 제1 구역 0은 복수의 제1 다이들(718a) 상의 제1 구역 0과 연관된 하나 이상의 블록들을 액세스하기 위하여 제1 채널 0(716a)을 사용한다. 다시 말해서, 각각의 구역은 각각의 구역과 연관된 하나 이상의 블록들을 액세스하기 위하여 복수의 다이들(718)에 결합된 개별적인 채널(716)을 사용한다. 각각의 구역은 별도의 채널(716)을 사용하므로, 하나 이상의 채널들(716)은 병렬로 이용될 수 있다. 이와 같이, 하나 이상의 구역 부가 커맨드들을 병렬로 실행하거나 프로그래밍할 때, 부가 기입 버퍼(708)의 크기를 최소화하기 위하여 데이터 전송은 각각의 구역 부가 커맨드와 인터리빙된다.
일례로서, 도 7a를 참조하면, 4 K의 제1 구역 부가 커맨드(712a), 16 K의 제2 구역 부가 커맨드(712b), 16 K의 제5 구역 부가 커맨드(712e), 및 60 K의 제6 구역 부가 커맨드(712f)의 청크는 부가 기입 버퍼(708)에서 제1 프로그래밍 청크(714a)로서 제1 구역 0에 취합된다. 제1, 제2, 및 제5 구역 부가 커맨드들(712a, 712b, 712e)은 36 K로 취합되었고, 제6 구역 부가 커맨드(712f)는 크기 128 K를 가졌으므로, 96 K의 프로그래밍 청크 크기를 충족시키기 위하여, 제6 구역 부가 커맨드(712f)의 60 K 청크만 페치된다. 일부 실시예들에서, 제어기(710)는 제6 구역 부가 커맨드(712f)의 나머지를 프로세싱하기 위하여 복귀하기 전에, 다른 구역 ID들과 연관된 구역 부가 커맨드들(712)을 프로세싱하는 것을 계속한다.
동시에, 또는제1 구역 0에 대한 96 K 프로그래밍 청크 크기에 도달할 시에, 다른 구역들을 식별하는 구역 부가 커맨드들(712)이 페치되고 취합된다. 예를 들어, 제3 구역 부가 커맨드(712c) 및 제4 구역 부가 커맨드(712d)는 부가 기입 버퍼(708)에서 제5 구역 4에 페치되고 취합될 수 있고, 제7 구역 부가 커맨드(712g) 및 제8 구역 부가 커맨드(712h)는 부가 기입 버퍼(708)에서 제3 구역 2에 페치되고 취합될 수 있다.
도 7b에 도시된 바와 같이, 일단 제1 구역 0과 연관된 데이터가 프로그래밍 청크 크기(예컨대, 96 K)로 취합되면, 저장 디바이스(704), 또는 저장 디바이스(704)의 제어기(710)는 제1 구역 0과 연관된 제1 프로그래밍 청크(714a)를 전송하여 프로그래밍되도록 한다. 제1 프로그래밍 청크(714a)는 제1 채널 0(716a)을 통해, 하나 이상의 다이들(718a) 상의 제1 구역 0과 연관된 하나 이상의 블록들로 전송된다. 저장 디바이스(704)는 도 8에 도시되고 논의된 바와 같이, 각각의 구역의 프로그래밍 청크들(714)이 프로그래밍 청크 크기를 충족시킬 시에 어느 페이지, 블록, 및/또는 다이로 전송되어야 하는지를 결정하기 위하여 다양한 표들을 사용할 수 있다.
유사하게, 제3 구역 2 및 제12 구역 11과 연관된 데이터가 각각 개별적으로 프로그래밍 청크 크기로 취합하므로, 제어기(710)는 제3 구역 2와 연관된 제3 프로그래밍 청크(714c) 및 제12 구역 11과 연관된 제5 프로그래밍 청크(714n)를 전송하여 프로그래밍되도록 한다. 제3 프로그래밍 청크(714c)는 제2 채널 1(716b)을 통해, 하나 이상의 다이들(718b) 상의 제3 구역 2와 연관된 하나 이상의 블록들로 전송된다. 제5 프로그래밍 청크(714n)는 제8 채널 7을 통해, 하나 이상의 다이들(718c) 상의 제12 구역 11과 연관된 하나 이상의 블록들로 전송된다. 이와 같이, 제1 채널 0(716a), 제2 채널 1(716b), 및 제8 채널 7은 병렬로 서빙될 수 있다. 일부 실시예들에서, 8 또는 16개의 개별적인 채널들(716)은 병렬로 서빙될 수 있다.
제1, 제3, 및 제5 프로그래밍 청크들(714a, 714c, 714n)을 프로그래밍할 시에, 제1, 제3, 및 제5 프로그래밍 청크들(714a, 714c, 714n)의 데이터는 부가 기입 버퍼(708)로부터 해제되거나 소거되어, 부가 기입 버퍼(708)가 재이용되도록 한다. 예를 들어, 제1 프로그래밍 청크(714a)를 해제할 시에, 제6 구역 부가 커맨드(712f)의 나머지 청크는 제1 구역 0과 연관된 다른 구역 부가 커맨드들(712)과 취합되도록 페치될 수 있다. 저장 디바이스(704)는 위에서 설명된 바와 같이, 제1 채널 0(716a), 제2 채널 1(716b), 및 제8 채널 7과 같은, 다수의 구역들과 연관된 다수의 채널들을(716)을 병렬로 서빙할 수 있으므로, 저장 디바이스(704)는 부가 기입 버퍼(708)를 완전히 채우는 큰 데이터 전송들(예컨대, 미리 결정된 프로그래밍 크기보다 큰 데이터 전송들)을 가질 수 있는 약간의 구역들만을 서빙하지는 않는다. 큰 데이터 전송들을 가지는 약간의 구역들만을 서빙하는 것은 몇몇 채널들(716)이 동시에 사용되는 것을 방지한다.
제3 및 제4 구역 부가 커맨드들(712c, 712d)은 32 K로 취합되므로, 저장 디바이스(704)는 제2 프로그래밍 청크(714b)를 전송하여 프로그래밍되도록 하기 전에, 제5 구역 4와 연관된 더 많은 구역 부가 커맨드들(712)을 수신하기 위하여 대기한다. 프로그래밍 청크 크기로 취합하는, 제5 구역 4와 연관된 데이터의 하나 이상의 청크들을 수신할 시에, 제어기(710)는 위에서 논의된 바와 같이, 제2 프로그래밍 청크(714b)를 전송하여 프로그래밍되도록 한다. 제5 구역 4와 연관된 구역 부가 커맨드들(712)이 약 10 밀리초(millisecond) 내지 약 100 밀리초와 같은 미리 결정된 기간 후에 더 이상 수신되지 않고, 모든 캐시 버퍼들이 점유될 경우에, 제5 구역 4와 연관된 취합된 데이터의 제2 프로그래밍 청크(714b)는 이어서, 예컨대, 제2 프로그래밍 청크(714b)를 임시 블록에, 또는 상이한 버퍼 또는 캐시에 기입함으로써 프로세싱될 수 있다. 일단 제5 구역 4와 연관된 제2 프로그래밍 청크(714b)가 프로세싱되면, 제2 프로그래밍 청크(714b)를 저장하는 버퍼는 부가 기입 버퍼(708)로부터 해제되어 다른 구역에 재이용될 수 있다.
일부 실시예들에서, 32 K의 제2 프로그래밍 청크(714b)를 임시 블록 또는 버퍼에 기입할 시에, 제어기(710)는 제5 구역 4와 연관된 다음 프로그래밍 청크(714)를 채우기 위하여 필요한 데이터의 양을 추적한다. 이와 같이, 제어기(710)는 제5 구역 4와 연관된 다음 프로그래밍 청크(714)가 프로그래밍 청크 크기에 도달하기 위하여 64 K의 데이터를 요구한다는 점을 인지하고 있다. 제5 구역 4와 연관된 하나 이상의 구역 부가 커맨드들(712)이 수신되고 프로그래밍 청크(714) 내의 64 K로 취합될 때, 제어기(710)는 제5 구역 4와 연관된 다음 프로그래밍 청크(714)를 채우기 위하여, 새롭게 수신된 64 K의 데이터를 임시 블록 또는 버퍼에 저장된 32 K의 데이터와 취합한다. 새로운 64 K의 데이터를 보유하는 프로그래밍 청크(714)는 이어서, 제5 구역 4와 연관된 채널(716)을 통해 프로그래밍하기 위하여 전송된다. 제5 구역 4와 연관된 하나 이상의 구역 부가 커맨드들(712)이 수신되지만, 제5 구역 4와 연관된 다음 프로그래밍 청크(714)를 채우기 위하여 필요한 64 K로 취합하지 못할 경우에, 충분한 구역 부가 커맨드들(712)이 프로그래밍 청크 크기를 충족시키기 위하여 수신될 때까지, 제5 구역 4와 연관된 새롭게 수신된 구역 부가 커맨드들(712)이 임시 블록 또는 버퍼에 저장될 수 있다.
구역 부가 커맨드들(712)과 연관된 구역 ID에 의해 구역 부가 커맨드들(712)의 데이터를 취합하는 것은, 구역 ID에 의해 식별된 각각의 구역이 데이터를 프로그래밍하기 위하여 상이한 채널(716)을 사용하므로, 다수의 채널들(716)을 병렬로 사용하는 인터리빙 데이터 전송을 허용한다. 다수의 채널들(716)을 병렬로 이용할 수 있는 것은, 저장 디바이스(704)가 부가 기입 버퍼(708)를 완전히 채우는 큰 데이터 전송들을 가지는 약간의 구역들만을 서빙하지 않으므로, 부가 기입 버퍼(708)에서의 저장 디바이스(704)의 병목현상을 제거한다.
도 8은 다양한 실시예들에 따른, ZNS 인터리빙된 데이터 전송을 구현할 때에 사용된 다양한 표들(820, 830, 840)을 예시한다. 표들(820, 830, 840)은 도 7a 및 도 7b의 저장 시스템(700)과 함께 사용될 수 있다. 이와 같이, 도 7a 및 도 7b의 양태들은 도 8의 설명에서 참조된다. 표들(820, 830, 840)은 각각 제어기(704)에 저장될 수 있고, 제어기(710)에 의해 관리될 수 있다. 각각의 프로그래밍 청크(714)가 프로그래밍되도록 준비될 때, 및/또는 각각의 구역 부가 커맨드(712)가 호스트 디바이스(702)로부터 수신되거나 페치될 때, 제어기(710)는 표들(820, 830, 840) 중 하나 이상을 사용할 수 있다. 제어기(710)는 표들(820, 830, 840) 중 하나 이상을 집합적으로 또는 개별적으로 사용할 수 있다.
도시된 제1 표는 구역 ID 대 블록 맵핑 표(820)이다. 구역 ID 대 블록 맵핑 표(820)는 특정한 구역의 구역 ID를 구역과 연관된 특정 채널, 다이, 및 블록들까지 추적한다. 제어기(710)는 어느 구역이 각각의 구역 부가 커맨드(712)의 구역 ID와 연관되는지를 룩업(look up)하기 위하여, 이어서, 어느 채널, 다이, 및 블록들이 식별된 구역과 연관되는지를 결정하기 위하여, 구역 ID 대 블록 맵핑 표(820)를 이용한다. 블록은 블록의 시작 LBA에 의해 식별될 수 있다.
예를 들어, 제1 구역 부가 커맨드(712a)가 페치되고, 0의 구역 ID를 가질 때, 제어기(710)는 어느 구역이 구역 ID 0과 연관되는지를 룩업하기 위하여 구역 ID 대 블록 맵핑 표(820)를 사용한다. 구역 ID 대 블록 맵핑 표(820)는 제1 구역 0이 제1 채널 0(716a), 제1 채널 0 상의 제4 다이 3(718a), 및 제4 다이 3(718a)의 제56 블록 55와 연관되는, 0의 구역 ID를 가진다는 것을 나타낸다. 유사하게, 제7 구역 부가 커맨드(712g)가 페치되고, 2의 구역 ID를 가질 때, 제어기(710)는 어느 구역이 구역 ID 2와 연관되는지를 룩업하기 위하여 구역 ID 대 블록 맵핑 표(820)를 사용한다. 구역 ID 대 블록 맵핑 표(820)는 제3 구역 2가 제2 채널 1(716b), 제2 채널 1(716b) 상의 제5 다이 4(718b), 및 제5 다이 4(718b)의 제121 블록 120과 연관되는, 2의 구역 ID를 가진다는 것을 나타낸다.
도시된 제2 표는 구역 ID 대 활성 자원 수 표(830)이다. 저장 디바이스(704)가 시스템에서 활성 구역들의 제한된 수(예컨대, 4 K)를 지원하므로, 저장 디바이스(704)는 활성 구역당 많은 파라미터들뿐만 아니라 글로벌 파라미터들을 유지할 수 있다. 글로벌 파라미터들은 활성 구역들의 총 수, 및 활성 자원 수로서 지칭될 수 있는, 동시에 개방 상태에 있도록 한(즉, 기입될 수 있는) 블록들의 수를 포함할 수 있다. 일부 블록들이 폐쇄되므로(예컨대, 데이터의 최대 용량을 현재 저장하는 블록들), 모든 블록들이 기입될 수 있는 것은 아니다. 폐쇄된 블록들은 여전히 판독될 수 있지만, 소거될 때까지 기입되어야 할 용량을 더 이상 가지지 않을 수 있다. 구역이 개방되고 그리고/또는 활성으로 될 때, 저장 디바이스(704)는 새롭게 개방된 구역을 하나 이상의 개방 블록들(예컨대, 비어 있는 블록들)과 연관시킨다. 따라서, 활성 자원 수는 각각의 구역 ID와 연관된 개방 블록의 수이다. 제어기(710)는 어느 활성 자원 또는 개방 블록이 각각의 구역 ID와 연관되는지를 룩업하기 위하여 구역 ID 대 활성 자원 수 표(830)를 이용한다. 예를 들어, 0의 구역 ID를 가지는 제1 구역 0과 연관된 활성 자원 수는 활성 자원 수 4이거나, 모든 개방 블록들의 수 중 제4 개방 블록이다.
도시된 제3 표는 활성 자원 대 LBA 오프셋 표(840)이다. 제어기(710)는 블록 내에서, 또는 특정한 구역과 연관된 활성 자원 수로부터, LBA 오프셋, 또는 기입되어야 하는 다음 LBA를 결정하기 위하여, 활성 자원 대 LBA 오프셋 표(840)를 사용한다. ZNS 시스템에서, 블록들은 블록의 시작 LBA에 의해서만 일반적으로 식별되므로, LBA 오프셋은 데이터가 블록 내에 저장되어야 하는 정밀한 위치를 식별한다. 예를 들어, 활성 자원 수 4를 가지는 제1 구역 0은 96의 LBA 오프셋을 가진다. 따라서, 제1 프로그래밍 청크(714a)의 데이터는 제1 구역 0과 연관된 제4 블록(즉, 블록 55)의 제96 LBA에 기입되어야 한다.
제어기(710)는 구역 ID 대 블록 맵핑 표(820), 구역 ID 대 활성 자원 수 표(830), 및 활성 자원 대 LBA 오프셋 표(840)를 집합적으로 이용할 수 있다. 예를 들어, 제어기(710)는 먼저, 구역과 연관된 특정 채널, 다이, 및 블록들을 식별하기 위하여 구역 ID 대 블록 맵핑 표(820)를 이용할 수 있고, 이어서, 구역의 최후의 활성 자원 수를 결정하기 위하여 구역 ID 대 활성 자원 수 표(830)를 이용할 수 있고, 이어서, 블록의 최후의 활성 자원 내에 기입되어야 하는 다음 LBA를 결정하기 위하여 활성 자원 대 LBA 오프셋 표(840)를 이용할 수 있다. 표들(820, 830, 840)은 구역 부가 커맨드(712)가 수신되거나 페치될 때마다 뿐만 아니라, 프로그래밍 청크가 전송되어 프로그래밍되도록 할 때마다 사용될 수 있다. 게다가, 표들(820, 830, 840)은 필요한 바와 같이 빈번하게 업데이트될 수 있다. 예를 들어, 프로그래밍 청크가 프로그래밍될 때마다, 활성 자원 대 LBA 오프셋 표(840)는 새로운 LBA 오프셋을 반영하도록 업데이트될 수 있다.
전체 블록보다는 페이지 크기와 동등한 데이터 청크들인 구역 부가 커맨드들의 데이터 전송을 인터리빙함으로써, 기입 캐시 버퍼 크기를 증가시키지 않으면서, 고 성능 메모리 디바이스 사용이 달성된다. 게다가, 구역 ID에 의해 데이터 청크들을 분류하고 취합함으로써, 상이한 구역들이 데이터를 프로그래밍하기 위하여 상이한 채널들을 사용하므로, 저장 디바이스는 데이터를 프로그래밍할 때에 다수의 채널들을 병렬로 이용할 수 있다. 다수의 채널들을 병렬로 이용할 수 있는 것은, 저장 디바이스가 부가 기입 버퍼를 완전히 채우는 큰 데이터 전송들을 가지는 약간의 구역들만을 서빙하지 않으므로, 부가 기입 버퍼에서 저장 디바이스의 병목현상을 제거한다.
일 실시예에서, 데이터 저장 디바이스는 복수의 메모리 다이들을 가지는 메모리 디바이스, 복수의 채널들 - 각각의 채널은 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -, 및 메모리 디바이스에 결합된 제어기를 포함한다. 제어기는 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하고, 각각의 구역 부가 커맨드에 대하여 호스트 디바이스로부터 데이터를 페치하고, 부가 기입 버퍼에서 각각의 구역 부가 커맨드와 연관된 구역 식별정보에 의해 페치된 데이터 - 페치된 데이터는 식별된 각각의 구역에 대한 별도의 프로그래밍 청크들로 취합됨 - 를 취합하고, 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에, 복수의 채널들 중 하나 이상의 채널들을 병렬로 이용하여 취합된 데이터를 메모리 디바이스에 기입하도록 구성된다.
미리 결정된 프로그래밍 청크 크기는 페이지 크기와 동일하다. 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함한다. 각각의 구역은 각각의 구역과 연관된 복수의 블록들을 액세스하기 위하여 복수의 채널들 중 별도의 채널을 사용한다. 제어기는 복수의 구역들과 연관된 복수의 블록들에 대한 구역 식별정보들의 맵핑을 관리하고, 활성 자원 수들에 대한 구역 식별정보들의 맵핑을 관리하도록 추가로 구성된다. 제어기는 복수의 구역들과 연관된 복수의 블록들에 대한 시작 논리 블록 어드레스들의 맵핑을 관리하도록 추가로 구성된다. 제어기는 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에, 각각의 구역에 대한 취합된 데이터를 복수의 메모리 다이들 중의 메모리 다이에서 임시 블록에 기입하도록 추가로 구성된다. 제어기는 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 추가 데이터를 임시 블록에 기입된 취합된 데이터와 취합하도록 추가로 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 호스트 디바이스에 결합된 인터페이스, 복수의 메모리 다이들 - 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함함 - 을 가지는 메모리 디바이스, 복수의 채널들 - 각각의 채널은 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -, 및 메모리 디바이스 및 인터페이스에 결합된 제어기 - 제어기는 부가 기입 버퍼를 포함함 - 를 포함한다. 제어기는 복수의 구역들 중 제1 구역과 연관된 제1 구역 부가 커맨드들을 수신하고, 복수의 구역들 중 제2 구역과 연관된 제2 구역 부가 커맨드들을 수신하고, 제1 프로그래밍 청크가 부가 기입 버퍼에서 미리 결정된 프로그래밍 청크 크기로 채워질 때까지 제1 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 페치하고 취합하고, 동시에, 제2 프로그래밍 청크가 부가 기입 버퍼에서 미리 결정된 프로그래밍 청크 크기로 채워질 때가지 제2 구역 부가 커맨드 데이터의 하나 이상의 제2 청크들을 페치하고 취합하고, 복수의 채널들 중 제1 채널을 이용하여 제1 프로그래밍 청크를 제1 구역과 연관된 복수의 블록들 중 제1 블록에 기입하고, 복수의 채널들 중 제2 채널을 이용하여 제2 프로그래밍 청크를 제2 구역과 연관된 복수의 블록들 중 제2 블록에 기입하도록 구성된다.
제어기는 제3 프로그래밍 청크가 부가 기입 버퍼에서 미리 결정된 프로그래밍 청크 크기로 채워질 때까지, 제1 구역 부가 커맨드 데이터의 하나 이상의 제2 청크들을 페치하고 취합하도록 추가로 구성된다. 부가 기입 버퍼로부터 해제된 후, 또는 추가의 제1 구역 부가 커맨드 데이터가 페치되도록 이용 가능하지 않을 때, 제1 구역 부가 커맨드 데이터의 하나 이상의 제2 청크들은 제1 프로그래밍 청크가 취합된다. 미리 결정된 프로그래밍 청크 크기는 페이지 크기 또는 약 96K와 동일하다. 제1 채널 및 제2 채널은 병렬로 이용된다. 제어기는 구역 식별정보를 수신된 구역 부가 커맨드들로 연관시키도록 추가로 구성된다. 제어기는 복수의 구역들과 연관된 복수의 블록들에 대한 구역 식별정보들의 맵핑을 관리하도록 추가로 구성된다. 부가 기입 버퍼에 의해 병렬로 서빙된 구역 부가 커맨드들의 최대 수는 페이지 크기로 나누어진 부가 기입 버퍼의 크기와 동일하다.
제어기는 복수의 구역들 중 제3 구역과 연관된 제3 구역 부가 커맨드들을 수신하고, 제3 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 부가 기입 버퍼에서 제3 프로그래밍 청크로서 페치하고 취합하고, 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에, 제3 프로그래밍 청크를 임시 기입 버퍼에 기입하도록 추가로 구성된다. 제어기는 제3 구역과 연관된 제4 구역 부가 커맨드들을 수신하고, 제4 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 부가 기입 버퍼에서 제4 프로그래밍 청크로서 페치하고 취합하고, 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 제3 프로그래밍 청크를 제4 프로그래밍 청크와 취합하고, 복수의 채널들 중 제3 채널을 이용하여 취합된 제3 및 제4 프로그래밍 청크들을 제3 구역과 연관된 복수의 블록들 중 제3 블록에 기입하도록 추가로 구성된다. 제어기는 제1 프로그래밍 청크를 제1 블록에 기입할 시에 기입 부가 버퍼로부터 제1 프로그래밍 청크를 해제하고, 제2 프로그래밍 청크를 제2 블록에 기입할 시에 기입 부가 버퍼로부터 제2 프로그래밍 청크를 해제하도록 추가로 구성된다.
제어기는 복수의 구역들 중 제3 구역과 연관된 제3 구역 부가 커맨드들을 수신하고, 제3 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 부가 기입 버퍼에서 제3 프로그래밍 청크로서 페치하고 취합하고, 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에, 제3 프로그래밍 청크를 임시 기입 버퍼에 기입하도록 추가로 구성된다. 제어기는 제3 구역과 연관된 제4 구역 부가 커맨드들을 수신하고, 제4 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 부가 기입 버퍼에서 제4 프로그래밍 청크로서 페치하고 취합하고, 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 제3 프로그래밍 청크를 제4 프로그래밍 청크와 취합하고, 복수의 채널들 중 제3 채널을 이용하여 취합된 제3 및 제4 프로그래밍 청크들을 제3 구역과 연관된 복수의 블록들 중 제3 블록에 기입하도록 추가로 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 복수의 메모리 다이들 - 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함함 - 을 가지는 메모리 디바이스, 복수의 채널들 - 각각의 채널은 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -, 복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하기 위한 수단, 각각의 구역 부가 커맨드에 대하여 호스트 디바이스로부터 데이터를 페치하기 위한 수단, 부가 기입 버퍼에서 각각의 구역 부가 커맨드와 연관된 구역 식별정보에 의해 페치된 데이터 - 페치된 데이터는 식별된 각각의 구역에 대한 별도의 프로그래밍 청크들로 취합됨 - 를 취합하기 위한 수단, 복수의 채널들 중 하나 이상의 채널들을 병렬로 이용하여, 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에 취합된 데이터를 메모리 디바이스에 기입하기 위한 수단, 및 각각의 구역에 대한 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에 취합된 데이터를 복수의 메모리 다이들의 메모리 다이의 임시 블록에 기입하기 위한 수단을 포함한다.
미리 결정된 프로그래밍 청크 크기는 약 96K이다. 각각의 구역은 복수의 채널들 중 별도의 채널을 사용한다. 데이터 저장 디바이스는 복수의 구역들과 연관된 복수의 블록들에 대한 구역 식별정보들의 맵핑을 관리하기 위한 수단을 더 포함한다. 데이터 저장 디바이스는 복수의 구역들과 연관된 복수의 블록들에 대한 시작 논리 블록 어드레스들의 맵핑을 관리하기 위한 수단, 및 활성 자원 수들에 대한 구역 식별정보들의 맵핑을 관리하기 위한 수단을 더 포함한다. 데이터 저장 디바이스는 일단 취합된 데이터가 메모리 디바이스에 기입되었으면, 부가 기입 버퍼로부터 취합된 데이터를 해제하기 위한 수단을 더 포함한다. 데이터 저장 디바이스는 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 추가 데이터를 임시 블록에 기입된 취합된 데이터와 취합하기 위한 수단을 더 포함한다.
상기한 것은 본 개시내용의 실시예들에 대한 것이지만, 개시내용의 다른 그리고 추가의 실시예들은 그 기본적인 범주로부터 이탈하지 않으면서 고안될 수 있고, 그 범주는 뒤따르는 청구항들에 의해 결정된다.

Claims (20)

  1. 데이터 저장 디바이스로서,
    복수의 메모리 다이들을 가지는 메모리 디바이스;
    복수의 채널들 - 각각의 채널은 상기 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -; 및
    상기 메모리 디바이스에 결합된 제어기 - 상기 제어기는 부가 기입 버퍼를 포함함 - 를 포함하고,
    상기 제어기는,
    복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하고;
    각각의 구역 부가 커맨드에 대하여 호스트 디바이스로부터 데이터를 페치하고;
    상기 부가 기입 버퍼에서 각각의 구역 부가 커맨드와 연관된 상기 구역 식별정보에 의해 상기 페치된 데이터 - 상기 페치된 데이터는 식별된 각각의 구역에 대한 별도의 프로그래밍 청크들로 취합됨 - 를 취합하고; 그리고
    각각의 구역에 대한 상기 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에, 병렬로 상기 복수의 채널들 중 하나 이상의 채널들을 이용하여 상기 취합된 데이터를 상기 메모리 디바이스에 기입하도록 구성되고,
    상기 복수의 메모리 다이들은 상기 복수의 구역들과 연관된 복수의 블록들을 포함하고, 각각의 구역은 각각의 구역과 연관된 상기 복수의 블록들을 액세스하기 위하여 상기 복수의 채널들 중 별도의 채널을 사용하는, 데이터 저장 디바이스.
  2. 제1항에 있어서, 상기 미리 결정된 프로그래밍 청크 크기는 페이지 크기와 동일한, 데이터 저장 디바이스.
  3. 제1항에 있어서, 상기 제어기는,
    상기 복수의 구역들과 연관된 상기 복수의 블록들에 대한 구역 식별정보들의 맵핑을 관리하고; 그리고
    활성 자원 수들에 대한 구역 식별정보들의 맵핑을 관리하도록 추가로 구성된, 데이터 저장 디바이스.
  4. 제1항에 있어서, 상기 제어기는 상기 복수의 구역들과 연관된 상기 복수의 블록들에 대한 시작 논리 블록 어드레스들의 맵핑을 관리하도록 추가로 구성된, 데이터 저장 디바이스.
  5. 제1항에 있어서, 상기 제어기는 상기 취합된 데이터가 상기 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에, 각각의 구역에 대한 상기 취합된 데이터를 상기 복수의 메모리 다이들 중의 메모리 다이에서의 임시 블록에 기입하도록 추가로 구성된, 데이터 저장 디바이스.
  6. 제5항에 있어서, 상기 제어기는 상기 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 추가 데이터를 상기 임시 블록에 기입된 상기 취합된 데이터와 취합하도록 추가로 구성된, 데이터 저장 디바이스.
  7. 제1항에 있어서, 상기 제어기는 상기 데이터가 각각의 구역 부가 커맨드에 대하여 상기 구역 내에 어디에 기입되는지를 상기 호스트 디바이스에 통지하도록 추가로 구성된, 데이터 저장 디바이스.
  8. 데이터 저장 디바이스로서,
    호스트 디바이스에 결합된 인터페이스;
    복수의 메모리 다이들 - 상기 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함함 - 을 가지는 메모리 디바이스;
    복수의 채널들 - 각각의 채널은 상기 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -; 및
    상기 메모리 디바이스 및 상기 인터페이스에 결합된 제어기를 포함하고,
    상기 제어기는 부가 기입 버퍼를 포함하고, 상기 제어기는,
    상기 복수의 구역들 중 제1 구역과 연관된 제1 구역 부가 커맨드들을 수신하고;
    상기 복수의 구역들 중 제2 구역과 연관된 제2 구역 부가 커맨드들을 수신하고;
    제1 프로그래밍 청크가 상기 부가 기입 버퍼에서 미리 결정된 프로그래밍 청크 크기로 채워질 때까지, 제1 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 페치하고 취합하고;
    동시에, 제2 프로그래밍 청크가 상기 부가 기입 버퍼에서 상기 미리 결정된 프로그래밍 청크 크기로 채워질 때까지, 제2 구역 부가 커맨드 데이터의 하나 이상의 제2 청크들을 페치하고 취합하고;
    상기 복수의 채널들 중 제1 채널을 이용하여 상기 제1 프로그래밍 청크를 상기 제1 구역과 연관된 상기 복수의 블록들 중 제1 블록에 기입하고; 그리고
    상기 복수의 채널들 중 제2 채널을 이용하여 상기 제2 프로그래밍 청크를 상기 제2 구역과 연관된 상기 복수의 블록들 중 제2 블록에 기입하도록 구성된, 데이터 저장 디바이스.
  9. 제8항에 있어서, 상기 제어기는 제3 프로그래밍 청크가 상기 부가 기입 버퍼에서 상기 미리 결정된 프로그래밍 청크 크기로 채워질 때까지, 상기 제1 구역 부가 커맨드 데이터의 하나 이상의 제2 청크들을 페치하고 취합하도록 추가로 구성된, 데이터 저장 디바이스.
  10. 제8항에 있어서, 상기 제1 프로그래밍 청크가 상기 부가 기입 버퍼로부터 해제된 후에, 또는 추가의 제1 구역 부가 커맨드 데이터가 페치되도록 이용 가능하지 않을 때, 상기 제1 구역 부가 커맨드 데이터의 상기 하나 이상의 제2 청크들이 취합되고, 상기 부가 기입 버퍼에 의해 병렬로 서빙된 구역 부가 커맨드들의 최대 수는 페이지 크기로 나누어진 상기 부가 기입 버퍼의 크기와 동일한, 데이터 저장 디바이스.
  11. 제8항에 있어서, 상기 미리 결정된 프로그래밍 청크 크기는 페이지 크기 또는 96 K와 동일하고, 상기 제1 채널 및 상기 제2 채널은 병렬로 이용된, 데이터 저장 디바이스.
  12. 제8항에 있어서, 상기 제어기는,
    구역 식별정보를 수신된 구역 부가 커맨드들에 연관시키고; 그리고
    상기 복수의 구역들과 연관된 상기 복수의 블록들에 대한 구역 식별정보들의 맵핑을 관리하도록 추가로 구성된, 데이터 저장 디바이스.
  13. 제8항에 있어서, 상기 제어기는,
    상기 복수의 구역들 중 제3 구역과 연관된 제3 구역 부가 커맨드들을 수신하고;
    제3 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 상기 부가 기입 버퍼에서 제3 프로그래밍 청크로서 페치하고 취합하고; 그리고
    상기 취합된 데이터가 상기 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에, 상기 제3 프로그래밍 청크를 임시 기입 버퍼에 기입하도록 추가로 구성된, 데이터 저장 디바이스.
  14. 제13항에 있어서, 상기 제어기는,
    상기 제3 구역과 연관된 제4 구역 부가 커맨드들을 수신하고;
    제4 구역 부가 커맨드 데이터의 하나 이상의 제1 청크들을 상기 부가 기입 버퍼에서 제4 프로그래밍 청크로서 페치하고 취합하고;
    상기 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 상기 제3 프로그래밍 청크를 상기 제4 프로그래밍 청크와 취합하고; 그리고
    상기 복수의 채널들 중 제3 채널을 이용하여 상기 취합된 제3 및 제4 프로그래밍 청크들을 상기 제3 구역과 연관된 상기 복수의 블록들 중 제3 블록에 기입하도록 추가로 구성된, 데이터 저장 디바이스.
  15. 제8항에 있어서, 상기 제어기는,
    상기 제1 프로그래밍 청크를 상기 제1 블록에 기입할 시에, 상기 부가 기입 버퍼로부터 상기 제1 프로그래밍 청크를 해제하고; 그리고
    상기 제2 프로그래밍 청크를 상기 제2 블록에 기입할 시에, 상기 부가 기입 버퍼로부터 상기 제2 프로그래밍 청크를 해제하도록 추가로 구성된, 데이터 저장 디바이스.
  16. 데이터 저장 디바이스로서,
    복수의 메모리 다이들 - 상기 복수의 메모리 다이들은 복수의 구역들과 연관된 복수의 블록들을 포함함 - 을 가지는 메모리 디바이스;
    복수의 채널들 - 각각의 채널은 상기 복수의 메모리 다이들 중 하나 이상의 메모리 다이들에 결합됨 -;
    복수의 구역 부가 커맨드들 - 각각의 구역 부가 커맨드는 복수의 구역들 중의 구역을 식별하는 구역 식별정보와 연관됨 - 을 수신하기 위한 수단;
    각각의 구역 부가 커맨드에 대하여 호스트 디바이스로부터 데이터를 페치하기 위한 수단;
    제어기 내에 저장된 부가 기입 버퍼에서 각각의 구역 부가 커맨드와 연관된 상기 구역 식별정보에 의해 상기 페치된 데이터 - 상기 페치된 데이터는 식별된 각각의 구역에 대한 별도의 프로그래밍 청크들로 취합됨 - 를 취합하기 위한 수단;
    상기 복수의 채널들 중 하나 이상의 채널들을 병렬로 이용하여, 각각의 구역에 대한 상기 취합된 데이터가 미리 결정된 프로그래밍 청크 크기에 도달할 시에 상기 취합된 데이터를 상기 메모리 디바이스에 기입하기 위한 수단; 및
    각각의 구역에 대한 상기 취합된 데이터가 상기 미리 결정된 프로그래밍 청크 크기에 도달하지 못할 시에, 상기 취합된 데이터를 상기 복수의 메모리 다이들 중 메모리 다이의 임시 블록에 기입하기 위한 수단을 포함하고,
    상기 복수의 메모리 다이들은 상기 복수의 구역들과 연관된 복수의 블록들을 포함하고, 각각의 구역은 각각의 구역과 연관된 상기 복수의 블록들을 액세스하기 위하여 상기 복수의 채널들 중 별도의 채널을 사용하는, 데이터 저장 디바이스.
  17. 제16항에 있어서, 상기 미리 결정된 프로그래밍 청크 크기는 96 K이고, 각각의 구역은 상기 복수의 채널들 중 별도의 채널을 사용하는, 데이터 저장 디바이스.
  18. 제16항에 있어서, 상기 복수의 구역들과 연관된 상기 복수의 블록들에 대한 구역 식별정보들의 맵핑을 관리하기 위한 수단을 더 포함하는, 데이터 저장 디바이스.
  19. 제16항에 있어서,
    상기 복수의 구역들과 연관된 상기 복수의 블록들에 대한 시작 논리 블록 어드레스들의 맵핑을 관리하기 위한 수단; 및
    활성 자원 수들에 대한 구역 식별정보들의 맵핑을 관리하기 위한 수단을 더 포함하는, 데이터 저장 디바이스.
  20. 제16항에 있어서,
    일단 상기 취합된 데이터가 상기 메모리 디바이스에 기입되었으면, 상기 부가 기입 버퍼로부터 상기 취합된 데이터를 해제하기 위한 수단; 및
    상기 미리 결정된 프로그래밍 청크 크기에 도달하기 위하여 추가 데이터를 상기 임시 블록에 기입된 상기 취합된 데이터와 취합하기 위한 수단을 더 포함하는, 데이터 저장 디바이스.
KR1020210077077A 2020-11-16 2021-06-14 Zns 드라이브에서의 데이터 취합 KR102663302B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063114397P 2020-11-16 2020-11-16
US63/114,397 2020-11-16
US17/184,154 US11599304B2 (en) 2020-11-16 2021-02-24 Data aggregation in ZNS drive
US17/184,154 2021-02-24

Publications (2)

Publication Number Publication Date
KR20220066814A KR20220066814A (ko) 2022-05-24
KR102663302B1 true KR102663302B1 (ko) 2024-05-03

Family

ID=

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060026211A1 (en) * 2004-07-30 2006-02-02 United Parcel Service Of America, Inc. Systems, methods, computer readable medium and apparatus for memory management using NVRAM
JP2017162065A (ja) * 2016-03-08 2017-09-14 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060026211A1 (en) * 2004-07-30 2006-02-02 United Parcel Service Of America, Inc. Systems, methods, computer readable medium and apparatus for memory management using NVRAM
JP2017162065A (ja) * 2016-03-08 2017-09-14 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法

Similar Documents

Publication Publication Date Title
US11126378B1 (en) Rate limit on the transitions of zones to open
US11520660B2 (en) Storage devices hiding parity swapping behavior
US11599304B2 (en) Data aggregation in ZNS drive
KR20210001898A (ko) 존 네임스페이스에 대한 존 형성
US11435914B2 (en) Dynamic ZNS open zone active limit
CN113168374A (zh) 写入命令在分区命名空间中的保持
US11500727B2 (en) ZNS parity swapping to DRAM
US11372543B2 (en) Zone-append command scheduling based on zone state
CN114730290A (zh) 将变化日志表移动至与分区对准
WO2023027782A1 (en) Purposeful super device imbalance for zns ssd efficiency
WO2023027781A1 (en) Solution for super device imbalance in zns ssd
US20210373809A1 (en) Write Data-Transfer Scheduling in ZNS Drive
US11853565B2 (en) Support higher number of active zones in ZNS SSD
US11656984B2 (en) Keeping zones open with intermediate padding
US20230075329A1 (en) Super Block Allocation Across Super Device In ZNS SSD
KR102663302B1 (ko) Zns 드라이브에서의 데이터 취합
WO2022260729A2 (en) Implied streams
WO2023196315A1 (en) Controlled system management based on storage device thermal load
WO2023027784A1 (en) Controlled imbalance in super block allocation in zns ssd