KR20210084632A - 오픈 채널 벡터 커맨드 실행 - Google Patents

오픈 채널 벡터 커맨드 실행 Download PDF

Info

Publication number
KR20210084632A
KR20210084632A KR1020217018293A KR20217018293A KR20210084632A KR 20210084632 A KR20210084632 A KR 20210084632A KR 1020217018293 A KR1020217018293 A KR 1020217018293A KR 20217018293 A KR20217018293 A KR 20217018293A KR 20210084632 A KR20210084632 A KR 20210084632A
Authority
KR
South Korea
Prior art keywords
vector
command
commands
memory
controller
Prior art date
Application number
KR1020217018293A
Other languages
English (en)
Other versions
KR102645983B1 (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 KR20210084632A publication Critical patent/KR20210084632A/ko
Application granted granted Critical
Publication of KR102645983B1 publication Critical patent/KR102645983B1/ko

Links

Images

Classifications

    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Advance Control (AREA)

Abstract

호스트 컴퓨팅 디바이스로부터의 입력/출력 커맨드들을 분석하여 커맨드들이 벡터 커맨드를 포함하는지 또는 비-벡터 커맨드를 포함하는지를 결정하도록 구성되고, 벡터 커맨드에 포함된 물리 어드레스들에 기초하여 복수의 비-벡터 커맨드를 생성하도록 구성된 솔리드 스테이트 드라이브 제어기를 제공하는 방법 및 장치.

Description

오픈 채널 벡터 커맨드 실행
관련 출원의 상호 참조
본 출원은 2019년 7월 1일자로 출원된 미국 출원 제16/459,183호에 대한 우선권을 주장하며, 이 미국 출원은 이것의 양수인에게 양도되고 전체적으로 본 명세서에 참고로 포함된다.
본 개시의 배경
기술분야
본 개시의 실시예들은 일반적으로 메모리 디바이스 상에서 벡터 커맨드들을 실행하기 위한 시스템들 및 방법들에 관한 것이다.
솔리드 스테이트 드라이브(SSD) 저장 디바이스는 제어기 및 SSD 메모리(예를 들어, 비휘발성 NAND 플래시)로 일반적으로 구성되는 데이터 저장 디바이스이다. 모든 SSD 저장 디바이스들에서, 제어기는 하나 이상의 호스트 컴퓨팅 시스템과 SSD 메모리 사이에 위치한다. SSD 저장 디바이스는 플래시 변환 계층(FTL)을 사용하여 호스트와 상호작용한다.
최근에, 오픈 채널 SSD들로 알려진 새로운 부류의 SSD들이 개발되었다. 오픈 채널 SSD들은, 그들이 호스트에 대한 SSD 메모리 구조의 내부 매핑을 노출시켜, 호스트가 전통적인 논리 어드레스들 대신에 물리 어드레스들을 사용하여 데이터 배치 및 데이터 입력/출력(I/O) 스케줄링을 수행할 수 있게 한다는 점에서, 전통적인 SSD와는 상이하다. 따라서, 오픈 채널 SSD는 호스트가 처리할 FTL의 소정 태양들을 남기는 능력을 갖는다. 호스트가 이전에 저장 디바이스로 이관되었던 추가적인 책임을 떠맡음에 따라, 벡터 커맨드들과 같은 추가적인 커맨드들이 SSD들의 기능을 향상시키는 데 사용될 수 있다.
따라서, 디지털 저장 솔루션들에 대한 요구가 계속 증가함에 따라, 필요한 것은 증가하는 요구를 충족시키기 위해서뿐만 아니라, 사용자 경험을 진전시키고 향상시키기 위해 추가적인 벡터 커맨드들을 지원하는 새로운 방법들이다.
본 개시는 일반적으로 호스트 컴퓨팅 디바이스로부터의 입력/출력 커맨드들을 분석하여 커맨드들이 벡터 커맨드를 포함하는지 또는 비-벡터 커맨드를 포함하는지를 결정하고, 벡터 커맨드에 포함된 물리 어드레스들에 기초하여 복수의 비-벡터 커맨드를 생성하도록 구성된 솔리드 스테이트 드라이브 제어기를 제공하는 방법 및 장치에 관한 것이다.
일 실시예에서, 본 개시는 메모리 및 메모리에 통신 가능하게 결합된 제어기를 포함하는 디바이스를 설명하며, 제어기는 호스트 컴퓨팅 디바이스로부터 페치된 벡터 커맨드에서 물리 어드레스들의 세트를 식별하도록 구성되고, 물리 어드레스들의 세트 중의 각각의 물리 어드레스는 메모리 내의 위치에 대응한다. 몇몇 실시예들에서, 제어기는 또한 비-벡터 커맨드들의 세트를 생성하도록 구성되고, 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 물리 어드레스들의 세트 내의 각각의 물리 어드레스 중 하나에 대응한다. 몇몇 실시예들에서, 제어기는 또한 비-벡터 커맨드들의 세트를 실행하도록 구성된다. 몇몇 실시예들에서, 제어기는 비-벡터 커맨드들의 세트의 실행에 응답하여 벡터 커맨드의 완료를 나타내는 호스트 컴퓨팅 디바이스에 대한 메시지를 생성하도록 구성된다.
다른 실시예에서, 본 개시는 메모리 및 메모리에 통신 가능하게 결합된 제어기를 포함하는 디바이스를 설명하며, 제어기는 메모리가 비-벡터 커맨드를 실행했다는 표시를 수신하도록 구성되고, 비-벡터 커맨드는 호스트 컴퓨팅 디바이스로부터 수신된 벡터 커맨드에 대응하는 복수의 비-벡터 커맨드 중 하나이다. 몇몇 실시예들에서, 제어기는 또한 메모리가 벡터 커맨드에 대응하는 복수의 비-벡터 커맨드 전부를 실행했는지를 결정하도록 구성된다. 몇몇 실시예들에서, 제어기는 또한 메모리가 복수의 비-벡터 커맨드 각각을 실행한 경우 벡터 커맨드의 실행을 나타내는 완료 메시지를 생성하도록 구성된다. 몇몇 실시예들에서, 제어기는 또한 완료 메시지를 호스트 컴퓨팅 디바이스에 송신하도록 구성된다.
다른 실시예에서, 본 개시는 장치를 설명한다. 일례에서, 장치는 호스트 디바이스로부터 벡터 커맨드를 수신하기 위한 수단을 포함하며, 벡터 커맨드는 물리 어드레스들의 세트를 포함한다. 다른 예에서, 장치는 비-벡터 커맨드들의 세트를 생성하기 위한 수단을 포함하며, 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 물리 어드레스들의 세트 내의 각각의 물리 어드레스 중 하나에 대응하고, 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 디지털 데이터를 저장하기 위한 수단에 의해 실행되도록 구성된다. 다른 예에서, 장치는 디지털 데이터를 저장하기 위한 수단에 의한 비-벡터 커맨드들의 세트의 실행에 응답하여 벡터 커맨드의 완료를 나타내는 호스트 컴퓨팅 디바이스에 대한 메시지를 생성하기 위한 수단을 포함한다.
상기에 언급된 본 개시의 특징들이 상세히 이해될 수 있는 방식으로, 상기에 간략하게 요약된 본 개시의 보다 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 이들 실시예 중 일부가 첨부 도면에 예시되어 있다. 그러나, 첨부 도면은 단지 본 개시의 전형적인 실시예를 예시할 뿐이며 그에 따라, 본 개시에 대해 다른 동등하게 효과적인 실시예들로 인정될 수 있는, 본 개시의 범위의 제한으로 간주되어서는 안된다는 점에 유의해야 한다.
도 1은 본 개시의 소정 태양들에 따른, 호스트 컴퓨터 시스템에 통신 가능하게 결합된 메모리 디바이스의 블록도이다.
도 2는 본 개시의 소정 태양들에 따른, 오픈 채널 솔리드 스테이트 드라이브(SSD)의 내부 병렬 구성의 논리적 표현을 예시하는 블록도이다.
도 3은 본 개시의 소정 태양들에 따른, 벡터 커맨드를 실행하기 위한 예시적인 프로세스를 예시하는 흐름도이다.
도 4는 본 개시의 소정 태양들에 따른 벡터 커맨드 완료 메시지를 생성하기 위한 예시적인 프로세스를 예시하는 흐름도이다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지시하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
하기에서, 본 개시의 실시예들을 참조한다. 그러나, 본 개시는 설명된 특정 실시예들로 제한되지 않는다는 것이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합이, 상이한 실시예들과 관련되든지 또는 그렇지 않든지 간에, 본 개시를 구현하고 실시하기 위해 고려된다. 게다가, 본 개시의 실시예가 다른 가능한 해법들에 비해 그리고/또는 종래 기술에 비해 이점을 달성할 수 있지만, 특정 이점이 주어진 실시예에 의해 달성되는지 여부는 본 개시의 제한이 아니다. 따라서, 하기의 태양들, 특징들, 실시예들, 및 이점들은 단지 예시적인 것이며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한으로 간주되지 않는다. 마찬가지로, "본 개시"에 대한 언급은 본 명세서에 개시되는 임의의 독창적인 주제의 일반화로서 해석되어서는 안되며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한인 것으로 간주되어서는 안된다.
본 개시는 호스트 컴퓨팅 디바이스로부터의 입력/출력(I/O) 커맨드들을 분석하여 커맨드들이 벡터 커맨드를 포함하는지 또는 비-벡터 커맨드를 포함하는지를 결정하고, 벡터 커맨드에 포함된 물리 어드레스들에 기초하여 복수의 비-벡터 커맨드를 생성하는 솔리드 스테이트 드라이브 제어기를 제공하는 방법 및 장치에 관한 것이다.
도 1은 저장 디바이스(108)에 통신 가능하게 결합된 호스트 컴퓨팅 시스템(102)을 포함하는 시스템(100)의 일 실시예의 개략도이다. 저장 디바이스(108)는 제어기(110) 및 비휘발성 메모리(NVM), 예컨대 플래시 메모리 셀들(예를 들어, 단일 레벨 셀들(SLC)(136), 멀티 레벨 셀들(MLC), 트라이 레벨 셀들(TLC)(138) 등)의 하나 이상의 다이들 또는 평면들로 구성된 솔리드 스테이트 드라이브(SSD)(134)를 포함한다. 호스트(102)는 SSD(134)에서의 판독, 기입, 복사, 및 리셋(예를 들어, 소거)을 포함한 메모리 동작들을 위한 I/O 커맨드들을 발행하기 위해 저장 디바이스(108)와 인터페이스한다.
저장 디바이스(108)는 노트북 하드 드라이브 또는 데스크톱 하드 드라이브와 같은 내부 저장소 드라이브일 수 있다. 저장 디바이스(108)는 메모리 카드(예컨대, SD(secure digital) 카드, 마이크로-SD(micro secure digital) 카드, 또는 MMC(multimedia card)) 또는 USB(universal serial bus) 디바이스와 같은 핸드헬드 이동식 메모리 디바이스와 같은, 그러나 이로 제한되지 않는 이동식 대용량 저장 디바이스일 수 있다. 저장 디바이스(108)는 호스트(108)에 임베드된, eSD/eMMC 임베디드 플래시 드라이브와 같은, 임베디드 대용량 저장 디바이스의 형태를 취할 수 있다. 저장 디바이스(108)는 또한 임의의 다른 타입의 내부 저장 디바이스, 이동식 저장 디바이스, 임베디드 저장 디바이스, 외부 저장 디바이스, 또는 네트워크 저장 디바이스일 수 있다.
호스트(102)는 컴퓨터 서버, NAS(network attached storage) 유닛, 데스크톱 컴퓨터, 노트북(즉, 랩톱) 컴퓨터, 태블릿 컴퓨터(즉, "스마트" 패드), 셋톱 박스, 전화 핸드셋(즉, "스마트" 폰), 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게이밍 콘솔, 비디오 스트리밍 디바이스, 및 자동차 애플리케이션(즉, 매핑, 자율 주행)과 같은 광범위한 디바이스들을 포함할 수 있다. 소정 실시예에서, 호스트(102)는 범용 프로세싱 유닛, 전용 하드웨어(예컨대, ASIC(application specific integrated circuit)), FPGA(field programmable gate array)와 같은 설정 가능 하드웨어, 또는 소프트웨어 명령어, 마이크로코드, 또는 펌웨어에 의해 구성된 임의의 다른 형태의 프로세싱 유닛을 비롯해, 데이터를 프로세싱할 수 있는 프로세싱 유닛 또는 임의의 형태의 하드웨어를 갖는 임의의 디바이스를 포함한다.
몇몇 구성들에서, 호스트(102)는 DRAM 또는 다른 메인 메모리들과 같은 호스트 메모리(106)에 접속된 중앙 처리 유닛(CPU)(104)을 포함한다. 애플리케이션 프로그램이 CPU(104)에 의한 실행을 위해 호스트 메모리(106)에 저장될 수 있다. 예를 들어, 호스트 메모리(106)는 프로세서(104)에 의해 실행 가능한 컴퓨터 판독 가능 프로그램 코드(예컨대, 소프트웨어 또는 펌웨어)를 저장하는 컴퓨터 판독 가능 매체를 포함할 수 있다. 호스트(102)는 아래에서 기술되고 흐름도들에 도시된 다양한 기능들을 수행하기 위한 하드웨어 및/또는 펌웨어로 구성될 수 있다.
저장 디바이스(108)는 호스트(102)로부터 저장 디바이스(108)로의 통신들의 진입 및 저장 디바이스(108)로부터 호스트(102)로의 통신들의 진출을 위한 물리적(PHY) 인터페이스 컴포넌트들(114)을 포함한다. 저장 디바이스(108)와 호스트(102) 사이의 링크는 PCIe(peripheral component interconnect express) 링크와 같은, 임의의 적절한 링크를 포함할 수 있다. PCIe 링크는 전용 단방향 직렬 점대점 접속들 또는 "레인들"을 통해 저장 디바이스(108)와 호스트(102) 사이의 전이중 통신을 지원한다. PCIe 링크는 저장 디바이스(108)와 호스트(102) 사이의 이용 가능한 PHY들(114)의 수에 따라 1개 내지 32개의 레인을 포함할 수 있다.
저장 디바이스(108)와 호스트(102) 사이의 통신은 PCIe 직렬 통신 프로토콜 또는 다른 적합한 통신 프로토콜들과 같은, 통신 프로토콜 하에서 동작할 수 있다. 다른 적합한 통신 프로토콜들은 이더넷, SAS(serial attached SCSI), SATA(serial AT attachment), RDMA(remote direct memory access), 예컨대 인피니밴드(Infiniband), iWARP, 또는 RoCE(RDMA over Converged Ethernet)와 관련된 임의의 프로토콜, 및 다른 적합한 직렬 통신 프로토콜들을 포함한다. 저장 디바이스(108)는 또한 스위치 또는 브리지를 통해 호스트(102)에 접속될 수 있다.
저장 디바이스(108)의 SSD(134)는 전력 온/오프 사이클들 후 정보의 장기 저장을 위해 구성된 비휘발성 메모리 공간을 포함할 수 있다. 몇몇 예들에서, SSD(134)는 NAND 플래시 메모리, EPROM(electrically programmable read only memory), EEPROM(electrically erasable programmable read only memory), 및 다른 솔리드 스테이트 메모리의 하나 이상의 다이 또는 평면으로 이루어질 수 있다.
저장 디바이스(108)는 SSD(134)에의 기입들 및 그로부터의 판독들과 같은, 저장 디바이스(108)의 동작들을 관리하는 제어기(110)를 포함한다. 제어기(110)는 멀티 코어 프로세서들일 수 있는, 하나 이상의 프로세서들(112)을 포함한다. 프로세서(112)는 펌웨어 코드를 통해 저장 디바이스(108)의 컴포넌트들을 처리한다.
제어기(110)는 NVMe(NVM Express) 프로토콜 하에서 동작할 수 있지만, 다른 프로토콜들이 적용 가능하다. NVMe 프로토콜은 PCIe 인터페이스(예컨대, PHY(114))를 통해 링크된 호스트 및 저장 디바이스를 통해 SSD들이 동작하도록 개발된 통신 인터페이스/프로토콜이다. NVMe 프로토콜은 호스트(102)에 의해 저장 디바이스(108)에 저장된 데이터의 액세스를 위한 커맨드 제출 큐 및 커맨드 완료 큐를 제공한다. 저장 디바이스(108)는 호스트 메모리(106)에 저장된 호스트 큐들의 커맨드 제출 큐로부터 호스트(102) 커맨드들을 페치, 수신 또는 판독할 수 있다.
제어기(110)는 컴퓨터 판독 가능 프로그램 코드(예컨대, 소프트웨어 및/또는 펌웨어) 실행 가능 명령어들(본 명세서에서 "명령어들"로 지칭됨)을 실행한다. 명령어들은 제어기(110)의 다양한 컴포넌트, 예컨대 프로세서(112), 논리 게이트, 스위치, ASIC(application specific integrated circuit), 프로그래밍 가능 논리 제어기, 임베디드 마이크로컨트롤러, 및 제어기(110)의 다른 컴포넌트에 의해 실행될 수 있다.
명령어들은 비일시적 컴퓨터 판독 가능 저장 매체에 저장된다. 몇몇 실시예들에서, 명령어들은 저장 디바이스(108)의 비일시적 컴퓨터 판독 가능 저장 매체에, 예컨대 판독 전용 메모리에 또는 SSD(134)에 저장된다. 저장 디바이스(108)에 저장된 명령어들은 호스트(102)로부터의 추가 입력 또는 지시 없이 실행될 수 있다. 다른 실시예들에서, 명령어들은 호스트(102)로부터 송신된다. 제어기(110)는 본 명세서에 기술되고 도면에 도시된 다양한 기능을 수행하기 위한 하드웨어 및 명령어들로 구성된다.
저장 디바이스(102)는 또한 플래시 인터페이스 모듈(130), DMA(direct memory access) 모듈(126), 스케줄러(128), 커맨드 실행기(120), 및 제어 경로(124)와 같은 다른 컴포넌트들을 포함할 수 있다. 플래시 인터페이스 모듈(130)은 오픈 채널 SSD(예를 들어, SSD(134))를 제어하고 그에 액세스하기 위한 다양한 I/O 커맨드들과 연관된 동작들을 위해 SSD(134)와 상호작용한다. DMA 모듈(126)은 호스트(102)와 저장 디바이스(108) 사이의 실제 데이터 전송을 제어하도록 구성된다. 스케줄러(128)는 도 1에 예시된 다양한 컴포넌트들을 활성화하고 스케줄링하도록 구성된다. 예를 들어, 스케줄러(128)는 물리적 페이지 영역들(PRP들)을 페치하기 위해 제어 경로(124)를 활성화하고, 완료 요청들 및 인터럽트들을 포스팅하고, 호스트(102)와 저장 디바이스(108) 사이의 실제 데이터 전송을 위해 DMA들을 활성화하는 동안 데이터 전송을 제어한다. 제어 경로(124)는 호스트(102)와 저장 디바이스(108) 사이에서 제어 정보를 전송하고, 완료 요청들을 벡터 완료기(122)에 제공하도록 구성된다. 커맨드 파서(118)는 벡터 커맨드 변환기(116)로부터 수신된 커맨드들을 파싱 및 큐잉하고, 커맨드들을 커맨드 실행기(120)에 통신하도록 구성된다. 커맨드 실행기(120)는 커맨드 파서(118)로부터 수신된 커맨드들을 중재하고 실행하도록 구성된다.
벡터 커맨드 변환기(116) 및 벡터 완료기(122)는 호스트(102)로부터의 벡터 타입 커맨드들을 지원하기 위한 디바이스 제어기(110) 상의 하드웨어, 펌웨어, 및/또는 소프트웨어 구현 중 하나 이상과 관련될 수 있다. 몇몇 구성들에서, 벡터 커맨드 변환기(116)는 호스트(102)로부터 수신된 I/O 커맨드들을 모니터링한다. 벡터 커맨드 변환기(116)는 I/O 커맨드가 벡터 커맨드인지 또는 비-벡터 커맨드인지를 결정할 수 있다. 예를 들어, 벡터 커맨드 변환기(116)는 I/O 커맨드가 분산-수집 논리 블록 어드레스들의 리스트를 포함하는 여분의 필드를 포함하는지에 기초하여 I/O 커맨드를 벡터 커맨드로서 식별할 수 있다. I/O 커맨드가 벡터 커맨드가 아니면(예를 들어, 분산-수집 논리 블록 어드레스들의 리스트를 포함하지 않으면), 비-벡터 I/O 커맨드는 실행을 위해 커맨드 파서에 통신된다. 그렇지 않으면, 벡터 커맨드 변환기(116)는 제어 경로(124)를 통해 벡터 커맨드의 메타데이터를 페치하고, 호스트(102)로부터 새로운 커맨드들을 페치하는 것을 일시적으로 중단한다.
몇몇 구성들에서, 벡터 커맨드 변환기(116)는 단일 벡터 커맨드에 기초하여 복수의 비-벡터 I/O 커맨드를 생성한다. 몇몇 경우들에서, 복수의 비-벡터 I/O 커맨드의 전체 세트는 단일 벡터 커맨드와 논리적으로 동등하다. 몇몇 예들에서, 복수의 비-벡터 I/O 커맨드는 벡터 커맨드에 포함된 포인터들을 물리 어드레스들로 변환하고, 각각의 물리 어드레스에 대한 비-벡터 I/O 커맨드를 생성함으로써 생성된다. 벡터 커맨드 변환기(116)는 이어서 비-벡터 I/O 커맨드들을 실행을 위해 커맨드 파서(118)에 큐잉할 수 있다. 일단 비-벡터 I/O 커맨드들이 큐잉되면, 디바이스 제어기(110)는 호스트(102)로부터 새로운 I/O 커맨드들을 페치하는 것을 재개할 수 있다. 본 명세서에서 사용되는 바와 같이, 벡터 커맨드는 호스트(102)에 의해 생성된 커맨드들의 리스트 또는 세트일 수 있다. 복수의 물리 어드레스가 SSD에서 복수의 메모리 위치를 지정하기 위해 각각의 벡터 커맨드에 할당될 수 있다. 몇몇 구성들에서, 벡터 커맨드는 호스트 메모리(106)에 저장된 메타데이터에 대한 포인터를 포함할 수 있다. 이러한 구성에서, 메타데이터는 SSD(134)에 액세스하기 위한 물리 어드레스 리스트를 포함한다.
몇몇 구성들에서, 벡터 완료기(122)는 벡터 커맨드 변환기(116)에 의해 생성된 복수의 비-벡터 I/O 커맨드와 연관된 모든 완료 메시지들을 수집한다. 처음에, 수집된 완료 메시지들은 호스트(102)에 제공되지 않을 것이다. 대신에, 일단 복수의 비-벡터 I/O 커맨드와 연관된 모든 완료 메시지들이 수신되면, 벡터 완료기(122)는 복수의 비-벡터 I/O 커맨드와 연관된 모든 완료 요청들의 내용에 기초하여 벡터 커맨드 완료 메시지를 생성한다. 즉, 벡터 커맨드 완료 메시지는 호스트(102)로부터 수신되고 복수의 비-벡터 I/O 커맨드로 변환된 벡터 커맨드가 완료되었다는 표시이다. 이어서 벡터 완료기(122)는 벡터 커맨드 완료 메시지를 호스트(102)에 제공한다.
몇몇 구성들에서, 디바이스 제어기(110)는 호스트(102)로부터 수신된 I/O 커맨드들(벡터 커맨드들을 포함함)을 처리하고, 데이터 무결성 및 효율적인 저장을 보장하고, SSD(134)를 관리하는 것을 책임진다. 이러한 태스크들을 수행하기 위해, 제어기(110)는 플래시 변환 계층(FTL) 펌웨어를 실행한다. FTL 태스크들은 전술된 컴포넌트들 중 하나 이상을 이용하여 하나 이상의 프로세서들(112)에 의해 실행될 수 있다. FTL은 또한 에러 코드 정정(즉, 에러들을 가진 메시지를 복구하기 위한 중복 데이터 또는 패리티 데이터의 사용); 쓰레기 수집(즉, 미래의 기입들을 위한 자유 공간으로의 삭제를 위해 SSD(134) 메모리 블록들 내의 오래된 데이터를 식별/무효화); 스케줄링(즉, 호스트(102)로부터의 I/O 커맨드들이 실행되는 순서를 제어); 오버-프로비저닝(over-provisioning)(즉, 기입 속도를 유지하기 위해 예약된 메모리); 및 마모 레벨링(wear-leveling)(즉, 디바이스의 모든 블록들이 대략 유사한 레이트로 마모되는 것을 보장하기 위해 기입들을 SSD(134)의 블록들에 걸쳐 가능한 한 균일하게 분산시킴)을 포함한, 다수의 다른 기능들을 수행할 수 있다.
그러나, 몇몇 구성들에서, 호스트(102)는 FTL 태스크들 중 일부 또는 전부를 책임질 수 있다. 예를 들어, SSD(134)는 오픈 채널 SSD와 같은, 물리적으로 어드레싱 가능한 SSD를 포함할 수 있다. 그러한 구성에서, 오픈 채널 SSD는 SSD(134)가 호스트(102)에 의해 직접 관리될 수 있도록 SSD(134)의 내부 병렬 구성을 호스트(102)에 노출시킬 수 있다.
도 2는 오픈 채널 SSD(202)의 내부 병렬 구성의 논리적 표현을 예시하는 블록도이다. SSD(202)의 논리 구조는 하나 이상의 그룹들(204a-204n), 병렬 유닛들(206a-206n)(예를 들어, NAND 다이들 또는 평면들), 및 하나 이상의 논리 블록들(도시되지 않음)을 포함하는 청크들(208a-208b)에 의해 분할된다. 병렬 유닛들(206a-206n) 내에, 논리 블록들의 선형 범위를 나타내는 청크들의 세트가 존재한다. 몇몇 예들에서, 그룹(204a-204n)은 I/O 커맨드들을 병렬 유닛들(206a-206n)에 통신하는 데 사용되는 공유 버스 또는 물리 채널과 관련될 수 있는 반면, 병렬 유닛(206a-206n)은 공유 버스 상의 하나 이상의 NAND 플래시 메모리 디바이스와 관련될 수 있다. 몇몇 예들에서, 청크(208a-208b)는 판독 및 기입을 위한 최소 어드레싱 가능 유닛이고, 논리 블록은 최소 소거 가능 유닛이다.
몇몇 구성들에서, 호스트(102)는 FTL의 태양들을 책임진다. 따라서, 오픈 채널 SSD(202)는 호스트(102)로부터 논리 어드레스 기반 명령을 수신하지 않을 수 있다. 대신에, 호스트(102)는 데이터가 저장되는 오픈 채널 SSD(202)의 물리 어드레스들을 직접 관리할 수 있다. 몇몇 구성들에서, 호스트(102)의 책임들은 데이터 배치 및 I/O 스케줄링을 포함한다. 예를 들어, 호스트(102)는 물리적 어드레싱을 사용하여 데이터 매핑을 제어할 뿐만 아니라, 매핑 테이블 및 다른 메타데이터를 생성할 수 있다.
따라서, 호스트(102)는 분산-수집 논리 블록 어드레스들의 리스트를 통신하도록 구성된 여분의 필드를 포함하는 벡터-타입 커맨드들을 사용하여 I/O 커맨드들을 발행할 수 있다. 벡터 커맨드를 사용하여, 호스트(102)는 단일 I/O 커맨드를 사용하여 별개의 병렬 유닛들(206a-206n)에 동시에 액세스할 수 있다. 그러나, 모든 저장 디바이스들이 벡터 커맨드들을 지원할 수 있는 것은 아닐 수 있다. 예를 들어, 호스트(102)로부터의 비-벡터 I/O 커맨드들은 일반적으로 각각의 커맨드에 대해 단일 NAND 평면으로 지향되는 반면, 벡터 커맨드는 단일 I/O 커맨드에서 병렬로 여러 개의 NAND 평면들로 지향될 수 있다. 본 개시의 소정 태양들에 따르면, 호스트(102)에 의해 발행된 벡터 커맨드들을 지원하도록 디바이스 제어기(110)를 구성하기 위해 최소 하드웨어, 소프트웨어, 및/또는 펌웨어 변경들이 저장 디바이스에 적용될 수 있다.
도 3은 벡터 커맨드를 수신하고 실행하기 위한 예시적인 프로세스(300)를 예시하는 흐름도이다. 프로세스(300)는 예를 들어 (예컨대, 도 1의 저장 디바이스(108)와 같은) 저장 디바이스에 의해 수행될 수 있다. 프로세스(300)는 하나 이상의 프로세서(예를 들어, 도 1의 프로세서(112)) 상에서 실행되고 동작하는, 메모리에 저장된 소프트웨어 및/또는 펌웨어 컴포넌트들로서 구현될 수 있다. 또한, 예시적인 프로세스(300)에서의 저장 디바이스(108)에 의한 신호들의 송신 및 수신은, 예를 들어, 하나 이상의 PHY 인터페이스(예컨대, 도 1의 PHY(114))에 의해 인에이블될 수 있다.
블록 310에서, 저장 디바이스(108)는 호스트 I/O 커맨드를 수신한다. 예를 들어, 저장 디바이스(108)의 디바이스 제어기(110)는 PHY(114) 인터페이스를 통해 호스트(102)로부터 I/O 커맨드를 수신할 수 있다. 몇몇 구성들에서, 디바이스 제어기(110)는 다수(예를 들어, 64개, 256개, 512개 등)의 1-비트 슬롯들을 포함하는 커맨드 레지스터를 포함한다. 디바이스 제어기(110)는 커맨드 레지스터가 임의의 이용 가능한 슬롯들(예를 들어, 이진수 "0"을 갖는 슬롯들)을 갖는지에 기초하여 호스트(102)로부터의 I/O 커맨드들의 수신을 조절할 수 있다.
예를 들어, 디바이스 제어기(110)는 호스트(102)로부터 수신된 각각의 커맨드에 대해 커맨드 레지스터 슬롯들 중 하나를 (예를 들어, 이진수 "1"로) 설정할 수 있다. 따라서, 비트가 설정되면, 대응하는 슬롯은 그와 연관된 디바이스 제어기(110)에 의해 수신된 I/O 커맨드를 갖는다. 비트가 이용 가능한 경우, 슬롯은 비어 있고 디바이스 제어기(110)는 새로운 커맨드에 대해 이용 가능하다.
몇몇 구성들에서, 프로세서(112)는 디바이스 제어기(110)가 새로운 I/O 커맨드를 페치하기 전에 커맨드 레지스터가 임의의 이용 가능한 슬롯들을 포함하는지를 결정할 수 있다. 예를 들어, 프로세서(112)는 디바이스 제어기(110)에 저장된 비트맵 벡터를 이용하여, 호스트(102)로부터 I/O 커맨드를 페치하는 것으로 진행하기 전에 커맨드 레지스터 슬롯이 설정되는지를 결정할 수 있다.
따라서, 몇몇 구성들에서, 디바이스 제어기(110)는 호스트(102)로부터 I/O 커맨드를 페치하기 전에 커맨드 레지스터가 적어도 하나의 이용 가능한 슬롯을 포함하는지를 결정한다. 일단 디바이스 제어기(110)가 슬롯이 이용 가능하다고 결정하면, 디바이스 제어기(110)는 I/O 커맨드를 페치하고 이용 가능한 슬롯을 설정하는 것으로 진행한다. 디바이스 제어기(110)가 이용 가능한 슬롯들이 없다고 결정하면, 디바이스 제어기(110)는 슬롯이 이용 가능해질 때까지 호스트(102)로부터의 I/O 커맨드들의 페치를 디스에이블할 수 있다.
블록 320에서, 디바이스 제어기(110)는 페치된 I/O 커맨드가 벡터 커맨드인지를 결정한다. I/O 커맨드가 벡터 커맨드가 아닌 경우, 프로세스(300)는 블록 330으로 이동하고, 디바이스 제어기(110)는 커맨드의 실행을 위해 커맨드 파서(118)에 큐잉된다. I/O 커맨드가 벡터 커맨드인 경우, 프로세스(300)는 블록 340으로 이동하며, 여기서 디바이스 제어기(110)는 벡터 커맨드에 포함된 물리 어드레스들의 수를 결정하고, 커맨드 슬롯들의 수를 물리 어드레스들의 수 이하로 설정한다. 예를 들어, 벡터 커맨드에 포함된 물리 어드레스들보다 더 적은 이용 가능한 슬롯들이 커맨드 레지스터에 있다면, 벡터 커맨드 변환기(116)는 슬롯들의 수와 동일한 수의 비-벡터 I/O 커맨드들만을 벡터 커맨드로부터 생성하는 것으로 진행할 것인 반면, 나머지 비-벡터 I/O 커맨드들은 하나 이상의 슬롯이 이용 가능하게 될 때(예를 들어, 슬롯들 중 하나에 대응하는 커맨드의 완료 후에) 생성될 것이다.
예를 들어, SSD 디바이스가 호스트(102)로부터의 최대 64개의 I/O 커맨드를 보유할 수 있는 경우, 64개의 커맨드 슬롯이 디바이스 제어기(110)의 커맨드 레지스터에서 구현된다. 64개의 커맨드 슬롯 모두가 설정되면, 디바이스 제어기(110)는 적어도 하나의 미해결 I/O 커맨드의 완료까지 호스트 커맨드들을 페치하는 것을 중단할 것이며, 이에 의해 대응하는 슬롯이 소거된다.
유사하게, 저장 디바이스(108)가 유휴 상태에 있고, 디바이스 제어기(110)에 미해결 커맨드들이 없다면, 커맨드 레지스터는 0이다. 디바이스 제어기(110)가 호스트(102)로부터 16개의 비-벡터 I/O 커맨드를 페치하면, 커맨드 레지스터 내의 비트 0 내지 15는 커맨드 슬롯들 0 내지 15가 점유되었음을 나타내도록 설정된다. 그러나, 디바이스 제어기(110)가 32개의 물리 어드레스를 포함하는 단일 벡터 커맨드를 페치하면, 32개의 비-벡터 I/O 커맨드가 생성되어야 한다. 이 시점에서, 디바이스 제어기(110)는 32개의 커맨드 슬롯(예를 들어, 커맨드 레지스터 내의 슬롯들 16 내지 47)을 설정한다. 몇몇 구성들에서, 디바이스 제어기(110)는 비-벡터 커맨드들이 생성되고 실행을 위해 큐잉될 때까지 새로운 I/O 커맨드들을 페치하는 것을 중단할 것이다. 다른 구성들에서, 디바이스 제어기(110)는, 커맨드 슬롯 이용 가능성에 기초하여, 최대 16개 더 많은 커맨드를 계속해서 페치할 수 있다.
예를 들어, 디바이스 제어기(110)가 호스트(102)로부터 15개의 새로운 비-벡터 커맨드 및 1개의 벡터 커맨드를 페치하고, 벡터 커맨드가 21개의 물리 어드레스를 포함하는 경우, 디바이스 제어기는 나머지 16개의 커맨드 슬롯을 설정하고(즉, 비-벡터 커맨드들에 대해 15개의 슬롯이 설정되고, 벡터 커맨드에 대해 1개의 슬롯이 설정됨), 벡터 커맨드 내의 물리 어드레스들 중 하나에 대응하는 하나의 비-벡터 커맨드만을 생성한다. 디바이스 제어기는 이어서 호스트(102)로부터 I/O 커맨드를 페치하는 것을 중단하고, 벡터 커맨드 내의 나머지 20개의 물리 어드레스에 대응하는 추가의 비-벡터 커맨드들을 생성하기 전에 슬롯이 이용 가능하게 될 때까지 기다린다.
따라서, 디바이스 제어기(110)는 벡터 커맨드에 포함된 각각의 물리 어드레스에 대해 커맨드 레지스터 내의 슬롯이 설정되고, 커맨드 레지스터가 이용 가능한 슬롯을 포함할 때까지 호스트(102)로부터 추가의 I/O 커맨드들을 페치하는 것을 중단할 수 있다. 다른 구성들에서, 커맨드 레지스터가 이용 가능한 슬롯을 포함하지 않는 경우, 디바이스 제어기(110)는 호스트(102)로부터 새로운 커맨드들을 계속 페치할 수 있지만, 그것은 생성될 예정인 I/O 커맨드들의 수를 고려할 것이다. 예를 들어, 디바이스 제어기(110)는 새로운 커맨드들을 계속해서 페치하고, 각각의 커맨드 내의 물리 어드레스들의 수를 식별하고, 벡터 커맨드 변환기(116)를 큐잉하여 슬롯들이 이용 가능하게 될 때 벡터 커맨드에 기초하여 복수의 I/O 커맨드를 생성할 수 있다.
블록 350에서, 디바이스 제어기(110)는 호스트(102)로부터 벡터 커맨드의 메타데이터를 페치한다. 몇몇 구성들에서, 메타데이터는 복수의 I/O 커맨드의 생성에 필요한 정보를 포함한다. 예를 들어, 메타데이터는 벡터 커맨드에 포함된 포인터에 대응하는 물리 어드레스들의 리스트를 포함할 수 있다. 다른 예에서, 메타데이터는 NVMe 표준에 따라 물리적 영역 페이지(PRP) 또는 분산 수집 리스트(SGL)에 의해 표현되는 포인터를 포함할 수 있다. 저장 디바이스는 포인터들을 페치하며, 이들을 조작하여 각각의 비-벡터 커맨드에 대한 포인터들을 구축할 수 있다.
블록 360에서, 벡터 커맨드 변환기(116)는 호스트(102)로부터 페치된 벡터 커맨드에 기초하여 복수의 비-벡터 I/O 커맨드를 생성한다. 몇몇 구성들에서, 벡터 커맨드 변환기(116)는 벡터 커맨드의 물리 어드레스들 중 하나를 각각의 비-벡터 커맨드에 첨부함으로써 비-벡터 I/O 커맨드들 각각을 생성한다. 따라서, 복수의 비-벡터 I/O 커맨드는 원래의 벡터 커맨드와 동등하다.
몇몇 구성들에서, 복수의 비-벡터 I/O 커맨드는 호스트(102)에 의해 제공된 메타데이터에 따른 순서로 생성된다. 예를 들어, 디바이스 제어기(110)는 호스트(102)로부터 메타데이터를 페치할 수 있다. 몇몇 예들에서, 메타데이터는 물리 어드레스 리스트를 포함한다. 따라서, 비-벡터 I/O 커맨드들은 리스트 상의 어드레스들의 순서로 순차적으로 생성될 수 있다. 다른 구성들에서, 비-벡터 I/O 커맨드들은 저장 디바이스의 구조 및/또는 자원 이용 가능성에 따라 생성된다. 예를 들어, 벡터 커맨드 변환기(116)는 비-벡터 I/O 커맨드들을 우선순위의 순서로 생성할 수 있으며, 여기서 이용 가능한 병렬 유닛과 연관된 물리 어드레스는 사용중인(busy) 병렬 유닛과 연관된 물리 어드레스보다 더 높은 우선순위를 얻는다. 이러한 구성에서, 서비스의 품질 및 저장 디바이스(108)의 효율이 개선된다.
블록 370에서, 벡터 커맨드 변환기(116)는 실행을 위해 큐잉되도록 복수의 비-벡터 커맨드를 커맨드 파서(118)에 전송한다.
도 4는 커맨드 완료를 생성하고 전송하기 위한 예시적인 프로세스(400)를 예시하는 흐름도이다. 프로세스(400)는 예를 들어 (예컨대, 도 1의 저장 디바이스(108)와 같은) 저장 디바이스에 의해 수행될 수 있다. 프로세스(400)는 하나 이상의 프로세서(예를 들어, 도 1의 프로세서(112)) 상에서 실행되고 동작하는, 메모리에 저장된 소프트웨어 및/또는 펌웨어 컴포넌트들로서 구현될 수 있다. 또한, 예시적인 프로세스(400)에서의 저장 디바이스(108)에 의한 신호들의 송신 및 수신은, 예를 들어, 하나 이상의 PHY 인터페이스(예컨대, 도 1의 PHY(114))에 의해 인에이블될 수 있다.
블록 410에서, 벡터 완료기(122)는 완료 요청을 수신한다. 몇몇 구성들에서, 완료 요청은 플래시 인터페이스 모듈(130)에 의해 생성되고, 제어 경로(124)를 통해 벡터 완료기(122)에 통신된다.
단계 420에서, 벡터 완료기(122)는 완료 요청이 독립형 비-벡터 I/O 커맨드에 대응하는지 또는 벡터 커맨드로부터 유래된 복수의 비-벡터 커맨드 중 하나에 대응하는지를 식별한다. 완료 요청이 독립형 비-벡터 I/O 커맨드에 대응하는 경우, 프로세스(400)는 블록 430으로 이동하며, 여기서 벡터 완료기(122)는 완료 메시지를 생성하고 완료 메시지를 호스트(102)에 제공한다.
단계 420에서, 벡터 완료기(122)가 완료 요청이 벡터 커맨드로부터 유래된 복수의 비-벡터 커맨드 중 하나에 대응한다고 결정하는 경우, 프로세스(400)는 단계 440으로 이동하며, 여기서 벡터 완료기(122)는 수신된 완료 요청이 벡터 커맨드에 대한 마지막 요청인지를 결정한다. 예를 들어, 벡터 완료기(122)는 특정 벡터 커맨드와 연관된 모든 완료 요청들을 수집하도록 구성될 수 있다. 수신된 완료 요청이 마지막 요청이 아닌 경우(즉, 벡터 완료기(122)가 벡터 커맨드의 각각의 물리 어드레스와 연관된 모든 완료 요청들을 수집하지 않은 경우), 프로세스(400)는 블록 450으로 이동하며, 여기서 벡터 완료기(122)는 수신된 완료 요청을 보유하고, 그것이 벡터 커맨드에 대한 마지막 완료 요청을 수신할 때까지 기다린다.
단계 440에서, 벡터 완료기(122)가 수신된 완료 요청이 벡터 커맨드에 대한 마지막 요청이라고 결정하는 경우, 프로세스(400)는 블록 460으로 이동하며, 여기서 벡터 완료기(122)는 벡터 커맨드와 연관된 모든 수신된 완료 요청들에 기초하여 벡터 커맨드 완료 메시지를 생성한다.
블록 470에서, 벡터 완료기(122)는 벡터 커맨드와 연관된 모든 수신된 완료 요청들을 소거한다.
요약하면, 본 개시는 일반적으로 호스트(102)로부터 벡터-타입 I/O 커맨드들을 수신하고, 저장 디바이스(108)에 대한 최소 변경으로 오픈 채널 SSD(예를 들어, SSD(134)) 상에서 벡터 커맨드들을 실행하기 위한 시스템들, 방법들 및 장치들에 관한 것이다. 특히, 본 개시의 소정 태양들은 벡터 커맨드들이 호스트(102) 및 저장 디바이스(108)의 여러 컴포넌트들에 투명하게 처리되도록 벡터 커맨드들을 지원하기 위한 방법들 및 장치들에 관한 것이다. 예를 들어, 벡터 커맨드 변환기(116)는 단일 벡터 커맨드로부터 복수의 비-벡터 I/O 커맨드를 생성하고, 복수의 비-벡터 I/O 커맨드를 실행을 위해 저장 디바이스(108)의 다른 컴포넌트들에 전달하도록 구성될 수 있다. 더욱이, 벡터 완료기(122)는 복수의 비-벡터 I/O 커맨드의 완료에 기초하여 벡터 커맨드 완료 메시지를 생성하고, 완료 메시지를 호스트(102)에 전달할 수 있다. 여기서, 호스트(102)는 벡터 커맨드가 어떻게 처리되었는지에 대한 표시를 제공받지 않을 수 있다.
몇몇 예들에서, 벡터 커맨드 변환기(116)에 의한, 단일 벡터 커맨드로부터의 복수의 비-벡터 I/O 커맨드의 생성은 저장 디바이스(108)의 효율을 개선하기 위해 복수의 비-벡터 I/O 커맨드를 지능적으로 스케줄링하는 능력을 디바이스 제어기(110)에 제공한다. 일례에서, 벡터 커맨드 변환기(116)는 비-벡터 I/O 커맨드들을 우선순위의 순서로 생성할 수 있으며, 여기서 이용 가능한 병렬 유닛과 연관된 물리 어드레스는 사용중인 병렬 유닛과 연관된 물리 어드레스보다 더 높은 우선순위를 얻는다. 이러한 구성에서, 서비스의 품질 및 저장 디바이스(108)의 효율이 개선된다.
하나의 비제한적인 실시예에서, 디바이스가 개시되며, 디바이스는 메모리 및 메모리에 통신 가능하게 결합된 제어기를 포함한다. 몇몇 구성들에서, 제어기는 호스트 컴퓨팅 디바이스로부터 페치된 벡터 커맨드에서 물리 어드레스들의 세트를 식별하도록 구성되며, 물리 어드레스들의 세트 중의 각각의 물리 어드레스는 메모리 내의 위치에 대응한다. 몇몇 구성들에서, 제어기는 비-벡터 커맨드들의 세트를 생성하도록 구성되고, 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 물리 어드레스들의 세트 내의 각각의 물리 어드레스 중 하나에 대응한다. 몇몇 구성들에서, 제어기는 비-벡터 커맨드들의 세트를 실행하도록 구성된다. 몇몇 구성들에서, 제어기는 비-벡터 커맨드들의 세트의 실행에 응답하여 벡터 커맨드의 완료를 나타내는 호스트 컴퓨팅 디바이스에 대한 메시지를 생성하도록 구성된다.
하나의 비제한적인 실시예에서, 제어기는 호스트 컴퓨팅 디바이스로부터 커맨드를 페치하고, 페치된 커맨드가 벡터 커맨드인 것으로 결정하도록 추가로 구성되며, 결정은 페치된 커맨드가 분산-수집 논리 블록 어드레스들의 리스트를 통신하도록 구성된 필드를 포함하는지에 기초한다.
하나의 비제한적인 실시예에서, 제어기는 호스트 컴퓨팅 디바이스로부터 메타데이터를 페치하도록 추가로 구성되며, 메타데이터는 물리 어드레스들의 리스트를 포함한다.
하나의 비제한적인 실시예에서, 벡터 커맨드는 메타데이터 내의 물리 어드레스들의 리스트에서 물리 어드레스들의 세트를 식별하도록 구성된 포인터를 포함한다.
하나의 비제한적인 실시예에서, 물리 어드레스들의 세트는 2개 이상의 물리 어드레스를 포함한다.
하나의 비제한적인 실시예에서, 제어기는 복수의 1-비트 슬롯을 포함하는 커맨드 레지스터를 포함하며, 제어기는 커맨드 레지스터가 이용 가능한 슬롯을 포함하는지를 결정하고, 커맨드 레지스터가 이용 가능한 슬롯을 포함하는 경우 호스트 컴퓨팅 디바이스로부터 커맨드를 페치하도록 추가로 구성된다.
하나의 비제한적인 실시예에서, 제어기는 커맨드 레지스터 내의 각각의 이용 가능한 슬롯에 대한 비-벡터 커맨드들의 세트 중의 하나의 비-벡터 커맨드를 실행하도록 추가로 구성된다.
하나의 비제한적인 실시예에서, 메모리는 오픈 채널 솔리드 스테이트 드라이브(SSD) 메모리 디바이스를 포함한다.
하나의 비제한적인 실시예에서, 디바이스가 개시되며, 디바이스는 메모리 및 메모리에 통신 가능하게 결합된 제어기를 포함한다. 몇몇 구성들에서, 제어기는 메모리가 비-벡터 커맨드를 실행했다는 표시를 수신하도록 구성되며, 비-벡터 커맨드는 호스트 컴퓨팅 디바이스로부터 수신된 벡터 커맨드에 대응하는 복수의 비-벡터 커맨드 중 하나이다. 몇몇 구성들에서, 제어기는 메모리가 벡터 커맨드에 대응하는 복수의 비-벡터 커맨드 전부를 실행했는지를 결정하도록 구성된다. 몇몇 구성들에서, 제어기는 메모리가 복수의 비-벡터 커맨드 각각을 실행한 경우 벡터 커맨드의 실행을 나타내는 완료 메시지를 생성하도록 구성된다. 그리고 몇몇 구성들에서, 제어기는 완료 메시지를 호스트 컴퓨팅 디바이스에 송신하도록 구성된다.
하나의 비제한적인 실시예에서, 제어기는 메모리가 벡터 커맨드에 대응하는 복수의 비-벡터 커맨드 전부를 실행하지 않은 경우 메모리가 비-벡터 커맨드를 실행했다는 표시를 저장하도록 추가로 구성된다.
하나의 비제한적인 실시예에서, 제어기는 메모리가 비-벡터 커맨드를 실행했다는 복수의 표시를 수신하도록 추가로 구성되며, 복수의 표시 각각은 복수의 비-벡터 커맨드 중 하나에 대응한다. 몇몇 구성들에서, 제어기는 복수의 표시를 저장하도록 구성된다. 몇몇 구성들에서, 제어기는 호스트 컴퓨팅 디바이스에의 완료 메시지의 송신 후에 저장된 복수의 표시를 소거하도록 구성된다.
하나의 비제한적인 실시예에서, 복수의 비-벡터 커맨드 각각은 벡터 커맨드에 포함된 복수의 물리 어드레스 중 하나를 포함한다.
하나의 비제한적인 실시예에서, 물리 어드레스들 각각은 메모리 내의 위치에 대응한다.
하나의 비제한적인 실시예에서, 복수의 비-벡터 커맨드 각각은 메모리에 의해 순차적인 순서로 실행되도록 구성된다.
하나의 비제한적인 실시예에서, 복수의 비-벡터 커맨드 각각은 기입, 판독, 복사 또는 리셋 커맨드 중 적어도 하나를 벡터 커맨드와 공유한다.
하나의 비제한적인 실시예에서, 메모리는 오픈 채널 비휘발성 메모리를 포함한다.
하나의 비제한적인 실시예에서, 장치가 개시된다. 몇몇 구성들에서, 장치는 호스트 디바이스로부터 벡터 커맨드를 수신하기 위한 수단을 포함하며, 벡터 커맨드는 물리 어드레스들의 세트를 포함한다. 몇몇 구성들에서, 장치는 비-벡터 커맨드들의 세트를 생성하기 위한 수단을 포함하며, 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 물리 어드레스들의 세트 내의 각각의 물리 어드레스 중 하나에 대응하고, 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 디지털 데이터를 저장하기 위한 수단에 의해 실행되도록 구성된다. 몇몇 구성들에서, 장치는 디지털 데이터를 저장하기 위한 수단에 의한 비-벡터 커맨드들의 세트의 실행에 응답하여 벡터 커맨드의 완료를 나타내는 호스트 컴퓨팅 디바이스에 대한 메시지를 생성하기 위한 수단을 포함한다.
하나의 비제한적인 실시예에서, 장치는 호스트 컴퓨팅 디바이스로부터 메타데이터를 페치하기 위한 수단을 포함하며, 메타데이터는 물리 어드레스들의 리스트를 포함하고, 벡터 커맨드는 메타데이터 내의 물리 어드레스들의 리스트에서 물리 어드레스들의 세트를 식별하도록 구성된 포인터를 포함한다.
하나의 비제한적인 실시예에서, 장치는 커맨드 레지스터가 이용 가능한 슬롯을 포함하는지를 결정하기 위한 수단을 포함하며, 커맨드 레지스터는 복수의 1-비트 슬롯을 포함한다. 몇몇 구성들에서, 장치는 커맨드 레지스터가 이용 가능한 슬롯을 포함하는 경우 호스트 컴퓨팅 디바이스로부터 커맨드를 페치하기 위한 수단을 포함한다.
전술한 것은 본 개시의 실시예들에 관한 것이지만, 본 개시의 다른 및 추가 실시예들이 본 개시의 기본 범위로부터 벗어남이 없이 고안될 수 있으며, 본 개시의 범위는 후속하는 청구범위에 의해 결정된다.

Claims (20)

  1. 디바이스로서,
    메모리; 및
    상기 메모리에 통신 가능하게 결합된 제어기를 포함하며, 상기 제어기는,
    호스트 컴퓨팅 디바이스로부터 페치된 벡터 커맨드에서 물리 어드레스들의 세트를 식별하고 - 상기 물리 어드레스들의 세트 중의 각각의 물리 어드레스는 상기 메모리 내의 위치에 대응함 -,
    비-벡터 커맨드들의 세트를 생성하고 - 상기 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 상기 물리 어드레스들의 세트 내의 각각의 물리 어드레스 중 하나에 대응함 -,
    상기 비-벡터 커맨드들의 세트를 실행하고,
    상기 비-벡터 커맨드들의 세트의 상기 실행에 응답하여 상기 벡터 커맨드의 완료를 나타내는 상기 호스트 컴퓨팅 디바이스에 대한 메시지를 생성하도록 구성되는, 디바이스.
  2. 제1항에 있어서, 상기 제어기는,
    상기 호스트 컴퓨팅 디바이스로부터 커맨드를 페치하고,
    상기 페치된 커맨드가 벡터 커맨드인 것으로 결정하도록 추가로 구성되며, 상기 결정은 상기 페치된 커맨드가 분산-수집 논리 블록 어드레스들의 리스트를 통신하도록 구성된 필드를 포함하는지에 기초하는, 디바이스.
  3. 제1항에 있어서, 상기 제어기는 상기 호스트 컴퓨팅 디바이스로부터 메타데이터를 페치하도록 추가로 구성되고, 상기 메타데이터는 물리 어드레스들의 리스트를 포함하는, 디바이스.
  4. 제3항에 있어서, 상기 벡터 커맨드는 상기 메타데이터 내의 상기 물리 어드레스들의 리스트에서 상기 물리 어드레스들의 세트를 식별하도록 구성된 포인터를 포함하는, 디바이스.
  5. 제1항에 있어서, 상기 물리 어드레스들의 세트는 2개 이상의 물리 어드레스들을 포함하는, 디바이스.
  6. 제1항에 있어서, 복수의 1-비트 슬롯들을 포함하는 커맨드 레지스터를 추가로 포함하며, 상기 제어기는,
    상기 커맨드 레지스터가 이용 가능한 슬롯을 포함하는지를 결정하고,
    상기 커맨드 레지스터가 상기 이용 가능한 슬롯을 포함하는 경우 상기 호스트 컴퓨팅 디바이스로부터 커맨드를 페치하도록 추가로 구성되는, 디바이스.
  7. 제6항에 있어서, 상기 제어기는 상기 커맨드 레지스터 내의 각각의 이용 가능한 슬롯에 대해 상기 비-벡터 커맨드들의 세트 중의 하나의 비-벡터 커맨드를 실행하도록 추가로 구성되는, 디바이스.
  8. 제1항에 있어서, 상기 메모리는 오픈 채널 솔리드 스테이트 드라이브(SSD) 메모리 디바이스를 포함하는, 디바이스.
  9. 제1항에 있어서, 상기 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 기입, 판독, 복사 또는 리셋 커맨드 중 적어도 하나를 상기 벡터 커맨드와 공유하는, 디바이스.
  10. 디바이스로서,
    메모리; 및
    상기 메모리에 통신 가능하게 결합된 제어기를 포함하며, 상기 제어기는,
    상기 메모리가 비-벡터 커맨드를 실행했다는 표시를 수신하고 - 상기 비-벡터 커맨드는 호스트 컴퓨팅 디바이스로부터 수신된 벡터 커맨드에 대응하는 복수의 비-벡터 커맨드들 중 하나임 -,
    상기 메모리가 상기 벡터 커맨드에 대응하는 상기 복수의 비-벡터 커맨드들 전부를 실행했는지를 결정하고,
    상기 메모리가 상기 복수의 비-벡터 커맨드들 각각을 실행한 경우 상기 벡터 커맨드의 실행을 나타내는 완료 메시지를 생성하고,
    상기 완료 메시지를 상기 호스트 컴퓨팅 디바이스에 송신하도록 구성되는, 디바이스.
  11. 제10항에 있어서, 상기 제어기는 상기 메모리가 상기 벡터 커맨드에 대응하는 상기 복수의 비-벡터 커맨드들 전부를 실행하지 않은 경우 상기 메모리가 상기 비-벡터 커맨드를 실행했다는 상기 표시를 저장하도록 추가로 구성되는, 디바이스.
  12. 제10항에 있어서, 상기 제어기는,
    상기 메모리가 비-벡터 커맨드를 실행했다는 복수의 표시들을 수신하고 - 상기 복수의 표시들 각각은 상기 복수의 비-벡터 커맨드들 중 하나에 대응함 -,
    상기 복수의 표시들을 저장하고,
    상기 호스트 컴퓨팅 디바이스에의 상기 완료 메시지의 송신 후에 상기 저장된 복수의 표시들을 소거하도록 추가로 구성되는, 디바이스.
  13. 제10항에 있어서, 상기 복수의 비-벡터 커맨드들 각각은 상기 벡터 커맨드에 포함된 복수의 물리 어드레스들 중 하나를 포함하는, 디바이스.
  14. 제10항에 있어서, 상기 제어기는 벡터 커맨드에서의 모든 요청들이 완료될 때까지 완료 요청을 보유하도록 추가로 구성되는, 디바이스.
  15. 제10항에 있어서, 상기 복수의 비-벡터 커맨드들 각각은 상기 메모리에 의해 순차적인 순서로 실행되도록 구성되는, 디바이스.
  16. 제10항에 있어서, 상기 복수의 비-벡터 커맨드들 각각은 기입, 판독, 복사 또는 리셋 커맨드 중 적어도 하나를 상기 벡터 커맨드와 공유하는, 디바이스.
  17. 제10항에 있어서, 상기 메모리는 오픈 채널 비휘발성 메모리를 포함하는, 디바이스.
  18. 장치로서,
    호스트 디바이스로부터 벡터 커맨드를 수신하기 위한 수단 - 상기 벡터 커맨드는 물리 어드레스들의 세트를 포함함 -;
    비-벡터 커맨드들의 세트를 생성하기 위한 수단 - 상기 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 상기 물리 어드레스들의 세트 내의 각각의 물리 어드레스 중 하나에 대응하고, 상기 비-벡터 커맨드들의 세트 내의 각각의 비-벡터 커맨드는 디지털 데이터를 저장하기 위한 수단에 의해 실행되도록 구성됨 -; 및
    상기 디지털 데이터를 저장하기 위한 수단에 의한 상기 비-벡터 커맨드들의 세트의 상기 실행에 응답하여 상기 벡터 커맨드의 완료를 나타내는 상기 호스트 컴퓨팅 디바이스에 대한 메시지를 생성하기 위한 수단을 포함하는, 장치.
  19. 제18항에 있어서,
    상기 호스트 컴퓨팅 디바이스로부터 메타데이터를 페치하기 위한 수단을 추가로 포함하며, 상기 메타데이터는 물리 어드레스들의 리스트를 포함하고, 상기 벡터 커맨드는 상기 메타데이터 내의 상기 물리 어드레스들의 리스트에서 상기 물리 어드레스들의 세트를 식별하도록 구성된 포인터를 포함하는, 장치.
  20. 제18항에 있어서,
    커맨드 레지스터가 이용 가능한 슬롯을 포함하는지를 결정하기 위한 수단 - 상기 커맨드 레지스터는 복수의 1-비트 슬롯들을 포함함 -; 및
    상기 커맨드 레지스터가 상기 이용 가능한 슬롯을 포함하는 경우 상기 호스트 컴퓨팅 디바이스로부터 커맨드를 페치하기 위한 수단을 추가로 포함하는, 장치.
KR1020217018293A 2019-07-01 2020-03-17 오픈 채널 벡터 커맨드 실행 KR102645983B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/459,183 US10901733B1 (en) 2019-07-01 2019-07-01 Open channel vector command execution
US16/459,183 2019-07-01
PCT/US2020/023177 WO2021002896A1 (en) 2019-07-01 2020-03-17 Open channel vector command execution

Publications (2)

Publication Number Publication Date
KR20210084632A true KR20210084632A (ko) 2021-07-07
KR102645983B1 KR102645983B1 (ko) 2024-03-08

Family

ID=74065216

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217018293A KR102645983B1 (ko) 2019-07-01 2020-03-17 오픈 채널 벡터 커맨드 실행

Country Status (5)

Country Link
US (1) US10901733B1 (ko)
KR (1) KR102645983B1 (ko)
CN (1) CN113196225A (ko)
DE (1) DE112020000124T5 (ko)
WO (1) WO2021002896A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11893278B2 (en) * 2021-02-08 2024-02-06 Samsung Electronics Co., Ltd. Memory controller and memory control method for generating commands based on a memory request
US12001270B2 (en) * 2021-12-07 2024-06-04 Microchip Technology Incorporated Vector fetch bus error handling
US11934684B2 (en) 2021-12-14 2024-03-19 Western Digital Technologies, Inc. Maximum data transfer size per tenant and command type

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150007154A1 (en) * 2013-03-15 2015-01-01 Jayashankar Bharadwaj Methods and systems to vectorize scalar computer program loops having loop-carried dependences
KR20180035271A (ko) * 2016-09-28 2018-04-06 삼성전자주식회사 호스트에 의해 제어되는 스토리지 장치를 포함하는 컴퓨팅 시스템
US20180260148A1 (en) * 2017-03-10 2018-09-13 Toshiba Memory Corporation Large scale implementation of a plurality of open channel solid state drives
KR20190033122A (ko) * 2017-09-20 2019-03-29 삼성전자주식회사 멀티캐스트 통신 프로토콜에 따라 호스트와 통신하는 저장 장치 및 호스트의 통신 방법

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3205989B2 (ja) * 1988-09-22 2001-09-04 日本電気株式会社 情報処理システム
US7627735B2 (en) * 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US20070195367A1 (en) 2006-02-22 2007-08-23 Seiko Epson Corporation Computer readable medium recording a printer control program, printer control method, and printer system
US7849294B2 (en) * 2008-01-31 2010-12-07 International Business Machines Corporation Sharing data in internal and memory representations with dynamic data-driven conversion
US8407407B1 (en) 2009-10-06 2013-03-26 Marvell International Ltd. Solid state drive access control system with equalized access timing
US9075708B1 (en) * 2011-06-30 2015-07-07 Western Digital Technologies, Inc. System and method for improving data integrity and power-on performance in storage devices
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US9720860B2 (en) 2014-06-06 2017-08-01 Toshiba Corporation System and method for efficient processing of queued read commands in a memory system
US9645739B2 (en) 2014-09-26 2017-05-09 Intel Corporation Host-managed non-volatile memory
US9514058B2 (en) * 2014-12-22 2016-12-06 Texas Instruments Incorporated Local page translation and permissions storage for the page window in program memory controller
US9904609B2 (en) 2015-11-04 2018-02-27 Toshiba Memory Corporation Memory controller and memory device
KR102564165B1 (ko) 2016-04-25 2023-08-04 삼성전자주식회사 비휘발성 메모리 익스프레스 컨트롤러에 의한 입출력 큐 관리 방법
CN107870727B (zh) 2016-09-23 2021-01-01 伊姆西Ip控股有限责任公司 用于存储数据的方法和设备
KR102387922B1 (ko) 2017-02-07 2022-04-15 삼성전자주식회사 솔리드 스테이트 드라이브의 비동기 이벤트 요청 명령 처리 방법 및 시스템
KR102293069B1 (ko) 2017-09-08 2021-08-27 삼성전자주식회사 불휘발성 메모리 장치 및 제어기를 포함하는 스토리지 장치, 제어기, 그리고 스토리지 장치의 동작 방법
CN114546293A (zh) 2017-09-22 2022-05-27 慧荣科技股份有限公司 快闪存储器的数据内部搬移方法以及使用该方法的装置
KR102446733B1 (ko) 2017-11-30 2022-09-23 삼성전자주식회사 스토리지 장치 및 스토리지 장치를 포함하는 전자 장치
US10761775B2 (en) 2018-02-09 2020-09-01 Samsung Electronics Co., Ltd. System and method for NVMe inter command association in SSD storage using a bridge device
JP7131053B2 (ja) * 2018-04-24 2022-09-06 富士通株式会社 記憶装置,情報処理プログラムおよび情報処理システム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150007154A1 (en) * 2013-03-15 2015-01-01 Jayashankar Bharadwaj Methods and systems to vectorize scalar computer program loops having loop-carried dependences
KR20180035271A (ko) * 2016-09-28 2018-04-06 삼성전자주식회사 호스트에 의해 제어되는 스토리지 장치를 포함하는 컴퓨팅 시스템
US20180260148A1 (en) * 2017-03-10 2018-09-13 Toshiba Memory Corporation Large scale implementation of a plurality of open channel solid state drives
KR20190033122A (ko) * 2017-09-20 2019-03-29 삼성전자주식회사 멀티캐스트 통신 프로토콜에 따라 호스트와 통신하는 저장 장치 및 호스트의 통신 방법

Also Published As

Publication number Publication date
US20210004229A1 (en) 2021-01-07
WO2021002896A1 (en) 2021-01-07
CN113196225A (zh) 2021-07-30
US10901733B1 (en) 2021-01-26
KR102645983B1 (ko) 2024-03-08
DE112020000124T5 (de) 2021-07-29

Similar Documents

Publication Publication Date Title
US11960725B2 (en) NVMe controller memory manager providing CMB capability
US10901624B1 (en) Dummy host command generation for supporting higher maximum data transfer sizes (MDTS)
US11481118B2 (en) Storage media programming with adaptive write buffer release
US10732893B2 (en) Non-volatile memory over fabric controller with memory bypass
US9229655B2 (en) Controller and method for performing background operations
CN108153482B (zh) Io命令处理方法与介质接口控制器
KR102645983B1 (ko) 오픈 채널 벡터 커맨드 실행
GB2528351A (en) System and method for peer-to-peer PCIe storage transfers
CN111475438B (zh) 提供服务质量的io请求处理方法及其装置
KR20160031099A (ko) 저장 장치 및 그것을 포함하는 데이터 저장 시스템의 가비지 컬렉션 방법
CN113924545A (zh) 基于存储器子系统中的媒体单元的可用性的预测性数据传输
CN109815170B (zh) 数据冗余的处理方法及其相关电脑系统
CN113518970A (zh) 存储器存取命令的双阈值受控调度
KR20210045507A (ko) 데이터 버스 모드에 기초하는 읽기 작업 및 쓰기 작업의 스케줄링
CN108153582B (zh) Io命令处理方法与介质接口控制器
CN108877862B (zh) 页条带的数据组织以及向页条带写入数据的方法与装置
KR20230035811A (ko) 데이터 처리 시스템 내 공유된 메모리 공간을 제어하기 위한 장치 및 방법
US20220050629A1 (en) Completion management
KR20220135786A (ko) 메모리 시스템에 포함된 복수의 메모리 장치에서 수행되는 동작에 대해 스케줄링하는 장치 및 방법
CN213338708U (zh) 一种控制部件及存储设备
US20240311019A1 (en) Using a persistent byte-addressable memory in a compute express link (cxl) memory device for efficient power loss recovery
KR20230036682A (ko) 인터리빙 동작을 지원하는 메모리 장치, 메모리 시스템 및 그의 동작 방법
CN118051181A (zh) 存储器子系统中的服务质量管理

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