KR20220045548A - 호스트 메모리 버퍼를 사용하는 커맨드 배출 - Google Patents

호스트 메모리 버퍼를 사용하는 커맨드 배출 Download PDF

Info

Publication number
KR20220045548A
KR20220045548A KR1020210076083A KR20210076083A KR20220045548A KR 20220045548 A KR20220045548 A KR 20220045548A KR 1020210076083 A KR1020210076083 A KR 1020210076083A KR 20210076083 A KR20210076083 A KR 20210076083A KR 20220045548 A KR20220045548 A KR 20220045548A
Authority
KR
South Korea
Prior art keywords
command
storage device
data storage
data
buffer
Prior art date
Application number
KR1020210076083A
Other languages
English (en)
Other versions
KR102645982B1 (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 KR20220045548A publication Critical patent/KR20220045548A/ko
Application granted granted Critical
Publication of KR102645982B1 publication Critical patent/KR102645982B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/327Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Retry When Errors Occur (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 발명은 대체적으로 호스트 메모리 버퍼(HMB)를 사용하여 커맨드를 효율적으로 중단시키는 것에 관한 것이다. 커맨드는, 관련 컨텐츠가 위치되는 데이터 저장 디바이스 상의 다양한 위치들로 데이터 저장 디바이스를 지향시키는 포인터들을 포함한다. 일단 중단 커맨드가 수신되면, 데이터 저장 디바이스 RAM 내에 저장된 호스트 포인터들의 컨텐츠는 HMB를 가리키도록 변경된다. 이어서, 데이터 저장 디바이스는 커맨드와 연관된 인터페이스 버스를 통한 임의의 이미 시작된 트랜잭션들이 완료될 때까지 기다린다. 그 후에, 실패 완료 커맨드가 호스트 디바이스로 포스팅된다.

Description

호스트 메모리 버퍼를 사용하는 커맨드 배출{Command Draining Using Host Memory Buffer}
관련 출원의 상호 참조
본 출원은 2020년 10월 5일로 출원된 미국 가특허 출원 제63/087,737호의 이익을 주장하며, 이 출원은 본 명세서에 참고로 포함된다.
기술분야
본 발명의 실시예들은 대체적으로 호스트 메모리 버퍼(host memory buffer, HMB)를 사용하여 커맨드(command)를 효율적으로 중단시키는 것에 관한 것이다.
저장 시스템에서, 보류중인 커맨드는 때때로 호스트 디바이스에 의해 또는 데이터 저장 디바이스에 의해 중단된다. 커맨드가 중단되어야 하는 몇 가지 시나리오들이 있다. 하나의 시나리오는, 호스트 디바이스가 중단 커맨드를 발행하고, 이에 따라 호스트 디바이스가 중단되어야 하는 커맨드의 ID를 특정하고 데이터 저장 디바이스가 그에 따라 작동해야 하는 경우이다. 제2 시나리오는, 호스트 디바이스가 이전에 발행한 큐 커맨드를, 호스트 디바이스가 삭제하는 경우이다. 호스트 디바이스는 제출 또는 완료 큐를 삭제할 수 있고, 데이터 저장 디바이스는 이어서 큐를 삭제하기 전에 모든 연관된 커맨드들을 중단해야 한다.
제3 시나리오는, 데이터 저장 디바이스가 커맨드를 종료할 필요가 있을 수 있는 커맨드 타임아웃(command timeout)이다. 종료는 패리티 정보에 기초하여 데이터를 재구축하는 복원 메커니즘을 수반하는 NAND 실패로부터의 복원으로 인한 것일 수 있지만, 재구성은 오랜 시간이 걸린다. 종료는 또한 물리적 공간의 극단적인 단편화로 인해 발생할 수 있는 유지 결핍(maintenance starvation)으로 인한 것일 수 있다. 단편화는 처리량을 감소시키며, 이는 커맨드들 및 유지 동작들이 인터리빙(interleaving)되는 경우에 커맨드 타임아웃들로 이어질 수 있다. 커맨드들과 유지의 인터리빙은 대체적으로 유지 시간이 허용되지 않는 공격적인 전력 관리 동안 또는 집약적인 높은 큐 깊이 랜덤 기입 작업부하 동안 발생한다. 종료는 또한, 디바이스 내의 커맨드가 앞서 언급된 이유들로 인해 정지되는 경우에 데이터 저장 디바이스가 커맨드들을 검색하기 전에 미처리된(outstanding) 커맨드들이 타임아웃될 수 있는 매우 높은 큐 깊이로 인한 것일 수 있다.
제4 시나리오는, 데이터 저장 디바이스가 나중에 커맨드를 재큐잉(re-queueing)하도록 호스트 디바이스에 요청하면서 커맨드를 실패하는 것으로 결정하는 진보된 커맨드 재시도이다. 대체적으로, 커맨드를 중단하는 것은 간단한 흐름이 아니다. 문제는, 커맨드가 실행 단계를 이미 시작했을 때이다. 커맨드를 중단하기 전에, 데이터 저장 디바이스는 먼저 그 커맨드와 연관된 모든 태스크(task)들을 종료한 다음에만 완료 메시지를 호스트 디바이스에 발행해야 한다. 완료 메시지를 발행한 후, 데이터 저장 디바이스는 관련 호스트 메모리 버퍼(HMB)들에 액세스하지 않아야 한다.
이전에는, 커맨드를 중단하기 전에, 데이터 저장 디바이스는 먼저 보류중인 활동들을 스캔함으로써 그 커맨드와 연관된 모든 태스크들을 종료한 다음에만 완료 메시지를 호스트 디바이스에 발행한다. 대안적으로, 커맨드를 중단하기 전에, 데이터 저장 디바이스는 먼저 이미 시작된 태스크들이 완료될 때까지 기다린 다음에만 완료 메시지를 호스트 디바이스에 발행할 것이다.
따라서, 본 분야에서는 중단 커맨드들을 더 효율적으로 프로세싱할 필요가 있다.
본 발명은 대체적으로 호스트 메모리 버퍼(HMB)를 사용하여 커맨드를 효율적으로 중단시키는 것에 관한 것이다. 커맨드는, 관련 컨텐츠가 위치되는 데이터 저장 디바이스 상의 다양한 위치들로 데이터 저장 디바이스를 지향시키는 포인터들을 포함한다. 일단 중단 커맨드가 수신되면, 데이터 저장 디바이스 RAM 내에 저장된 호스트 포인터들의 컨텐츠는 HMB를 가리키도록 변경된다. 이어서, 데이터 저장 디바이스는 커맨드와 연관된 인터페이스 버스를 통한 임의의 이미 시작된 트랜잭션(transaction)들이 완료될 때까지 기다린다. 그 후에, 실패 완료(failure completion) 커맨드가 호스트 디바이스로 포스팅(posting)된다.
일 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 여기서 제어기는, 호스트 디바이스로부터 원래의 커맨드를 수신하도록; 원래의 커맨드의 실행을 시작하도록; 원래의 커맨드를 중단시키기 위한 중단 요청 커맨드를 수신하도록 - 중단 요청 커맨드는 호스트 디바이스로부터 수신되거나 데이터 저장 디바이스에 의해 생성됨 -; 데이터 저장 디바이스 내에 존재하는 원래의 커맨드의 하나 이상의 포인터들을 수정하도록; 원래의 커맨드와 연관된 데이터의 세트를 호스트 메모리 버퍼(HMB)로 배출하도록; 그리고 실패 완료 메시지를 호스트 디바이스로 반환하도록 - 실패 완료 메시지는 원래의 커맨드 포인터들을 사용하는 이미 발행된 데이터 전송들이 완료된 후에 호스트 디바이스로 반환됨 - 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 여기서 제어기는, 호스트 디바이스로부터 원래의 커맨드를 수신하도록; 진보된 커맨드 재시도(Advanced Command Retry, ACR)를 갖는 원래의 커맨드를 완료하기로 결정하도록; 원래의 커맨드와 연관된 데이터의 세트를 보유하기 위한 하나 이상의 호스트 메모리 버퍼(HMB)들을 할당하도록; 완료 메시지를 호스트 디바이스로 반환하도록 - 완료 메시지는 호스트 디바이스에게 원래의 커맨드를 재시도하도록 요청함 -; 데이터를 HMB들 내의 할당된 하나 이상의 버퍼들로 전송하면서 원래의 커맨드를 실행하도록; 호스트 디바이스로부터 재발행된 원래의 커맨드를 수신하도록; 그리고 HMB들 내의 할당된 하나 이상의 버퍼들로부터의 재발행된 원래의 커맨드에 대한 데이터를 복사하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 수단; 및 하나 이상의 메모리 수단에 결합된 제어기를 포함하고, 여기서 제어기는, 호스트 디바이스로부터 중단 커맨드 요청을 수신하도록; 중단 커맨드 요청과 연관된 일련의 데이터를 보유하기 위한 제1 호스트 메모리 버퍼(HMB) 및 제2 HMB를 할당하도록 - 제1 HMB는 중단 커맨드 요청과 연관된 일련의 데이터를 배출하도록 구성되고; 제2 HMB는 배출 버퍼를 가리키도록 구성됨 -; 그리고 완료 메시지를 호스트 디바이스로 반환하도록 구성된다.
상기에 언급된 본 발명의 특징들이 상세히 이해될 수 있는 방식으로, 상기에 간략하게 요약된 본 발명의 보다 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 이들 실시예 중 일부가 첨부 도면에 예시되어 있다. 그러나, 첨부 도면은 단지 본 발명의 전형적인 실시예들을 도시하는 것이므로 본 발명의 범주를 제한하는 것으로 간주되지 않아야 한다는 것에 유의해야 하는데, 이는 본 발명이 다른 균등하게 유효한 실시예들을 허용할 수 있기 때문이다.
도 1은 일 실시예에 따른, 데이터 저장 디바이스가 호스트 디바이스를 위한 저장 디바이스로서 기능할 수 있는 저장 시스템을 예시하는 개략적인 블록도이다.
도 2는 중단 요청의 개략도이다.
도 3은 일 실시예에 따른, 중단 요청 프로세스를 예시하는 흐름도이다.
도 4는 일 실시예에 따른, 중단 요청을 프로세싱하는 타이밍도이다.
도 5는 NVMe(non-volatile memory express) 표준에 설명된 물리적 영역 페이지(physical region page, PRP) 목록의 개략도이다.
도 6은 일 실시예에 따른, 커맨드 배출에 사용되는 2개의 호스트 메모리 버퍼(HMB)들의 개략도이다.
도 7은 일 실시예에 따른, 진보된 커맨드 재시도(ACR)를 예시하는 흐름도이다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지시하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
하기에서, 본 발명의 실시예들을 참조한다. 그러나, 본 발명은 설명된 특정 실시예들로 제한되지 않는다는 것이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합이, 상이한 실시예들과 관련되든지 또는 그렇지 않든지 간에, 본 발명을 구현하고 실시하기 위해 고려된다. 게다가, 본 발명의 실시예가 다른 가능한 해법들에 비해 그리고/또는 종래 기술에 비해 이점을 달성할 수 있지만, 특정 이점이 주어진 실시예에 의해 달성되는지 여부는 본 발명의 제한이 아니다. 따라서, 하기의 태양들, 특징들, 실시예들, 및 이점들은 단지 예시적인 것이며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한으로 간주되지 않는다. 마찬가지로, "본 발명"에 대한 언급은 본 명세서에 개시되는 임의의 발명의 주제의 일반화로서 해석되어서는 안되며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한인 것으로 간주되어서는 안된다.
본 발명은 대체적으로 호스트 메모리 버퍼(HMB)를 사용하여 커맨드를 효율적으로 중단시키는 것에 관한 것이다. 커맨드는, 관련 컨텐츠가 위치되는 데이터 저장 디바이스 상의 다양한 위치들로 데이터 저장 디바이스를 지향시키는 포인터들을 포함한다. 일단 중단 커맨드가 수신되면, 데이터 저장 디바이스 RAM 내에 저장된 호스트 포인터들의 컨텐츠는 HMB를 가리키도록 변경된다. 이어서, 데이터 저장 디바이스는 커맨드와 연관된 인터페이스 버스를 통한 임의의 이미 시작된 트랜잭션들이 완료될 때까지 기다린다. 그 후에, 실패 완료 커맨드가 호스트 디바이스로 포스팅된다.
도 1은 개시된 실시예들에 따른, 데이터 저장 디바이스(106)가 호스트 디바이스(104)를 위한 저장 디바이스로서 기능할 수 있는 저장 시스템(100)을 예시하는 개략적인 블록도이다. 예를 들어, 호스트 디바이스(104)는 데이터 저장 디바이스(106)에 포함된 비휘발성 메모리(non-volatile memory, NVM)(110)를 활용하여 데이터를 저장 및 검색할 수 있다. 호스트 디바이스(104)는 호스트 DRAM(138)을 포함하는데, 여기서 호스트 DRAM(138)의 일부분이 호스트 메모리 버퍼(HMB)(140)로서 할당된다. HMB(140)는 데이터 저장 디바이스(106)에 의한 추가적인 작업 영역 또는 추가적인 저장 영역으로서 데이터 저장 디바이스(106)에 의해 사용될 수 있다. 일부 예들에서, HMB(140)는 호스트 디바이스에 의해 액세스 불가능할 수 있다. 일부 예들에서, 저장 시스템(100)은 저장 어레이로서 동작할 수 있는, 데이터 저장 디바이스(106)와 같은, 복수의 저장 디바이스들을 포함할 수 있다. 예를 들어, 저장 시스템(100)은 호스트 디바이스(104)를 위한 대용량 저장 디바이스로서 집합적으로 기능하는 저가/독립 디스크들(RAID)의 중복 어레이로서 구성된 복수의 데이터 저장 디바이스들(106)을 포함할 수 있다.
호스트 디바이스(104)는 데이터 저장 디바이스(106)와 같은 하나 이상의 저장 디바이스들에 그리고/또는 그로부터 데이터를 저장 및/또는 검색할 수 있다. 도 1에 예시된 바와 같이, 호스트 디바이스(104)는 인터페이스(114)를 통해 데이터 저장 디바이스(106)와 통신할 수 있다. 호스트 디바이스(104)는 컴퓨터 서버, NAS(network attached storage) 유닛, 데스크톱 컴퓨터, 노트북(즉, 랩톱) 컴퓨터, 태블릿 컴퓨터, 셋톱 박스, 전화 핸드셋, 예컨대 소위 "스마트" 폰, 소위 "스마트" 패드, 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게임 콘솔, 비디오 스트리밍 디바이스, 또는 데이터 저장 디바이스로부터의 데이터를 전송 또는 수신할 수 있는 다른 디바이스들을 포함한, 광범위한 디바이스들 중 임의의 것을 포함할 수 있다.
데이터 저장 디바이스(106)는 제어기(108), NVM(110), 전력 공급부(111), 휘발성 메모리(112), 인터페이스(114), 및 기입 버퍼(116)를 포함한다. 일부 예들에서, 데이터 저장 디바이스(106)는 명료함을 위해 도 1에 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다. 예를 들어, 데이터 저장 디바이스(106)는, 데이터 저장 디바이스(106)의 컴포넌트들이 그에 기계적으로 부착되고, 데이터 저장 디바이스(106)의 컴포넌트들 등을 전기적으로 상호접속하는 전기 전도성 트레이스(trace)들을 포함하는 인쇄 회로 기판(printed circuit board, PCB)을 포함할 수 있다. 일부 예들에서, 데이터 저장 디바이스(106)의 물리적 치수들 및 커넥터(connector) 구성들은 하나 이상의 표준 폼 팩터를 따를 수 있다. 일부 예시적인 표준 폼 팩터들은 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)로부터 전력을 수신할 수 있다.
NVM(110)은 복수의 메모리 디바이스 또는 메모리 유닛을 포함할 수 있다. NVM(110)은 데이터를 저장 및/또는 검색하도록 구성될 수 있다. 예를 들어, NVM(110)의 메모리 유닛은 데이터, 및 데이터를 저장하라고 메모리 유닛에게 지시하는 제어기(108)로부터의 메시지를 수신할 수 있다. 유사하게, NVM(110)의 메모리 유닛은 데이터를 검색하라고 메모리 유닛에게 지시하는 제어기(108)로부터의 메시지를 수신할 수 있다. 일부 예들에서, 메모리 유닛들 각각은 다이(die)로 지칭될 수 있다. 일부 예들에서, 단일 물리 칩이 복수의 다이들(즉, 복수의 메모리 유닛들)을 포함할 수 있다. 일부 예들에서, 각각의 메모리 유닛은 비교적 많은 양의 데이터(예를 들어, 128 MB, 256 MB, 512 MB, 1 GB, 2 GB, 4 GB, 8 GB, 16 GB, 32 GB, 64 GB, 128 GB, 256 GB, 512 GB, 1 TB 등)를 저장하도록 구성될 수 있다.
일부 예들에서, NVM(110)의 각각의 메모리 유닛은 플래시 메모리 디바이스들, PCM(phase-change memory) 디바이스들, ReRAM(resistive random-access memory) 디바이스들, MRAM(magnetoresistive random-access memory) 디바이스들, F-RAM(ferroelectric random-access memory), 홀로그래픽 메모리 디바이스들, 및 임의의 다른 유형의 비휘발성 메모리 디바이스들과 같은 임의의 유형의 비휘발성 메모리 디바이스들을 포함할 수 있다.
NVM(110)은 복수의 플래시 메모리 디바이스 또는 메모리 유닛을 포함할 수 있다. NVM 플래시 메모리 디바이스들은 NAND 또는 NOR 기반 플래시 메모리 디바이스들을 포함할 수 있고, 각각의 플래시 메모리 셀에 대한 트랜지스터의 플로팅 게이트에 포함된 전하에 기초하여 데이터를 저장할 수 있다. NVM 플래시 메모리 디바이스들에서, 플래시 메모리 디바이스는 복수의 다이들로 분할될 수 있으며, 여기서 복수의 다이들 중의 각각의 다이는 복수의 블록들을 포함하고, 복수의 블록들은 복수의 페이지들로 추가로 분할될 수 있다. 특정 메모리 디바이스 내의 복수의 블록들 중의 각각의 블록은 복수의 NVM 셀들을 포함할 수 있다. NVM 셀들의 행(row)들은 워드 라인을 이용하여 전기적으로 접속되어 복수의 페이지들 중 소정 페이지를 정의할 수 있다. 복수의 페이지들 각각 내의 각자의 셀들은 각자의 비트 라인들에 전기적으로 접속될 수 있다. 또한, NVM 플래시 메모리 디바이스들은 2D 또는 3D 디바이스들일 수 있고, 싱글 레벨 셀(single level cell, SLC), 멀티-레벨 셀(multi-level cell, MLC), 트리플 레벨 셀(triple level cell, TLC), 또는 쿼드 레벨 셀(quad level cell, QLC)일 수 있다. 제어기(108)는 페이지 레벨에서 NVM 플래시 메모리 디바이스들에 데이터를 기입하고 그로부터 데이터를 판독하고, 블록 레벨에서 NVM 플래시 메모리 디바이스들로부터 데이터를 소거할 수 있다.
데이터 저장 디바이스(106)는 데이터 저장 디바이스(106)의 하나 이상의 컴포넌트에 전력을 제공할 수 있는 전력 공급부(111)를 포함한다. 표준 모드에서 동작할 때, 전력 공급부(111)는 호스트 디바이스(104)와 같은 외부 디바이스에 의해 제공되는 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 예를 들어, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 수신된 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 일부 예들에서, 전력 공급부(111)는 셧다운 모드에서 동작할 때, 예컨대 외부 디바이스로부터의 전력 수신이 중단되는 경우 하나 이상의 컴포넌트에 전력을 제공하도록 구성된 하나 이상의 전력 저장 컴포넌트를 포함할 수 있다. 이러한 방식으로, 전력 공급부(111)는 온보드(onboard) 백업 전원으로서 기능할 수 있다. 하나 이상의 전력 저장 컴포넌트의 일부 예들은 커패시터(capacitor)들, 수퍼 커패시터들, 배터리들 등을 포함하지만, 이들로 제한되지 않는다. 일부 예들에서, 하나 이상의 전력 저장 컴포넌트에 의해 저장될 수 있는 전력의 양은 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기(예를 들어, 면적/체적)의 함수일 수 있다. 다시 말해서, 하나 이상의 전력 저장 컴포넌트에 의해 저장되는 전력의 양이 증가함에 따라, 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기가 또한 증가한다.
데이터 저장 디바이스(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)는 NVM(110)으로부터의 데이터의 판독 및/또는 그에의 데이터의 기입을 관리할 수 있다. 일부 실시예들에서, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 NVM(110)에 데이터를 저장하기 위한 데이터 저장 커맨드를 개시하고 데이터 저장 커맨드의 진행을 모니터링할 수 있다. 제어기(108)는 저장 시스템(100)의 적어도 하나의 동작 특성을 결정하고 적어도 하나의 동작 특성을 NVM(110)에 저장할 수 있다. 일부 실시예들에서, 데이터 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 NVM(110)로 데이터를 전송하기 전에 기입 커맨드와 연관된 데이터를 내부 메모리 또는 기입 버퍼(116)에 임시로 저장한다. 일부 다른 실시예들에서, HMB(140)가 활용될 수 있다.
도 2는 중단 요청의 개략도이다. 도 2의 태양들은 도 1의 저장 시스템(100)과 유사할 수 있다. 예를 들어, 호스트(220)는 호스트 디바이스(104)일 수 있고, 제어기(202)는 제어기(108)일 수 있고, NVM(222)은 NVM(110)일 수 있다. 도 1의 데이터 저장 디바이스(106)와 같은 데이터 저장 디바이스의 동작 동안, 호스트 생성 판독 커맨드 또는 호스트 생성 기입 커맨드와 같은 보류중인 커맨드가 호스트(220) 또는 제어기(202) 중 어느 하나에 의해 중단될 수 있다. 중단 커맨드는 호스트(220)에 의해 또는 제어기(202)에 의해 발행될 수 있다. 예를 들어, 중단 커맨드는 제어기(202)의 메인 프로세서(204)에 의해 생성될 수 있으며, 여기서 메인 프로세서(204)는 제어기(202)의 하나 이상의 프로세서들(206a 내지 206n)에 중단 커맨드를 전송한다.
중단 커맨드가 하나 이상의 프로세서들(206a 내지 206n)에 의해 수신될 때, 하나 이상의 프로세서들은 보류중인 커맨드들을 스캔함으로써 중단 커맨드와 연관된 모든 태스크들을 종료하거나 또는 아직 시작되지 않은 모든 보류중인 커맨드들을 종료하기를 기다릴 수 있으며, 여기서 시작된 보류중인 커맨드들은 모든 다른 보류중인 커맨드들을 종료하기 전에 완료되도록 허용된다. 관련 보류중인 커맨드들을 종료한 후, 완료 메시지가 호스트(220)에게 발행된다.
도 2에 관련하여, 메인 프로세서(204)는 하나 이상의 프로세서들(206a 내지 206n)에게 중단 커맨드 요청을 발행한다. 하나 이상의 프로세서들(206a 내지 206n)은 하드웨어(HW) 가속기들(208)을 활용하여 각각의 보류중인 커맨드를 스캔하고 관련 보류중인 커맨드들을 종료한다. 관련 보류중인 커맨드들을 종료한 후에, 하나 이상의 프로세서들은, 중단 커맨드가 데이터 저장 디바이스에 의해 개시된 경우, 실패 완료 메시지일 수 있는 완료 메시지를 데이터 경로(210)로 포스팅하며, 여기서 데이터 경로(210)는 완료 메시지를 호스트(220)로 송신한다.
정규 동작에서, 데이터 경로(210)가 활용되어, 직접 메모리 액세스(direct memory access, DMA) 모듈들(212)을 활용함으로써 NVM(222)로 그리고 그로부터 데이터를 전송하고, 에러 정정 코드(error correction code, ECC) 엔진(218)을 사용하여 에러 정정 코드(ECC)를 인코딩/디코딩하고, 보안 엔진(214)에 의해 보안 프로토콜들을 생성하고, RAID 모듈(216)에 의한 데이터의 저장을 관리할 수 있다. 중단 커맨드 동작은, 완료 메시지 또는 실패 완료 메시지를 호스트(220)에 포스팅하기 전에 높은 레이턴시(latency)를 가질 수 있다. 높은 레이턴시 때문에, 데이터 저장 디바이스의 버퍼 및 자원들은 비효율적으로 활용될 수 있다. 또한, 소정 경우의 중단 커맨드 동작들은 별도로 수행되어야 하거나, 또는 소정 경우의 중단 커맨드 동작들을 완료하기 위한 별도의 절차를 가질 수 있다.
도 3은 일 실시예에 따른, 중단 요청 프로세스(300)를 예시하는 흐름도이다. 블록(302)에서, 중단 요청 또는 중단 커맨드가 도 2의 하나 이상의 프로세서들(206a 내지 206n)과 같은 하나 이상의 프로세서들에 의해 수신되며, 여기서 하나 이상의 프로세서들은 도 2의 제어기(202)와 같은 제어기의 컴포넌트일 수 있다. 일부 실시예들에서, 중단 요청은 호스트(220)와 같은 호스트에 의해 생성되고, 데이터 버스를 통해 제어기에 전송될 수 있다. 다른 실시예들에서, 중단 요청은 도 2의 메인 프로세서(204)와 같은 메인 프로세서에 의해 생성될 수 있으며, 여기서 메인 프로세서는 하나 이상의 프로세서들 중 관련 프로세서로 중단 요청을 전송한다.
블록(304)에서, 제어기는 커맨드의 내부 복사본 내에 존재하는 버퍼 포인터들의 컨텐츠를 수정한다. 커맨드의 내부 복사본은 데이터 저장 디바이스의 DRAM과 같은 휘발성 메모리 내에 저장된 커맨드일 수 있다. 버퍼 포인터들은 도 1의 HMB(140)와 같은 HMB를 가리키고 있을 수 있다. 일부 실시예들에서, HMB는 2개의 4 KB HMB 버퍼들을 포함한다. 이전에 열거된 값들은 제한하도록 의도되지 않으며, 가능한 실시예의 예를 제공한다. 블록(306)에서, 제어기는 모든 현재 전송들이 완료되었는지 여부를 결정한다. 현재 전송들은, 실행되었지만 아직 완료되지 않은 커맨드들일 수 있다. 현재 전송들이 아직 완료되지 않은 경우, 제어기는 현재 전송들이 완료되기를 기다린다. 그러나, 블록(306)에서 현재 전송들이 완료되면, 블록(308)에서, 제어기는 완료 메시지 또는 실패 완료 메시지를 호스트 디바이스에 포스팅한다.
도 4는 일 실시예에 따른, 중단 요청을 프로세싱하는 타이밍도이다. 도 4의 태양들은 도 3에 설명된 것들과 유사할 수 있다. 시간(1)에서, 도 1의 호스트 디바이스(104)와 같은 호스트 디바이스가 도 1의 데이터 저장 디바이스(106)와 같은 데이터 저장 디바이스로 커맨드를 발행한다. 커맨드는 판독 커맨드, 기입 커맨드 등일 수 있다. 호스트가 데이터 저장 디바이스에 커맨드를 발행하고 나서 약간의 시간 후에, 시간(2)과 같은 전송 레이턴시들 등으로 인해, 도 2의 제어기(202)와 같은 제어기는 데이터 전송 동작을 개시한다.
데이터 전송 동작이 실행되는 동안, 데이터 저장 디바이스는 시간(3)에서 중단 커맨드를 수신한다. 일 실시예에서, 중단 커맨드는 호스트 디바이스에 의해 생성될 수 있다. 다른 실시예에서, 중단 커맨드는 데이터 저장 디바이스에 의해 생성될 수 있으며, 여기서, 중단 커맨드는 도 2의 메인 프로세서(204)와 같은 메인 프로세서 또는 제어기에 의해 생성된다. 시간(4)에서, 데이터 저장 디바이스는 데이터 저장 디바이스 내에 존재하는 중단 커맨드와 연관된 하나 이상의 포인터들을 수정한다.
시간(5)에서, 데이터 저장 디바이스는 실패 완료 메시지를 호스트 디바이스로 전송하며, 이는 시간(2)에서의 데이터 전송 동작 후에 발생한다. 시간(6)에서, 데이터 전송 동작이 정지되었고 데이터 저장 디바이스는 중단 요청 커맨드와 연관된 데이터의 세트를 도 1의 HMB(140)와 같은 HMB로 배출한다. 일부 실시예들에서, 데이터의 세트의 배출은 실패 완료 메시지를 호스트에 포스팅하기 전에 시작된다. 다른 실시예들에서, 실패 완료 메시지는 HMB 동작으로의 데이터 전송이 중단되기 전에 포스팅된다.
도 5는 NVMe 표준에 설명된 PRP 목록의 개략도이다. 커맨드(502)는 제1 PRP1(504) 및 제2 PRP2(506)와 같은 복수의 물리적 영역 페이지(PRP) 포인터들을 포함하며, 여기서 각각의 PRP 포인터는 복수의 버퍼들 중 한 버퍼를 가리킨다. 복수의 버퍼들은 도 1의 HMB(140)와 같은 HMB의 일부분일 수 있다. 또한, 도 5에서, 각각의 페이지, 즉 페이지 0(518), 페이지 1(520), 페이지 2(522), 및 페이지 3(524)은 상이한 버퍼를 표현한다. 일례에서, 버퍼들 각각은 약 4 K와 같은 커맨드 또는 더미 커맨드의 크기로 정렬된 크기를 가질 수 있다. 더미 커맨드는 HMB 내의 버퍼들의 크기의 파라미터들을 설정하기 위한 데이터 저장 디바이스 생성 커맨드일 수 있다. 제1 PRP1(504) 및 제2 PRP2(506)는 "xx"의 오프셋을 포함하며, 여기서 오프셋은 헤더와 같은 일정 위치로부터의 포인터 오프셋이다. 각각의 PRP 포인터는 버퍼를 가리키는 포인터 또는 엔트리들의 목록을 가리키는 포인터 중 어느 하나일 수 있다.
예를 들어, 제1 PRP1(504)은 제1의 페이지 0(518)을 가리키는 제1 포인터(526)를 포함한다. 제2 PRP2(506)는 PRP 목록(508)의 제1 엔트리, 즉 PRP 엔트리 0(510)을 가리키는 제2 포인터(528)를 포함한다. PRP 목록(508)은 PRP 목록(508)이 버퍼의 크기로 정렬되도록 0의 오프셋을 갖는다. 예를 들어, 제1의 PRP 엔트리 0(510)은 제2의 페이지 1(520)을 가리키는 제3 포인터(530)를 포함하고, 제2의 PRP 엔트리 1(512)은 제3의 페이지 2(522)를 가리키는 제4 포인터(532)를 포함하고, 제3의 PRP 엔트리 2(514)는 제4의 페이지 3(524)을 가리키는 제5 포인터(534)를 포함한다. PRP 목록(508)의 마지막 엔트리는 후속하는 또는 새로운 PRP 목록을 가리키는 포인터를 포함할 수 있다.
도 6은 일 실시예에 따른, 커맨드 배출에 사용되는 2개의 호스트 메모리 버퍼(HMB)들의 개략도이다. NVMe 커맨드(602)는 제어기에 의해 수신된 커맨드들의 저장된 복사본이며, 여기서 NVMe 커맨드(602)는 데이터 저장 디바이스의 휘발성 메모리 또는 비휘발성 메모리 내에 저장될 수 있다. 제1 PRP1(604a)은 도 5의 제1 PRP(504)일 수 있고, 제2 PRP2(604b)는 도 5의 제2 PRP(506)일 수 있다. 제1 PRP1(604a)의 값은 제1 HMB 버퍼(606a)를 가리키도록 오버라이팅(overwriting)된다. 제2 PRP2(604b)는 제2 HMB 버퍼(606b)를 가리킨다.
HMB(140)와 같은 HMB는 제1 HMB 버퍼(606a) 및 제2 HMB 버퍼(606b)를 포함한다. 제1 HMB 버퍼(606a) 및 제2 HMB 버퍼(606b)는 약 4 KB의 크기를 가질 수 있다. 제1 HMB 버퍼(606a)는 배출 버퍼로서 활용될 수 있으며, 여기서 중단 커맨드와 연관된 데이터는 판독 동작들 및 기입 동작들 둘 모두 내에서 배출되거나 전송될 것이다. 제2 HMB 버퍼(606b)는 복수의 버퍼들(608a 내지 608n)의 목록이다.
제2 HMB 버퍼(606b)는 초기화 단계에서 도 1의 데이터 저장 디바이스(106)와 같은 데이터 저장 디바이스의 도 2의 제어기(202)와 같은 제어기에 의해 초기화될 수 있다. 초기화 단계는, 전력이 데이터 저장 디바이스에 공급될 때와 같은 데이터 저장 디바이스의 웨이크 업(wake up) 동작들 동안일 수 있다. 제2 HMB 버퍼(606b)의 복수의 버퍼들(608a 내지 608n)의 각각의 포인터는 제1 HMB 버퍼(606a)를 가리킨다. 또한, 마지막 포인터(608n)가 후속하는 또는 다음 버퍼 목록을 가리키기 보다는, 마지막 포인터(608n)는 동일한 HMB 버퍼의 제1 버퍼(608a)를 가리킨다. 제2 HMB 버퍼(606b)의 각각의 포인터가 제1 HMB 버퍼(606a)를 가리키고, 제2 HMB 버퍼(606b)의 마지막 버퍼(608n)의 포인터가 제1 버퍼(608a)를 가리키고, 제1 PRP1의 포인터가 제1 HMB 버퍼(606a)를 가리킴으로써, 판독 동작들 또는 기입 동작들과 연관된 관련 데이터는 중단 커맨드가 수신될 때 제1 HMB 버퍼(606a)로 배출될 것이다.
도 7은 일 실시예에 따른, 진보된 커맨드 재시도(ACR)를 예시하는 흐름도(700)이다. 데이터 저장 디바이스가 ACR 요청을 포함하는 커맨드를 수신할 때, 하나 이상의 HMB들이 커맨드의 데이터의 세트를 보유하기 위해 할당될 수 있다. 실패한 커맨드가 ACR을 가질 때, 도 1의 호스트 디바이스(104)와 같은 호스트에는 실패한 커맨드가 통지되고, 호스트는 약 10 초와 같은 지연 후에 커맨드 버퍼 내에 실패한 커맨드를 재큐잉할 수 있다. 지연 시간들은 식별 제어기 커맨드(identify controller command)를 통해 도 1의 데이터 저장 디바이스(104)와 같은 데이터 저장 디바이스에 의해 공개될 수 있다.
도 1의 호스트 DRAM(138)과 같은 호스트 버퍼 내에 실패한 커맨드와 연관된 데이터를 재큐잉하기보다는, 실패한 커맨드와 연관된 데이터는 데이터 저장 디바이스에 의해 도 1의 호스트 HMB(140)와 같은 호스트 HMB 내에 큐잉된다. 흐름도(700)는 커맨드에 대한 ACR 요청이 수신되는 블록(702)에서 개시된다. 블록(704)에서, HMB 버퍼들이 할당된다. HMB 버퍼들은 도 6의 제1 HMB 버퍼(606a)와 같은 제1 HMB 버퍼, 및 도 6의 제2 HMB 버퍼(606b)와 같은 제2 HMB 버퍼를 포함하며, 여기서 제1 HMB 버퍼는 배출 버퍼이고 제2 HMB 버퍼는 제1 HMB 버퍼를 가리키는 버퍼 포인터들의 목록이다.
블록(706)에서, 포인터들의 내부 버전들(즉, PRP1 및 PRP2)은 할당된 HMB 버퍼들을 가리키도록 수정된다. 예를 들어, PRP1 포인터는 제1 HMB 버퍼를 가리킬 수 있고, PRP2 포인터는 제2 HMB 버퍼를 가리킬 수 있다. 블록(708)에서, 제어기는 연관된 타깃 호스트 버퍼를 갖는 이미 시작된 커맨드들에 대한 모든 현재 전송들이 완료되었는지 여부를 결정한다. 현재 전송들이 아직 완료되지 않은 경우, 제어기는 커맨드들이 완료되기를 기다린다.
블록(710)에서, 모든 현재 커맨드들이 완료된 후에, 제어기는 실패한 커맨드에 대한 ACR 표시를 갖는 실패 완료 메시지를 호스트로 포스팅한다. 블록(712)에서, 하나 이상의 HMB들에 액세스하여, 실패한 커맨드의 데이터가 하나 이상의 HMB들의 위치로 전송된다. 일련의 전송들의 표현은 호스트 디바이스의 인터페이스 상에서 발행되며, 여기서 일련의 전송들은 하나 이상의 HMB들 내에 저장된다. HMB 버퍼들에 액세스할 때, 실패한 커맨드와 연관된 데이터는 제1 HMB 버퍼(즉, 배출 HMB 버퍼)로 전송된다. 블록(714)에서, 호스트 디바이스는 커맨드를 데이터 저장 디바이스에 재큐잉하며, 여기서 재큐잉된 커맨드는 실패한 원래의 커맨드이다. 블록(716)에서, 재큐잉된 커맨드와 연관된 데이터는 HMB, 또는, 일부 실시예들에서는, 하나 이상의 HMB들 내의 관련 위치로부터 호스트 버퍼로 복사된다. 재큐잉된 커맨드는 호스트 버퍼 내에 저장된 데이터를 활용하여 제어기에 의해 실행된다.
커맨드 포인터들의 컨텐츠를 변경함으로써, 중단 커맨드들이 훨씬 더 효율적으로 프로세싱되어, 저장 디바이스 성능을 개선시킬 수 있다. 오늘날 존재하는 복잡하고 높은 레이턴시 흐름들에 비해 어떠한 레이턴시도 갖지 않으면서 간단한 방식으로 커맨드를 중단하는 것은 효율을 개선시킨다. 추가적으로, ACR 실패 커맨드에 대한 캐시 버퍼로서 HMB를 사용하는 것은 프로세싱 속도를 높인다.
일 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 여기서 제어기는, 호스트 디바이스로부터 원래의 커맨드를 수신하도록; 원래의 커맨드의 실행을 시작하도록; 원래의 커맨드를 중단시키기 위한 중단 요청 커맨드를 수신하도록 - 중단 요청 커맨드는 호스트 디바이스로부터 수신되거나 데이터 저장 디바이스에 의해 생성됨 -; 데이터 저장 디바이스 내에 존재하는 원래의 커맨드의 하나 이상의 포인터들을 수정하도록; 원래의 커맨드와 연관된 데이터의 세트를 호스트 메모리 버퍼(HMB)로 배출하도록; 그리고 실패 완료 메시지를 호스트 디바이스로 반환하도록 - 실패 완료 메시지는 원래의 커맨드 포인터들을 사용하는 이미 발행된 데이터 전송들이 완료된 후에 호스트 디바이스로 반환됨 - 구성된다. 제어기는, 중단 요청을 수신한 후에 원래의 커맨드와 연관된 데이터 전송을 계속 프로세싱하도록 추가로 구성된다. 데이터 전송을 프로세싱하는 것은 하나 이상의 포인터들을 수정하는 것을 완료한 후에 계속된다. 데이터의 세트를 배출하는 것은, 실패 완료 메시지가 반환된 후에 발생하거나, 실패 완료 메시지가 반환되기 전에 시작되거나, 또는 이들의 조합이다. 실패 완료 메시지는, 원래의 커맨드와 연관된 데이터 전송이 여전히 프로세싱되고 있는 동안 전달되며, 여기서 실패 완료 메시지가 전달된 후에 발생하는 데이터 전송은 수정된 하나 이상의 포인터들을 활용한다. 데이터의 세트를 배출하는 것은 각각의 포인터가 배출 버퍼를 가리키게 하는 것을 포함한다. 마지막 포인터는 마지막 포인터가 존재하는 동일한 버퍼 목록을 가리킨다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 여기서 제어기는, 호스트 디바이스로부터 원래의 커맨드를 수신하도록; 진보된 커맨드 재시도(ACR)를 갖는 원래의 커맨드를 완료하기로 결정하도록; 원래의 커맨드와 연관된 데이터의 세트를 보유하기 위한 하나 이상의 호스트 메모리 버퍼(HMB)들을 할당하도록; ACR 표시를 갖는 완료 메시지를 호스트 디바이스로 반환하도록 - 완료 메시지는 호스트 디바이스에게 원래의 커맨드를 재시도하도록 요청함 -; 데이터를 HMB들 내의 할당된 하나 이상의 버퍼들로 전송하면서 원래의 커맨드를 실행하도록; 호스트 디바이스로부터 재발행된 원래의 커맨드를 수신하도록; 그리고 HMB들 내의 할당된 하나 이상의 버퍼들로부터의 재발행된 원래의 커맨드에 대한 데이터를 복사하도록 구성된다. 제어기가 완료 메시지를 호스트 디바이스로 반환할 때: 데이터의 표현은 호스트 디바이스의 인터페이스 상에서 발행되고; 데이터는 HMB들 내에 저장되며, 여기서 HMB들은 데이터를 배출하는 데 사용되지 않고, 여기서 HMB들은, 데이터 저장 디바이스가 데이터를 검색하기 위한 커맨드를 호스트 디바이스로부터 수신할 시에 HMB로부터의 데이터를 호스트 디바이스로 복사할 수 있는 것을 보장하도록 데이터를 보유하기에 충분한 크기의 복수의 버퍼들을 포함한다. 제어기는 호스트 디바이스로부터 원래의 커맨드의 재발행 커맨드를 수신하도록 추가로 구성된다. 제어기는 하나 이상의 HMB들로부터의 데이터를 복사하도록 추가로 구성된다. 복사하는 것은 재발행 커맨드를 위해 하나 이상의 HMB들로부터 호스트 버퍼로의 일련의 전송들을 복사하는 것을 포함한다. 제어기는 완료 메시지를 반환하기 전에 이미 시작된 원래의 커맨드와 연관된 현재 전송들을 완료하기를 기다리도록 구성되며, 여기서 제어기가 완료 메시지를 반환한 후에, 데이터 저장 디바이스는 원래의 커맨드를 갖는 원래의 버퍼들에 액세스하지 않으며, 여기서 제어기가 완료 메시지를 반환한 후에, 데이터 저장 디바이스는 하나 이상의 HMB들에 액세스할 수 있다. 기다리는 동안 그리고 완료 메시지를 반환하기 전에, 데이터 저장 디바이스는 원래의 버퍼들 및 하나 이상의 HMB들에 동시에 액세스할 수 있다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 수단; 및 하나 이상의 메모리 수단에 결합된 제어기를 포함하고, 여기서 제어기는, 호스트 디바이스로부터 중단 커맨드 요청을 수신하도록; 중단 커맨드 요청과 연관된 일련의 데이터를 보유하기 위한 제1 호스트 메모리 버퍼(HMB) 및 제2 HMB를 할당하도록 - 제1 HMB는 중단 커맨드 요청과 연관된 일련의 데이터를 배출하도록 구성되고; 제2 HMB는 배출 버퍼를 가리키도록 구성됨 -; 그리고 완료 메시지를 호스트 디바이스로 반환하도록 구성된다. 제1 HMB는 배출 버퍼이다. 중단 커맨드와 연관된 데이터는 판독 및 기입 동작들 내에서 배출 버퍼로 배출된다. 제2 HMB는 버퍼 포인터 목록을 포함하도록 구성된다. 버퍼 포인터 목록 내의 마지막 포인터를 제외한 모두는 배출 버퍼를 가리킨다. 버퍼 포인터 목록 내의 마지막 포인터는 버퍼 포인터 목록 내의 상이한 포인터를 가리킨다.
전술한 것은 본 발명의 실시예들에 관한 것이지만, 본 발명의 다른 및 추가 실시예들이 본 발명의 기본 범주로부터 벗어남이 없이 고안될 수 있으며, 본 발명의 그 범주는 후속하는 청구범위에 의해 결정된다.

Claims (20)

  1. 데이터 저장 디바이스로서,
    하나 이상의 메모리 디바이스들; 및
    상기 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 상기 제어기는,
    호스트 디바이스로부터 원래의 커맨드(command)를 수신하도록;
    상기 원래의 커맨드의 실행을 시작하도록;
    상기 원래의 커맨드를 중단시키기 위한 중단 요청 커맨드를 수신하도록 - 상기 중단 요청 커맨드는 호스트 디바이스로부터 수신되거나 상기 데이터 저장 디바이스에 의해 생성됨 -;
    상기 데이터 저장 디바이스 내에 존재하는 상기 원래의 커맨드의 하나 이상의 포인터들을 수정하도록;
    상기 원래의 커맨드와 연관된 데이터의 세트를 호스트 메모리 버퍼(host memory buffer, HMB)로 배출하도록; 그리고
    실패 완료(failure completion) 메시지를 상기 호스트 디바이스로 반환하도록 - 상기 실패 완료 메시지는 원래의 커맨드 포인터들을 사용하는 이미 발행된 데이터 전송들이 완료된 후에 상기 호스트 디바이스로 반환됨 - 구성되는, 데이터 저장 디바이스.
  2. 제1항에 있어서, 상기 제어기는, 상기 중단 요청을 수신한 후에 상기 원래의 커맨드와 연관된 데이터 전송을 계속 프로세싱하도록 추가로 구성되는, 데이터 저장 디바이스.
  3. 제2항에 있어서, 상기 데이터 전송을 프로세싱하는 것은 상기 하나 이상의 포인터들을 수정하는 것을 완료한 후에 계속되는, 데이터 저장 디바이스.
  4. 제1항에 있어서, 상기 데이터의 세트를 배출하는 것은, 상기 실패 완료 메시지가 반환된 후에 발생하거나, 상기 실패 완료 메시지가 반환되기 전에 시작되거나, 또는 이들의 조합인, 데이터 저장 디바이스.
  5. 제1항에 있어서, 상기 실패 완료 메시지는, 상기 원래의 커맨드와 연관된 데이터 전송이 여전히 프로세싱되고 있는 동안 전달되며, 상기 실패 완료 메시지가 전달된 후에 발생하는 상기 데이터 전송은 상기 수정된 하나 이상의 포인터들을 활용하는, 데이터 저장 디바이스.
  6. 제1항에 있어서, 상기 데이터의 세트를 배출하는 것은 각각의 포인터가 배출 버퍼를 가리키게 하는 것을 포함하는, 데이터 저장 디바이스.
  7. 제6항에 있어서, 마지막 포인터는 상기 마지막 포인터가 존재하는 동일한 버퍼 목록을 가리키는, 데이터 저장 디바이스.
  8. 데이터 저장 디바이스로서,
    하나 이상의 메모리 디바이스들; 및
    상기 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 상기 제어기는,
    호스트 디바이스로부터 원래의 커맨드를 수신하도록;
    진보된 커맨드 재시도(Advanced Command Retry, ACR)를 갖는 원래의 커맨드를 완료하기로 결정하도록;
    상기 원래의 커맨드와 연관된 데이터의 세트를 보유하기 위한 호스트 메모리 버퍼(HMB)들 내의 하나 이상의 버퍼들을 할당하도록;
    ACR 표시를 갖는 완료 메시지를 상기 호스트 디바이스로 반환하도록 - 상기 완료 메시지는 상기 호스트 디바이스에게 상기 원래의 커맨드를 재시도하도록 요청함 -;
    데이터를 HMB들 내의 상기 할당된 하나 이상의 버퍼들로 전송하면서 상기 원래의 커맨드를 실행하도록;
    상기 호스트 디바이스로부터 재발행된 원래의 커맨드를 수신하도록; 그리고
    HMB들 내의 상기 할당된 하나 이상의 버퍼들로부터의 상기 재발행된 원래의 커맨드에 대한 데이터를 복사하도록 구성되는, 데이터 저장 디바이스.
  9. 제8항에 있어서, 상기 제어기가 상기 완료 메시지를 상기 호스트 디바이스로 반환할 때,
    상기 데이터의 표현은 상기 호스트 디바이스의 인터페이스 상에서 발행되고;
    상기 데이터는 HMB들 내에 저장되며, 상기 HMB들은 데이터를 배출하는 데 사용되지 않고, 상기 HMB들은, 상기 데이터 저장 디바이스가 상기 데이터를 검색하기 위한 커맨드를 상기 호스트 디바이스로부터 수신할 시에 상기 HMB로부터의 데이터를 상기 호스트 디바이스로 복사할 수 있는 것을 보장하도록 데이터를 유지하기에 충분한 크기의 복수의 버퍼들을 포함하는, 데이터 저장 디바이스.
  10. 제8항에 있어서, 상기 제어기는,
    상기 호스트 디바이스로부터 상기 원래의 커맨드의 재발행 커맨드를 수신하도록 추가로 구성되는, 데이터 저장 디바이스.
  11. 제10항에 있어서, 상기 제어기는 상기 하나 이상의 HMB들로부터의 데이터를 복사하도록 추가로 구성되는, 데이터 저장 디바이스.
  12. 제11항에 있어서, 상기 복사하는 것은 상기 재발행 커맨드를 위해 상기 하나 이상의 HMB들로부터의 상기 데이터를 호스트 버퍼로 복사하는 것을 포함하는, 데이터 저장 디바이스.
  13. 제8항에 있어서, 상기 제어기는 상기 완료 메시지를 반환하기 전에 이미 시작된 상기 원래의 커맨드와 연관된 현재 전송들을 완료하기를 기다리도록 구성되며, 상기 제어기가 상기 완료 메시지를 반환한 후에, 상기 데이터 저장 디바이스는 원래의 커맨드를 갖는 원래의 버퍼들에 액세스하지 않으며, 상기 제어기가 상기 완료 메시지를 반환한 후에, 상기 데이터 저장 디바이스는 상기 하나 이상의 HMB들에 액세스할 수 있는, 데이터 저장 디바이스.
  14. 제13항에 있어서, 상기 기다리는 동안 그리고 상기 완료 메시지를 반환하기 전에, 상기 데이터 저장 디바이스는 상기 원래의 버퍼들 및 상기 하나 이상의 HMB들에 동시에 액세스할 수 있는, 데이터 저장 디바이스.
  15. 데이터 저장 디바이스로서,
    하나 이상의 메모리 수단; 및
    상기 하나 이상의 메모리 수단에 결합된 제어기를 포함하고, 상기 제어기는,
    호스트 디바이스로부터 중단 커맨드 요청을 수신하도록;
    상기 중단 커맨드 요청과 연관된 일련의 데이터를 보유하기 위한 제1 호스트 메모리 버퍼(HMB) 및 제2 HMB를 할당하도록 -
    상기 제1 HMB는 상기 중단 커맨드 요청과 연관된 일련의 데이터를 배출하도록 구성되고;
    상기 제2 HMB는 배출 버퍼를 가리키도록 구성됨 -; 그리고
    완료 메시지를 상기 호스트 디바이스로 반환하도록 구성되는, 데이터 저장 디바이스.
  16. 제15항에 있어서, 상기 제1 HMB는 상기 배출 버퍼인, 데이터 저장 디바이스.
  17. 제15항에 있어서, 상기 중단 커맨드와 연관된 데이터는 판독 및 기입 동작들 내에서 상기 배출 버퍼로 배출되는, 데이터 저장 디바이스.
  18. 제15항에 있어서, 상기 제2 HMB는 버퍼 포인터 목록을 포함하도록 구성되는, 데이터 저장 디바이스.
  19. 제18항에 있어서, 상기 버퍼 포인터 목록 내의 마지막 포인터를 제외한 모두는 상기 배출 버퍼를 가리키는, 데이터 저장 디바이스.
  20. 제19항에 있어서, 상기 버퍼 포인터 목록 내의 상기 마지막 포인터는 상기 버퍼 포인터 목록 내의 상이한 포인터를 가리키는, 데이터 저장 디바이스.
KR1020210076083A 2020-10-05 2021-06-11 호스트 메모리 버퍼를 사용하는 커맨드 배출 KR102645982B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063087737P 2020-10-05 2020-10-05
US63/087,737 2020-10-05
US17/184,527 US11500589B2 (en) 2020-10-05 2021-02-24 Command draining using host memory buffer
US17/184,527 2021-02-24

Publications (2)

Publication Number Publication Date
KR20220045548A true KR20220045548A (ko) 2022-04-12
KR102645982B1 KR102645982B1 (ko) 2024-03-08

Family

ID=80738159

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210076083A KR102645982B1 (ko) 2020-10-05 2021-06-11 호스트 메모리 버퍼를 사용하는 커맨드 배출

Country Status (4)

Country Link
US (2) US11500589B2 (ko)
KR (1) KR102645982B1 (ko)
CN (1) CN114385235A (ko)
DE (1) DE102021114458A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022071543A (ja) * 2020-10-28 2022-05-16 キヤノン株式会社 制御装置および制御装置の制御方法
US11941298B2 (en) * 2021-05-11 2024-03-26 Mediatek Inc. Abort handling by host controller for storage device
US11809742B2 (en) * 2021-09-20 2023-11-07 Western Digital Technologies, Inc. Recovery from HMB loss
US11914900B2 (en) 2022-05-31 2024-02-27 Western Digital Technologies, Inc. Storage system and method for early command cancelation
TWI831474B (zh) * 2022-11-15 2024-02-01 瑞昱半導體股份有限公司 電子裝置以及控制方法用以管理封包緩衝的可用指標

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160034187A1 (en) * 2014-07-31 2016-02-04 Sandisk Technologies Inc. Storage Module and Method for Virtual Abort
US20180018101A1 (en) * 2016-07-13 2018-01-18 Sandisk Technologies Llc Methods, systems, and computer readable media for write classification and aggregation using host memory buffer (hmb)
US20190250850A1 (en) * 2018-02-15 2019-08-15 Western Digital Technologies, Inc. Replacement data buffer pointers

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4603382A (en) * 1984-02-27 1986-07-29 International Business Machines Corporation Dynamic buffer reallocation
US6694390B1 (en) * 2000-09-11 2004-02-17 Intel Corporation Managing bus transaction dependencies
US7752340B1 (en) 2006-03-31 2010-07-06 Emc Corporation Atomic command retry in a data storage system
WO2009060500A1 (ja) * 2007-11-07 2009-05-14 Fujitsu Limited 媒体記憶装置のリード/ライト処理方法及び媒体記憶装置
US20130179614A1 (en) 2012-01-10 2013-07-11 Diarmuid P. Ross Command Abort to Reduce Latency in Flash Memory Access
CN104657145B (zh) * 2015-03-09 2017-12-15 上海兆芯集成电路有限公司 用于微处理器的重发停靠的系统和方法
US9996262B1 (en) 2015-11-09 2018-06-12 Seagate Technology Llc Method and apparatus to abort a command
US10725677B2 (en) * 2016-02-19 2020-07-28 Sandisk Technologies Llc Systems and methods for efficient power state transitions
US10521305B2 (en) * 2016-04-29 2019-12-31 Toshiba Memory Corporation Holdup time measurement for solid state drives
US10642536B2 (en) 2018-03-06 2020-05-05 Western Digital Technologies, Inc. Non-volatile storage system with host side command injection
KR102599188B1 (ko) * 2018-11-09 2023-11-08 삼성전자주식회사 호스트 메모리를 사용하는 스토리지 장치 및 그것의 동작 방법
US11861217B2 (en) * 2020-10-05 2024-01-02 Western Digital Technologies, Inc. DRAM-less SSD with command draining
US20220113901A1 (en) * 2020-10-12 2022-04-14 Qualcomm Incorporated Read optional and write optional commands

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160034187A1 (en) * 2014-07-31 2016-02-04 Sandisk Technologies Inc. Storage Module and Method for Virtual Abort
US20180018101A1 (en) * 2016-07-13 2018-01-18 Sandisk Technologies Llc Methods, systems, and computer readable media for write classification and aggregation using host memory buffer (hmb)
US20190250850A1 (en) * 2018-02-15 2019-08-15 Western Digital Technologies, Inc. Replacement data buffer pointers

Also Published As

Publication number Publication date
CN114385235A (zh) 2022-04-22
US11954369B2 (en) 2024-04-09
US20230051007A1 (en) 2023-02-16
KR102645982B1 (ko) 2024-03-08
DE102021114458A1 (de) 2022-04-07
US20220107758A1 (en) 2022-04-07
US11500589B2 (en) 2022-11-15

Similar Documents

Publication Publication Date Title
KR102645982B1 (ko) 호스트 메모리 버퍼를 사용하는 커맨드 배출
US11861217B2 (en) DRAM-less SSD with command draining
US9971515B2 (en) Incremental background media scan
US11204833B1 (en) NVM endurance group controller using shared resource architecture
US11513736B2 (en) Revised host command generation for unaligned access
US11853571B2 (en) Storage devices hiding parity swapping behavior
US11733920B2 (en) NVMe simple copy command support using dummy virtual function
US20230297277A1 (en) Combining Operations During Reset
US11640253B2 (en) Method to use flat relink table in HMB
US11726715B2 (en) Efficient data path in compare command execution
US20230214254A1 (en) PCIe TLP Size And Alignment Management
US11640335B2 (en) Multiple function level reset management
US20240143512A1 (en) Write buffer linking for easy cache reads
US11934693B2 (en) Detection of scattered data locations
US11853554B2 (en) Aligned and unaligned data deallocation
US11966631B2 (en) Command queue order adjustment in a data storage device
US11645009B2 (en) Data storage with improved read parallelism
US11561735B2 (en) Latency on indirect admin commands
US20240143228A1 (en) Fast execution of barrier command
US20230342308A1 (en) Reducing Link Up Time In PCIe Systems
US20240086108A1 (en) Parallel fragmented sgl fetching for hiding host turnaround time
US20230289226A1 (en) Instant Submission Queue Release
US20230176777A1 (en) Immediate Partial Host Buffer Fetching
US20240143508A1 (en) Ats pri support with implicit cache

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