KR20220045548A - 호스트 메모리 버퍼를 사용하는 커맨드 배출 - Google Patents
호스트 메모리 버퍼를 사용하는 커맨드 배출 Download PDFInfo
- 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
Links
- 239000000872 buffer Substances 0.000 title claims abstract description 114
- 238000013500 data storage Methods 0.000 claims abstract description 115
- 238000012546 transfer Methods 0.000 claims description 27
- 238000000034 method Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 13
- 101150101414 PRP1 gene Proteins 0.000 description 8
- 101100368710 Rattus norvegicus Tacstd2 gene Proteins 0.000 description 8
- 101100342406 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) PRS1 gene Proteins 0.000 description 8
- 101000907912 Homo sapiens Pre-mRNA-splicing factor ATP-dependent RNA helicase DHX16 Proteins 0.000 description 7
- 101000798532 Homo sapiens Transmembrane protein 171 Proteins 0.000 description 7
- 102100023390 Pre-mRNA-splicing factor ATP-dependent RNA helicase DHX16 Human genes 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 102100034452 Alternative prion protein Human genes 0.000 description 1
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 1
- 208000033748 Device issues Diseases 0.000 description 1
- 102100036725 Epithelial discoidin domain-containing receptor 1 Human genes 0.000 description 1
- 101710131668 Epithelial discoidin domain-containing receptor 1 Proteins 0.000 description 1
- 101000740685 Homo sapiens C4b-binding protein alpha chain Proteins 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 208000000283 familial pityriasis rubra pilaris Diseases 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 235000003642 hunger Nutrition 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- COCAUCFPFHUGAA-MGNBDDOMSA-N n-[3-[(1s,7s)-5-amino-4-thia-6-azabicyclo[5.1.0]oct-5-en-7-yl]-4-fluorophenyl]-5-chloropyridine-2-carboxamide Chemical compound C=1C=C(F)C([C@@]23N=C(SCC[C@@H]2C3)N)=CC=1NC(=O)C1=CC=C(Cl)C=N1 COCAUCFPFHUGAA-MGNBDDOMSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000037351 starvation Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/327—Address 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
관련 출원의 상호 참조
본 출원은 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)를 예시하는 흐름도이다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지시하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
도 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)
- 데이터 저장 디바이스로서,
하나 이상의 메모리 디바이스들; 및
상기 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 상기 제어기는,
호스트 디바이스로부터 원래의 커맨드(command)를 수신하도록;
상기 원래의 커맨드의 실행을 시작하도록;
상기 원래의 커맨드를 중단시키기 위한 중단 요청 커맨드를 수신하도록 - 상기 중단 요청 커맨드는 호스트 디바이스로부터 수신되거나 상기 데이터 저장 디바이스에 의해 생성됨 -;
상기 데이터 저장 디바이스 내에 존재하는 상기 원래의 커맨드의 하나 이상의 포인터들을 수정하도록;
상기 원래의 커맨드와 연관된 데이터의 세트를 호스트 메모리 버퍼(host memory buffer, HMB)로 배출하도록; 그리고
실패 완료(failure completion) 메시지를 상기 호스트 디바이스로 반환하도록 - 상기 실패 완료 메시지는 원래의 커맨드 포인터들을 사용하는 이미 발행된 데이터 전송들이 완료된 후에 상기 호스트 디바이스로 반환됨 - 구성되는, 데이터 저장 디바이스. - 제1항에 있어서, 상기 제어기는, 상기 중단 요청을 수신한 후에 상기 원래의 커맨드와 연관된 데이터 전송을 계속 프로세싱하도록 추가로 구성되는, 데이터 저장 디바이스.
- 제2항에 있어서, 상기 데이터 전송을 프로세싱하는 것은 상기 하나 이상의 포인터들을 수정하는 것을 완료한 후에 계속되는, 데이터 저장 디바이스.
- 제1항에 있어서, 상기 데이터의 세트를 배출하는 것은, 상기 실패 완료 메시지가 반환된 후에 발생하거나, 상기 실패 완료 메시지가 반환되기 전에 시작되거나, 또는 이들의 조합인, 데이터 저장 디바이스.
- 제1항에 있어서, 상기 실패 완료 메시지는, 상기 원래의 커맨드와 연관된 데이터 전송이 여전히 프로세싱되고 있는 동안 전달되며, 상기 실패 완료 메시지가 전달된 후에 발생하는 상기 데이터 전송은 상기 수정된 하나 이상의 포인터들을 활용하는, 데이터 저장 디바이스.
- 제1항에 있어서, 상기 데이터의 세트를 배출하는 것은 각각의 포인터가 배출 버퍼를 가리키게 하는 것을 포함하는, 데이터 저장 디바이스.
- 제6항에 있어서, 마지막 포인터는 상기 마지막 포인터가 존재하는 동일한 버퍼 목록을 가리키는, 데이터 저장 디바이스.
- 데이터 저장 디바이스로서,
하나 이상의 메모리 디바이스들; 및
상기 하나 이상의 메모리 디바이스들에 결합된 제어기를 포함하고, 상기 제어기는,
호스트 디바이스로부터 원래의 커맨드를 수신하도록;
진보된 커맨드 재시도(Advanced Command Retry, ACR)를 갖는 원래의 커맨드를 완료하기로 결정하도록;
상기 원래의 커맨드와 연관된 데이터의 세트를 보유하기 위한 호스트 메모리 버퍼(HMB)들 내의 하나 이상의 버퍼들을 할당하도록;
ACR 표시를 갖는 완료 메시지를 상기 호스트 디바이스로 반환하도록 - 상기 완료 메시지는 상기 호스트 디바이스에게 상기 원래의 커맨드를 재시도하도록 요청함 -;
데이터를 HMB들 내의 상기 할당된 하나 이상의 버퍼들로 전송하면서 상기 원래의 커맨드를 실행하도록;
상기 호스트 디바이스로부터 재발행된 원래의 커맨드를 수신하도록; 그리고
HMB들 내의 상기 할당된 하나 이상의 버퍼들로부터의 상기 재발행된 원래의 커맨드에 대한 데이터를 복사하도록 구성되는, 데이터 저장 디바이스. - 제8항에 있어서, 상기 제어기가 상기 완료 메시지를 상기 호스트 디바이스로 반환할 때,
상기 데이터의 표현은 상기 호스트 디바이스의 인터페이스 상에서 발행되고;
상기 데이터는 HMB들 내에 저장되며, 상기 HMB들은 데이터를 배출하는 데 사용되지 않고, 상기 HMB들은, 상기 데이터 저장 디바이스가 상기 데이터를 검색하기 위한 커맨드를 상기 호스트 디바이스로부터 수신할 시에 상기 HMB로부터의 데이터를 상기 호스트 디바이스로 복사할 수 있는 것을 보장하도록 데이터를 유지하기에 충분한 크기의 복수의 버퍼들을 포함하는, 데이터 저장 디바이스. - 제8항에 있어서, 상기 제어기는,
상기 호스트 디바이스로부터 상기 원래의 커맨드의 재발행 커맨드를 수신하도록 추가로 구성되는, 데이터 저장 디바이스. - 제10항에 있어서, 상기 제어기는 상기 하나 이상의 HMB들로부터의 데이터를 복사하도록 추가로 구성되는, 데이터 저장 디바이스.
- 제11항에 있어서, 상기 복사하는 것은 상기 재발행 커맨드를 위해 상기 하나 이상의 HMB들로부터의 상기 데이터를 호스트 버퍼로 복사하는 것을 포함하는, 데이터 저장 디바이스.
- 제8항에 있어서, 상기 제어기는 상기 완료 메시지를 반환하기 전에 이미 시작된 상기 원래의 커맨드와 연관된 현재 전송들을 완료하기를 기다리도록 구성되며, 상기 제어기가 상기 완료 메시지를 반환한 후에, 상기 데이터 저장 디바이스는 원래의 커맨드를 갖는 원래의 버퍼들에 액세스하지 않으며, 상기 제어기가 상기 완료 메시지를 반환한 후에, 상기 데이터 저장 디바이스는 상기 하나 이상의 HMB들에 액세스할 수 있는, 데이터 저장 디바이스.
- 제13항에 있어서, 상기 기다리는 동안 그리고 상기 완료 메시지를 반환하기 전에, 상기 데이터 저장 디바이스는 상기 원래의 버퍼들 및 상기 하나 이상의 HMB들에 동시에 액세스할 수 있는, 데이터 저장 디바이스.
- 데이터 저장 디바이스로서,
하나 이상의 메모리 수단; 및
상기 하나 이상의 메모리 수단에 결합된 제어기를 포함하고, 상기 제어기는,
호스트 디바이스로부터 중단 커맨드 요청을 수신하도록;
상기 중단 커맨드 요청과 연관된 일련의 데이터를 보유하기 위한 제1 호스트 메모리 버퍼(HMB) 및 제2 HMB를 할당하도록 -
상기 제1 HMB는 상기 중단 커맨드 요청과 연관된 일련의 데이터를 배출하도록 구성되고;
상기 제2 HMB는 배출 버퍼를 가리키도록 구성됨 -; 그리고
완료 메시지를 상기 호스트 디바이스로 반환하도록 구성되는, 데이터 저장 디바이스. - 제15항에 있어서, 상기 제1 HMB는 상기 배출 버퍼인, 데이터 저장 디바이스.
- 제15항에 있어서, 상기 중단 커맨드와 연관된 데이터는 판독 및 기입 동작들 내에서 상기 배출 버퍼로 배출되는, 데이터 저장 디바이스.
- 제15항에 있어서, 상기 제2 HMB는 버퍼 포인터 목록을 포함하도록 구성되는, 데이터 저장 디바이스.
- 제18항에 있어서, 상기 버퍼 포인터 목록 내의 마지막 포인터를 제외한 모두는 상기 배출 버퍼를 가리키는, 데이터 저장 디바이스.
- 제19항에 있어서, 상기 버퍼 포인터 목록 내의 상기 마지막 포인터는 상기 버퍼 포인터 목록 내의 상이한 포인터를 가리키는, 데이터 저장 디바이스.
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)
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)
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)
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 |
-
2021
- 2021-02-24 US US17/184,527 patent/US11500589B2/en active Active
- 2021-06-04 DE DE102021114458.2A patent/DE102021114458A1/de active Pending
- 2021-06-07 CN CN202110636725.XA patent/CN114385235A/zh active Pending
- 2021-06-11 KR KR1020210076083A patent/KR102645982B1/ko active IP Right Grant
-
2022
- 2022-11-03 US US17/980,177 patent/US11954369B2/en active Active
Patent Citations (3)
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 |