KR102621493B1 - 메모리 디바이스들의 병렬 부트 실행 - Google Patents

메모리 디바이스들의 병렬 부트 실행 Download PDF

Info

Publication number
KR102621493B1
KR102621493B1 KR1020210080054A KR20210080054A KR102621493B1 KR 102621493 B1 KR102621493 B1 KR 102621493B1 KR 1020210080054 A KR1020210080054 A KR 1020210080054A KR 20210080054 A KR20210080054 A KR 20210080054A KR 102621493 B1 KR102621493 B1 KR 102621493B1
Authority
KR
South Korea
Prior art keywords
boot code
boot
data storage
memory devices
chunks
Prior art date
Application number
KR1020210080054A
Other languages
English (en)
Other versions
KR20220010424A (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 KR20220010424A publication Critical patent/KR20220010424A/ko
Application granted granted Critical
Publication of KR102621493B1 publication Critical patent/KR102621493B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • G06F9/4408Boot device selection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1417Boot up procedures
    • 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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • 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
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/062Securing storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/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
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • G06F9/441Multiboot arrangements, i.e. selecting an operating system to be loaded
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 개시는 일반적으로 듀얼 부트 시스템에서 메모리 디바이스들의 부트 레이턴시를 감소시키는 것에 관한 것이다. 부트 코드는 2개의 별개의 위치, 즉 호스트 메모리 버퍼(HMB) 및 NAND 디바이스일 수 있는 메모리 디바이스로부터 부트 코드의 청크들을 수신할 수 있는 것에 의해 유연한 방식으로 데이터 저장 디바이스 컨트롤러에 로딩된다. 부트 코드의 일부는 HMB로부터 수신될 수 있고 부트 코드의 다른 부분은 메모리 디바이스로부터 수신될 수 있다. HMB 또는 메모리 디바이스 중 어느 하나가 다른 것보다 더 빠르게 청크들을 전달할 수 있는 경우, 컨트롤러는 더 빠른 위치로부터 청크들을 수신하고 전달 속도를 주기적으로 확인하여 부트 코드 레이턴시가 최적화되는 것을 보장할 수 있다.

Description

메모리 디바이스들의 병렬 부트 실행{PARALLEL BOOT EXECUTION OF MEMORY DEVICES}
본 개시의 배경
기술분야
본 개시의 실시예들은 일반적으로 듀얼 부트 시스템에서 메모리 디바이스들의 부트 레이턴시를 감소시키는 것에 관한 것이다.
컴퓨팅 시스템의 개시 프로세스는 일반적으로 부트 또는 부팅으로 지칭된다. 부트 절차 동안, 데이터 저장 디바이스의 깨우기 절차를 개시하기 위해 지정된 코드가 메모리 디바이스 컨트롤러에 배치된 처리 유닛에 로딩된다. 부트의 지속 시간은 소비자들에게 중요한 인자이고, 컨트롤러가 부트 코드가 저장된 외부 위치로부터 부트 코드를 로딩하는 시간은 전체 부트 지속 시간 요건들에서 명망을 허용하기 위한 중요한 고려 사항일 수 있다.
NAND 기반 메모리 디바이스들의 경우, 부트 코드에 대한 디폴트 저장 장소는 NAND 메모리 자체에 있다. 그러나, NVMe 표준은 호스트 디바이스 DRAM 파티션(즉, 데이터 저장 디바이스에 대해 할당된 호스트 DRAM의 부분)이 부트 코드를 저장하는 데 사용될 수 있는 추가 옵션을 제공한다. 부트 코드 저장을 위해 호스트 DRAM을 사용할 때, DRAM 파티션은 호스트 메모리 버퍼(HMB)로 지칭된다.
현재, 부트 절차는 단일 위치, 즉 NAND 또는 HMB 중 어느 하나로부터 부팅을 개시함으로써 진행한다. NAND 및 HMB 둘 모두는 장단점을 갖고 있다. NAND의 경우, NAND는 일반적으로 HMB 이전에 이용가능하고 병렬 감지가 다수의 다이들 상에서 발생할 수 있지만, 감지 시간은 손해일 수 있다. HMB의 경우, 스루풋이 높고 HMB는 몇몇 경우들에서 NAND 이전에 이용가능할 수 있지만, HMB는 부트에서 항상 이용가능하지는 않고, 호스트 디바이스에 의존하고, 호스트 디바이스에 대한 링크를 가져야 한다.
따라서, NAND 및 HMB 둘 모두의 이점들을 이용함으로써 부트 프로세스를 가속화하는 부트 절차에 대한 필요성이 당업계에 존재한다.
본 개시는 일반적으로 듀얼 부트 시스템에서 메모리 디바이스들의 부트 레이턴시를 감소시키는 것에 관한 것이다. 부트 코드는 2개의 별개의 위치, 즉 호스트 메모리 버퍼(HMB) 및 NAND 디바이스일 수 있는 메모리 디바이스로부터 부트 코드의 청크들을 수신할 수 있는 것에 의해 유연한 방식으로 데이터 저장 디바이스 컨트롤러에 로딩된다. 부트 코드의 일부는 HMB로부터 수신될 수 있고 부트 코드의 다른 부분은 메모리 디바이스로부터 수신될 수 있다. HMB 또는 메모리 디바이스 중 어느 하나가 다른 것보다 더 빠르게 청크들을 전달할 수 있는 경우, 컨트롤러는 더 빠른 위치로부터 청크들을 수신하고 전달 속도를 주기적으로 확인하여 부트 코드 레이턴시가 최적화되는 것을 보장할 수 있다.
일 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 컨트롤러는 호스트 디바이스로부터 부트 코드의 부트 코드 청크들을 수신하고; 하나 이상의 메모리 디바이스들로부터 부트 코드의 부트 코드 청크들을 수신하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 컨트롤러는 호스트 디바이스 및 하나 이상의 메모리 디바이스들 둘 모두로부터 부트 코드의 부트 코드 청크들을 수신하고; 부트 코드 청크들 전부가 수신되었음을 확인하고; 부트 코드에 대한 인증 서명들을 확인하고; 부트 코드 청크가 무효였는지를 결정하고; 무효 부트 코드 청크가 호스트 디바이스로부터 온 것인지 또는 하나 이상의 메모리 디바이스들로부터 온 것인지를 결정하고; 호스트 디바이스 및 하나 이상의 메모리 디바이스 중 어느 쪽이든 무효 부트 코드 청크를 전달하지 않은 것으로부터 유효 부트 코드 청크를 수신하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 컨트롤러는 하나 이상의 메모리 디바이스들 또는 호스트 디바이스 중 어느 하나로부터 부트 코드의 부트 코드 청크들을 수신하고; 미리 결정된 수의 데이터 저장 디바이스 부트들 후에, 하나 이상의 메모리 디바이스들 또는 호스트 디바이스 중 다른 것으로부터 부트 데이터 청크들을 수신하고; 하나 이상의 메모리 디바이스들로부터 부트 코드를 수신하기 위한 평균 레이턴시가 호스트 디바이스로부터 부트 코드를 수신하기 위한 평균 레이턴시와는 상이한지를 결정하도록 구성된다.
상기에 언급된 본 개시의 특징들이 상세히 이해될 수 있는 방식으로, 상기에 간략하게 요약된 본 개시의 보다 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 이들 실시예 중 일부가 첨부 도면에 예시되어 있다. 그러나, 첨부 도면은 단지 본 개시의 전형적인 실시예를 예시할 뿐이며 그에 따라, 본 개시에 대해 다른 동등하게 효과적인 실시예들로 인정될 수 있는, 본 개시의 범위의 제한으로 간주되어서는 안된다는 점에 유의해야 한다.
도 1은 일 실시예에 따른, 데이터 저장 시스템의 개략도이다.
도 2는 일 실시예에 따른, 듀얼 부트 프로세스의 개략도이다.
도 3a는 일 실시예에 따른, 부트 프로세스를 예시하는 흐름도이다.
도 3b는 다른 실시예에 따른, 부트 프로세스를 예시하는 흐름도이다.
도 4는 다른 실시예에 따른, 부트 프로세스를 예시하는 흐름도이다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지시하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
하기에서, 본 개시의 실시예들을 참조한다. 그러나, 본 개시는 설명된 특정 실시예들로 제한되지 않는다는 것이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합이, 상이한 실시예들과 관련되든지 또는 그렇지 않든지 간에, 본 개시를 구현하고 실시하기 위해 고려된다. 게다가, 본 개시의 실시예가 다른 가능한 해법들에 비해 그리고/또는 종래 기술에 비해 이점을 달성할 수 있지만, 특정 이점이 주어진 실시예에 의해 달성되는지 여부는 본 개시의 제한이 아니다. 따라서, 하기의 태양들, 특징들, 실시예들, 및 이점들은 단지 예시적인 것이며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한으로 간주되지 않는다. 마찬가지로, "본 개시"에 대한 언급은 본 명세서에 개시되는 임의의 독창적인 주제의 일반화로서 해석되어서는 안되며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한인 것으로 간주되어서는 안된다.
본 개시는 일반적으로 듀얼 부트 시스템에서 메모리 디바이스들의 부트 레이턴시를 감소시키는 것에 관한 것이다. 부트 코드는 2개의 별개의 위치, 즉 호스트 메모리 버퍼(HMB) 및 NAND 디바이스일 수 있는 메모리 디바이스로부터 부트 코드의 청크들을 수신할 수 있는 것에 의해 유연한 방식으로 데이터 저장 디바이스 컨트롤러에 로딩된다. 부트 코드의 일부는 HMB로부터 수신될 수 있고 부트 코드의 다른 부분은 메모리 디바이스로부터 수신될 수 있다. HMB 또는 메모리 디바이스 중 어느 하나가 다른 것보다 더 빠르게 청크들을 전달할 수 있는 경우, 컨트롤러는 더 빠른 위치로부터 청크들을 수신하고 전달 속도를 주기적으로 확인하여 부트 코드 레이턴시가 최적화되는 것을 보장할 수 있다.
도 1은 일 실시예에 따른, 데이터 저장 시스템(100)의 개략도이다. 데이터 저장 시스템(100)은 호스트 컴퓨터 시스템(102) 및 데이터 저장 디바이스(104)를 포함한다. 데이터 저장 디바이스(104)는 호스트 컴퓨터 시스템(102)을 위한 저장 디바이스로서 기능할 수 있다. 예를 들어, 호스트 컴퓨터 시스템(102)은 데이터 저장 디바이스(104)에 포함된, NAND와 같은, 비휘발성 메모리(NVM)(116)를 이용하여 데이터를 저장하고 검색할 수 있다. 몇몇 예들에서, 데이터 저장 시스템(100)은 저장 어레이로서 동작할 수 있는, 데이터 저장 디바이스(104)와 같은, 복수의 저장 디바이스를 포함할 수 있다. 예를 들어, 데이터 저장 시스템(100)은 호스트 컴퓨터 시스템(102)을 위한 대용량 데이터 저장 디바이스로서 집합적으로 기능하는 저가/독립 디스크들의 중복 어레이(RAID)로서 구성된 복수의 데이터 저장 디바이스(104)를 포함할 수 있다.
호스트 컴퓨터 시스템(102)은 호스트 메모리 버퍼(HMB)(110)의 일부인 호스트 부트 존(108), 호스트 데이터 버퍼(112), 및 호스트 큐(114)를 포함하는 호스트 메모리(106)를 포함한다. HMB(110)는 데이터 저장 디바이스(104)에 할당된 호스트 컴퓨터 시스템(102) 호스트 메모리(106) 내의 저장소이다. 데이터 저장 디바이스(104)는 어떤 기능이 필요하든지 HMB(110)를 이용할 수 있다. 본 명세서에서 논의된 실시예들에서, 데이터 저장 디바이스(104)는 부트 코드를 저장하기 위해 HMB(110)를 이용한다. 호스트 컴퓨터 시스템(102)은 데이터 저장 디바이스(104)와 같은 하나 이상의 저장 디바이스에 그리고/또는 그로부터 데이터를 저장하고/하거나 검색할 수 있다. 호스트 컴퓨터 시스템(102)은 인터페이스를 통해 데이터 저장 디바이스(104)와 통신할 수 있다. 호스트 컴퓨터 시스템(102)은 컴퓨터 서버, NAS(network attached storage) 유닛, 데스크톱 컴퓨터, 노트북(즉, 랩톱) 컴퓨터, 태블릿 컴퓨터, 셋톱 박스, 전화 핸드셋, 예컨대 소위 "스마트" 폰, 소위 "스마트" 패드, 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게임 콘솔, 비디오 스트리밍 디바이스 등을 포함한, 광범위한 디바이스들 중 임의의 것을 포함할 수 있다.
몇몇 실시예들에서, 호스트 큐(114)는 하나 이상의 호스트 큐를 포함하며, 여기서 호스트 큐(114)는 데이터 저장 디바이스(104)가 페치하는 생성 커맨드들을 저장한다. 또한, 하나 이상의 호스트 큐(114) 내의 생성 커맨드들의 데이터는 호스트 데이터 버퍼(112)에 저장될 수 있다. 몇몇 실시예들에서, 호스트 데이터 버퍼(112)는 하나 이상의 호스트 데이터 버퍼를 포함한다.
호스트 메모리(106)의 HMB(110)는 데이터 저장 디바이스(104)에 대해 할당된 호스트 DRAM 파티션일 수 있다. 부트 코드(즉, 컴퓨팅 시스템의 개시 프로세스 또는 부트 동작을 위해 사용되는 코드)가 HMB(110)에 저장될 수 있다. 보다 구체적으로, 부트 코드는 HMB(110)의 호스트 부트 존(108)에 저장된다. 부트 동작들 동안, 부트 코드는 HMB(110)로부터 페치되고 디바이스 컨트롤러(120)로 전송된다. HMB(110)가 휘발성 메모리이기 때문에, 부트 코드는 이전의 런타임 동안 기입된다. 부트 시간 동안, 그리고 HMB(110) 콘텐츠가 여전히 유효한 동안 HMB(110)가 이용가능한 경우에만, 부트 코드가 HMB(110)로부터 페치될 수 있다.
데이터 저장 디바이스(104)는 디바이스 컨트롤러(120), DRAM(dynamic random-access memory)(122)과 같은 휘발성 메모리, 및 NVM(116)을 포함한다. 몇몇 예들에서, 데이터 저장 디바이스(104)는 명료함을 위해 도 1에 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다. 예를 들어, 데이터 저장 디바이스(104)는, 데이터 저장 디바이스(104)의 컴포넌트들이 그에 기계적으로 부착되고, 데이터 저장 디바이스(104)의 컴포넌트들 등을 전기적으로 상호접속하는 전기 전도성 트레이스들을 포함하는 인쇄 회로 기판(PCB)을 포함할 수 있다. 몇몇 예들에서, 데이터 저장 디바이스(104)의 물리적 치수들 및 커넥터 구성들은 하나 이상의 표준 폼 팩터를 따를 수 있다. 몇몇 예시적인 표준 폼 팩터들은 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 등)를 포함하지만, 이로 제한되지 않는다. 몇몇 예들에서, 데이터 저장 디바이스(104)는 호스트 컴퓨터 시스템(102)의 마더보드에 직접 결합(예컨대, 직접 솔더링)될 수 있다.
몇몇 예들에서, 데이터 저장 디바이스(104)는 호스트 컴퓨터 시스템(102)과 데이터를 교환하기 위한 데이터 버스 및 호스트 컴퓨터 시스템(102)과 커맨드들을 교환하기 위한 제어 버스 중 하나 또는 둘 모두를 포함할 수 있는 인터페이스를 포함할 수 있다. 인터페이스는 임의의 적합한 프로토콜에 따라 동작할 수 있다. 예를 들어, 인터페이스는 다음의 프로토콜들 중 하나 이상에 따라 동작할 수 있다: 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) 등. 인터페이스(예컨대, 데이터 버스, 제어 버스, 또는 둘 모두)의 전기 접속은 디바이스 컨트롤러(120)에 전기적으로 접속되어, 호스트 컴퓨터 시스템(102)과 디바이스 컨트롤러(120) 사이의 전기 접속을 제공하여서, 데이터가 호스트 컴퓨터 시스템(102)과 디바이스 컨트롤러(120) 사이에서 교환될 수 있게 한다. 몇몇 예들에서, 인터페이스의 전기 접속은 또한 데이터 저장 디바이스(104)가 호스트 컴퓨터 시스템(102)으로부터 전력을 수신할 수 있게 할 수 있다. 예를 들어, 전력 공급부가 인터페이스를 통해 호스트 컴퓨터 시스템(102)으로부터 전력을 수신할 수 있다.
데이터 저장 디바이스(104)는 복수의 메모리 디바이스 또는 메모리 유닛 및 NAND 부트 존(150)을 포함할 수 있는 NVM(116)을 포함한다. 복수의 메모리 디바이스 또는 메모리 유닛은 하나 이상의 메모리 어레이(124)로 배열될 수 있다. 호스트 컴퓨터 시스템(102)의 HMB(110)에 저장된 부트 코드와 동일할 수 있는 부트 코드는 하나 이상의 메모리 어레이(124)에 저장될 수 있다. 부트 동작들 동안, 부트 코드는 NAND 부트 존(150)으로부터 페치되고 디바이스 컨트롤러(120)로 전송된다.
NVM(116)은 데이터를 저장하고/하거나 검색하도록 구성될 수 있다. 예를 들어, NVM(116)의 메모리 유닛이 데이터, 및 데이터를 저장하라고 메모리 유닛에게 지시하는 디바이스 컨트롤러(120)로부터의 메시지를 수신할 수 있다. 유사하게, NVM(116)의 메모리 유닛은 데이터를 검색하라고 메모리 유닛에게 지시하는 디바이스 컨트롤러(120)로부터의 메시지를 수신할 수 있다. 몇몇 예들에서, 메모리 유닛들 각각은 다이로 지칭될 수 있다. 몇몇 예들에서, 단일 물리 칩이 복수의 다이(즉, 복수의 메모리 유닛)를 포함할 수 있다. 몇몇 예들에서, 각각의 메모리 유닛은 비교적 많은 양의 데이터(예를 들어, 128MB, 256MB, 512MB, 1GB, 2GB, 4GB, 8GB, 16GB, 32GB, 64GB, 128GB, 256GB, 512GB, 1TB 등)를 저장하도록 구성될 수 있다.
몇몇 예들에서, NVM(116)의 각각의 메모리 유닛은 플래시 메모리 디바이스들, PCM(phase-change memory) 디바이스들, ReRAM(resistive random-access memory) 디바이스들, MRAM(magnetoresistive random-access memory) 디바이스들, F-RAM(ferroelectric random-access memory), 홀로그래픽 메모리 디바이스들, 및 임의의 다른 유형의 비휘발성 메모리 디바이스들과 같은 임의의 유형의 비휘발성 메모리 디바이스들을 포함할 수 있다.
NVM(116)은 복수의 플래시 메모리 디바이스 또는 메모리 유닛을 포함할 수 있다. 플래시 메모리 디바이스들은 NAND 또는 NOR 기반 플래시 메모리 디바이스들을 포함할 수 있고, 각각의 플래시 메모리 셀에 대한 트랜지스터의 플로팅 게이트에 포함된 전하에 기초하여 데이터를 저장할 수 있다. NAND 플래시 메모리 디바이스들에서, 플래시 메모리 디바이스는 복수의 블록들로 분할될 수 있으며, 이들은 복수의 페이지들로 분할될 수 있다. 특정 메모리 디바이스 내의 복수의 블록들 중의 각각의 블록은 복수의 NAND 셀들을 포함할 수 있다. NAND 셀들의 행(row)들은 워드 라인을 이용하여 전기적으로 접속되어 복수의 페이지들 중의 페이지를 정의할 수 있다. 복수의 페이지들 각각 내의 각자의 셀들은 각자의 비트 라인들에 전기적으로 접속될 수 있다. 또한, NAND 플래시 메모리 디바이스들은 2D 또는 3D 디바이스들일 수 있고, 싱글 레벨 셀(SLC), 멀티-레벨 셀(MLC), 트리플 레벨 셀(TLC), 또는 쿼드 레벨 셀(QLC)일 수 있다. 디바이스 컨트롤러(120)는 페이지 레벨에서 NAND 플래시 메모리 디바이스들에 데이터를 기입하고 그로부터 데이터를 판독하고 블록 레벨에서 NAND 플래시 메모리 디바이스들로부터 데이터를 소거할 수 있다.
몇몇 예들에서, 데이터 저장 디바이스(104)는 데이터 저장 디바이스(104)의 하나 이상의 컴포넌트에 전력을 제공할 수 있는 전력 공급부를 포함한다. 표준 모드에서 동작할 때, 전력 공급부는 호스트 컴퓨터 시스템(102)과 같은 외부 디바이스에 의해 제공되는 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 예를 들어, 전력 공급부는 데이터 저장 디바이스(104)의 인터페이스를 통해 호스트 컴퓨터 시스템으로부터 수신된 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 몇몇 예들에서, 전력 공급부는 셧다운 모드에서 동작할 때, 예컨대 외부 디바이스로부터의 전력 수신이 중단되는 경우 하나 이상의 컴포넌트에 전력을 제공하도록 구성된 하나 이상의 전력 저장 컴포넌트를 포함할 수 있다. 이러한 방식으로, 전력 공급부는 온보드 백업 전원으로서 기능할 수 있다. 하나 이상의 전력 저장 컴포넌트의 몇몇 예들은 커패시터들, 수퍼커패시터들, 배터리들 등을 포함하지만 이로 제한되지 않는다. 몇몇 예들에서, 하나 이상의 전력 저장 컴포넌트에 의해 저장될 수 있는 전력의 양은 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기(예를 들어, 면적/부피)의 함수일 수 있다. 다시 말해서, 하나 이상의 전력 저장 컴포넌트에 의해 저장되는 전력의 양이 증가함에 따라, 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기가 또한 증가한다.
몇몇 예들에서, 데이터 저장 디바이스(104)는 정보를 저장하기 위해 디바이스 컨트롤러(120)에 의해 사용될 수 있는, DRAM(122)과 같은, 하나 이상의 휘발성 메모리를 포함할 수 있다. 또한, 디바이스 컨트롤러(120)는 하나 이상의 휘발성 메모리를 포함할 수 있다. 몇몇 예들에서, 디바이스 컨트롤러(120)는 휘발성 메모리를 캐시로서 사용할 수 있다. 예를 들어, 디바이스 컨트롤러(120)는 캐싱된 정보가 NVM(116)에 기입될 때까지 캐싱된 정보를 휘발성 메모리에 저장할 수 있다. 휘발성 메모리의 예들은 RAM(random-access memory), DRAM, SRAM(static RAM), 및 SDRAM(synchronous dynamic RAM)(예컨대, DDR1, DDR2, DDR3, DDR3L, LPDDR3, DDR4, LPDDR4 등)을 포함하지만, 이로 제한되지 않는다.
데이터 저장 디바이스(104)는 데이터 저장 디바이스(104)의 하나 이상의 동작을 관리할 수 있는 디바이스 컨트롤러(120)를 포함한다. 예를 들어, 디바이스 컨트롤러(120)는 NVM(116)으로부터의 데이터의 판독 및/또는 그에의 데이터의 기입을 관리할 수 있다. 몇몇 실시예들에서, 데이터 저장 디바이스(104)가 호스트 컴퓨터 시스템(102)으로부터 기입 커맨드를 수신할 때, 디바이스 컨트롤러(120)는 NVM(116)에 데이터를 기입하는 데이터 저장 커맨드를 개시하고 데이터 저장 커맨드의 진행을 모니터링할 수 있다. 디바이스 컨트롤러(120)는 데이터 저장 시스템(100)의 적어도 하나의 동작 특성을 결정하고 적어도 하나의 동작 특성을 NVM(116)에 저장할 수 있다. 몇몇 실시예들에서, 데이터 저장 디바이스(104)가 호스트 컴퓨터 시스템(102)으로부터 기입 커맨드를 수신할 때, 컨트롤러(120)는 NVM(116)에 데이터를 전송하기 전에 기입 커맨드와 관련된 데이터를 내부 메모리 또는 기입 버퍼에 일시적으로 저장한다.
디바이스 컨트롤러는 PCIe MAC PHY(126), 부트 로직(134), 제어 경로(132), 하나 이상의 DMA(direct memory access)(128), 에러 정정 모듈(130), FIM(flash interface module)(136), 및 하나 이상의 프로세서(144)를 포함한다. 하나 이상의 프로세서(144)는 데이터 저장 디바이스(104)와 같은, 컴퓨팅 시스템을 동작시키기 위해 커맨드들에 응답하고 이들을 처리하는 칩 또는 논리 회로이다. 하나 이상의 프로세서(144)는 모든 수학 연산들을 수행하고 컨트롤러 동작들을 관리할 수 있다.
호스트 컴퓨터 시스템(102)으로부터 데이터 저장 디바이스(104)로의 데이터의 유입 및 유출은 PCIe MAC PHY(126)를 통해 수행될 수 있다. 커맨드들이 디바이스 컨트롤러(120)에 의해 완료되면, 완료된 커맨드들과 연관된 데이터는 PCIe MAC PHY(126)를 통해 호스트 컴퓨터 시스템(102)에 존재하는 호스트 큐들(114)로 전송될 수 있다.
데이터는 PCIe MAC PHY(126)로부터 제어 경로(132) 및 하나 이상의 DMA(128)로 이동한다. 하나 이상의 DMA(128)는 호스트 컴퓨터 시스템(102) CPU로부터의 개입 없이 호스트 컴퓨터 시스템(102)과 데이터 저장 디바이스(104) 사이의 데이터 전송들을 실행할 수 있다. 제어 경로(132)는 물리 페이지 영역들(PRP들)을 페치하고, 완료 및 인터럽트들을 포스팅하고, 호스트 컴퓨터 시스템(102)과 데이터 저장 디바이스(104) 간의 데이터 전송을 위해 DMA들(128)을 활성화하는 데 이용될 수 있다. 에러 정정 모듈(130)은 메모리 어레이들로부터 페치된 데이터를 정정한다. 디바이스 컨트롤러(120)는 판독 및 기입 동작들을 위해 NVM(116)과 상호작용하기 위해 FIM(136)을 이용할 수 있다.
부트 로직(134)은 HMB 부트 영역(138), NAND 부트 영역(140), 및 제어 및 보안 모듈(142)을 포함한다. 부트 로직(135)은 HMB 부트 존(108) 및 NAND 부트 존(150)에 의한 병렬 부트 실행을 인식한다. HMB 부트 영역(138)은 HMB 부트 존(108)으로부터 부트의 상태를 결정할 수 있다. 유사하게, NAND 부트 영역(140)은 NAND 부트 존(150)으로부터 부트의 상태를 결정할 수 있다. 제어 및 보안 모듈(142)은 HMB 부트 존(108) 및 NAND 부트 존(150)에 의한 병렬 부트 실행의 제어 및 구현에 이용될 수 있다.
도 2는 일 실시예에 따른, 병렬 부트 프로세스의 개략도이다. 부트 코드는 도 1의 HMB(110) 및 메모리 어레이들(124)에 저장된다. 부트 코드는 호스트 부트 존(108) 및 NAND 부트 존(150) 둘 모두에서 동일하다. 약 80KB의, 관련 컨텍스트를 포함하는, 부트 코드는 약 4KB와 같은 미리 결정된 크기의 청크들로 분할된다. 예를 들어, HMB 부트 존(108)은 약 4KB의 약 20개의 청크를 포함하고, NAND 부트 존(150)은 약 4KB의 약 20개의 청크를 포함한다.
도 2에 예시된, 부트 코드의 첫 번째 4KB 청크는 0에 의해 표시되고, 부트 코드의 두 번째 4KB 청크는 1에 의해 표시되고, 등등이다. 부트 동작이 개시될 때, 부트 코드 청크들은 HMB(110)의 HMB 부트 존(108)으로부터 페치되고, 동일한 부트 코드 청크들이 NAND 부트 존(150)으로부터 페치된다. HMB 부트 존(108) 및 NAND 부트 존(150) 둘 모두의 부트 코드 청크들이 부트 동작 동안 디바이스 컨트롤러(120)에서 동시에 페치되고, 디바이스 컨트롤러(120)의, SRAM과 같은, 컨트롤러 메모리에 내부적으로 저장된다. 일 실시예에서, HMB 부트 존(108)으로부터의 페치는 NAND 부트 존(150)으로부터의 페치보다 더 빠르게 발생할 수 있다. 다른 실시예에서, NAND 부트 존(150)으로부터의 페치는 HMB 부트 존(108)으로부터의 페치보다 더 빠르게 발생할 수 있다.
HMB 부트 존(108)으로부터 부트 코드를 판독할 때, 첫 번째 부트 코드 청크 0이 첫 번째로 판독되고, 두 번째 부트 코드 청크 1이 두 번째로 판독되고, 등등이다. HMB 부트 존(108)으로부터의 판독은 첫 번째 부트 코드 청크(예컨대, 청크 0)로부터 마지막 부트 코드 청크(예컨대, 청크 19)까지 판독될 수 있다. NAND 부트 존(150)으로부터 판독할 때, 마지막 부트 코드 청크 19가 첫 번째로 판독되고, 마지막에서 두 번째 부트 코드 청크 18이 두 번째로 판독되고, 등등이다. NAND 부트 존(150)으로부터의 판독은 마지막 부트 코드 청크(예를 들어, 청크 19)로부터 첫 번째 부트 코드 청크(예를 들어, 청크 0)까지 판독될 수 있다. 다른 실시예에서, HMB 부트 존(108) 및 NAND 부트 존(150)으로부터의 부트 코드 청크들의 열거된 판독 순서는 전환될 수 있다. 집합적으로 HMB 부트 존(108) 및 NAND 부트 존(150)으로부터, 전체 부트 코드가 판독될 때, 부트 동작은 완료된다.
전체 부트 코드는 HMB 부트 존(108)으로부터 부분적으로 그리고 NAND 부트 존(150)으로부터 부분적으로 판독될 수 있으며, 여기서 HMB 부트 존(108) 및 NAND 부트 존(150)으로부터 판독된 부트 코드의 각각의 부분은 동일하다. 예를 들어, 부트 코드 청크들 0-9가 HMB 부트 존(108)으로부터 판독될 수 있고, 나머지 부트 코드 청크들 10-19가 NAND 부트 존(150)으로부터 판독될 수 있다. 전체 부트 코드가 판독되었기 때문에, 부트 프로세스는 완료되었다.
다른 실시예에서, 전체 부트 코드는 HMB 부트 존(108)으로부터 부분적으로 그리고 NAND 부트 존(150)으로부터 부분적으로 판독될 수 있으며, 여기서 HMB 부트 존(108) 및 NAND 부트 존(150)으로부터 판독된 부트 코드의 각각의 부분은 동일하지 않다. 예를 들어, 부트 코드 청크들 0-13이 HMB 부트 존(108)으로부터 판독될 수 있고, 나머지 부트 코드 청크들 14-19가 NAND 부트 존(150)으로부터 판독될 수 있다. 전체 부트 코드가 판독되었기 때문에, 부트 프로세스는 완료되었다.
HMB 부트 존 및 NAND 부트 존으로부터 부트 코드 청크들의 불균등한 양들이 판독될 수 있기 때문에, 컨트롤러는 부트 코드의 관련 부분을 HMB 및 NAND에 배치할 수 있다. 예를 들어, 병렬 로딩(즉, 컨트롤러로의 판독)이 부트 코드 청크 12에서 끝나는 경우, 부트 코드 청크들 0-12는 HMB 부트 존(108)과 같은 제1 위치로부터 판독되고, 부트 코드 청크들 12-19는 NAND 부트 존(150)과 같은 제2 위치로부터 판독된다. 따라서, HMB 부트 존(108)은 더 빠르게 로딩할 수 있다(즉, 컨트롤러로의 판독이 더 빠르다). HMB 부트 존(108)의 더 빠른 판독 속도 때문에, 부트 코드 청크들 0-14(즉, 15개의 부트 코드 청크)는 HMB에 배치될 수 있고, 부트 코드 청크들 11-19(즉, 9개의 부트 코드 청크)는 NAND에 배치될 수 있다. 부트 코드 청크들 11-14의 오버랩 또는 오버헤드는 판독 스루풋 변동들을 설명할 수 있다. 열거된 예는 제한하는 것으로 의도되는 것이 아니라, 가능한 실시예의 예를 제공하는 것으로 의도된다.
도 3a는 일 실시예에 따른, 부트 프로세스(300)를 예시하는 흐름도이다. 부트 프로세스(300)는 부트 코드 청크들 각각이 인증 코드 또는 인증 서명을 포함할 때의 데이터 저장 디바이스의 부트 동작을 설명한다. 용어들 "인증 코드" 및 "인증 서명"은 본 명세서에서 상호교환적으로 사용될 수 있고 동일한 의미를 가질 수 있다. 인증 코드는 유효 부트 코드 청크를 체크한다. 블록 302에서, 부트 동작이 개시된다. 블록 304에서, 부트 코드 청크들은 HMB로부터 디바이스 컨트롤러의 내부 메모리로 로딩된다. 블록 308에서, 부트 코드 청크들은 NAND 부트 존으로부터 디바이스 컨트롤러의 내부 메모리로 로딩된다. 블록들 304 및 308에서의 HMB 및 NAND 둘 모두로부터의 부트 코드 청크들의 로딩은 동시에 발생할 수 있다.
부트 코드 청크가 HMB 부트 존 또는 NAND 부트 존으로부터 판독되고 컨트롤러로 전달될 때마다, 블록들 306 및 310에서 컨트롤러는 유효 인증 코드를 체크한다. 부트 코드 청크가 무효 인증 코드를 포함할 때, 컨트롤러는 다른 부트 존으로부터 대응하는 부트 코드 청크를 수신하도록 구성될 수 있다. 컨트롤러는 무효 인증 코드를 갖는 관련 부트 코드 청크의 발생 위치(예를 들어, HMB 부트 존 또는 NAND 부트 존)를 결정하기 위한, 도 1의 부트 로직(134)과 같은, 로직을 포함한다. 예를 들어, HMB 부트 존의 부트 코드 청크 0이 무효 인증 코드를 포함하는 경우, 컨트롤러는 HMB 부트 존으로부터 수신된 무효 부트 코드 청크 0을 대체하기 위해 NAND 부트 존으로부터 부트 코드 청크 0을 수신하도록 구성될 수 있다. 마찬가지로, NAND 부트 존의 부트 코드 청크 0이 무효 인증 코드를 포함하는 경우, 컨트롤러는 NAND 부트 존으로부터 수신된 무효 부트 코드 청크 0을 대체하기 위해 HMB 부트 존으로부터 부트 코드 청크 0을 수신하도록 구성될 수 있다.
블록 312에서, 컨트롤러는 유효 인증 코드를 포함하는 부트 코드 청크들 전부가 수신되었는지를 결정한다. 몇몇 예들에서, 컨트롤러는 NAND 부트 존 및 HMB 부트 존 둘 모두로부터 동일한 하나 이상의 부트 코드 청크를 수신할 수 있다. 블록 312에서 유효 인증 코드를 포함하는 부트 코드 청크들 전부가 수신되었을 때, 블록 314에서 부트 프로세스는 완료된다. 그러나, 부트 코드 청크들 전부가 수신되지는 않았다면, 나머지 부트 코드 청크들은 블록 304에서 HMB 부트 존으로 그리고 블록 308에서 NAND 부트 존으로 로딩된다.
도 3b는 다른 실시예에 따른, 부트 프로세스(350)를 예시하는 흐름도이다. 부트 프로세스(350)는 컨트롤러가 전체 부트 코드에 대한 유효 인증 코드 또는 인증 서명을 체크할 때의 데이터 저장 디바이스의 부트 동작을 설명한다. 용어들 "인증 코드" 및 "인증 서명"은 본 명세서에서 상호교환적으로 사용될 수 있고 동일한 의미를 가질 수 있다. 인증 코드는 유효 부트 코드 청크를 체크한다. 블록 352에서, 부트 동작이 개시된다. 블록 354에서, 부트 코드 청크들은 HMB 부트 존으로부터 페치되고 디바이스 컨트롤러의 내부 메모리에 저장된다. 블록 356에서, 부트 코드 청크들은 NAND 부트 존으로부터 페치되고 디바이스 컨트롤러의 내부 메모리에 저장된다. 블록들 354 및 356에서의 HMB 및 NAND 둘 모두로부터의 부트 코드 청크들의 로딩은 동시에 발생할 수 있다.
블록 358에서 컨트롤러는 부트 코드 청크들 전부가 컨트롤러에서 수신되었는지를 결정한다. 블록 358에서 전부보다 적은 부트 코드 청크들이 컨트롤러에서 수신된 경우, 컨트롤러는 부트 코드 청크들 전부가 수신될 때까지 기다린다. 부트 코드 청크들은 HMB 부트 존, NAND 부트 존으로부터, 또는 HMB 부트 존 및 NAND 부트 존 둘 모두로부터 수신될 수 있다. 블록 358에서 부트 코드 청크들 전부가 HMB 부트 존 및 NAND 부트 존으로부터 판독되고 컨트롤러에 전달된 후에, 블록 360에서 컨트롤러는 전체 부트 코드에 대한 인증 서명을 확인한다.
블록 362에서 인증 서명이 유효하면, 부트 동작이 완료된다. 그러나, 인증 서명이 무효이면, 블록 364에서 컨트롤러는 무효 인증 서명을 유발한 손상된 부트 코드 청크가 HMB로부터 온 것인지를 결정하기 위해, 도 1의 부트 로직(134)과 같은, 로직을 이용한다. 손상된 부트 코드 청크가 HMB로부터 온 것이면, 블록 356에서 관련 부트 코드 청크가 컨트롤러의 내부 메모리에 저장된 NAND 부트 존으로부터 로딩된다. 그러나, 손상된 부트 코드 청크가 HMB로부터 온 것이 아니면(즉, NAND로부터 온 것이면), 블록 354에서 관련 부트 코드 청크가 HMB로부터 로딩되고 컨트롤러의 내부 메모리에 저장된다. 다른 부트 존으로부터의 부트 코드 청크의 재로딩은 손상된 부트 코드 청크의 각각의 인스턴스에 대해 발생할 수 있다. 블록 362에서 인증 서명이 유효할 때, 블록 366에서 부트 동작은 완료된다.
도 4는 다른 실시예에 따른, 부트 프로세스(400)를 예시하는 흐름도이다. 부트 프로세스(400)는 호스트 디바이스(예를 들어, 도 1의 호스트 컴퓨터 시스템(102))가 하나 이상의 메모리 디바이스(예를 들어, 도 1의 NVM(116))의 평균 레이턴시와는 상이한 평균 레이턴시를 갖는 때와 같은, "탐색-이용(explore-exploit)" 트레이드 오프 동안의 데이터 저장 디바이스의 부트 동작을 설명한다. 부트 코드는 HMB 및 NAND 둘 모두에 저장된다. "탐색-이용" 트레이드 오프의 이용 부분은 더 빠른 부트 레이턴시를 나타내는 위치(즉, HMB 또는 NAND)로부터 부트 동작을 실행하는 것을 지칭할 수 있다. "탐색-이용" 트레이드 오프의 탐색 부분은 더 느린 부트 레이턴시로 인해 부트 동작에 이용되지 않는 다른 위치로부터의 부트에 대한 현재 평균 추정의 업데이트를 지칭할 수 있다. 일 실시예에서, "탐색-이용" 인자는 약 0으로 점차적으로 감소될 수 있으며, 여기서 더 효율적인 위치, 즉 HMB 또는 NAND가 부트 동작에 이용될 것이다.
블록 402에서, 정적 구성이 설정되며, 여기서 "탐색-이용" 인자 또는 EE-인자는 5이다. EE-인자는 약 0 내지 약 100의 값들을 포함할 수 있다. 블록 404에서, 컨트롤러는 카운터, 세트 A 및 세트 B를 개시한다. 카운터는 약 0으로 설정된다. 일 실시예에서, 세트 A는 NAND를 지칭하고 세트 B는 HMB를 지칭한다. 도 4의 예에서, 세트 A는 더 빠른 평균 레이턴시를 갖는다. 도 4의 예에서, 세트 A는 NAND로 설정되지만, 세트 A는 HMB일 수 있다는 것이 이해된다. 블록 406에서, 부트 개시 커맨드가 수신된다. 부트 개시 커맨드가 수신될 때, 부트 코드 청크들은 NAND 부트 존으로부터 그리고 HMB 부트 존으로부터 로딩된다.
블록 408에서, 컨트롤러는 카운터의 나머지를 100으로 나눈 값이 100에서 EE-인자를 뺀 값보다 큰지를 결정한다. 카운터의 나머지를 100으로 나눈 값이 100에서 EE-인자를 뺀 값보다 작을 때, 저장 디바이스는 더 낮은 성능 위치로부터의 부트에 대한 현재 평균 추정을 업데이트하기 위해 더 낮은 성능 또는 더 느린 평균 레이턴시를 갖는 부트-소스를 이용할 수 있다. 블록 410에서, 부트에 대한 현재 평균 추정을 업데이트하기 위해 세트 A 또는 NAND로부터의 부트가 실행되는데, 그 이유는 카운터의 나머지를 100으로 나눈 값이 100에서 EE-인자를 뺀 값보다 작기 때문이다. 그러나, 블록 408에서 카운터의 나머지를 100으로 나눈 값이 100에서 EE-인자를 뺀 값보다 큰 경우, 블록 412에서 부트는 세트 B 또는 HMB로부터 실행된다.
블록 414에서, 세트 A 또는 세트 B 중 어느 하나로부터의 부트에 대한 평균 레이턴시 또는 현재 평균 추정이 계산되고, 추적되고, 업데이트된다. 블록 416에서, 컨트롤러는 더 양호한 레이턴시를 나타내는 위치가 A로 마킹되도록 각각의 세트 A 및 B의 평균 레이턴시에 기초하여 부트 위치가 전환될 필요가 있는지를 결정한다. 일반적으로, 50 미만의 EE-인자의 값들에 대해, A가 대부분의 시간에 이용될 것이다. 블록 416에서 전환이 필요한 경우, 블록 418에서, 부트 위치들이 전환된다. 그 후에, 블록 420에서 카운터가 1만큼 증가되고, 블록 406에서 다음 부트 동작이 시작된다. 예를 들어, 컨트롤러는 NAND와 같은 하나 이상의 메모리 디바이스로부터 부트 코드 청크들을 수신하고, 호스트 컴퓨터 시스템의 HMB와 같은 호스트 디바이스로부터 부트 코드 청크들을 수신하는 것으로 전환할 수 있다. 다른 예에서, 컨트롤러는 호스트 컴퓨터 시스템의 HMB와 같은 호스트 디바이스로부터 부트 코드 청크들을 수신하고, NAND와 같은 하나 이상의 메모리 디바이스로부터 부트 코드 청크들을 수신하는 것으로 전환할 수 있다. 블록 416에서 부트 위치가 제1 부트 위치로부터 제2 부트 위치로 전환할 필요가 없다면, 블록 420에서 카운터는 1만큼 증가하고, 블록 406에서 다음 부트 프로세스(400)가 시작된다. 몇몇 실시예들에서, 부트 프로세스(400)는 각각의 위치의 평균 레이턴시를 최적화하기 위해 HMB 및 NAND에 불균등하게 부트 코드 청크들을 책정하는 데 이용될 수 있다.
메모리 디바이스 및 호스트 메모리 버퍼 둘 모두로부터의 부트 코드 청크들을 이용함으로써, 데이터 저장 디바이스의 부트 절차에 대한 레이턴시가 감소된다.
일 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 컨트롤러는 호스트 디바이스로부터 부트 코드의 부트 코드 청크들을 수신하고; 하나 이상의 메모리 디바이스들로부터 부트 코드의 부트 코드 청크들을 수신하도록 구성된다. 부트 코드는 미리 결정된 크기의 20개의 청크들을 포함한다. 호스트 디바이스로부터 수신된 부트 코드 청크들은 부트 코드의 제1 절반을 위한 것이고, 하나 이상의 메모리 디바이스들로부터 수신된 부트 코드 청크들은 부트 코드의 제2 절반을 위한 것이다. 호스트 디바이스로부터 수신된 부트 코드 청크들의 수는 하나 이상의 메모리 디바이스들로부터 수신된 부트 코드 청크들의 수와는 상이하다. 수신된 각각의 부트 코드 청크는 인증 서명을 갖고, 컨트롤러는 각각의 부트 코드 청크가 유효 인증 서명을 갖는지를 결정하도록 구성된다. 인증 서명이 특정 부트 코드 청크에 대해 무효임을 결정한 때, 컨트롤러는 무효한 특정 부트 코드 청크를 전송한 호스트 디바이스 또는 하나 이상의 메모리 디바이스들 중 다른 것으로부터 특정 부트 코드 청크를 수신하도록 구성된다. 컨트롤러는 각각의 부트 코드 청크를 로딩한 후에 각각의 부트 코드 청크가 유효 인증 서명을 갖는지를 결정하도록 구성된다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 컨트롤러는 호스트 디바이스 및 하나 이상의 메모리 디바이스들 둘 모두로부터 부트 코드의 부트 코드 청크들을 수신하고; 부트 코드 청크들 전부가 수신되었음을 확인하고; 부트 코드에 대한 인증 서명들을 확인하고; 부트 코드 청크가 무효였는지를 결정하고; 무효 부트 코드 청크가 호스트 디바이스로부터 온 것인지 또는 하나 이상의 메모리 디바이스들로부터 온 것인지를 결정하고; 호스트 디바이스 및 하나 이상의 메모리 디바이스 중 어느 쪽이든 무효 부트 코드 청크를 전달하지 않은 것으로부터 유효 부트 코드 청크를 수신하도록 구성된다. 컨트롤러는 하나 이상의 부트 청크들의 다수의 사본들을 수신하도록 구성된다. 컨트롤러는 하나 이상의 메모리 디바이스들 및 호스트 디바이스 둘 모두로부터 평균적으로 수신된 부트 코드 청크들의 수를 추적하도록 구성된다. 평균 초과의 하나의 추가적인 부트 코드 청크가 호스트 디바이스 및 하나 이상의 메모리 디바이스들 각각에 배치된다. 컨트롤러는 상이한 순서로 호스트 디바이스 및 하나 이상의 메모리 디바이스들로부터 부트 코드 청크들을 수신한다. 컨트롤러는 호스트 디바이스 또는 하나 이상의 메모리 디바이스들 중 어느 하나로부터 부트 코드 청크들의 절반 초과를 수신한다. 부트 코드에 대한 인증 서명들은 호스트 디바이스 및 하나 이상의 메모리 디바이스들 둘 모두로부터 수신된다.
다른 실시예에서, 데이터 저장 디바이스는 하나 이상의 메모리 디바이스들; 및 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 컨트롤러는 하나 이상의 메모리 디바이스들 또는 호스트 디바이스 중 어느 하나로부터 부트 코드의 부트 코드 청크들을 수신하고; 미리 결정된 수의 데이터 저장 디바이스 부트들 후에, 하나 이상의 메모리 디바이스들 또는 호스트 디바이스 중 다른 것으로부터 부트 데이터 청크들을 수신하고; 하나 이상의 메모리 디바이스들로부터 부트 코드를 수신하기 위한 평균 레이턴시가 호스트 디바이스로부터 부트 코드를 수신하기 위한 평균 레이턴시와는 상이한지를 결정하도록 구성된다. 컨트롤러는 하나 이상의 메모리 디바이스들로부터 부트 코드 청크들을 수신하고 호스트 디바이스로부터 부트 코드 청크들을 수신하는 것으로 전환하도록 추가로 구성된다. 컨트롤러는 호스트 디바이스로부터 부트 코드 청크들을 수신하고 하나 이상의 메모리 디바이스들로부터 부트 코드 청크들을 수신하는 것으로 전환하도록 추가로 구성된다. 컨트롤러는 하나 이상의 메모리 디바이스들 및 호스트 디바이스 둘 모두에 대해 부트 코드들을 수신하기 위한 평균 레이턴시를 계산하도록 구성된다. 컨트롤러는 미리 결정된 수의 데이터 저장 디바이스 부트들이 발생할 때까지 부트가 발생할 때마다 내부 카운터를 증가시키도록 구성된다. 컨트롤러는 하나 이상의 메모리 디바이스 부트 코드 청크들 및 호스트 디바이스 부트 코드 청크들 둘 모두를 처리하는 부트 로직을 포함한다.
전술한 것은 본 개시의 실시예들에 관한 것이지만, 본 개시의 다른 및 추가 실시예들이 본 개시의 기본 범위로부터 벗어남이 없이 고안될 수 있으며, 본 개시의 범위는 후속하는 청구범위에 의해 결정된다.

Claims (20)

  1. 데이터 저장 디바이스로서,
    하나 이상의 메모리 디바이스들; 및
    상기 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 상기 컨트롤러는,
    호스트 디바이스로부터 부트 코드의 부트 코드 청크들을 수신하고,
    상기 하나 이상의 메모리 디바이스들로부터 상기 부트 코드의 부트 코드 청크들을 수신하도록 구성되는, 데이터 저장 디바이스.
  2. 제1항에 있어서, 상기 부트 코드는 미리 결정된 크기의 20개의 청크들을 포함하는, 데이터 저장 디바이스.
  3. 제1항에 있어서, 상기 호스트 디바이스로부터 수신된 상기 부트 코드 청크들은 상기 부트 코드의 제1 절반을 위한 것이고, 상기 하나 이상의 메모리 디바이스들로부터 수신된 상기 부트 코드 청크들은 상기 부트 코드의 제2 절반을 위한 것인, 데이터 저장 디바이스.
  4. 제1항에 있어서, 상기 호스트 디바이스로부터 수신된 부트 코드 청크들의 수는 상기 하나 이상의 메모리 디바이스들로부터 수신된 부트 코드 청크들의 수와는 상이한, 데이터 저장 디바이스.
  5. 제1항에 있어서, 수신된 각각의 부트 코드 청크는 인증 서명을 갖고, 상기 컨트롤러는 각각의 부트 코드 청크가 유효 인증 서명을 갖는지를 결정하도록 구성되는, 데이터 저장 디바이스.
  6. 제5항에 있어서, 인증 서명이 특정 부트 코드 청크에 대해 무효임을 결정한 때, 상기 컨트롤러는 상기 무효한 특정 부트 코드 청크를 전송한 상기 호스트 디바이스 또는 상기 하나 이상의 메모리 디바이스들 중 다른 것으로부터 상기 특정 부트 코드 청크를 수신하도록 구성되는, 데이터 저장 디바이스.
  7. 제5항에 있어서, 상기 컨트롤러는 각각의 부트 코드 청크를 로딩한 후에 각각의 부트 코드 청크가 유효 인증 서명을 갖는지를 결정하도록 구성되는, 데이터 저장 디바이스.
  8. 데이터 저장 디바이스로서,
    하나 이상의 메모리 디바이스들; 및
    상기 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 상기 컨트롤러는,
    호스트 디바이스 및 상기 하나 이상의 메모리 디바이스들 둘 모두로부터 부트 코드의 부트 코드 청크들을 수신하고,
    부트 코드 청크들 전부가 수신되었음을 확인하고,
    상기 부트 코드에 대한 인증 서명들을 확인하고,
    부트 코드 청크가 무효였는지를 결정하고,
    상기 무효 부트 코드 청크가 상기 호스트 디바이스로부터 온 것인지 또는 상기 하나 이상의 메모리 디바이스들로부터 온 것인지를 결정하고,
    상기 호스트 디바이스 및 상기 하나 이상의 메모리 디바이스 중 어느 쪽이든 상기 무효 부트 코드 청크를 전달하지 않은 것으로부터 유효 부트 코드 청크를 수신하도록 구성되는, 데이터 저장 디바이스.
  9. 제8항에 있어서, 상기 컨트롤러는 하나 이상의 부트 청크들의 다수의 사본들을 수신하도록 구성되는, 데이터 저장 디바이스.
  10. 제8항에 있어서, 상기 컨트롤러는 상기 하나 이상의 메모리 디바이스들 및 상기 호스트 디바이스 각각으로부터 수신된 부트 코드 청크들의 평균 개수를 추적하도록 구성되는, 데이터 저장 디바이스.
  11. 제10항에 있어서, 상기 부트 코드 청크들의 평균 개수를 초과하는 하나의 추가적인 부트 코드 청크가 상기 호스트 디바이스 및 상기 하나 이상의 메모리 디바이스들 각각에 배치되는, 데이터 저장 디바이스.
  12. 제8항에 있어서, 상기 컨트롤러는 상이한 순서로 상기 호스트 디바이스 및 상기 하나 이상의 메모리 디바이스들로부터 상기 부트 코드 청크들을 수신하는, 데이터 저장 디바이스.
  13. 제8항에 있어서, 상기 컨트롤러는 상기 호스트 디바이스 또는 상기 하나 이상의 메모리 디바이스들 중 어느 하나로부터 상기 부트 코드 청크들의 절반 초과를 수신하는, 데이터 저장 디바이스.
  14. 제8항에 있어서, 상기 부트 코드에 대한 상기 인증 서명들은 상기 호스트 디바이스 및 상기 하나 이상의 메모리 디바이스들 둘 모두로부터 수신되는, 데이터 저장 디바이스.
  15. 데이터 저장 디바이스로서,
    하나 이상의 메모리 디바이스들; 및
    상기 하나 이상의 메모리 디바이스들에 결합된 컨트롤러를 포함하며, 상기 컨트롤러는,
    상기 하나 이상의 메모리 디바이스들 또는 호스트 디바이스 중 어느 하나로부터 부트 코드의 부트 코드 청크들을 수신하고,
    미리 결정된 수의 데이터 저장 디바이스 부트들 후에, 상기 하나 이상의 메모리 디바이스들 또는 상기 호스트 디바이스 중 다른 것으로부터 부트 데이터 청크들을 수신하고,
    상기 하나 이상의 메모리 디바이스들로부터 상기 부트 코드를 수신하기 위한 평균 레이턴시가 상기 호스트 디바이스로부터 상기 부트 코드를 수신하기 위한 상기 평균 레이턴시와는 상이한지를 결정하도록 구성되는, 데이터 저장 디바이스.
  16. 제15항에 있어서, 상기 컨트롤러는 상기 하나 이상의 메모리 디바이스들로부터 상기 부트 코드 청크들을 수신하고 상기 호스트 디바이스로부터 상기 부트 코드 청크들을 수신하는 것으로 전환하도록 추가로 구성되는, 데이터 저장 디바이스.
  17. 제15항에 있어서, 상기 컨트롤러는 상기 호스트 디바이스로부터 상기 부트 코드 청크들을 수신하고 상기 하나 이상의 메모리 디바이스들로부터 상기 부트 코드 청크들을 수신하는 것으로 전환하도록 추가로 구성되는, 데이터 저장 디바이스.
  18. 제15항에 있어서, 상기 컨트롤러는 상기 하나 이상의 메모리 디바이스들 및 상기 호스트 디바이스 둘 모두에 대해 상기 부트 코드들을 수신하기 위한 상기 평균 레이턴시를 계산하도록 구성되는, 데이터 저장 디바이스.
  19. 제15항에 있어서, 상기 컨트롤러는 상기 미리 결정된 수의 데이터 저장 디바이스 부트들이 발생할 때까지 부트가 발생할 때마다 내부 카운터를 증가시키도록 구성되는, 데이터 저장 디바이스.
  20. 제15항에 있어서, 상기 컨트롤러는 상기 하나 이상의 메모리 디바이스 부트 코드 청크들 및 상기 호스트 디바이스 부트 코드 청크들 둘 모두를 처리하는 부트 로직을 포함하는, 데이터 저장 디바이스.
KR1020210080054A 2020-07-17 2021-06-21 메모리 디바이스들의 병렬 부트 실행 KR102621493B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/932,477 2020-07-17
US16/932,477 US11734018B2 (en) 2020-07-17 2020-07-17 Parallel boot execution of memory devices

Publications (2)

Publication Number Publication Date
KR20220010424A KR20220010424A (ko) 2022-01-25
KR102621493B1 true KR102621493B1 (ko) 2024-01-04

Family

ID=79021236

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210080054A KR102621493B1 (ko) 2020-07-17 2021-06-21 메모리 디바이스들의 병렬 부트 실행

Country Status (4)

Country Link
US (1) US11734018B2 (ko)
KR (1) KR102621493B1 (ko)
CN (1) CN113946371A (ko)
DE (1) DE102021115360A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11734018B2 (en) 2020-07-17 2023-08-22 Western Digital Technologies, Inc. Parallel boot execution of memory devices

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080229090A1 (en) 2007-03-14 2008-09-18 Sung-Up Choi Memory Card, Memory System Including the Same, and Operating Method thereof
US20130047031A1 (en) 2011-08-16 2013-02-21 Google Inc. Secure recovery apparatus and method
JP5254449B2 (ja) 2009-12-07 2013-08-07 パナソニック株式会社 不揮発性記憶装置、ホスト装置、記憶システム、データ通信方法およびプログラム

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7822978B2 (en) * 2005-07-22 2010-10-26 Intel Corporation Quiescing a manageability engine
US8254568B2 (en) * 2007-01-07 2012-08-28 Apple Inc. Secure booting a computing device
CN102135891B (zh) * 2010-01-21 2013-06-26 杭州华三通信技术有限公司 可实现引导启动的系统及引导启动控制装置和方法
US9575768B1 (en) * 2013-01-08 2017-02-21 Marvell International Ltd. Loading boot code from multiple memories
US9665380B2 (en) * 2013-02-26 2017-05-30 Vmware, Inc. Peer-to-peer network booting
US9563382B2 (en) 2014-06-05 2017-02-07 Sandisk Technologies Llc Methods, systems, and computer readable media for providing flexible host memory buffer
CN104866334B (zh) * 2014-12-12 2018-01-19 北汽福田汽车股份有限公司 一种控制器软件代码分区方法及其运行方法
US10055236B2 (en) 2015-07-02 2018-08-21 Sandisk Technologies Llc Runtime data storage and/or retrieval
US10025600B2 (en) * 2015-10-02 2018-07-17 Google Llc NAND-based verified boot
US20170242606A1 (en) 2016-02-19 2017-08-24 Sandisk Technologies Llc Methods and systems for transitioning to and from different storage device power states using host memory buffer (hmb)
US9983889B1 (en) * 2016-05-13 2018-05-29 Xilinx, Inc. Booting of integrated circuits
US10452404B2 (en) * 2016-07-28 2019-10-22 Microsoft Technology Licensing, Llc. Optimized UEFI reboot process
US10360156B2 (en) 2016-08-04 2019-07-23 Samsung Electronics Co., Ltd. Data storage device using host memory and method of operating same
US10725792B2 (en) 2016-12-15 2020-07-28 Western Digital Technologies, Inc. Non-volatile storage device with multiple boot partitions
US10474473B2 (en) * 2017-04-11 2019-11-12 Intel Corporation Technology to facilitate rapid booting with high-speed and low-speed nonvolatile memory
US10712949B2 (en) 2017-11-09 2020-07-14 Western Digital Technologies, Inc. Adaptive device quality of service by host memory buffer range
US10445088B2 (en) * 2018-01-11 2019-10-15 Macronix International Co., Ltd. System boot code clone
US20190042460A1 (en) 2018-02-07 2019-02-07 Intel Corporation Method and apparatus to accelerate shutdown and startup of a solid-state drive
US10558367B2 (en) 2018-03-08 2020-02-11 Western Digital Technologies, Inc. Adaptive transaction layer packet for latency balancing
US10613778B2 (en) 2018-03-21 2020-04-07 Western Digital Technologies, Inc. Dynamic host memory allocation to a memory controller
US10664600B2 (en) * 2018-03-23 2020-05-26 Intel Corporation Mechanisms for booting a computing device and programmable circuit
KR20200050169A (ko) 2018-11-01 2020-05-11 삼성전자주식회사 스토리지 장치, 스토리지 시스템 및 스토리지 장치의 동작 방법
KR102599188B1 (ko) * 2018-11-09 2023-11-08 삼성전자주식회사 호스트 메모리를 사용하는 스토리지 장치 및 그것의 동작 방법
CN109901847B (zh) * 2019-01-22 2022-06-21 珠海亿智电子科技有限公司 一种基于存储卡的量产系统固件量产方法
US11010095B2 (en) 2019-07-25 2021-05-18 Western Digital Technologies, Inc. Dynamic and adaptive data read request scheduling
CN111008045B (zh) * 2019-11-14 2023-03-21 中国航空工业集团公司洛阳电光设备研究所 一种片外flash大容量程序自动加载方法
KR20210080761A (ko) 2019-12-23 2021-07-01 삼성전자주식회사 컴플리션 타이밍을 관리하는 스토리지 컨트롤러, 및 이의 동작 방법
US11734018B2 (en) 2020-07-17 2023-08-22 Western Digital Technologies, Inc. Parallel boot execution of memory devices

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080229090A1 (en) 2007-03-14 2008-09-18 Sung-Up Choi Memory Card, Memory System Including the Same, and Operating Method thereof
JP5254449B2 (ja) 2009-12-07 2013-08-07 パナソニック株式会社 不揮発性記憶装置、ホスト装置、記憶システム、データ通信方法およびプログラム
US20130047031A1 (en) 2011-08-16 2013-02-21 Google Inc. Secure recovery apparatus and method

Also Published As

Publication number Publication date
US20220019443A1 (en) 2022-01-20
US11734018B2 (en) 2023-08-22
KR20220010424A (ko) 2022-01-25
CN113946371A (zh) 2022-01-18
DE102021115360A1 (de) 2022-01-20

Similar Documents

Publication Publication Date Title
US11954369B2 (en) Command draining using host memory buffer
US11861217B2 (en) DRAM-less SSD with command draining
WO2022216344A1 (en) Enhanced d3-c0ld and faster recovery
US11513736B2 (en) Revised host command generation for unaligned access
WO2022225590A1 (en) Cache based flow for a simple copy command
KR102621493B1 (ko) 메모리 디바이스들의 병렬 부트 실행
US20220075560A1 (en) NVMe Simple Copy Command Support Using Dummy Virtual Function
US20210389885A1 (en) Fast Recovery For Persistent Memory Region (PMR) of a Data Storage Device
US20220413726A1 (en) Adaptive Host Memory Buffer Traffic Control Based On Real Time Feedback
US11966582B2 (en) Data storage device that detects and releases bottlenecks
US11561735B2 (en) Latency on indirect admin commands
US11640335B2 (en) Multiple function level reset management
US20230214254A1 (en) PCIe TLP Size And Alignment Management
US11726715B2 (en) Efficient data path in compare command execution
US20240111426A1 (en) Data Storage Device That Detects and Releases Bottlenecks In Hardware
US11836384B2 (en) Automatic prediction timers adaptation
US11838033B1 (en) Partial speed changes to improve in-order transfer
US20240111427A1 (en) Data Storage Device That Detects And Releases Input Queue Bottlenecks
US11726911B2 (en) NVMe persistent memory region quick copy
US20230289226A1 (en) Instant Submission Queue Release
US20230297277A1 (en) Combining Operations During Reset
US20230315285A1 (en) Storage Optimization Of CAT Table During Background Operations
WO2024019826A1 (en) Accelerated encryption during power loss

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