KR20190096801A - SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법 - Google Patents

SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20190096801A
KR20190096801A KR1020190005438A KR20190005438A KR20190096801A KR 20190096801 A KR20190096801 A KR 20190096801A KR 1020190005438 A KR1020190005438 A KR 1020190005438A KR 20190005438 A KR20190005438 A KR 20190005438A KR 20190096801 A KR20190096801 A KR 20190096801A
Authority
KR
South Korea
Prior art keywords
command
parameter
association
commands
value
Prior art date
Application number
KR1020190005438A
Other languages
English (en)
Other versions
KR102466353B1 (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 KR20190096801A publication Critical patent/KR20190096801A/ko
Application granted granted Critical
Publication of KR102466353B1 publication Critical patent/KR102466353B1/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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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/0661Format or protocol conversion arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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)
  • Bus Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Systems (AREA)

Abstract

몇몇의 예시적인 실시 예들에 따르면, 방법은 호스트 장치로부터의 제 1 명령을 수신하는 단계; 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 제 1 명령의 제 1 파라미터의 제 1 값이 "0"보다 큰 것으로 판별함으로써 제 1 명령이 명령들의 연관 그룹의 부분인지 여부를 판별하는 단계; 제 1 명령의 제 2 파라미터의 제 1 값을 판별하는 단계; 연관 컨텍스트 테이블 항목의 제 1 명령의 제 1 파라미터의 제 1 값을 감소시키는 단계; 연관 컨텍스트 테이블 항목의 제 1 파라미터의 제 1 값이 "0"인지 여부를 판별하는 단계; 및 제 1 명령의 제 3 파라미터에서 지시되는 동작을 실행하는 단계를 포함하되, 제 1 파라미터는 명령들의 연관 그룹의 명령들의 총 개수를 포함하고, 제 2 파라미터는 명령들의 연관 그룹을 식별하는 태그 값을 포함한다.

Description

SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법{SYSTEM AND METHOD FOR NVME INTER COMMAND ASSOCIATION IN SSD STORAGE}
본 발명에 따른 실시 예들의 하나 이상의 형태들은 SSD 스토리지(Solid State Drive), 예로서, SSD 스토리지의 NVMe(Nonvolatile Memory express) 명령간 연관을 위한 시스템 및 방법과 관련된다.
NVMe(Non Volatile Memory express)는 PCIe(Peripheral Component Interconnect Express) 버스를 통해 비 휘발성 메모리 서브 시스템 (예를 들어, SSD) 과 통신하기 위한 호스트 소프트웨어에 대한 레지스터 레벨의 인터페이스를 정의하는 표준이다. NVMe는 호스트와 주변 대상 스토리지 장치 또는 시스템 사이의 데이터 연결 및 전송을 위한 SCSI(Small Computer System Interface) 표준의 대안이다. PCIe로 연결된 NVMe SSD(Solid State Drive)는 어플리케이션이 스토리지와 직접 통신하도록 허용한다.
배경 기술 섹션에서 개시된 이상의 정보는 본 발명의 배경에 대한 이해를 높이기 위한 것일 뿐이며, 종래 기술을 구성하지 않는 정보를 포함 할 수 있다.
본 개시의 예시적인 실시 예들의 형태들은 SSD 스토리지에서의 NVMe 명령간 연관을 위한 시스템 및 방법과 관련된다.
이 요약은 이하 상세한 설명에서 더 설명되는 본 개시의 실시 예들의 특징들 및 개념들의 선택을 소개하기 위해 제공된다. 이 요약은 청구된 주제의 핵심 또는 필수적인 특징을 식별하도록 의도되지 않고 청구된 주제의 범위를 제한하는데 사용되지도 않는다. 설명된 특징들 중 하나 이상은 작동 가능한 장치를 제공하기 위해 하나 이상의 다른 설명된 특징들과 결합될 수 있다.
본 개시의 예시적인 실시 예들의 형태들은 SSD 스토리지에서의 NVMe 명령간 연관을 위한 시스템 및 방법과 관련된다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 방법은 스토리지 컨트롤러에서, 호스트 장치로부터의 제 1 명령을 수신하는 단계; 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 제 1 명령의 제 1 파라미터의 제 1 값이 "0"보다 큰 지 판별함으로써 제 1 명령이 명령들의 연관 그룹의 부분인지 여부를 판별하는 단계; 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 제 1 명령의 제 1 파라미터의 제 1 값을 판별하는 것에 기초하여 제 1 명령의 제 2 파라미터의 제 1 값을 판별하는 단계; 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 제 1 명령의 제 1 파라미터의 제 1 값을 감소시키는 단계; 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 제 1 파라미터의 제 1 값이 "0"인지 여부를 판별하는 단계; 및 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 제 1 파라미터의 제 1 값을 판별하는 것에 기초하여 제 1 명령의 제 3 파라미터에서 지시되는 동작을 실행하는 단계를 포함하되, 제 1 파라미터는 명령들의 연관 그룹의 명령들의 총 개수를 포함하고, 제 2 파라미터는 명령들의 연관 그룹을 식별하는 태그 값을 포함한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 스토리지 컨트롤러는 스토리지 장치와 관련되고, 스토리지 장치는 SSD(Solid State Drive)이고, 호스트 장치는 스토리지 서버인 방법.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 제 1 명령의 제 1 파라미터는 ASize(association size) 파라미터이고, 제 1 명령의 제 2 파라미터는 ATag(association tag) 파라미터이고, 제 1 명령의 제 3 파라미터는 AAction(association action) 파라미터이다. 몇몇의 예시적인 실시 예들에 따르면, 명령들의 연관 그룹의 모든 명령들은 동일한 ATag 값을 갖는 방법. 몇몇의 예시적인 실시 예들에 따르면, AAtion 파라미터는, 스토리지 컨트롤러가 명령들의 연관 그룹의 모든 명령들을 수행하는 사전에 정의된 동작을 지시하는 방법. 몇몇의 예시적인 실시 예들에 따르면, 연관 그룹 컨텍스트 테이블의 제 1 파라미터의 "0" 값은 명령들의 연관 그룹의 종료를 지시한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 몇몇의 예시적인 실시 예들에 따르면, 몇몇의 예시적인 실시 예들에 따르면, 스토리지 컨트롤러에 의해, 스토리지 컨트롤러와 관련되는 스토리지 장치의 연관 컨텍스트 테이블에 제 1 파라미터의 제 1 값, 제 2 파라미터의 제 1 값, 및 제 1 명령의 제 3 파라미터의 제 1 값을 저장하는 단계를 더 포함하는 방법. 몇몇의 예시적인 실시 예들에 따르면, 연관 그룹 컨텍스트 테이블 항목의 제 1 파라미터의 제 1 값이 "0"이 아닌 경우, 스토리지 컨트롤러에서, 호스트 장치로부터 제 2 명령을 수신하는 단계; 스토리지 컨트롤러에서, 연관 그룹 컨텍스트 테이블 항목의 제 2 명령의 제 1 파라미터의 제 2 값이 "0"보다 큰지 및 제 2 명령의 제 2 파라미터의 제 2 값이 제 1 명령의 제 2 파라미터의 제 1 값과 동일한지를 판별함으로써 제 2 명령이 명령들의 연관 그룹의 부분인지 여부를 판별하는 단계; 스토리지 컨트롤러에 의해, 연관 컨텍스트 테이블 항목의 제 2 명령의 제 1 파라미터의 제 2 값을 감소시키는 단계; 스토리지 컨트롤러에 의해, 연관 컨텍스트 테이블 항목의 제 2 명령의 제 1 파라미터의 제 2 값이 "0"인지 판별하는 단계; 및 스토리지 컨트롤러에 의해, 연관 컨텍스트 테이블 항목의 제 2 명령의 제 1 파라미터의 제 2 값이 "0"인지 판별하는 것에 기초하여 제 2 명령의 제 3 파라미터에서 지시되는 동작을 실행하는 단계를 더 포함한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 스토리지 컨트롤러에 의해, 스토리지 컨트롤러와 관련된 스토리지 장치의 물리적인 위치에서, 제 1 명령의 제 3 파라미터에서 지시되는 동작을 실행하는 것으로부터의 결과들을 포함하는 데이터를 저장하는 단계를 더 포함한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 호스트 장치; 호스트 장치와 연결되는 제 1 단을 포함하는 브릿지 장치; 브릿지 장치의 제 2 단에서 브릿지 장치와 연결되는 스토리지 장치를 포함하되, 브릿지 장치는, 상지 호스트 장치로부터 제 1 명령을 수신하고, 제 1 명령과 관련된 데이터를 호스트 장치로부터 수집하고, 호스트 장치로부터 수신되는 제 1 명령 및 제 1 명령과 관련된 데이터에 기초하여 하나 이상의 제 2 명령을 생성하고, 하나 이상의 제 2 명령을 스토리지 장치로 전송한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 호스트 장치는 스토리지 서버이고, 스토리지 장치는 SSD인 시스템. 몇몇의 예시적인 실시 예들에 따르면, 브릿지 장치는 호스트 장치로부터 수신되는 제 1 명령을 복수의 명령으로 분할함으로써 하나 이상의 제 2 명령을 생성하도록 더 구성되는 시스템. 몇몇의 예시적인 실시 예들에 따르면, 브릿지 장치는 복수의 명령 각각을 개별적으로 전송하고, 스토리지 장치에서 하나 이상의 제 2 명령이 완료되면 스토리지 장치로부터의 지시를 수신한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 스토리지 장치로부터의 지시를 수신하는 것에 응답하여, 브릿지 장치는 스토리지 장치에서 하나 이상의 제 2 명령의 실행이 완료되었다는 지시를 생성하여 호스트 장치로 전송하도록 더 구성된다. 몇몇의 예시적인 실시 예들에 따르면, 복수의 명령은 서로 관련되고 명령들의 연관 그룹에 속하고, 브릿지 장치는, 복수의 명령 각각의 명령들의 연관 그룹의 ATag 및 ASize를 삽입하도록 더 구성되고, ATag는 명령들의 연관 그룹의 모든 명령들에 대해 동일한 시스템.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 명령들의 연관 그룹의 복수의 명령은 CID(Command IDentifier) 및 SQID(Submission Queue IDenrifier) 중 적어도 하나를 포함하는 명령들의 연관 그룹의 각 명령에 의해 연결된 리스트를 형성하여 스토리지 장치에 의해 실행될 연결된 리스트의 다음 명령을 식별하고, 연결된 리스트의 마지막 명령은 연결된 리스트의 종료를 지시하기 위해 리저브된(reserved) 하나 이상의 고정된 값을 전달하는 시스템. 몇몇의 예시적인 실시 예들에 따르면, 브릿지 장치는, 호스트 메모리 버퍼레 CID 및 SQID 튜플 항목들을 생성하고 호스트 메모리 버퍼의 어드레스를 스토리지 장치의 컨트롤러로 제 3 명령어로 전송하도록 더 구성되고, 스토리지 장치의 컨트롤러는 제 3 명령어의 실행 동안 명령 연관 그룹 정보를 수신하고, 브릿지 장치는, 스토리지 장치의 컨트롤러가 제 3 명령어의 실행을 완료하면, 명령들의 연관 그룹의 복수의 명령을 제출한다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 브릿지 장치는, 브릿지 장치의 메모리에서 제 1 명령과 관련된 데이터를 수집하도록 더 구성되는 시스템. 몇몇의 예시적인 실시 예들에 따르면, 호스트 장치로부터의 제 1 명령은 NVMe 또는 NVMe-oF(NVMe over fabric) 명령이다.
본 개시에 따른 몇몇의 예시적인 실시 예들에 따르면, 브릿지 장치에서, 호스트 장치로부터 제 1 명령을 수신하는 단계; 로스트 장치로부터, 제 1 명령과 관련된 데이터를 수집하는 단계; 브릿지 장치에 의해, 호스트 장치로부터 수신되는 제 1 명령을 복수의 명령으로 분할함으로써 복수의 명령을 포함하는 명령들의 연관 그룹을 생성하는 단계; 브릿지 장치에 의해, ATag 및 ASize, 또는 복수의 명령 각각의 명령들의 연관 그룹의 명령들의 총 개수를 삽입하는 단계; 및 브릿지 장치에 의해, 복수의 명령 각각을 스토리지 장치로 개별적으로 전송하는 단계를 포함하되, ATag는 명령들의 연관 그룹의 모든 명령들에 대해 동일하다.
본 개시의 예시적인 실시 예들은 원본 데이터의 개별적인 청크들의 성공 또는 실패를 계속적으로 추적하고 그러한 책임을 SSD로 전달하는 부담으로부터 호스트 장치를 해방할 수 있다.
도 1은 본 발명의 몇몇 예시적인 실시 예들에 따른 시스템을 도시한다.
도 2는 본 발명의 몇몇 예시적인 실시 예들에 따라, 브릿지 장치의 예시적인 아키텍처를 도시한다.
도 3은, 본 발명의 몇몇 예시적인 실시 예들에 따라, 컷-스루 브릿지 아키텍처의 NVMe 명령의 구조를 도시한다.
도 4는, 본 발명의 몇몇 예시적인 실시 예들에 따라, 연관 동작(AAction) 필드 인코딩의 예시를 도시한다.
도 5는, 본 발명의 몇몇 예시적인 실시 예들에 따라, NVMe 입력 출력(IO) 명령 포맷의 예시를 도시한다.
도 6은, 본 발명의 몇몇 예시적인 실시 예들에 따라, SSD 컨트롤러의 블록도를 도시한다.
도 7은, 본 발명의 몇몇 예시적인 실시 예들에 따라, SSD 컨트롤러에 의해 유지되는 연관 컨텍스트 테이블의 예시를 도시한다.
도 8은, 본 발명의 몇몇 예시적인 실시 예들에 따라, SSD 컨트롤러에 의해연관 그룹 동작을 수행하는 방법의 예시적인 흐름도를 도시한다.
도 9는, 본 발명의 몇몇 예시적인 실시 예들에 따라, 연관 그룹의 실행의 종료 시에 수행되는 논리 물리 맵핑을 도시한다.
이하 첨부된 도면들과 관련하여 설명되는 상세한 설명은 본 발명에 따라 SSD(Solid State Drive) 스토리지에서의 NVMe(Non Volatile Memory express) 명령간 연관을 위한 시스템 및 방법의 몇몇 예시적인 실시 예들의 설명으로서 의도되며, 본 발명이 구성되거나 활용되는 유일한 형태들만을 나타내는 것으로 의도되지 않는다. 설명은 도시된 실시 예들과 관련하여 본 발명의 특징들을 설명한다. 그러나, 동일한 또는 동등한 기능들 및 구조들이 발명의 범위 내에 포함되도록 의도된 상이한 실시 예들에 의해 달성될 수 있음이 이해되어야 한다. 본 명세서의 다른 곳에서 언급되는 바와 같이, 동일한 구성 요소의 번호들은 동일한 구성요소들 또는 특징들을 지시하는 것으로 의도된다.
NVMe는 PCIe(Peripheral Component Interconnect express) 버스를 통해 불휘발성 메모리 서브 시스템(예컨대, SSD)와 통신하는 호스트 소프트웨어를 위한 레지스터 단계의 인터페이스를 정의하는 표준이다. NVMe는 호스트와 주변 장치 대상 스토리지 장치 또는 시스템 사이에서 데이터를 연결하고 전송하기 위한 SCSI(Small Computer System Interface) 표준의 대안이다. PCIe 연결된 NVMe SSD들은 어플리케이션들이 스토리지와 직접 통신하는 것을 허용한다.
NVMe의 물리적인 연결은 PCIe 버스에 기초한다. 일반적인 이더넷 SSD(eSSD)는 PCIe 버스를 통해 미드 플레인을 경유하여 시스템과 인터페이스 하기위한 표준 SSD(예컨대, U.2) 커넥터를 가진다. U.2(SFF-8639)는 SSD들을 컴퓨터에 연결하기 위한 컴퓨터 인터페이스이다. U.2 커넥터는 PCIe SSD들에서 두 개의 SATA(Serial Advanced Technology Attachment) 또는 SAS(Serial Attached SCSI) 포트들과 PCIe SSD들에서 병렬 I/O의 최대 네 개의 레인들(X4)을 지원할 수 있다. 사용되지 않을 경우, 필요에 따라 두 개의 PCIe 레인들 1 및 2가 추가 SAS 포트로서 선택적으로 사용될 수 있다. U.2 커넥터는 NVMe대해 표준화되었으며 PCIe 3.0 X4를 지원하며, 일반적인 SATA SSD의 5배 속도를 제공한다.
NVMe-oF(NVMe over fabric)는 PCIe 이외의 다양한 패브릭들(또는, 인터커넥트들)에서의 동작을 가능케하는 NVMe 표준으로의 확장이다. 본 명세서에 용어 "패브릭"은 네트워크 노드들이 다양한 상호 연결 프로토콜들, 포트들, 및 스위치들을 통해 서로에게 데이터를 전달할 수 있는 네트워크 토폴로지를 나타낸다. 예로서, 이더넷 부착 SSD들은 패브릭에 직접 부착될 수 있으며, 이 경우 패브릭은 이더넷이다.
NVMe-oF는, NVMe 호스트 장치와 NVMe 스토리지 드라이브 또는 서브 시스템이 연결할 수 있는 거리를 확장하는 PCIe에 대한 대체 전송들의 사용을 가능케 한다. 그러므로, NVMe-oF는 NVMe 메시지 기반 명령들이 호스트 컴퓨터와 대상 SSD(예컨대, eSSD 또는 NVMe-oF 장치) 또는 이더넷, 파이버 채널 (FC) 또는 인피니 밴드(InfiniBand)와 같은 네트워크 상의 시스템 사이에 데이터를 직접 전송할 수 있게 설계된 기술 사양이다. NVMe-oF 표준을 지원하도록 구성된 경우, 시스템은 이더넷뿐만 아니라 파이버 채널, 인피니 밴드, TCP/IP, 및 다른 네트워크 패브릭들을 포함하는 다양한 패브릭들을 지원할 수 있다. 예로서, eSSD들은 패브릭에 직접 부착될 수 있으며, 이 경우 패브릭은 이더넷이다. eSSD는 NVMe-oF 프로토콜들을 지원할 수 있는 SSD를 나타낼 수 있다.
도 1은 호스트 장치(102), 브릿지 장치(104), 및 SSD(106)을 포함하는 시스템(100)을 도시하며, 브릿지 장치(104)는 호스트 장치(102)와 SSD(106) 사이에 위치한다. SSD(106)는, 복수의 플래시 미디어를 포함할 수 있는 NAND 플래시 미디어에 호스트(102)(예컨대, "스토리지 서버" 또는 "스토리지 서버 호스트") 데이터 또는 사용자 데이터를 저장할 수 있다. 호스트 장치(102)는 논리 블록 어드레스(Logical Block Address; LBA)들을 이용하여 SSD(106)에 저장된 데이터를 액세스 할 수 있다. 몇몇의 예시적인 실시 예에서, SSD 컨트롤러(예컨대, 도 6과 관련하여 더 상세하게 설명됨)는 SSD(106)에서 플래시 미디어를 관리 할 수 있고 SSD(106)에 저장된 데이터로의 액세스를 호스트 장치(102)로 제공할 수 있다. SSD 컨트롤러는 처리 회로일 수 있고, SSD(106)와 통신하기 위해 NVMe 및 NVMe-oF와 같은 호스트 인터페이스 프로토콜들을 사용하여 스토리지 인터페이스를 제공할 수 있다.
몇몇 예시들에서, 호스트 장치(102)상에서 실행중인 NVMe 드라이버는 NVMe 읽기 및 쓰기 명령을 발행하여 사용자 데이터 액세스들을 수행 할 수 있다. NVMe 프로토콜은 드라이버가 SSD(106)에 명령들을 전송하도록 허용 할 수 있고 SSD(106)가 실제 데이터 DMA(Direct Memory Access) 동작들을 수행하도록 허용 할 수 있다. 쓰기 명령들의 경우, 일단 사용자 데이터가 호스트 장치(102)의 메모리로부터 인출(fetch)되면, SSD 컨트롤러는 그 데이터를 SSD(106)의 플래시 미디어에 프로그램 할 수 있다. 플래시 미디어는 데이터가 써지는/프로그래밍되는 방식과 관련된 특정한 고유한 특성들을 가진다. 예로서, SSD(106)의 복수의 플래시 미디어에서, 플래시 미디어가 인-플레이스(in-place) 데이터 수정을 허용하지 않기 때문에, 그 데이터는 소거된 블록에만 프로그래밍 될 수 있다. 그러므로, 데이터가 호스트 장치(102)상에서 실행되는 어플리케이션에 의해 덮어 쓰기 되거나 수정될 때, SSD 컨트롤러는 관련 LBA들에 대해 새롭게 수정된 데이터를 플래시 미디어의 새롭고 소거된 위치에 프로그래밍할 수 있고, 원래 LBA들에 대응하는 새 데이터를 반영하도록 논리-물리 맵핑 테이블들을 업데이트 한다. 몇몇 예시들에서, SSD 컨트롤러는 SSD(106)의 LBA와 물리적 어드레스 사이의 맵핑을 유지한다. 일반적으로, SSD(106)의 플래시 미디어 내의 물리 어드레스는 플래시 블록 및 페이지 번호들로 구성된다. 일단 새로운 또는 새롭게 수정된 데이터가 플래시에 써지면, SSD 컨트롤러는 명령 완료를 호스트 장치(102)로 되돌려 보낸다. SSD 컨트롤러는 순차적으로 맵핑 테이블에서 새로운 논리-물리 변환을 업데이트 한다.
어플리케이션이 SSD(106)에 의해 지원되는 최대 데이터 전송 크기(Maximum Data Transfer Size; MDTS)보다 큰 파일 또는 데이터 객체를 쓸 때, 호스트 장치(102)의 NVMe 드라이버는 원본 데이터를 다수의 청크들로 분할할 수 있고, 독립적인 NVMe 쓰기 명령들에 의해 원본 데이터의 청크들을 SSD(106)로 전송할 수 있다. 이러한 경우, 호스트 장치(102) 및 소프트웨어 스택은 원본 데이터의 개별적인 청크들의 성공 또는 실패를 계속적으로 추적해야 하는 추가적인 부담을 가질 수 있다. 본 개시의 예시적인 실시 예들은 원본 데이터의 개별적인 청크들의 성공 또는 실패를 계속적으로 추적하는 부담에서 벗어나게 하고 그러한 책임을 SSD(106)로 전달할 수 있다.
도 2는, 로컬 또는 원격 호스트와 백엔드(backend) SSD 사이에 위치하는 NVMe 또는 NVMe-oF 브릿지 장치(200)의 예시적인 아키텍처를 도시한다. 도 2의 예시적인 실시 예에서, 브릿지 장치(200)는 도 1의 브릿지 장치(104)일 수 있다.
NVMe 또는 NVMe-oF 브릿지 장치(200)는 하나 이상의 백엔드 SSD(예컨대, SSD(106))의 전단에 위치한다. NVMe 또는 NVMe-oF 브릿지 장치(200)는 NVMe 읽기 또는 쓰기 명령들을 PCIe 엔드 포인트(EP)(204)에서 호스트 장치(예컨대, 호스트 장치(102))로부터 수신하거나, NVMe-oF 읽기 또는 쓰기 명령들을 이더넷 인터페이스(206)에서 호스트 장치(예컨대, 호스트 장치(102))로부터 수신할 수 있다. NVMe 또는 NVMe-oF 브릿지 장치(200)는 프로세서 서브 시스템(208) 및 NVMe 또는 NVMe-oF 엔진(210)을 사용하여 이들 명령들을 백엔드 SSD(예컨대, SSD(106))로 변환 및 실행할 수 있다. 브리지 장치(200)가 NVMe 쓰기 명령을 수신할 때, 브리지 장치(200)는 몇몇의 최적의 청크 사이즈들로 호스트 장치(예컨대, 호스트 장치(102))로부터 데이터를 인출하기 시작한다. 데이터 청크들이 호스트 장치(예컨대, 호스트 장치(102))로부터 인출됨에 따라, 브리지 장치(200)는 데이터 청크들에 대한 NVMe 쓰기 명령들을 백엔드 SSD(예컨대, SSD(106))로 발행함으로써 인출된 이러한 데이터 청크들의 쓰기를 시작할 수 있다. 모든 데이터 청크들이 호스트 장치(예컨대, 호스트 장치(102))로부터 인출되고 백엔드 SSD(예컨대, SSD(106))에 써질때, 브리지 장치(200)는 원본 쓰기 명령에 대해 완료 항목을 호스트 장치(예컨대, 호스트 장치(102))로 전송할 수 있다. 이 프로세스 동안, 백엔드 SSD(예컨대, SSD(106))에 대한 하나 이상의 데이터 청크 쓰기 동작들이 실패하면, 브리지 장치(200)는 원본 호스트 쓰기 명령을 실패할 수 있고 완료 항목의 에러 상태를 호스트 장치(예컨대, 호스트 장치(102))로 전송 할 수 있다. 그러나, 이러한 상황에서, 백엔드 SSD(예컨대, SSD(106))는 이미 하나 이상의 데이터 청크를 쓰고 SSD 컨트롤러의 플래시 변환 계층(Flash Translation Layer; FTL)에 새로운 논리-물리 어드레스 맵핑을 수행했을 수 있다. 그러므로, 실패한 쓰기 명령은 원본 데이터를 수정하거나 손상시킬 수 있으며, 이는 몇몇의 어플리케이션들에서 수용 가능한 SSD 동작이 아닐 수도 있다.
실패한 쓰기 명령에 의한 SSD의 원본 데이터의 손상을 피하기 위해, 본 개시의 몇몇 예시적인 실시 예들은 NVMe 쓰기 명령들의 특정 세트가 NVMe 명령 관련 보고 메커니즘이라고 불릴 수 있는 하나의 원본 쓰기 명령의 일부이라는 것을 백엔드 SSD들(예컨대, SSD(106))로 알릴 수 있다. 몇몇 예시적인 실시 예들에서, SSD(예컨대, SSD(106))로 지시되는 독립적인 NVMe 쓰기 명령들의 세트 사이의 연관은, 관련 그룹의 모든 멤버 명령들이 성공적으로 완료될 때까지 SSD가 FTL의 새로운 논리-물리 어드레스들을 맵핑하는 것을 억제하는데 도움이 될 수 있다. 독립적인 NVMe 쓰기 명령어들의 세트 사이의 연관은 쓰기 명령어들의 원자성(atomicity)을 지원하여 호스트 쓰기 명령어들이 완전히 새로운 데이터 쓰게 하거나 어떤 데이터도 쓰지 않도록 하게 할 수 있다. 즉, SSD로의 독립적인 NVMe 쓰기 명령들의 세트 사이의 연관의 표시는 NVMe 또는 NVME-oF 브릿지 장치(200)로의 실패한 쓰기 명령으로 인해 SSD의 부분적으로 수정된 원본 데이터를 회피하는데 유용 할 수 있다.
몇몇의 실시 예들에서, NVMe 명령 연관 보고 메커니즘은 서비스 품질(Quality of Service; QoS), 차별화된 프로세싱 등과 같은 다른 동작들을 위해 이용될 수 있다. 다른 몇몇의 실시 예들에서, NVMe 명령 연관 보고 메커니즘은 호스트 장치(예컨대, 호스트 장치(102))의 NVMe 드라이버에 의해 이용 될 수 있다.
몇몇의 예시적인 실시 예들에서, 브릿지 장치(200)는 축적 전송(Store -and-Forward) 아키텍처 또는 컷-스루(cut-through) 아키텍처를 가질 수 있다. 축적 전송 아키텍처의 경우, 브릿지 장치(200)는 주어진 명령에 대한 완전한 데이터를 브릿지 장치(200) 메모리, 예로서, DDR 메모리(202)로 먼저 인출한 다음 브릿지 장치(200)가 백엔드 SSD(예컨대, SSD(106))로 다른 명령을 발행한다. 예로서, 축적 전송 아키텍처에서, 쓰기 명령에 대한 전체 호스트 데이터는 브릿지 장치(200)로 인출되고, 하나의 NVMe 쓰기 명령이 브릿지 장치(200)로부터 백엔드 SSD(예컨대, SSD(106))로 발행된다. 축적 전송 아키텍처에서, 원본 호스트 명령을 더 작은 청크들로 분할할 필요가 없을 수 있다. 또한, 축적 전송 아키텍처에서, 명령에 대한 전체 데이터가 브릿지 장치(200)에서 수집됨에 따라 추가 레이턴시(latency)가 발생한다. 몇몇의 예시적인 실시 예들은 메모리, 전력, 및 프로세싱 사이클들과 같은 더 높은 리소스 이용을 유도 할 수 있다.
도 3은 컷-스루 브릿지 아키텍처의 MVMe 명령의 구조를 도시한다. 컷-스루 아키텍처에서, 브릿지 장치(200)는 원본 호스트 NVMe 또는 NVMe-oF 명령을 절단(chop)할 수 있다. 예로서, 브릿지 장치(200)은 "1MB"의 명령(302)을 복수의 더 작은 NVMe 서브 명령들(304(1) 내지 304(n))로 절단할 수 있다. 브릿지 장치(200)는 각각의 개별적인 서브 명령, 예로서, 서브 명령들(304(1) 내지 304(n))을 백엔드 SSD로 전송할 수 있다. 백엔드 SSD(예컨대, SSD(106))는 NVMe 서브 명령들, 예로서, 서브 명령들(304(1) 내지 304(n))을 수신하고, NVMe 서브 명령들(304(1) 내지 304(n))을 실행할 수 있다. 컷-스루 브릿지 아키텍처에서, 백엔드 SSD의 SSD 컨트롤러는 개별적인 서브 명령, 예로서, 서브 명령들(304(1) 내지 304(n))을 볼 수만 있다. 일단 실행되면, 백엔드 SSD는 완료 항목을 브릿지 장치(200)로 전송할 수 있다. 브릿지 장치(200)는 NVMe 서브 명령들(304 (1) 내지 304 (n))의 실행을 계속해서 추적하고, 모든 서브 커맨드들의 실행 종료 시에, 원본 NVMe 명령(302)에 대한 완료 항목을 호스트 장치(예컨대, 호스트 장치(102))로 전송한다.
예시적인 실시 예에서, 각 NVMe 서브 명령들(304 (1) 내지 304 (n))은 리스트의 다음 서브 명령과 마지막 서브 명령을 나타내는 포인터를 전달하고 리스트의 마지막 또는 명령들의 연관 그룹을 나타내는 튜플을 전달할 수 있기 때문에, NVMe 서브 명령들(304 (1) 내지 304 (n))은 연결 리스트(linked list)를 형성할 수 있다. 연관 튜플은 CID(Command Identifier), SQID(Submission Queue Id), 및 실행될 다음 명령을 식별하기 위한 다른 파라미터들을 포함할 수 있다. 연결 리스트의 마지막 명령은 목록의 마지막을 나타내기 위해 리저브된 몇몇의 고정된 값들을 전달할 수 있습니다. 이 방법 및 메커니즘은, SSD 컨트롤러에 의해 명령 실행의 정확한 시퀀스를 구체화하기 위해 호스트 또는 브릿지 장치에 의해 사용될 수 있다. 이 메커니즘이 없는 경우, 일반적으로, SSD 컨트롤러는 NVMe 명령들을 원하는 임의의 순서로 실행한다.
다른 실시 예에서, 호스트 또는 브리지 장치는 실제 연합 그룹 맴버 명령들을 제출하기 전에 연관 그룹 정보를 SSD 컨트롤러로 전송하기 위해 특수 NVMe 명령 또는 공급자 정의 명령을 사용할 수 있다. 이러한 호스트 또는 브릿지 장치는 호스트 메모리 버퍼의 {(CID, SQID)} 튜플 항목들을 생성할 수 있다. 호스트 또는 브릿지 장치는 이후에 특수 NVMe 명령의 SSD 컨트롤러로 버퍼의 어드레스를 전송할 수 있다. SSD 컨트롤러가 이 특수 명령을 실행할 때, 명령 연관 그룹 정보를 수신할 것이다. 일단 SSD 컨트롤러가 이 특수 NVMe 명령을 완료하면, 호스트 또는 브릿지 장치가 하나의 그룹으로서 관련시키는 실제 NVMe 명령들을 진행하고 제출할 것이다. SSD 컨트롤러는 이후 하나의 명령 연관 그룹으로서 이러한 명령들을 처리할 것 이다.
본 개시의 몇몇의 예시적인 실시 예들은 명령 연관의 지식에 기초하여 SSD에서 브릿지 구현들 및 다른 최적화 방법들에 대한 더 나은 레텐시 성능을 가능하게 할 수 있다. 호스트 소프트웨어가 예시적인 실시 예들에 따른 방법을 활용할 경우, 몇몇의 예시적인 실시 예들 또한 호스트로부터 몇몇의 작업량을 해제할 수도 있다.
몇몇의 구성들에서, 브릿지 장치(예컨대, 브릿지 장치(200)) 또는 호스트 장치(예컨대, 브릿지 장치(104))는 함께 속하는 관련 NVMe 명령들의 연관 그룹을 생성할 수 있다. 브릿지 장치(200)는 연관 그룹을 정의 및 지시하기 위해 세 개의 파라미터들, 예컨대, 연관 태그(ATag), 관련 사이즈(ASize), 및 연관 동작(AAction)을 사용하여 관련 NVMe 명령들의 관련 그룹들을 생성 할 수 있다. 브릿지 장치(200)(또는 호스트 장치)는 특정 연관 그룹 내의 NVMe 명령들의 연관 그룹 필드들에 특정 태그(ATag) 및 사이즈(ASize) 또는 명령의 총 개수를 삽입 할 수 있다. 브릿지 장치(200)에 부착된 백엔드 SSD는 활성 ATag들 및 대응하는 ASize들의 테이블을 유지할 수 있다. SSD는 활성 ATag를 추적하고 주어진 시간에 대응하는 세트로부터의 얼마나 많은 명령들이 실행되는지 모니터링 한다. SSD가 특정 연관 그룹에서 전체 명령들의 세트를 실행할 때, SSD는 SSD 컨트롤러의 FTL에서 논리-물리 어드레스의 맵핑을 수행하는 것과 같이 연관 그룹의 모든 명령들에 대해 특정 동작들을 수행 할 수 있다.
일 예시에서, 명령 연관 특징을 지원하는 SSD가 NVMe 명령을 수신할 때, 동일한 연관 그룹에 속한 모든 명령들을 유사하게 처리한다. 쓰기 명령들의 연관 그룹에 대해, SSD는 쓰기 명령들의 연관 그룹으로부터의 모든 명령들이 성공적으로 실행될 때 FTL 맵핑 테이블들에서 새로운 또는 새롭게 수정된 데이터의 논리-물리 어드레스의 맵핑만을 수행할 수 있다. SSD는 연관 그룹의 지식(ATag, ASize,및 AAction)을 사용하여 명령 실행 순서(QoS), 및 데이터의 배치와 같은 연관 그룹의 명령에 대한 다양한 다른 작업들을 수행할 수 있다. AAction에 기초하여 NVMe 명령들의 다른 리저브 필드들은 추가적인 파라미터들을 SSD 컨트롤러로 전송하는데 사용될 수 있다. 예로서, 호스트는 SSD가 따라야 하는 실행 순서를 명시하는 "AAction"에 대한 각 명령에 포함된 "실행 시퀀스 번호"를 전송할 수 있다.
몇몇의 예시적인 실시 예들에서, ATag는 16 비트이고 16 비트의 ATag는 임의의 주어진 시간에서 최대 64K의 활성 연관들까지 나타낼 수 있다. ASize도 16 비트이고, 16 비트의 ASize 파라미터는 주어진 연관에서 최대 64K의 개별적인 명령들까지 허용할 수 있다. 도 4는 AAtion 필드 인코딩의 예시를 도시한다. AAction 필드는 8 비트일 수 있고 SSD 컨트롤러가 최대 256 개의 고유 동작 코드들을 사용하여 그 연관의 명령들에 대해 수행해야 하는 사전 정의된 동작을 전달하는 데 사용될 수 있다. AAction은 그룹 명령들의 실행 동안 또는 그룹 명령들의 실행의 종료 시에 수행될 동작들을 설명할 수 있다. 예로서, 일단 모든 관련 명령이 "모든 명령이 명령의 AAction 필드에서 실행된 후에만 FTL LBA-물리 어드레스 맵핑 수행" 정보에 기초하여 실행되면 SSD 컨트롤러의 FTL은 논리 물리 주소 맵핑을 수행할 수 있다. AAction의 다른 예시는 따라야 할 명령 실행의 시퀀스일 수 있고, SSD 컨트롤러의 FTL은 명령의 AAction 필드에서 "각 명령에 포함된 "실행 시퀀스 번호"에 따라 명령들을 실행” 정보에 기초하여 명령들의 시퀀스를 수행할 수 있다. AAction의 또 다른 예시는 그 연관 그룹으로부터의 명령들의 실행 우선 순위일 수 있다.
도 5는 ASize, ATag, 및 AAction 필드들을 전달하는 NVMe IO 명령 포맷(500)의 예시를 도시한다. 일 예시에서, NVMe 명령들의 리저브된 필드들은 ATag 및 ASize 정보를 백엔드 SSD로 전송하는 데 사용될 수 있다. 일 예시에서, NVMe IO 명령(500)은 64 바이트일 수 있다. NVMe IO 명령(500)의 64 바이트는 16 DW(d-word)들, 예컨대, DW 0 내지 DW 15로 정렬된다. 각 DW는 32 비트 또는 4 바이트일 수 있다. 제 1 DW(DW0)는 OPC(op-code)를 포함한다. OPC의 정보는 NVMe IO 명령(500)이 NVMe 쓰기 명령인지 읽기 명령인지 또는 몇몇의 다른 NVMe 명령인지 연부를 개시한다. DW0의 {PSDT, FUSE}는 NVMe IO 명령(500)의 기능들을 나타내는 플래그들이다. DW0는 또한 16 비트의 명령 ID(CID)를 포함 한다. NVMe IO 명령(500)에서, DW0 내지 DW12는 NVMe IO 명령(500)의 표준 필드들이다. DW14 내지 DW15는 NVMe IO 명령(500)의 리저브 필드들이다. 예시적인 실시 예에서, NVMe 명령들의 리저브 필드들 또는 NVMe 명령들의 특정 과부화된 필드들은 ATag, ASize, 및 AAction 정보를 전달하는데 사용될 수 있다. 예로서, 도 5에 도시된 바와 같이, NVMe IO 명령(500)의 리저브 필드들 DW 14 내지 DW 15은 ATag, ASize, 및 AAction 정보를 전달하는 데 사용된다. 다른 예시적인 실시 예에서, 명령들의 시퀀스 번호와 함께 ATag 및 ASize는 연관 그룹에 속한 명령들을 식별하는데 사용될 수 있다.
도 6은 SSD 컨트롤러(600)의 블록도를 도시한다. SSD 컨트롤러는 SSD(예컨대, SSD(106))의 플래시 미디어를 관리하고, SSD(예컨대, SSD(106))가 부착되는 호스트 장치(호스트 장치(102))에 대한 데이터로의 접근을 제공한다. SSD 컨트롤러(600)는 프로세싱 회로일 수 있다. SSD 컨트롤러(600)는 스토리지 명령들 및 응답들을 교환하기 위해 예컨대, 호스트 장치(예컨대, 호스트 장치(102)) 및 스토리지 장치(예컨대, SSD(106))에 의해 통상적으로 사용되는 커넥터 및 프로토콜을 통한 호스트 인터페이스(602)를 포함할 수 있다. 커넷터 및 프로토콜은, 예컨대, PCIe, 이더넷을 통한 RDMA(Remote Direct Memory Access), SATA(Serial Advanced Technology Attachment), 파이버 채널, SAS(Statistical Analysis System), NVMe, NVMe-oF, TCP를통한 NVMe 등에 따르거나 이더넷 또는 USB(Universal Serial Bus)와 같은 좀더 범용 인터페이스에 따를 수 있다
호스트 인터페이스(602)는 SSD(예컨대, SSD(106))와 통신하기 위해 스토리지 서버 호스트에 의해 사용된다. 다양한 미디어 관리 명령들(예컨대, "Identify", "Get Log" 등)뿐만 아니라 데이터 읽기 및 데이터 쓰기 명령들과 같은 입력 출력(IO) 명령들은 호스트 인터페이스(602)를 통해 호스트(예컨대, 호스트 장치(102))에 의해 SSD(예컨대, SSD(106))로 전송될 수 있다. 호스트 인터페이스(602)는, 스토리지 서버 호스트(예컨대, 호스트 장치(102)) 시스템 메모리로의 데이터 전송 및 스토리지 서버 호스트(예컨대, 호스트 장치(102)) 시스템 메모리로부터의 데이터 전송을 수행하기 위해 SSD(예컨대, SSD(106))에 의해 사용될 수 있다.
일 예시예서, 호스트 인터페이스(602)는 명령 인출, 명령 실행의 시작, 데이터 전송들, 및 호스트(예컨대, 호스트 장치(102))로의 완료 항목들 게시를 수행할 수 있다. 인출된 명령들이 분석되고, LBA, 데이터 전송의 길이, 및 다른 명령 필드들이 추출되고 FTL 계층(604)으로 제공된다. FTL 계층(604)은 논리 어드레스에서 물리 주소로의 변환을 수행한다. 특히, FTL 계층(604)은 (i) 스토리지 서버에 의해 사용되는 물리 어드레스들 및 (ii) 플래시 미디어 상의 데이터의 물리적인 위치들 사이의 맵핑을 제공할 수 있다. 물리 어드레스는 {플래시 채널, 블록#, 페이지#, 페이지 오프셋}의 형태일 수 있다. 물리 어드레스는 읽기 명령들에 대한 데이터를 인출하거나 쓰기 명령들에 대한 데이터를 프로그래밍하는 데 사용될 수 있다.
몇몇의 예시적인 실시 예들에서, FTL(604)은 칩 상에, 또는 예컨대, 오프-칩(off-chip) DRAM(Dynamic Random Access Memory)(예컨대, "FTL 데이터 구조들(610)"에 내부 데이터 구조들을 저장할 수 있고, 이들 데이터 구조들로의 접근은 읽기 레텐시 변화들에 기여할 수도 있는 자체의 성능 변화들을 가질 수 있다.
플래시 인터페이스(606)는 SSD(예컨대, SSD(106))의 플래시 미디어상의(즉, 플래시 다이들(608) 상의) 읽기 및 쓰기 데이터 동작들을 수행할 수 있다. 플래시 미디어는 이러한 동작들을 수행하기 위해 오픈 NAND 플래시 인터페이스(Open NAND Flash Interface; ONFI) 및 토글(Toggle)과 같은 프로토콜들을 가질 수 있다. 플래시 미디어는 또한 데이터 읽기 및 쓰기 동작이 수행되는 방식에 관한 특정 매체 특정 규칙들 및 타이밍 파라미터들도 갖는다. 플래시 인터페이스(606)는 플래시 다이들(608) 상의 플래시 미디어의 성능, 전력 소모, 및 다른 동작 특성들을 최대화시키기 위해(예컨대, 향상시키기 위해) 노력할 수 있고, 예컨대, 데이터 인코딩 및 데이터 신뢰도를 보장하기 위한 에러 정정을 수행함으로써 미디어 에러들로부터 보호할 수 있다. 본 명세서에서 사용된 바와 같이, "읽기 명령"은 호스트(예컨대, 호스트 장치(102))에 의해 스토리지 장치(예컨대, SSD(106))로 전송되고 데이터를 요청하는 명령이다; 응답 시에 "읽기 동작"은, 예컨대, 플래시 다이들(606) 상의 플래시 메모리 미디어로부터 데이터를 인출하는 동작을 포함하는, 스토리지 장치(예컨대, SSD(106))에 의해 내부적으로 수행되는 동작이다.
몇몇의 예시적인 실시 예들에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))가 처음으로 주어진 ATag(예컨대, "1234")에 대해 "0"이 아닌 값(예컨대, "15")로 설정된 ASize 필드를 포함하는 NVMe 명령(예컨대, NVMe 명령(500))을 수신하면, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 ATag(예컨대, "1234")에 대한 컨텍스트 테이블(예컨대, 도 7의 연관 컨텍스트 테이블(700)) 항목을 생성한다. SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 컨텍스트 테이블(예컨대, 도 7의 연관 컨텍스트 테이블(700))의 명령에서 수신된 ASize 값(예컨대, "15")을 저장한다. 컨텍스트 테이블(예컨대, 도 7의 연관 컨텍스트 테이블(700))은 명령들의 그룹에 대한 임의의 다른 관련 정보를 저장하기 위해 사용될 수 있다. 동일한 ATag를 갖는 후속 명령의 경우, 컨텍스트의 카운터가 감소된다. 그러므로, SSD 컨트롤러(600)는 그 연관 그룹으로부터 언제 마지막 명령을 실행하는 지 인지한다. 연관 그룹의 종료 시에, SSD 컨트롤러(600)는 그 연관을 나타내기 위한 동작을 수행한다.
몇몇의 예시적인 실시 예들에서, NVMe의 스트림 지시 특성은 호스트로 하여금 스트림 식별자를 이용하여 SSD 컨트롤러(600)로 쓰기 명령 내의 특정 논리 블록들이 연관 데이터의 하나의 그룹의 일부임을 나타낼 수 있도록 한다. 유사하게, 명령 연관 그룹은 플래시 미디어의 특정 영역들로 쓰기 데이터의 배치를 지시하기 위해 사용될 수 있다. 몇몇의 예시적인 실시 예들에서, NVMe 스펙은, 융합된 동작들이 두 개의 비교적 단순한 명령들을 함께 융합함으로써 복잡한 명령을 가능케 하는 융합된 명령 지원을 갖는다. 몇몇의 경우에, 서로 관련된 명령들의 세트가 실행을 위해 SSD 컨트롤러(600)에 의해 수신될 때, SSD 컨트롤러(600)는 하나의 명령으로서 관련된 명령들의 세트를 처리할 수 있다. 쓰기 명령 연관에 대해, SSD 컨트롤러(600)는, 연관 세트로부터의 모든 명령들이 성공적으로 완료될 때까지 새로운 논리 물리 맵핑을 수행하지 않을 수 있다. SSD는, 연관 세트에 대해 고유한 다른 동작들을 수행하기 위해 이러한 연관 세트 속성을 사용할 수 있다. 예로서, 연관 세트의 모든 쓰기 명령들은 특정 NVMe 세트 또는 플래시 채널로 써질 수 있다. 다른 예시에서, 연관 세트로부터의 모든 NVMe 읽기 명령들은 실행을 위해 더 높은 순위가 주어질 수 있고, 가능한한 서로에게 근접하여 실행된다. 또 다른 예시에서, 특정한 압축 및/또는 암호화 알고리즘이 이들 명령에 의해 운반된 데이터에 적용될 수 있다. 또 다른 예시에서, SSD 컨트롤러는 호스트 또는 브릿지 장치에 의해 시퀀스에서 동일한 연관 그룹의 명령들을 실행할 수 있다.
도 7은 SSD 컨트롤러(예컨대, SSD 컨트롤러(600)에 의해 유지되는 연관 컨텍스트 테이블(700)의 예시를 도시한다. 예시에서, 연관 컨텍스트 테이블(700)은 SSD 컨트롤러(예컨대, SSD 컨트롤러(600))에 의해 동적으로 생성될 수 있다. 다른 예시에서, 연관 컨텍스트 테이블(700)은 검색에 의해 비어있는 컨텍스트 항목을 제공하고, 그 항목의 새로운 연관 세트의 제 1 명령으로부터 ATag, ASize, 및 AAction을 기록할 수 있다. 연관 컨텍스트 테이블(700)은 일단 연관 세트에 속하는 모든 명령이 실행되면, 컨텍스트 항목의 할당 해제를 수행 할 수 있다. 몇몇의 예시에서, 연관 컨텍스트 테이블(700)은 일단 명령이 SSD 컨트롤러에 의해 실행 된 후에, 연관 세트에 속하는 모든 명령에 대한 ASize를 감소시킬 수 있다. 일 예시에서, 연관 컨텍스트 테이블(700)에서, 두 개의 활성 연관들이 있다. 제 2 활성 및 "3821"의 ATag 값을 갖는 유효 연관 그룹은, 세 개의 대기중인 명령들(대응하는 ASize의 값)을 갖는 동안 아직 실행되지 않은 15 명령들(ASize의 값)을 갖는다. SSD 컨트롤러는 비어있는 항목의 할당 및 연결 완료의 종료 시의 할당 해제와 같은 연관 컨텍스트 리소스 관리 기능들을 수행한다.
도 8은 SSD 컨트롤러에 의한 연관 그룹 동작 수행의 방법(800)의 예시적인 흐름도를 도시한다. 도 8의 실시 예에서, SSD 컨트롤러는 도 6의 SSD 컨트롤러(600)일 수 있다.
802 방법에서, NVMe 명령(예컨대, NVMe 명렁(500))은 SSD 컨트롤러(예컨대, SSD 컨트롤러(600))에서 수신될 수 있다.
804 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 수신되는 명령의 "ASize" 값이 "0"보다 큰지 여부를 판별한다.
804 방법에서, SSD 컨트롤러는 수신되는 명령의 "ASize" 값이 "0"보다 큰것으로 판단하면, 806 방법에서, SSD 컨트롤러는 수신되는 명령의 "ATag" 값이 연관 컨텍스트에서 유효한지(예컨대, 바로 수신되는 명령이 존재하는(이미 생성된) 연관 그룹에 속하는지) 여부를 판별한다.
예로서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))가, 처음으로 주어진 ATag(예컨대, "1234")에 대해 "0"이 아닌 값(예컨대, "15")으로 설정된 ASize 필드를 포함하는 NVMe(예컨대, NVMe 명령(500))을 수신할 때, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))가 ATag(예컨대, "1234")에 대한 컨텍스트 테이블(예컨대, 연관 컨텍스트 테이블(700)) 항목을 생성한다. SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 컨텍스트 테이블(예컨대, 연관 컨텍스트 테이블(700))의 명령의 수신된 ATag(예컨대, "1234"), ASize(예컨대, "15"), AAction(예컨대, "2")를 저장하고, 그 항목이 현재 사용 중 임을 나타내기 위한 유효 비트를 설정한다. 컨텍스트 테이블 항목(예컨대, 연관 컨텍스트 테이블(700))은 명령들의 그룹에 대한 임의의 다른 관련 정보를 저장하는데 사용될 수 있다.
806 방법에서, SSD 컨트롤러는 연관 컨텍스트 테이블에서 수신되는 명령의 "ATag" 값이 유효한 것으로 판별하는 경우, (참인 경우)새로운 컨텍스트 테이블 항목의 할당을 바이패스 한다. 808 방법에서, SSD 컨트롤러는 그 컨텍스트 항목의 ASize 필드를 감소시킨다. 그러므로, 컨텍스트 테이블의 ASize 항목이 "0"이기 때문에, SSD 컨트롤러는 언제 그 연관 그룹으로부터의 마지막 명령이 실행되는지 안다. 연관 그룹(예컨대, ATag "1234"를 포함하는 연관 그룹)의 종료 시, SSD 컨트롤러는 그 연관에 대해 지시된 동작을 수행한다.
그러나, 806 방법에서, SSD 컨트롤러가 수신되는 명령의 "ATag" 값이 연관 컨텍스트에서 유효하지 않다고 판별할 경우, 810 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 그 ATag(예컨대, "3821")에 대한 컨텍스트 테이블(예컨대, 연관 컨텍스트 테이블(700)) 항목을 할당할 수 있다.
812 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 명령에서 수신된 ATag(예컨대, "3821"), ASize(예컨대, "3"), 및 AAction(예컨대, "2")를 컨텍스트 테이블(예컨대, 연관 컨텍스트 테이블(700))에 저장한다. 812 방법으로부터, 방법은 808 방법으로 회귀한다.
814 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 수신되는 명령에 대응하는 컨텍스트 항목의 "ASize" 값이 "0"과 동등한지 여부를 판별한다.
814 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))가 수신되는 명령에 대한 컨텍스트 항목의 "ASize"값이 특정 연관 그룹(예컨대, ATag "1234"를 포함하는 연관 그룹)으로부터의 마지막 명령이 실행되고 있음을 지시하는 "0"과 동등하다고 판별한 경우, 816 방법에서, SSD 컨트롤러는 수신되는 ATag에 대응하는 컨텍스트 항목에 대한 "완료 플래그"를 설정한다.
그러나, 814 방법에서, SSD 컨트롤러는, 대응하는 컨텍스트 항목에서 발견되듯이, 수신되는 명령의 "ASize"값이 "0"과 동등하지 않다고 판별한 경우, 방법 800은 818로 진행된다. 또한, 804 방법에서 SSD 컨트롤러가 수신되는 명령의 "ASize" 값이 "0"보다 크지 않다고 판별한 경우, 방법 800은 818으로 진행된다.
818 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 명령 실행을 수행한다. 몇몇의 예시적인 실시 예들에서, 명령 실행은 명령의 OPC 필드에 의해 지시되는 동작들이 수행될 수 있는 일반 NVMe 명령 실행을 지칭할 수 있다. 예로서, 쓰기 명령에 대해, 명령은 명령은 호스트로부터 인출될 수 있고, 데이터는 호스트로부터 인출되고 프래시 미디어에 써질 수 있고, 완료 항목은 호스트로 전송될 수 있고, 인터럽트는 호스트로 생성될 수 있다. AAction은 이 단계에서 수행되지 않을 수 있다.
820 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600)는, 연관 그룹(예컨대, ATag "1234"를 포함하는 연관 그룹)의 종료를 나타낼 수 있는 ATag 완료 플래그가 설정되었는지 여부를 판별한다.
820 방법에서, SSD 컨트롤러가, 연관 그룹의 종료를 지시할 수 있는 명령들의 특정 연관 그룹에 대한 ATag 완료 플래그가 설정된 것으로 판별할 경우(ASize가 "0"이고 완료 플래그가 그 ATag에 대해 설정되기 때문에), 822 방법에서, SSD 컨트롤러는 AAction의 그 연관 그룹에 대해 지시된 동작을 수행할 수 있다. 예로서, "1234"의 ATag 값을 포함하는 연관 그룹의 종료 시에, ASize가 "0"이고 완료 플래그가 설정되면, SSD 컨트롤러(600)는, 연관 테이블(700)의 "1234"의 ATag 값을 포함하는 연관 그룹에 대한 AAction 값 "1"에 의해 지시되는 동작을 수행한다.
그러나, 820 방법에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))가 명령들의 특정 연관 그룹에 대한 ATag 완료 플래그가 설정되지 않은 것으로 판별하면, 방법 800은 802로 회귀한다.
방법 824에서, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 ATag를 해제할 수 있다.
일단 명령들의 연관 그룹(예컨대, ATag "1234"를 포함하는 연관 그룹)의 모든 명령들이 SSD 컨트롤러(예컨대, SSD 컨트롤러(600))에 의해 성공적으로 실행되었으면, FTL(예컨대, FTL(604))은, 호스트 장치(예컨대, 호스트 장치(102))에 의해 사용되는 논리 어드레스들과 플래시 미디어(예컨대, 플래시 다이들(608))에 상의 데이터의 물리적 위치들 사이의 맵핑을 수행할 수 있다.
도 9는 관련 그룹의 실행의 종료 시에 수행되는 논리적-물리적 매핑을 도시하며, 여기서 SSD 컨트롤러(예컨대, SSD 컨트롤러(600))의 FTL(예컨대, FTL(604))이 연관 LBA들("1232" 내지 "1238")에 대해 새롭게 수정된 데이터(902)를 플래시 미디어의 소거된 위치(904)인 새로운 위치에 프로그래밍 할 수 있고, 원본 LBA들에 대응하는 새로운 데이터를 반영하기 위해 논리 물리 맵핑 테이블들을 업데이트할 수 있다. 일단 새로운 또는 새롭게 수정된 데이터(902)가 플래시(예컨대, 플래시 다이들(608))에 써지면, SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 명령 완료를 호스트 장치(호스트 장치(102))로 되돌려 보낸다. SSD 컨트롤러(예컨대, SSD 컨트롤러(600))는 맵핑 테이블에 새로운 논리 물리 변환을 실질적으로 업데이트 한다.
비록 여기에서 "제 1", "제 2", "제 3" 등의 용어들은 다양한 요소들, 성분들, 영역들, 층들 및/또는 섹션들을 설명하기 위해 사용되지만, 이러한 요소들, 성분들, 영역들, 층들 및/또는 섹션들은 이러한 용어들로 인해 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 성분, 영역, 층, 또는 섹션으로부터 하나의 요소, 구성, 영역, 층 또는 섹션을 구별하기 위해 사용된다. 따라서, 후술하는 제 1 구성 요소, 성분, 영역, 층, 또는 섹션은 본 발명의 개념의 사상 및 범위를 벗어나지 않고, 제 2 구성 요소, 성분, 영역, 층, 또는 섹션을 지칭 할 수 있다.
하나의 요소 또는 도면에서 도시된 다른 구성 요소(들) 또는 특징(들)과의 특징적인 관계를 설명하기 위한 설명을 용이하게 하기 위해 "아래의", "아래", "낮은", "특정 부분 아래", "위에", "상부"와 같은 공간적이고 상대적인 용어들이 여기에서 사용될 수 있다. 공간적이고 상대적인 용어들은 도면에서 묘사된 방향에 더해 사용 또는 동작에서 장치의 다른 방향들을 포함하도록 의도된 것이 이해될 것이다. 예를 들면, 만약 도면의 장치가 뒤집어지면, 다른 구성 요소들 또는 특징들의 "아래" 또는 "아래의" 또는 "특정 부분 아래"로 설명된 구성요소들은 다른 구성 요소들 또는 특징들의 "위로" 맞춰지게 된다. 따라서, "아래의" 또는 "특정 부분 아래"의 예시적인 용어들은 위 또는 아래 방향 모두를 포함할 수 있다. 장치는 다르게 맞춰질 수 있으며(예를 들면, 90도 도는 다른 방향으로 회전됨) 이에따라 공간적으로 상대적인 기술어들은 그에 따라 해석되어야 한다. 또한, 층이 두 개의 층들의 "사이"로 언급되는 때, 그것은 단지 층이 두 층들 사이에 있을 수 있거나, 또는 하나 이상의 사이의 층들이 또한 존재할 수 있다.
본 발명의 개념의 발명의 설명에 사용된 용어들은 특정한 실시 예들을 기술하기 위한 목적으로만 사용되는 것이며, 본 발명의 한정으로서 의도되지 않는다. 본 명세서에서 사용된 바와 같이, "실질적으로", "약" 용어 그리고 이와 유사한 용어들은 근사치의 용어들로서 사용되고, 정도의 용어들로서 사용되지 않고, 본 발명의 당업자에 의해 식별되는 측정된 또는 계산된 값들의 고유한 변동들을 고려하도록 의도된다.
본 명세서에서 사용된 바와 같이, 문맥상 명백히 다르게 지시하지 않는 한 단수 형태는 본 발명의 개념의 설명 및 부가된 청구항에 사용될 때, 복수의 형태를 포함하는 의도로 사용된 것으로 이해되어야 한다. 그리고 "포함한다" 및/또는 "포함하는"의 용어가 본 명세서에 사용되는 경우, 기술된 특징, 영역, 숫자, 단계, 동작, 구성, 및/또는 부품들의 존재를 명기하는 것이며, 이들의 하나 또는 그 이상의 다른 특징, 숫자, 단계, 동작, 구성, 부품, 및/또는 그룹의 존재 또는 부가를 배제하지 않는 것으로 더 이해되어야 한다. 본 명세서에서 사용된 바와 같이, “및/또는”은 하나 이상의 관련된 리스트된 항목들의 임의의 및 모든 조합들을 포함한다. “적어도 하나”와 같은 표현들은 요소들 전체 리스트를 수정하고 그리고 리스트의 개별 요소들을 수정하지 않는다. 또한, "할 수 있다"의 사용은 본 발명의 실시 예들을 설명할 때 "본 발명의 하나 이상의 실시 예들"을 지칭한다. 본 명세서에서 사용된 바와 같이, "사용하다", "사용하는", 및 "사용된" 용어들은 "이용하다", "이용하는", 그리고 "이용된" 용어들의 동의어로 각각 간주 될 수 있다.
구성요소 또는 레이어가 다른 구성요소 또는 레이어와 "위에 있다", "연결된다", "결합된다", 또는 "인접하다"라고 언급될 때는, 다른 구성요소 또는 레이어 상에 직접적으로 있거나, 연결되거나, 결합되거나 인접할 수 있고, 또는 사이에 위치하는 구성요소들 또는 레이어들이 존재할 수 있다. 반면, 구성요소가 다른 구성요소 또는 레이어에 "직접적으로 위에 있다", "직접적으로 연결된다", "직접적으로 결합된다", 또는 "바로 인접한다"라고 언급될 때는, 사이에 위치하는 구성요소들 또는 레이어들이 존재하지 않는다.
본 명세서에서 개시된 및/또는 나열된 임의의 수의 범위는 나열된 범위 내에 포함된 동일한 수의 정확성의 모든 하위 범위들을 포함하도록 의도된다. 예로서, “에서 10.0”의 범위는 나열된 최소 값 1.0과 나열된 최대 값 10.0 사이의(그리고 포함된) 모든 하위 범위들을 포함하도록, 즉, 예로서, 2.4 에서 7.6과 같이, 1.0와 같거나 큰 최소 값 및 10.0과 같거나 작은 최소 값을 갖는 하위 그룹들을 포함하도록 의도된다. 본 명세서에서 나열된 임의의 최대 수의 제한은 여기에 포함되는 모든 더 낮은 수의 제한들을 포함하도록 의도되고, 본 명세서에서 나열된 임의의 최소 수의 제한은 여기에 포함된 모든 더 높은 수의 제한들을 포함하도록 의도된다.
본 명세서에서 설명되는 본 발명의 실시 예들에 따른 전자 또는 전기 장치들 및/또는 다른 관련된 장치들 및 구성요소들은, 임의의 적절한 하드웨어, 펌웨어(예컨대, 주문형 반도체(application-specific integrated circuit; ASIC)), 소프트웨어, 또는 소프트웨어, 펌웨어, 및 하드웨어의 조합을 사용하여 구현될 수 있다. 예로서, 이러한 장치들의 다양한 구성요소들은 하나의 IC(integrated circuit) 칩 또는 분리된 IC 칩들 상에 형성될 수 있다. 또한, 이러한 장치들의 다양한 구성요소들은 연성 인쇄 회로(flexible printed circuit; FPC) 필름, TCP(tape carrier package), 인쇄 회로 기판(printed circuit board; PCB) 상에 구현되거나 하나의 기판 상에 형성될 수 있다. 또한, 이러한 장치들의 다양한 구성요소들은, 본 명세서에서 설명되는 다양한 기능들을 수행하기 위해, 하나 이상의 프로세서들 상에서 실행되고, 하나 이상의 컴퓨팅 장치들에 있고, 컴퓨터 프로그램 명령들을 실행하고, 다른 시스템 구성요소들과 상호작용하는 프로세서 또는 스레드 일 수 있다. 컴퓨터 프로그램 명령들은, 예로서, RAM(random access memory)와 같은 표준 메모리 장치를 사용하여 컴퓨팅 장치 내에 구현될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 명령들은, 예로서, CD-ROM, 플래시 드라이브 등과 같은 다른 비일시적인 컴퓨터 판독 가능 매체에 저장될 수도 있다. 또한, 해당 기술의 통상의 기술자는 다양한 컴퓨팅 장치들의 기능이 하나의 컴퓨팅 장치에 결합 또는 통합될 수 있거나, 특정 컴퓨팅 장치의 기능이 본 발명의 예시적이 실시 예들의 사상 및 범위로부터 벗어나지 않는 하나 이상의 다른 컴퓨팅 장치들 전반에 분배될 수 있다는 것을 인지해야 한다.
비록 전력 증폭기를 위한 서플라이 변환기의 예시적인 실시 예들이 본 명세서에서 구체적으로 설명되고 도시되었으나, 많은 수정들 및 변형들이 해당 기술의 통상의 기술자에게 명확할 것이다. 따라서, 본 발명의 원리들에 따라 구성되는 SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법이 본 명세서에서 구체적으로 설명되는 것 외의 다른 것으로 구현될 수 있다는 것이 이해되어야 한다. 본 발명은 이하의 청구항들 및 그것의 동등한 것들로도 정의된다.

Claims (10)

  1. 스토리지 컨트롤러에서, 호스트 장치로부터의 제 1 명령을 수신하는 단계;
    상기 스토리지 컨트롤러에서, 연관 컨텍스트 테이블 항목의 상기 제 1 명령의 제 1 파라미터의 제 1 값이 "0"보다 큰 것으로 판별함으로써 상기 제 1 명령이 명령들의 연관 그룹의 부분인지 여부를 판별하는 단계;
    상기 스토리지 컨트롤러에서, 상기 연관 컨텍스트 테이블 항목의 상기 제 1 명령의 상기 제 1 파라미터의 상기 제 1 값이 "0"보다 큰 것으로 판별하는 것에 기초하여 상기 제 1 명령의 제 2 파라미터의 제 1 값을 판별하는 단계;
    상기 스토리지 컨트롤러에 의해, 상기 연관 컨텍스트 테이블 항목의 상기 제 1 명령의 상기 제 1 파라미터의 상기 제 1 값을 감소시키는 단계;
    상기 스토리지 컨트롤러에 의해, 상기 연관 컨텍스트 테이블 항목의 상기 제 1 파라미터의 상기 제 1 값이 "0"인지 여부를 판별하는 단계; 및
    상기 연관 컨텍스트 테이블 항목의 상기 제 1 파라미터의 상기 제 1 값이 "0"인 것으로 판별하는 것에 기초하여 상기 스토리지 컨트롤러에 의해, 상기 제 1 명령의 제 3 파라미터에서 지시되는 동작을 실행하는 단계를 포함하되,
    상기 제 1 파라미터는 명령들의 상기 연관 그룹의 명령들의 총 개수를 포함하고, 상기 제 2 파라미터는 명령들의 상기 연관 그룹을 식별하는 태그 값을 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 명령의 상기 제 1 파라미터는 ASize(association size) 파라미터이고, 상기 제 1 명령의 상기 제 2 파라미터는 ATag(association tag) 파라미터이고, 상기 제 1 명령의 상기 제 3 파라미터는 AAction(association action) 파라미터인 방법.
  3. 제 2 항에 있어서,
    명령들의 상기 연관 그룹의 모든 명령들은 동일한 ATag 값을 갖는 방법.
  4. 제 2 항에 있어서,
    상기 AAtion 파라미터는, 상기 스토리지 컨트롤러가 명령들의 상기 연관 그룹의 모든 명령들을 수행하는 사전에 정의된 동작을 나타내는 방법.
  5. 제 1 항에 있어서,
    상기 연관 컨텍스트 테이블의 상기 제 1 파라미터의 "0" 값은 명령들의 상기 연관 그룹의 종료를 나타내는 방법.
  6. 제 1 항에 있어서,
    상기 연관 컨텍스트 테이블 항목의 상기 제 1 파라미터의 상기 제 1 값이 "0"이 아닌 경우,
    상기 스토리지 컨트롤러에서, 상기 호스트 장치로부터 제 2 명령을 수신하는 단계;
    상기 스토리지 컨트롤러에서, 상기 연관 컨텍스트 테이블 항목의 상기 제 2 명령의 상기 제 1 파라미터의 제 2 값이 "0"보다 큰것으로 그리고 상기 제 2 명령의 상기 제 2 파라미터의 제 2 값이 상기 제 1 명령의 상기 제 2 파라미터의 상기 제 1 값과 동일한 것으로 판별함으로써 상기 제 2 명령이 명령들의 상기 연관 그룹의 부분인지 여부를 판별하는 단계;
    상기 스토리지 컨트롤러에 의해, 상기 연관 컨텍스트 테이블 항목의 상기 제 2 명령의 상기 제 1 파라미터의 상기 제 2 값을 감소시키는 단계;
    상기 스토리지 컨트롤러에 의해, 상기 연관 컨텍스트 테이블 항목의 상기 제 2 명령의 상기 제 1 파라미터의 상기 제 2 값이 "0"인지 판별하는 단계; 및
    상기 스토리지 컨트롤러에 의해, 상기 연관 컨텍스트 테이블 항목의 상기 제 2 명령의 상기 제 1 파라미터의 상기 제 2 값이 "0"인 것으로 판별하는 것에 기초하여 상기 제 2 명령의 상기 제 3 파라미터에서 지시되는 동작을 실행하는 단계를 더 포함하는 방법.
  7. 호스트 장치;
    상기 호스트 장치와 연결되는 제 1 단을 포함하는 브릿지 장치; 및
    상기 브릿지 장치의 제 2 단에서 상기 브릿지 장치와 연결되는 스토리지 장치를 포함하되,
    상기 브릿지 장치는, 상지 호스트 장치로부터 제 1 명령을 수신하고, 상기 제 1 명령과 관련된 데이터를 상기 호스트 장치로부터 수집하고, 상기 호스트 장치로부터 수신되는 상기 제 1 명령 및 상기 제 1 명령과 관련된 상기 데이터에 기초하여 하나 이상의 제 2 명령을 생성하고, 상기 하나 이상의 제 2 명령을 상기 스토리지 장치로 전송하도록 구성되는 시스템.
  8. 제 7 항에 있어서,
    상기 브릿지 장치는 상기 호스트 장치로부터 수신되는 상기 제 1 명령을 복수의 명령으로 분할함으로써 상기 하나 이상의 제 2 명령을 생성하도록 더 구성되는 시스템.
  9. 제 8 항에 있어서,
    상기 브릿지 장치는 상기 복수의 명령 각각을 상기 스토리지 장치로 개별적으로 전송하고, 상기 스토리지 장치에서 상기 하나 이상의 제 2 명령의 실행이 완료되면 상기 스토리지 장치로부터의 지시를 수신하도록 더 구성되는 시스템.
  10. 브릿지 장치에서, 호스트 장치로부터 제 1 명령을 수신하는 단계;
    상기 호스트 장치로부터, 상기 제 1 명령과 관련된 데이터를 수집하는 단계;
    상기 브릿지 장치에 의해, 상기 호스트 장치로부터 수신되는 상기 제 1 명령을 복수의 명령으로 분할함으로써 상기 복수의 명령을 포함하는 명령들의 연관 그룹을 생성하는 단계;
    상기 브릿지 장치에 의해, ATag 및 ASize, 또는 상기 복수의 명령 각각의 명령들의 상기 연관 그룹의 명령들의 총 개수를 삽입하는 단계; 및
    상기 브릿지 장치에 의해, 상기 복수의 명령 각각을 스토리지 장치로 개별적으로 전송하는 단계를 포함하되,
    상기 ATag는 명령들의 상기 연관 그룹의 모든 명령들에 대해 동일한 방법.
KR1020190005438A 2018-02-09 2019-01-15 SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법 KR102466353B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862628838P 2018-02-09 2018-02-09
US62/628,838 2018-02-09
US16/107,969 US10761775B2 (en) 2018-02-09 2018-08-21 System and method for NVMe inter command association in SSD storage using a bridge device
US16/107,969 2018-08-21

Publications (2)

Publication Number Publication Date
KR20190096801A true KR20190096801A (ko) 2019-08-20
KR102466353B1 KR102466353B1 (ko) 2022-11-14

Family

ID=67541648

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190005438A KR102466353B1 (ko) 2018-02-09 2019-01-15 SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법

Country Status (3)

Country Link
US (1) US10761775B2 (ko)
KR (1) KR102466353B1 (ko)
CN (1) CN110147335B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI767997B (zh) * 2017-03-23 2022-06-21 日商索尼半導體解決方案公司 通信裝置、通信方法、程式及通信系統
US11366610B2 (en) 2018-12-20 2022-06-21 Marvell Asia Pte Ltd Solid-state drive with initiator mode
CN113924766A (zh) 2019-03-14 2022-01-11 马维尔亚洲私人有限公司 经由固态驱动器(ssd)之间的连接在ssd之间传输数据
CN113767361A (zh) 2019-03-14 2021-12-07 马维尔亚洲私人有限公司 启用以太网的固态驱动器(ssd)
EP3938881A2 (en) * 2019-03-14 2022-01-19 Marvell Asia Pte, Ltd. Termination of non-volatile memory networking messages at the drive level
US10901733B1 (en) 2019-07-01 2021-01-26 Western Digital Technologies, Inc. Open channel vector command execution
US10901624B1 (en) * 2019-07-01 2021-01-26 Western Digital Technologies, Inc. Dummy host command generation for supporting higher maximum data transfer sizes (MDTS)
US11288013B2 (en) * 2019-07-15 2022-03-29 Micron Technology, Inc. Hardware based status collector acceleration engine for memory sub-system operations
CN111078143B (zh) * 2019-11-27 2020-12-29 华中科技大学 基于段映射进行数据布局和调度的混合存储方法及系统
US11036625B1 (en) * 2020-04-24 2021-06-15 Micron Technology, Inc. Host-resident translation layer write command associated with logical block to physical address of a memory device
TWI774255B (zh) * 2020-05-04 2022-08-11 威盛電子股份有限公司 橋接電路與電腦系統
CN113051206A (zh) * 2020-05-04 2021-06-29 威盛电子股份有限公司 桥接电路与计算机系统
US11586393B2 (en) * 2020-12-30 2023-02-21 Macronix International Co., Ltd. Control method for requesting status of flash memory, flash memory die and flash memory with the same
CN116917876A (zh) * 2021-05-29 2023-10-20 华为技术有限公司 一种数据处理方法及装置
US11934684B2 (en) 2021-12-14 2024-03-19 Western Digital Technologies, Inc. Maximum data transfer size per tenant and command type
US11934700B2 (en) 2022-04-13 2024-03-19 Western Digital Technologies, Inc. Fused command handling

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160000055A (ko) * 2014-06-23 2016-01-04 삼성전자주식회사 불휘발성 메모리 및 메모리 컨트롤러를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR20170133256A (ko) * 2016-05-25 2017-12-05 삼성전자주식회사 액세스 파라미터 기반의 다중-스트림 스토리지 장치 액세스

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9128699B2 (en) * 2008-12-22 2015-09-08 Intel Corporation Method and system for queuing transfers of multiple non-contiguous address ranges with a single command
US8918554B2 (en) * 2011-10-06 2014-12-23 Marvell International Ltd. Method and apparatus for effectively increasing a command queue length for accessing storage
US20130275652A1 (en) * 2012-04-13 2013-10-17 Lsi Corporation Methods and structure for transferring additional parameters through a communication interface with limited parameter passing features
US8656059B2 (en) * 2012-04-13 2014-02-18 Lsi Corporation Methods for exchanging administrative information through a communication interface with limited administrative information exchange features
US9785356B2 (en) 2013-06-26 2017-10-10 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
WO2016196766A2 (en) 2015-06-03 2016-12-08 Diamanti, Inc. Enabling use of non-volatile media - express (nvme) over a network
KR102238652B1 (ko) * 2014-11-12 2021-04-09 삼성전자주식회사 데이터 저장 장치, 이의 작동 방법, 및 이를 포함하는 데이터 처리 시스템의 작동 방법
US10101918B2 (en) * 2015-01-21 2018-10-16 Sandisk Technologies Llc Systems and methods for generating hint information associated with a host command
US9760314B2 (en) 2015-05-29 2017-09-12 Netapp, Inc. Methods for sharing NVM SSD across a cluster group and devices thereof
US10089039B2 (en) 2015-10-30 2018-10-02 Toshiba Memory Corporation Memory controller, memory device having the same, and memory control method
US10282103B1 (en) * 2015-11-09 2019-05-07 Seagate Technology Llc Method and apparatus to delete a command queue
US9996262B1 (en) * 2015-11-09 2018-06-12 Seagate Technology Llc Method and apparatus to abort a command
US10216419B2 (en) 2015-11-19 2019-02-26 HGST Netherlands B.V. Direct interface between graphics processing unit and data storage unit
US10275160B2 (en) 2015-12-21 2019-04-30 Intel Corporation Method and apparatus to enable individual non volatile memory express (NVME) input/output (IO) Queues on differing network addresses of an NVME controller
KR102549611B1 (ko) * 2016-04-01 2023-06-30 삼성전자주식회사 스토리지 장치 및 그것의 이벤트 통지 방법
KR102229013B1 (ko) * 2016-09-02 2021-03-17 삼성전자주식회사 자동 스트림 검출 및 할당 알고리즘
US10719474B2 (en) * 2017-10-11 2020-07-21 Samsung Electronics Co., Ltd. System and method for providing in-storage acceleration (ISA) in data storage devices
CN108549610B (zh) * 2018-03-27 2021-02-23 深圳忆联信息系统有限公司 一种NVMe扩展的实现方法及固态硬盘

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160000055A (ko) * 2014-06-23 2016-01-04 삼성전자주식회사 불휘발성 메모리 및 메모리 컨트롤러를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR20170133256A (ko) * 2016-05-25 2017-12-05 삼성전자주식회사 액세스 파라미터 기반의 다중-스트림 스토리지 장치 액세스

Also Published As

Publication number Publication date
KR102466353B1 (ko) 2022-11-14
CN110147335B (zh) 2022-04-26
CN110147335A (zh) 2019-08-20
US10761775B2 (en) 2020-09-01
US20190250855A1 (en) 2019-08-15

Similar Documents

Publication Publication Date Title
KR102466353B1 (ko) SSD 스토리지의 NVMe 명령간 연관을 위한 시스템 및 방법
US9858015B2 (en) Solid-state storage management
US20190121553A1 (en) Multiprocessor system with independent direct access to bulk solid state memory resources
US9934173B1 (en) Pseudo cut-through architecture between non-volatile memory storage and remote hosts over a fabric
US8762789B2 (en) Processing diagnostic requests for direct block access storage devices
TWI526838B (zh) 記憶體裝置
US9870157B2 (en) Command balancing and interleaving for write and reads between front end and back end of solid state drive
JP2013025795A (ja) フラッシュデバイスのためのフラッシュコントローラハードウェアアーキテクチャ
US10108565B2 (en) Method for on-demand fetching of SGL pointers based buffer, traffic and command requirements
EP4220419B1 (en) Modifying nvme physical region page list pointers and data pointers to facilitate routing of pcie memory requests
US10540096B2 (en) Method and design for dynamic management of descriptors for SGL operation
US11726701B2 (en) Memory expander, heterogeneous computing device using memory expander, and operation method of heterogenous computing
US20100161902A1 (en) Method, system, and program for an adaptor to read and write to system memory
CN115495389B (zh) 存储控制器、计算存储装置以及计算存储装置的操作方法
CN114003168B (zh) 用于处理命令的存储设备和方法
US11074010B2 (en) Storage system and control method thereof
US20240086113A1 (en) Synchronous write method and device, storage system and electronic device
US20060277326A1 (en) Data transfer system and method
US11789634B2 (en) Systems and methods for processing copy commands
TW202307672A (zh) 儲存控制器、計算儲存裝置以及計算儲存裝置的操作方法
CN114003514A (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