KR102656104B1 - Non-volatile memory controller device and non-volatile memory device - Google Patents

Non-volatile memory controller device and non-volatile memory device Download PDF

Info

Publication number
KR102656104B1
KR102656104B1 KR1020210067487A KR20210067487A KR102656104B1 KR 102656104 B1 KR102656104 B1 KR 102656104B1 KR 1020210067487 A KR1020210067487 A KR 1020210067487A KR 20210067487 A KR20210067487 A KR 20210067487A KR 102656104 B1 KR102656104 B1 KR 102656104B1
Authority
KR
South Korea
Prior art keywords
host
module
memory
volatile memory
engine
Prior art date
Application number
KR1020210067487A
Other languages
Korean (ko)
Other versions
KR20220012806A (en
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 주식회사 멤레이
Priority to US17/382,895 priority Critical patent/US11775452B2/en
Publication of KR20220012806A publication Critical patent/KR20220012806A/en
Application granted granted Critical
Publication of KR102656104B1 publication Critical patent/KR102656104B1/en

Links

Images

Classifications

    • 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/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory 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/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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/16Memory access

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

비휘발성 메모리 제어 장치가 프로세서 및 호스트 메모리를 포함하는 호스트와 비휘발성 메모리 모듈을 연결한다. 제1 도어벨 영역은 호스트와의 연결을 위한 호스트 인터페이스의 설정 공간에 노출되며, 호스트에서 I/O 요청의 명령을 호스트 메모리로 발행할 때 갱신된다. 페치 관리 모듈은 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 호스트 메모리로부터 명령을 가져온다. 데이터 전송 모듈은 명령에 포함되어 있는 요청 정보에 기초해서 호스트 메모리의 위치를 확인하고, 호스트 메모리와 비휘발성 메모리 모듈 사이에서 I/O 요청에 따른 타겟 데이터의 전송을 수행한다. 완료 핸들링 모듈은 데이터 전송 모듈에서 I/O 요청의 처리를 완료하는 경우, 호스트 메모리에 완료 요청을 기록하고, 인터럽트를 처리한다. 제2 도어벨 영역은 설정 공간에 노출되며, 호스트에서 I/O 서비스를 종료할 때 갱신된다.A non-volatile memory control device connects a non-volatile memory module with a host including a processor and host memory. The first doorbell area is exposed to the configuration space of the host interface for connection to the host, and is updated when the host issues an I/O request command to the host memory. The fetch management module retrieves commands from host memory in response to an event signal generated when the first doorbell area is updated. The data transfer module determines the location of the host memory based on the request information included in the command and transfers target data according to the I/O request between the host memory and the non-volatile memory module. When the completion handling module completes processing of an I/O request in the data transfer module, the completion handling module records the completion request in the host memory and processes the interrupt. The second doorbell area is exposed in the configuration space and is updated when the host terminates the I/O service.

Figure R1020210067487
Figure R1020210067487

Description

비휘발성 메모리 제어 장치 및 비휘발성 메모리 장치{NON-VOLATILE MEMORY CONTROLLER DEVICE AND NON-VOLATILE MEMORY DEVICE}Non-volatile memory control device and non-volatile memory device {NON-VOLATILE MEMORY CONTROLLER DEVICE AND NON-VOLATILE MEMORY DEVICE}

아래에서 설명하는 기술은 비휘발성 메모리 제어 장치 및 비휘발성 메모리 장치에 관한 것이다.The technology described below relates to non-volatile memory control devices and non-volatile memory devices.

최근 SSD(solid-state drive)뿐만 아니라 PRAM(phase-change random-access memory) 또는 MRAM(magnetoresistive random-access memory) 등의 새로운 비휘발성 메모리가 사용됨에 따라, 호스트와 비휘발성 메모리 사이의 통신을 위한 프로토콜이 필요하다. NVMe(non-volatile memory express)이 대표적인 프로토콜로 사용되고 있다.Recently, as new non-volatile memories such as solid-state drives (SSD) as well as phase-change random-access memory (PRAM) or magnetoresistive random-access memory (MRAM) have been used, communication between the host and non-volatile memory has become more common. A protocol is needed. NVMe (non-volatile memory express) is used as a representative protocol.

현재 많은 SSD 공급 업체는 NVMe 사양에 따른 컨트롤러를 펌웨어로 구현하고 있다. 펌웨어 기반 컨트롤러가 플래시를 위해 충분하더라도, 펌웨어 실행은 PRAM 및 MRAM과 같은 빠른 비휘발성 메모리가 제공하는 성능의 우월성을 노출하는 데 중요한 성능 병목 현상이 될 수 있다. 빠른 비휘발성 메모리의 지연 시간은 플래시보다 훨씬 짧다. 펌웨어를 실행하는 CPU 사이클은 백엔드 비휘발성 메모리의 I/O(input/output) 버스트 시간 뒤에 숨겨지거나 겹쳐질 수 없다.Currently, many SSD vendors are implementing controllers according to the NVMe specification as firmware. Even if a firmware-based controller is sufficient for flash, firmware execution can be a significant performance bottleneck that exposes the performance superiority offered by fast non-volatile memories such as PRAM and MRAM. The latency of fast non-volatile memory is much shorter than flash. CPU cycles executing firmware cannot be hidden or overlap behind the input/output (I/O) burst times of the backend non-volatile memory.

구체적으로, NVMe SSD의 지연 시간을 NVMe 펌웨어 실행 시간(프론트엔드) 및 백엔드 메모리 액세스 지연 시간(백엔드)의 두 부분으로 분해할 수 있다. 플래시 기반 백엔드의 액세스 지연 시간은 전체 서비스 시간의 대부분(대략 90% 이상)을 차지하므로 프론트엔드 펌웨어 실행이 플래시 I/O 버스트 뒤에 숨겨질 수 있다. 그러나 PRAM이나 MRAM에서는 펌웨어 실행 시간이 전체 서비스 시간의 대부분을 차지하므로, 펌웨어 실행은 PRAM이나 MRAM의 I/O 버스트 시간과 인터리빙될 수 없다.Specifically, the latency of an NVMe SSD can be decomposed into two parts: NVMe firmware execution time (frontend) and backend memory access latency (backend). Access latency in flash-based backends accounts for the majority (approximately 90% or more) of overall service time, allowing front-end firmware execution to be hidden behind flash I/O bursts. However, in PRAM or MRAM, firmware execution time accounts for most of the total service time, so firmware execution cannot be interleaved with the I/O burst time of PRAM or MRAM.

따라서, 새로운 비휘발성 메모리에서는 전세 서비스 시간의 대다수를 차지하는 펌웨어 실행 시간을 줄이거나 제거할 필요가 있다.Therefore, in new non-volatile memories, there is a need to reduce or eliminate firmware execution time, which accounts for the majority of charter service time.

본 발명의 어떤 실시예는 하드웨어로 자동화된 비휘발성 메모리 제어 장치 및 비휘발성 메모리 장치를 제공할 수 있다.Certain embodiments of the present invention may provide a hardware-automated non-volatile memory control device and a non-volatile memory device.

본 발명의 한 실시예에 따르면, 프로세서 및 호스트 메모리를 포함하는 호스트와 비휘발성 메모리 모듈을 연결하는 비휘발성 메모리 제어 장치가 제공된다. 상기 비휘발성 메모리 제어 장치는 제1 도어벨 영역, 제2 도어벨 영역, 페치 관리 모듈, 데이터 전송 모듈 및 완료 핸들링 모듈을 포함한다. 상기 제1 도어벨 영역은 상기 호스트와의 연결을 위한 호스트 인터페이스의 설정 공간에 노출되며, 상기 호스트에서 I/O(input/output) 요청의 명령을 상기 호스트 메모리로 발행할 때 갱신된다. 상기 페치 관리 모듈은 상기 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 상기 호스트 메모리로부터 상기 명령을 가져온다. 상기 데이터 전송 모듈은 상기 명령에 포함되어 있는 요청 정보에 기초해서 상기 호스트 메모리의 위치를 확인하고, 상기 호스트 메모리와 상기 비휘발성 메모리 모듈 사이에서 상기 I/O 요청에 따른 타겟 데이터의 전송을 수행한다. 상기 완료 핸들링 모듈은 상기 데이터 전송 모듈에서 상기 I/O 요청의 처리를 완료하는 경우, 상기 호스트 메모리에 완료 요청을 기록하고, 인터럽트를 처리한다. 상기 제2 도어벨 영역은 상기 설정 공간에 노출되며, 상기 호스트에서 I/O 서비스를 종료할 때 갱신된다.According to one embodiment of the present invention, a non-volatile memory control device is provided that connects a host including a processor and host memory and a non-volatile memory module. The non-volatile memory control device includes a first doorbell area, a second doorbell area, a fetch management module, a data transmission module, and a completion handling module. The first doorbell area is exposed to the configuration space of the host interface for connection to the host, and is updated when the host issues an I/O (input/output) request command to the host memory. The fetch management module retrieves the command from the host memory in response to an event signal generated when the first doorbell area is updated. The data transfer module confirms the location of the host memory based on the request information included in the command and performs transfer of target data according to the I/O request between the host memory and the non-volatile memory module. . When the data transfer module completes processing of the I/O request, the completion handling module records the completion request in the host memory and processes an interrupt. The second doorbell area is exposed in the setting space and is updated when the host terminates the I/O service.

어떤 실시예에서, 상기 제1 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제2 도어벨 영역은 하드웨어로 구현될 수 있다.In some embodiments, the first doorbell area, the fetch management module, the data transmission module, the completion handling module, and the second doorbell area may be implemented as hardware.

어떤 실시예에서, 상기 제1 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제2 도어벨 영역은 레지스터 전송 레벨(register transfer level, RTL)에서 하드웨어로 구현될 수 있다.In some embodiments, the first doorbell area, the fetch management module, the data transfer module, the completion handling module, and the second doorbell area may be implemented in hardware at a register transfer level (RTL). there is.

어떤 실시예에서, 상기 제1 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제2 도어벨 영역은 상기 비휘발성 메모리 제어 장치의 내부 메모리 버스에 의해 연결될 수 있다.In some embodiments, the first doorbell area, the fetch management module, the data transmission module, the completion handling module, and the second doorbell area may be connected by an internal memory bus of the non-volatile memory control device.

어떤 실시예에서, 상기 내부 메모리 버스는 AXI(advanced extensible interface) 인터페이스를 포함할 수 있다.In some embodiments, the internal memory bus may include an advanced extensible interface (AXI) interface.

어떤 실시예에서, 상기 제1 도어벨 영역과 상기 제2 도어벨 영역은 상기 내부 메모리 버스의 주소 공간에 매핑될 수 있다.In some embodiments, the first doorbell area and the second doorbell area may be mapped to the address space of the internal memory bus.

어떤 실시예에서, 상기 호스트 인터페이스는 PCIe(peripheral component interconnect express) 인터페이스를 포함하고, 상기 설정 공간은 BAR(base address registers)를 포함할 수 있다.In some embodiments, the host interface may include a peripheral component interconnect express (PCIe) interface, and the configuration space may include base address registers (BAR).

어떤 실시예에서, 상기 페치 관리 모듈은 상기 명령으로부터 상기 요청 정보를 파싱할 수 있다.In some embodiments, the fetch management module may parse the request information from the command.

어떤 실시예에서, 상기 요청 정보는 논리 주소 및 상기 호스트 메모리의 위치를 지시하는 호스트 메모리 주소를 포함할 수 있다. 상기 데이터 전송 모듈은, 상기 논리 주소 및 상기 호스트 메모리 주소에 기초해서 상기 데이터 전송 모듈을 위한 소스 주소와 목적지 주소를 설정하는 제1 엔진, 그리고 상기 소스 주소와 목적지 주소에 기초해서 상기 타겟 데이터의 전송을 수행하는 제2 엔진을 포함할 수 있다.In some embodiments, the request information may include a logical address and a host memory address indicating the location of the host memory. The data transmission module includes a first engine that sets a source address and a destination address for the data transmission module based on the logical address and the host memory address, and transmission of the target data based on the source address and the destination address. It may include a second engine that performs.

어떤 실시예에서, 상기 제2 엔진은 DMA(direct memory access) 엔진을 포함할 수 있다.In some embodiments, the second engine may include a direct memory access (DMA) engine.

어떤 실시예에서, 상기 호스트 메모리 주소는 PRP(physical region page)를 포함할 수 있다.In some embodiments, the host memory address may include a physical region page (PRP).

어떤 실시예에서, 상기 제1 엔진은 상기 PRP에 기초해서 상기 호스트 메모리로부터 PRP 리스트를 가져오고, 상기 PRP 리스트는 상기 호스트 메모리의 위치를 참조하는 적어도 하나의 PRP 엔트리를 포함하고, 상기 제1 엔진은 상기 PRP 엔트리에 의해 참조되는 상기 호스트 메모리의 위치를 검출할 수 있다.In some embodiments, the first engine retrieves a PRP list from the host memory based on the PRP, the PRP list includes at least one PRP entry referencing a location in the host memory, and the first engine Can detect the location of the host memory referenced by the PRP entry.

어떤 실시예에서, 상기 비휘발성 메모리 제어 장치는 상기 비휘발성 메모리 모듈과 복수의 채널을 통해 연결되고, 상기 제2 엔진은 상기 복수의 채널에 각각 대응하는 복수의 DMA 코어를 포함할 수 있다.In some embodiments, the non-volatile memory control device is connected to the non-volatile memory module through a plurality of channels, and the second engine may include a plurality of DMA cores respectively corresponding to the plurality of channels.

어떤 실시예에서, 상기 제2 엔진은 상기 I/O 요청의 타겟 데이터를 복수의 데이터 청크로 분할하고, 상기 복수의 데이터 청크를 상기 복수의 DMA 코어에 분산할 수 있다.In some embodiments, the second engine may divide the target data of the I/O request into a plurality of data chunks and distribute the plurality of data chunks to the plurality of DMA cores.

어떤 실시예에서, 상기 호스트 메모리에 복수의 큐 쌍이 존재하고, 각 큐 쌍은 SQ(submission queue)와 CQ(competition queue)의 쌍을 포함할 수 있다. 상기 페치 관리 모듈은, 상기 복수의 큐 쌍 중에서 상기 제1 도어벨 영역에서 갱신된 엔트리에 대응하는 큐 쌍의 SQ로부터 상기 명령을 가져올 수 있다.In some embodiments, a plurality of queue pairs exist in the host memory, and each queue pair may include a pair of a submission queue (SQ) and a competition queue (CQ). The fetch management module may retrieve the command from the SQ of the queue pair corresponding to the updated entry in the first doorbell area among the plurality of queue pairs.

어떤 실시예에서, 상기 완료 핸들링 모듈은 상기 페치 관리 모듈로부터 전달되는 정보에 기초해서 상기 명령을 가져온 상기 SQ에 대응하는 CQ를 감지할 수 있다.In some embodiments, the completion handling module may detect a CQ corresponding to the SQ that retrieved the command based on information transmitted from the fetch management module.

본 발명의 다른 실시예에 따르면, 프로세서 및 호스트 메모리를 포함하는 호스트와 비휘발성 메모리 모듈을 연결하는 비휘발성 메모리 제어 장치가 제공된다. 상기 비휘발성 메모리 제어 장치는 제1 모듈, 제2 모듈, 제3 모듈, 제1 엔진 및 제2 엔진을 포함한다. 상기 제1 모듈은 상기 호스트와의 연결을 위한 PCIe 인터페이스의 BAR에 노출되며, 상기 호스트 메모리의 타겟 SQ에 명령이 기록될 때 상기 타겟 SQ에 대응하는 엔트리가 갱신되는 제1 도어벨 영역과 상기 호스트에서 I/O 서비스를 종료할 때 타겟 CQ에 대응하는 엔트리가 갱신되는 제2 도어벨 영역을 포함한다. 상기 제2 모듈은 상기 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 상기 타겟 SQ로부터 상기 명령을 가져온다. 상기 제1 엔진은 상기 명령에 포함되어 있는 PRP에 기초해서 상기 호스트 메모리의 위치를 검출한다. 상기 제2 엔진은 상기 제1 엔진에 의해 검출된 상기 호스트 메모리의 위치와 상기 비휘발성 메모리 모듈 사이에서 상기 I/O 요청에 따른 타겟 데이터의 전송을 수행한다. 상기 제3 모듈은 상기 제2 엔진에서 상기 I/O 요청의 처리를 완료하는 경우, 상기 타겟 CQ에 완료 요청을 기록하고, 인터럽트를 처리한다.According to another embodiment of the present invention, a non-volatile memory control device is provided that connects a host including a processor and host memory and a non-volatile memory module. The non-volatile memory control device includes a first module, a second module, a third module, a first engine, and a second engine. The first module is exposed to the BAR of the PCIe interface for connection to the host, and a first doorbell area where an entry corresponding to the target SQ is updated when a command is written to the target SQ of the host memory and the host It includes a second doorbell area in which an entry corresponding to the target CQ is updated when the I/O service is terminated. The second module retrieves the command from the target SQ in response to an event signal generated when the first doorbell area is updated. The first engine detects the location of the host memory based on the PRP included in the command. The second engine transmits target data according to the I/O request between the location of the host memory detected by the first engine and the non-volatile memory module. When the second engine completes processing of the I/O request, the third module records a completion request in the target CQ and processes an interrupt.

어떤 실시예에서, 상기 제1 엔진은 상기 PRP에 기초해서 상기 호스트 메모리로부터 PRP 리스트를 가져오고, 상기 PRP 리스트는 상기 호스트 메모리의 위치를 참조하는 적어도 하나의 PRP 엔트리를 포함하고, 상기 제1 엔진은 상기 PRP 엔트리에 의해 참조되는 상기 호스트 메모리의 위치를 검출할 수 있다.In some embodiments, the first engine retrieves a PRP list from the host memory based on the PRP, the PRP list includes at least one PRP entry referencing a location in the host memory, and the first engine Can detect the location of the host memory referenced by the PRP entry.

어떤 실시예에서, 상기 제1 모듈, 상기 제2 모듈, 상기 제1 엔진, 상기 제2 엔진 및 상기 제3 모듈은 하드웨어로 구현될 수 있다.In some embodiments, the first module, the second module, the first engine, the second engine, and the third module may be implemented as hardware.

본 발명의 또 다른 실시예에 따르면, 프로세서 및 호스트 메모리를 포함하는 호스트에 연결되는 비휘발성 메모리 장치가 제공된다. 상기 비휘발성 메모리 장치는 비휘발성 메모리 모듈, 제1 도어벨 영역, 제2 도어벨 영역, 페치 관리 모듈, 데이터 전송 모듈 및 완료 핸들링 모듈을 포함한다. 상기 제1 도어벨 영역은 상기 호스트와의 연결을 위한 호스트 인터페이스의 설정 공간에 노출되며, 상기 호스트에서 I/O 요청의 명령을 상기 호스트 메모리로 발행할 때 갱신된다. 상기 페치 관리 모듈은 상기 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 상기 호스트 메모리로부터 상기 명령을 가져온다. 상기 데이터 전송 모듈은 상기 명령에 포함되어 있는 요청 정보에 기초해서 상기 호스트 메모리의 위치를 확인하고, 상기 호스트 메모리와 상기 비휘발성 메모리 모듈 사이에서 상기 I/O 요청에 따른 타겟 데이터의 전송을 수행한다. 상기 완료 핸들링 모듈은 상기 데이터 전송 모듈에서 상기 I/O 요청의 처리를 완료하는 경우, 상기 호스트 메모리에 완료 요청을 기록하고, 인터럽트를 처리한다. 상기 제2 도어벨 영역은 상기 설정 공간에 노출되며, 상기 호스트에서 I/O 서비스를 종료할 때 갱신된다.According to another embodiment of the present invention, a non-volatile memory device coupled to a host including a processor and host memory is provided. The non-volatile memory device includes a non-volatile memory module, a first doorbell area, a second doorbell area, a fetch management module, a data transmission module, and a completion handling module. The first doorbell area is exposed to the configuration space of the host interface for connection to the host, and is updated when the host issues an I/O request command to the host memory. The fetch management module retrieves the command from the host memory in response to an event signal generated when the first doorbell area is updated. The data transfer module confirms the location of the host memory based on the request information included in the command and performs transfer of target data according to the I/O request between the host memory and the non-volatile memory module. . When the data transfer module completes processing of the I/O request, the completion handling module records the completion request in the host memory and processes an interrupt. The second doorbell area is exposed in the setting space and is updated when the host terminates the I/O service.

도 1은 본 발명의 한 실시예에 따른 컴퓨팅 장치의 예시 블록도이다.
도 2는 전형적인 스토리지 장치의 블록도이다.
도 3은 본 발명의 한 실시예에 따른 NVMe 장치의 예시 블록도이다.
도 4는 본 발명의 한 실시예에 따른 NVMe 제어 장치를 예시하는 도면이다.
도 5는 본 발명의 한 실시예에 따른 NVMe 제어 장치의 동작을 예시하는 도면이다.
도 6은 본 발명의 한 실시예에 따른 NVMe 제어 장치의 연결 관계를 예시하는 도면이다.
1 is an example block diagram of a computing device according to one embodiment of the present invention.
Figure 2 is a block diagram of a typical storage device.
Figure 3 is an example block diagram of an NVMe device according to one embodiment of the present invention.
Figure 4 is a diagram illustrating an NVMe control device according to an embodiment of the present invention.
Figure 5 is a diagram illustrating the operation of an NVMe control device according to an embodiment of the present invention.
Figure 6 is a diagram illustrating the connection relationship of an NVMe control device according to an embodiment of the present invention.

아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.Below, with reference to the attached drawings, embodiments of the present invention will be described in detail so that those skilled in the art can easily implement the present invention. However, the present invention may be implemented in many different forms and is not limited to the embodiments described herein. In order to clearly explain the present invention in the drawings, parts that are not related to the description are omitted, and similar parts are given similar reference numerals throughout the specification.

아래 설명에서 단수로 기재된 표현은 "하나" 또는 "단일" 등의 명시적인 표현을 사용하지 않은 이상, 단수 또는 복수로 해석될 수 있다.In the description below, expressions described as singular may be interpreted as singular or plural, unless explicit expressions such as “one” or “single” are used.

도면을 참고하여 설명한 흐름도에서, 동작 순서는 변경될 수 있고, 여러 동작들이 병합되거나, 어느 동작이 분할될 수 있고, 특정 동작은 수행되지 않을 수 있다.In the flowchart described with reference to the drawings, the order of operations may be changed, several operations may be merged, certain operations may be divided, and certain operations may not be performed.

도 1은 본 발명의 한 실시예에 따른 컴퓨팅 장치의 예시 블록도이다.1 is an example block diagram of a computing device according to one embodiment of the present invention.

도 1을 참고하면, 컴퓨팅 장치(100)는 프로세서(110), 메모리(120), 비휘발성 메모리 제어 장치(130) 및 메모리 모듈(140)을 포함한다. 도 1은 가능한 컴퓨팅 장치의 한 예이며, 컴퓨팅 장치는 다른 다양한 구조로 구현될 수 있다.Referring to FIG. 1 , the computing device 100 includes a processor 110, a memory 120, a non-volatile memory control device 130, and a memory module 140. 1 is an example of a possible computing device, and the computing device may be implemented in a variety of other structures.

어떤 실시예에서, 컴퓨팅 장치는 다양한 유형의 컴퓨팅 장치 중 어느 하나일 수 있다. 다양한 유형의 컴퓨팅 장치는 스마트폰(smartphone)과 같은 이동 전화기(mobile phone), 태블릿 컴퓨터(tablet computer), 랩톱 컴퓨터(laptop computer), 데스크톱 컴퓨터(desktop computer), 멀티미디어 플레이어(multimedia player), 게임 콘솔(game console), 텔레비전, 다양한 유형의 사물 인터넷(internet of thing, IoT) 기기 등을 포함할 수 있다.In some embodiments, the computing device may be any of various types of computing devices. Various types of computing devices include mobile phones such as smartphones, tablet computers, laptop computers, desktop computers, multimedia players, and game consoles. It may include game consoles, televisions, various types of Internet of things (IoT) devices, etc.

프로세서(110)는 명령어를 실행하여서 다양한 동작(예를 들면, 연산, 로직, 제어, 입출력 등의 연산)을 수행한다. 프로세서는 예를 들면 중앙 처리 장치(central processing unit, CPU), 그래픽 처리 장치(graphics processing unit, GPU), 마이크로프로세서 또는 어플리케이션 프로세서(application processor, AP)일 수 있으며, 이에 한정되지 않는다. 아래에서는 프로세서(110)를 CPU(110)로 설명한다.The processor 110 executes instructions to perform various operations (eg, operations, logic, control, input/output, etc.). The processor may be, for example, a central processing unit (CPU), a graphics processing unit (GPU), a microprocessor, or an application processor (AP), but is not limited thereto. Below, the processor 110 is described as CPU 110.

메모리(120)는 CPU(110)에 의해 액세스되어 사용되는 시스템 메모리이며, 예를 들면 동적 랜덤 액세스 메모리(dynamic random-access memory, DRAM)일 수 있다. 어떤 실시예에서, CPU(110)와 메모리(120)는 시스템 버스를 통해 연결될 수 있다. 프로세서(110)와 메모리(120)를 포함하는 시스템을 호스트라 할 수 있다. 메모리(120)를 호스트 메모리라 할 수 있다.The memory 120 is system memory accessed and used by the CPU 110, and may be, for example, dynamic random-access memory (DRAM). In some embodiments, CPU 110 and memory 120 may be connected via a system bus. A system including the processor 110 and memory 120 may be referred to as a host. The memory 120 may be referred to as host memory.

메모리 모듈(140)은 비휘발성 메모리 기반 메모리 모듈이다. 어떤 실시예에서, 메모리 모듈(140)은 플래시 메모리 기반 메모리 모듈일 수 있다. 플래시 메모리 기반 메모리 모듈(140)은 예를 들면 솔리드 스테이트 드라이브(solid state drive, SSD), SD(secure digital) 카드, USB(universal serial bus) 플래시 드라이브 등일 수 있다. 어떤 실시예에서, 메모리 모듈(140)은 저항 변화 메모리(resistance switching memory) 기반 메모리 모듈일 수 있다. 한 실시예에서, 저항 변화 메모리는 저장 매체(상변화 물질)의 저항율을 이용하는 상변화 메모리(phase-change memory, PCM), 예를 들면 상변화 랜덤 액세스 메모리(phase-change random-access memory, PRAM)를 포함할 수 있다. 다른 예로, 저항 변화 메모리는 메모리 소자의 저항을 이용하는 저항성 메모리(resistive memory) 또는 자기저항(magnetoresistive) 메모리, 예를 들면 자기저항 랜덤 액세스 메모리(magnetoresistive random-access memory, MRAM)를 포함할 수 있다. 앞으로, 메모리 모듈(140)에 사용되는 메모리를 PRAM을 설명한다.The memory module 140 is a non-volatile memory-based memory module. In some embodiments, memory module 140 may be a flash memory-based memory module. The flash memory-based memory module 140 may be, for example, a solid state drive (SSD), a secure digital (SD) card, or a universal serial bus (USB) flash drive. In some embodiments, the memory module 140 may be a memory module based on resistance switching memory. In one embodiment, the resistance change memory is a phase-change memory (PCM) that utilizes the resistivity of a storage medium (phase-change material), such as phase-change random-access memory (PRAM). ) may include. As another example, the resistance change memory may include resistive memory or magnetoresistive memory that uses the resistance of a memory element, for example, magnetoresistive random-access memory (MRAM). Next, PRAM, the memory used in the memory module 140, will be described.

비휘발성 메모리 제어 장치(130)는 CPU(110)와 메모리(120)를 포함하는 호스트와 메모리 모듈(140)을 연결한다. 어떤 실시예에서, 비휘발성 메모리 제어 장치(130)는 비휘발성 메모리 기반 메모리 모듈(140)에 액세스하기 위한 프로토콜로 NVMe(non-volatile memory express) 프로토콜을 사용할 수 있다. 아래에서는 프로토콜을 NVMe 프로토콜로, 비휘발성 메모리 제어 장치(130)를 NVMe 제어 장치로 설명하지만, 실시예는 이에 한정되지 않고 다른 프로토콜이 사용될 수 있다.The non-volatile memory control device 130 connects the host including the CPU 110 and the memory 120 and the memory module 140. In some embodiments, the non-volatile memory control device 130 may use a non-volatile memory express (NVMe) protocol as a protocol to access the non-volatile memory-based memory module 140. Below, the protocol is described as the NVMe protocol and the non-volatile memory control device 130 is described as the NVMe control device, but the embodiment is not limited to this and other protocols may be used.

어떤 실시예에서, NVMe 제어 장치(130)는 호스트 인터페이스를 통해 호스트와 연결될 수 있다. 어떤 실시예에서, 호스트 인터페이스는 PCIe(peripheral component interconnect express) 인터페이스를 포함할 수 있다. 앞으로, 호스트 인터페이스를 PCIe 인터페이스로 설명하지만, 실시예는 이에 한정되지 않고 다른 호스트 인터페이스가 사용될 수도 있다.In some embodiments, NVMe control device 130 may be connected to a host through a host interface. In some embodiments, the host interface may include a peripheral component interconnect express (PCIe) interface. In the future, the host interface will be described as a PCIe interface, but the embodiment is not limited to this and other host interfaces may be used.

어떤 실시예에서, 컴퓨팅 장치(100)는 CPU(110)와 메모리(120)를 포함하는 호스트와 비휘발성 메모리 제어 장치(130)를 연결하기 위한 인터페이스 장치(150)를 더 포함할 수 있다. 어떤 실시예에서, 인터페이스 장치(150)는 PCIe 시스템에서 호스트와 비휘발성 메모리 제어 장치(130)를 연결하는 루트 콤플렉스(150)를 포함할 수 있다.In some embodiments, the computing device 100 may further include an interface device 150 for connecting a host including the CPU 110 and the memory 120 and the non-volatile memory control device 130. In some embodiments, interface device 150 may include a root complex 150 that connects a host and non-volatile memory control device 130 in a PCIe system.

먼저, 도 2를 참고로 하여 전형적인 스토리지 장치에 대해서 설명한다.First, a typical storage device will be described with reference to FIG. 2.

도 2는 전형적인 스토리지 장치의 블록도이다. 도 2에는 설명의 편의상 NAND 플래시 메모리가 연결된 SSD 스토리지 장치가 예시되어 있다.Figure 2 is a block diagram of a typical storage device. For convenience of explanation, Figure 2 illustrates an SSD storage device to which NAND flash memory is connected.

도 2를 참고하면, 스토리지 장치(200)는 내장 프로세서(210), 내부 메모리(220) 및 플래시 매체(230)를 포함한다. 스토리지 장치(200)는 PCIe 인터페이스(240)를 통해 호스트에 연결된다. 스토리지 카드(200)는 병렬성을 개선하고 백엔드 스토리지 밀도를 높이기 위해 여러 채널에 걸쳐 복수의 플래시 매체(230)를 포함할 수 있다. 내부 메모리(220), 예를 들면 내부 DRAM은 호스트와 플래시 매체(230) 사이의 데이터 버퍼링에 사용된다. DRAM(220)은 프로세서(210)에서 실행되는 펌웨어의 메타 데이터를 유지하는데도 사용될 수 있다.Referring to FIG. 2 , the storage device 200 includes a built-in processor 210, an internal memory 220, and a flash medium 230. The storage device 200 is connected to the host through a PCIe interface 240. Storage card 200 may include multiple flash media 230 across multiple channels to improve parallelism and increase back-end storage density. Internal memory 220, such as internal DRAM, is used for data buffering between the host and flash media 230. DRAM 220 may also be used to maintain metadata of firmware running on processor 210.

프로세서(210)의 펌웨어 스택의 맨 위에는 호스트 인터페이스 계층(host interface layer, HIL)(211)이 존재하여 블록 스토리지 호환 인터페이스를 제공한다. HIL(211)은 NVMe 큐를 관리하며, NVMe 요청과 관련된 큐 엔트리를 가져오고 큐 엔트리의 명령을 파싱할 수 있다. 요청이 쓰기인 경우 HIL(211)은 쓰기 요청의 데이터를 DRAM(220)으로 전달하고, 요청이 읽기인 경우 HIL(211)은 DRAM(220)의 데이터를 직접 제공하기 위해 DRAM(220)을 스캔한다.At the top of the firmware stack of the processor 210, a host interface layer (HIL) 211 exists to provide a block storage compatible interface. HIL 211 manages NVMe queues and can retrieve queue entries associated with NVMe requests and parse commands from the queue entries. If the request is a write, HIL 211 delivers the data in the write request to DRAM 220, and if the request is a read, HIL 211 scans DRAM 220 to directly provide data from DRAM 220. do.

데이터가 DRAM(220)에 버퍼링될 수 있지만, 요청은 결국 백그라운드 또는 포 그라운드 방식으로 플래시 매체(230)에서 제공된다. 따라서, HIL(211) 아래의 주소 변환 계층(address translation layer, ATL)(212)은 요청의 논리 블록 주소(logical block address, LBA)를 백엔드 메모리, 즉 플래시 매체(230)의 주소로 변환한다. ATL(212)은 병렬 처리를 위해 여러 플래시 매체(230)에 걸쳐 요청을 발행할 수 있다. 펌웨어 스택 맨 아래에 있는 HAL(hardware abstraction layer, HAL)(213)은 ATL(212)에서 발행한 요청에 대한 메모리 프로토콜 트랜잭션을 관리한다.Although data may be buffered in DRAM 220, requests are ultimately served from flash media 230 in a background or foreground manner. Accordingly, the address translation layer (ATL) 212 below the HIL 211 translates the logical block address (LBA) of the request into an address in the backend memory, i.e., the flash medium 230. ATL 212 may issue requests across multiple flash media 230 for parallel processing. The hardware abstraction layer (HAL) 213 at the bottom of the firmware stack manages memory protocol transactions for requests issued by the ATL 212.

따라서, 효율적인 펌웨어 설계는 스토리지 카드의 핵심 역할을 하지만, 새로운 비휘발성 메모리의 액세스 지연 시간이 약 몇 ㅅs이므로 펌웨어 실행이 중요한 성능 병목 현상이 된다. 예를 들면, 스토리지 카드의 백엔드 메모리로 PRAM을 사용하는 경우, I/O(input/output) 경로에서 펌웨어 지연 시간이 디바이스 레벨에서의 I/O 서비스 시간의 대략 98%를 차지할 수 있다. 이 문제를 해결하기 위해, 더 많은 코어를 가지는 프로세서 또는 고주파 프로세서를 사용할 수 있다. 예를 들면, 계산 사이클을 여러 코어에 분산하여 펌웨어의 CPU 버스트를 줄이고, 펌웨어 지연 시간을 백엔드 메모리의 I/O 버스트 지연 시간과 겹치게 할 있다. 그러면 전체 지연 시간을 단축될 수 있지만, 많은 코어 및/또는 고주파 프로세서는 더 많은 전력을 소비할 수 있으며, 이는 에너지 효율적인 새로운 메모리 기반 스토리지 설계에 적합하지 않을 수 있다. 아래에서는 이러한 문제를 해결하기 위한 실시예에 대해서 설명한다.Therefore, efficient firmware design plays a key role in storage cards, but with access latency of new non-volatile memory on the order of a few seconds, firmware execution becomes a significant performance bottleneck. For example, when using PRAM as the backend memory of a storage card, firmware latency in the input/output (I/O) path can account for approximately 98% of the I/O service time at the device level. To solve this problem, processors with more cores or higher frequency processors can be used. For example, you can reduce the firmware's CPU burst by distributing computation cycles across multiple cores and allow the firmware latency to overlap with the I/O burst latency of the backend memory. This may reduce overall latency, but many cores and/or high-frequency processors may consume more power, which may not be suitable for new energy-efficient memory-based storage designs. Below, an embodiment to solve this problem will be described.

도 3은 본 발명의 한 실시예에 따른 NVMe 장치의 예시 블록도이다.Figure 3 is an example block diagram of an NVMe device according to one embodiment of the present invention.

도 3을 참고하면, NVMe 장치(300)는 NVMe 제어 장치 및 메모리 모듈(360)을 포함한다. NVMe 제어 장치는 큐 디스패치(queue dispatching) 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링(complete handling) 모듈(330)을 포함한다.Referring to FIG. 3, the NVMe device 300 includes an NVMe control device and a memory module 360. The NVMe control device includes a queue dispatching module 310, a data transmission module 320, and a completion handling module 330.

큐 디스패치 모듈(310)은 도어벨(doorbell) 모니터링(311), 명령 페치(fetch)(312) 및 명령 파싱(313)을 포함하는 일련의 절차를 수행할 수 있다. 큐 디스패치 모듈(310)은 NVMe 장치(300)의 데이터 경로 시작 부분에 위치하며, 내부 메모리 버스(340)에 매핑된 레지스터(도어벨 영역)(311)의 모니터링에 따라 제출 큐(submission queue, SQ)로부터 I/O 요청(즉, NVMe 명령)을 가져와서 파싱할 수 있다. 큐 디스패치 모듈(310)의 도어벨 영역(311)을 SQ 테일(tail) 도어벨 영역이라 할 수 있다.The queue dispatch module 310 may perform a series of procedures including doorbell monitoring 311, command fetch 312, and command parsing 313. The queue dispatch module 310 is located at the beginning of the data path of the NVMe device 300 and sends a submission queue (SQ) according to monitoring of the register (doorbell area) 311 mapped to the internal memory bus 340. ) from the I/O request (i.e. NVMe commands) and parse it. The doorbell area 311 of the queue dispatch module 310 may be referred to as an SQ tail doorbell area.

데이터 전송 모듈(320)은 호스트 메모리 주소를 통해 호스트 메모리(예를 들면, 도 1의 120)에서 데이터 위치를 확인하고, 호스트 메모리(120)와 백엔드 메모리 모듈(350) 사이에서 데이터 전송을 수행한다. 어떤 실시예에서, 호스트 메모리 주소는 물리 영역 페이지(physical region page, PRP)일 수 있으며, 아래에서는 호스트 메모리 주소를 PRP로 설명한다. PRP는 호스트 메모리(120)의 타겟 위치를 지시하며, 읽기의 경우 타겟 데이터가 전달되어야 하는 위치를 지시하고, 쓰기의 경우 타겟 데이터를 가져와야 할 위치를 지시할 수 있다. 어떤 실시예에서, 데이터 전송은 DMA(direct memory access)로 수행될 수 있다. 이를 위해, 데이터 전송 모듈(320)은 DMA 엔진(321)과 PRP 엔진(322)을 사용할 수 있다.The data transmission module 320 confirms the data location in the host memory (e.g., 120 in FIG. 1) through the host memory address and performs data transmission between the host memory 120 and the backend memory module 350. . In some embodiments, the host memory address may be a physical region page (PRP), and the host memory address is described below as a PRP. The PRP indicates the target location of the host memory 120, and in the case of reading, it indicates the location where the target data should be delivered, and in the case of writing, it can indicate the location where the target data should be retrieved. In some embodiments, data transfer may be performed with direct memory access (DMA). For this purpose, the data transmission module 320 may use the DMA engine 321 and the PRP engine 322.

완료 핸들링 모듈(330)은 도어벨 모니터링(331), 인터럽트 핸들링(332) 및 I/O 완료(333)을 포함하는 일련의 절차를 수행할 수 있다. 타겟 데이터가 백엔드 메모리 모듈(350)에 기록되거나(쓰기) 타겟 데이터가 백엔드 메모리 모듈(350)로부터 호스트 메모리(120)로 전달되면(읽기), 내부 메모리 버스(340)에 매핑된 레지스터(즉, 도어벨 영역)를 통해 인터럽트 및 완료 큐(completion queue, CQ)를 관리할 수 있다. 완료 핸들링 모듈(330)의 도어벨 영역을 CQ 헤드(head) 도어벨 영역이라 할 수 있다.The completion handling module 330 may perform a series of procedures including doorbell monitoring 331, interrupt handling 332, and I/O completion 333. When target data is written to the backend memory module 350 (write) or when target data is transferred from the backend memory module 350 to host memory 120 (read), registers mapped to the internal memory bus 340 (i.e. You can manage interrupts and completion queues (CQ) through the doorbell area. The doorbell area of the completion handling module 330 may be referred to as the CQ head doorbell area.

어떤 실시예에서, 큐 디스패치 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링 모듈(330)은 하드웨어 모듈로 형성될 수 있다. 어떤 실시예에서, 큐 디스패치 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링 모듈(330)은 집적 회로, 예를 들면 FPGA(field-programmable gate array)에서 구현될 수 있다. 예를 들면, 큐 디스패치 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링 모듈(330)은 UltraScaleTM 칩과 PCIe Gen3 인터페이스를 사용하는 Xilinx의 FPGA 보드에 구현될 수 있다. 어떤 실시예에서, 큐 디스패치 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링 모듈(330)은 레지스터 전송 레벨(register transfer level, RTL)에서 하드웨어 모듈로 구현될 수 있다.In some embodiments, queue dispatch module 310, data transfer module 320, and completion handling module 330 may be formed as hardware modules. In some embodiments, queue dispatch module 310, data transfer module 320, and completion handling module 330 may be implemented in an integrated circuit, such as a field-programmable gate array (FPGA). For example, the queue dispatch module 310, data transfer module 320, and completion handling module 330 can be implemented on an FPGA board from Xilinx using an UltraScale chip and a PCIe Gen3 interface. In some embodiments, queue dispatch module 310, data transfer module 320, and completion handling module 330 may be implemented as hardware modules at register transfer level (RTL).

어떤 실시예에서, NVMe 제어 장치는 백엔드 메모리 모듈(350)에서의 I/O 서비스를 수행하는 메모리 컨트롤러(340)를 더 포함할 수 있다. 어떤 실시예에서, 메모리 컨트롤러는 NVMe 제어 장치의 전체 하드웨어 설계의 일부로서 구현될 수 있다.In some embodiments, the NVMe control device may further include a memory controller 340 that performs I/O services in the backend memory module 350. In some embodiments, the memory controller may be implemented as part of the overall hardware design of the NVMe control device.

어떤 실시예에서, 큐 디스패치 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링 모듈(330)은 내부 메모리 버스(340)를 통해 PCIe 인터페이스 및 메모리 컨트롤러(350)와 연결될 수 있다. 어떤 실시예에서, 내부 메모리 버스(340)는 내부 SoC(system on chip) 메모리 버스를 포함할 수 있다. 어떤 실시예에서, 내부 메모리 버스(340)는 AXI(advanced extensible interface) 인터페이스를 포함할 수 있다. 어떤 실시예에서, 내부 메모리 버스(340)는 AXI 크로스바를 포함할 수 있다.In some embodiments, queue dispatch module 310, data transfer module 320, and completion handling module 330 may be coupled with a PCIe interface and memory controller 350 via internal memory bus 340. In some embodiments, the internal memory bus 340 may include an internal system on chip (SoC) memory bus. In some embodiments, internal memory bus 340 may include an advanced extensible interface (AXI) interface. In some embodiments, internal memory bus 340 may include an AXI crossbar.

어떤 실시예에서, FPGA 로직 모듈은 프론트엔드 자동화(frontend automation) 및 백엔드 자동화(backend automation)의 두 가지로 분류될 수 있다. 프론트엔드 자동화는 큐 디스패치 모듈(310)과 완료 핸들링 모듈(330)을 위한 대부분의 논리 모듈을 포함할 수 있다. 또한, 프론트엔드 자동화는 호스트 인터페이스의 설정 공간을 호스트 주소 공간에 매핑하여 호스트에 노출할 수 있다. 또한, 프론트엔드 자동화는 설정 공간을 내부 메모리 버스(340)에 매핑할 수 있다. 어떤 실시예에서, 설정 공간은 PCIe의 베이스 주소 레지스터(base address registers, BARs)를 포함할 수 있다. 큐 디스패치 모듈(310)은 호스트에서 발행한 NVMe 명령을 가져오고 파싱하는 반면, 완료 핸들링 모듈(330)은 인터럽트 핸들링을 포함한 I/O 요청 완료를 관리할 수 있다. 완료 핸들링 모듈(330)은 큐 디스패치 모듈(310)과 협력하여 서로 다른 SQ 및 CQ를 자동으로 페어링하여 모든 컨텍스트를 유지할 수 있다. 백엔드 자동화는 데이터 전송 모듈(320)을 포함할 수 있다. 데이터 전송 모듈(320)은 모든 PRP 엔트리를 탐색하고 메모리 컨트롤러와 DMA 엔진을 통해 호스트 메모리(120)와 백엔드 메모리 모듈(360) 사이에서 타겟 데이터를 이주시킬 수 있다.In some embodiments, FPGA logic modules can be categorized into two types: frontend automation and backend automation. Front-end automation may include most of the logical modules for the queue dispatch module 310 and completion handling module 330. Additionally, front-end automation can be exposed to the host by mapping the configuration space of the host interface to the host address space. Additionally, front-end automation can map the configuration space to the internal memory bus 340. In some embodiments, the configuration space may include PCIe's base address registers (BARs). The queue dispatch module 310 retrieves and parses NVMe commands issued by the host, while the completion handling module 330 may manage I/O request completion, including interrupt handling. The completion handling module 330 can work with the queue dispatch module 310 to automatically pair different SQs and CQs to maintain all contexts. Backend automation may include data transfer module 320. The data transfer module 320 may search all PRP entries and migrate target data between the host memory 120 and the backend memory module 360 through the memory controller and DMA engine.

도 4는 본 발명의 한 실시예에 따른 NVMe 제어 장치를 예시하는 도면이며, 도 5는 본 발명의 한 실시예에 따른 NVMe 제어 장치의 동작을 예시하는 도면이다.FIG. 4 is a diagram illustrating an NVMe control device according to an embodiment of the present invention, and FIG. 5 is a diagram illustrating the operation of the NVMe control device according to an embodiment of the present invention.

도 4를 참고하면, NVMe 제어 장치(400)는 콘텍스트 모듈(410), 페치 관리 모듈(420), PRP 엔진(430), 데이터 전송 엔진(440) 및 완료 핸들링 모듈(450)을 포함한다. 어떤 실시예에서, 데이터 전송 엔진(440)은 DMA(direct memory access) 엔진일 수 있으며, 앞으로 데이터 전송 엔진(440)을 DMA 엔진으로 설명한다. 어떤 실시예에서, NVMe 제어 장치(400)는 PCIe 인터페이스를 통해 호스트와 연결될 수 있다. 어떤 실시예에서, NVMe 제어 장치(400)는 PCIe 인터페이스를 통해 호스트와 연결하기 위해 PCIe 프론트엔드(460)를 더 포함할 수 있다. 또한, NVMe 제어 장치(400)는 백엔드 메모리 모듈(470)에 연결되어 있다. 도 4에서는 백엔드 메모리 모듈(470)로 복수의 메모리 모듈이 연결되는 것으로 도시하였으며, 각 메모리 모듈(470)은 예를 들면 DIMM(dual in-line memory module)일 수 있다. 어떤 실시예에서, NVMe 제어 장치(400)는 메모리 모듈(470)의 제어를 위한 메모리 컨트롤러(도시하지 않음)를 더 포함할 수 있다.Referring to FIG. 4, the NVMe control device 400 includes a context module 410, a fetch management module 420, a PRP engine 430, a data transfer engine 440, and a completion handling module 450. In some embodiments, the data transfer engine 440 may be a direct memory access (DMA) engine, and the data transfer engine 440 will now be described as a DMA engine. In some embodiments, NVMe control device 400 may be connected to a host through a PCIe interface. In some embodiments, the NVMe control device 400 may further include a PCIe frontend 460 to connect to the host via a PCIe interface. Additionally, the NVMe control device 400 is connected to the backend memory module 470. In Figure 4, a plurality of memory modules are shown connected to the backend memory module 470, and each memory module 470 may be, for example, a dual in-line memory module (DIMM). In some embodiments, the NVMe control device 400 may further include a memory controller (not shown) for controlling the memory module 470.

어떤 실시예에서, 콘텍스트 모듈(410), 페치 관리 모듈(420), PRP 엔진(430), 데이터 전송 엔진(440), 완료 핸들링 모듈(450) 및 PCIe 프론트엔드(460)는 내부 메모리 버스(480)에 의해 서로 연결될 수 있다. 어떤 실시예에서, 메모리 버스(480)는 AXI 인터페이스를 포함할 수 있다.In some embodiments, context module 410, fetch management module 420, PRP engine 430, data transfer engine 440, completion handling module 450, and PCIe frontend 460 are connected to internal memory bus 480. ) can be connected to each other. In some embodiments, memory bus 480 may include an AXI interface.

어떤 실시예에서, 콘텍스트 모듈(410), 페치 관리 모듈(420), PRP 엔진(430), 데이터 전송 엔진(440), 완료 핸들링 모듈(450) 및 PCIe 프론트엔드(460)는 하드웨어 모듈로 형성될 수 있다. 어떤 실시예에서, 콘텍스트 모듈(410), 페치 관리 모듈(420), PRP 엔진(430), 데이터 전송 엔진(440), 완료 핸들링 모듈(450) 및 PCIe 프론트엔드(460)는 FPGA에서 구현될 수 있다. 어떤 실시예에서, 콘텍스트 모듈(410), 페치 관리 모듈(420), PRP 엔진(430), 데이터 전송 엔진(440), 완료 핸들링 모듈(450) 및 PCIe 프론트엔드(460)는 RTL에서 하드웨어 모듈로 구현될 수 있다.In some embodiments, the context module 410, fetch management module 420, PRP engine 430, data transfer engine 440, completion handling module 450, and PCIe frontend 460 may be formed as hardware modules. You can. In some embodiments, context module 410, fetch management module 420, PRP engine 430, data transfer engine 440, completion handling module 450, and PCIe frontend 460 may be implemented in an FPGA. there is. In some embodiments, the context module 410, the fetch management module 420, the PRP engine 430, the data transfer engine 440, the completion handling module 450, and the PCIe frontend 460 can be used to configure RTL to hardware modules. It can be implemented.

호스트에는 입출력(input/output, I/O) 요청을 관리하기 위해 제출 큐(submission queue, SQ)(401)와 완료 큐(completion queue, CQ)(402)의 쌍이 형성된다. 어떤 실시예에서, CPU(예를 들면, 도 1의 110)가 복수의 코어를 포함하는 경우, 코어마다 SQ(401)와 CQ(402)의 쌍이 형성될 수 있다. 어떤 실시예에서, SQ(401)와 CQ(402)의 쌍은 호스트 메모리에 형성될 수 있다. 어떤 실시예에서, 호스트 메모리는 시스템 메모리(예를 들면, 도 1의 120)을 포함할 수 있다. 도 3에서는 설명의 편의상 하나의 코어의 SQ(401)와 CQ(402)의 쌍(SQ1, CQ1)이 도시되어 있다.In the host, a pair of a submission queue (SQ) 401 and a completion queue (CQ) 402 is formed to manage input/output (I/O) requests. In some embodiments, when a CPU (eg, 110 in FIG. 1) includes a plurality of cores, a pair of SQ 401 and CQ 402 may be formed for each core. In some embodiments, pairs of SQ 401 and CQ 402 may be formed in host memory. In some embodiments, host memory may include system memory (e.g., 120 in FIG. 1). In Figure 3, for convenience of explanation, a pair (SQ1, CQ1) of SQ (401) and CQ (402) of one core is shown.

도 4 및 도 5를 참고하면, 호스트가 I/O 요청에 따라 생성된 명령(예를 들면, NVMe 명령)을 발행하기 위해서, 호스트는 NVMe 명령, 즉 SQ 엔트리를 SQ(401)로 푸시(즉, 작성)한다(S510). 어떤 실시예에서, 새로운 SQ 엔트리는 SQ(401)의 테일(tail)에 작성되고, 이에 따라 호스트는 SQ(401)의 테일 포인터를 증가시킬 수 있다. 이와 같이, 호스트가 SQ 엔트리를 SQ(401)에 작성하여 NVMe 명령을 발행할 때, 호스트는 SQ 테일 도어벨(doorbell, DB)을 작성한다(즉, 울린다(ring))(S420). 이를 위해, 콘텍스트 모듈(410)은 SQ마다의 테일 포인터를 추적하는 도어벨 엔트리의 세트(411)와 CQ마다의 헤드 포인터를 추적하는 도어벨 엔트리의 세트(412)를 포함하는 도어벨 영역을 포함할 수 있다. 이에 따라, 큐마다 도어벨 엔트리(SQ0 DB, SQ1 DB, CQ0 DB, CQ1 DB)가 제공될 수 있다. 어떤 실시예에서, SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)은 NVMe 제어 장치(400)의 내부 메모리 버스 주소 공간에 매핑되어 PCIe 인터페이스의 BAR(490)에 노출될 수 있다. 따라서, 호스트는 SQ 엔트리를 SQ(401)에 작성한 경우, BAR(490)을 통해 SQ 테일 도어벨 영역(411)의 대응하는 도어벨 엔트리에 테일 포인터를 작성할 수 있다. 어떤 실시예에서, 호스트에서 도어벨을 작성하는 것은 PCIe 패킷을 기록하는 프로세스(즉, PCIe 인바운드 프로세스)이므로, NVMe 제어 장치(400)는 도어벨 영역(411)에 매핑된 메모리 버스 주소 공간을 통해 도어벨 이벤트를 모니터링할 수 있다.Referring to Figures 4 and 5, in order for the host to issue a command (e.g., NVMe command) generated according to an I/O request, the host pushes the NVMe command, that is, an SQ entry, to the SQ 401 (i.e. , written) (S510). In some embodiments, new SQ entries are written to the tail of SQ 401, thereby allowing the host to increment the tail pointer of SQ 401. In this way, when the host issues an NVMe command by creating an SQ entry in the SQ 401, the host creates (i.e. rings) an SQ tail doorbell (DB) (S420). To this end, the context module 410 includes a doorbell area containing a set of doorbell entries 411 tracking the tail pointer for each SQ and a set 412 of doorbell entries tracking the head pointer for each CQ. can do. Accordingly, doorbell entries (SQ0 DB, SQ1 DB, CQ0 DB, CQ1 DB) may be provided for each queue. In some embodiments, the SQ tail doorbell area 411 and the CQ head doorbell area 412 may be mapped to the internal memory bus address space of the NVMe control device 400 and exposed to the BAR 490 of the PCIe interface. . Accordingly, when the host writes an SQ entry in the SQ 401, the host can create a tail pointer in the corresponding doorbell entry in the SQ tail doorbell area 411 through the BAR 490. In some embodiments, since writing a doorbell on a host is the process of writing a PCIe packet (i.e., a PCIe inbound process), the NVMe control device 400 may You can monitor doorbell events.

콘텍스트 모듈(410)은 SQ 테일 도어벨 영역(411)의 도어벨 이벤트에 응답하여 이벤트 신호를 생성하고, 이벤트 신호를 페치 관리 모듈(420)로 전달한다(S530). 어떤 실시예에서, SQ 테일 도어벨 영역(411)의 도어벨 엔트리에 테일 포인터가 작성될 때마다, 콘텍스트 모듈(410)은 SQ 테일 도어벨 영역(411)에 매핑된 메모리 버스 주소 공간을 통해 이벤트 신호를 전달할 수 있다(S530).The context module 410 generates an event signal in response to a doorbell event in the SQ tail doorbell area 411 and transmits the event signal to the fetch management module 420 (S530). In some embodiments, whenever a tail pointer is written to a doorbell entry in the SQ tail doorbell area 411, the context module 410 processes the event through the memory bus address space mapped to the SQ tail doorbell area 411. A signal can be transmitted (S530).

페치 관리 모듈(420)은 콘텍스트 모듈(410)로부터 수신한 이벤트 신호를 통해 전달된 정보를 확인하고, 호스트 메모리(120)로부터 타겟 SQ 엔트리(즉, NVMe 명령)을 가져온다(S540). 어떤 실시예에서, 도어벨 이벤트가 동시에 발생할 수 있기 때문에, 페치 관리 모듈(420)은 서로 다른 NVMe 큐 사이를 중재할 수 있다. 예를 들면, 페치 관리 모듈(420)은 NVMe 사양에 따라 서로 다른 NVMe 큐 사이를 중재할 수 있다. NVMe 명령을 가져온 후, 페치 관리 모듈(420)은 NVMe 명령으로부터 I/O 요청의 요청 정보를 파싱하여 PRP 엔진(430)으로 전달한다(S550). 어떤 실시예에서, 요청 정보는 동작 코드(operation code, opcode), 논리 주소, 크기 및 PRP를 포함할 수 있다. 어떤 실시예에서, 연산 코드는 읽기, 쓰기 등을 지시할 수 있다. 어떤 실시예에서, 논리 주소는 논리 블록 주소(logical block address, LBA)일 수 있으며, 아래에서는 논리 주소를 LBA로 설명한다. LBA는 동작 코드가 지시하는 동작으로 수행될(예를 들면, 읽거나 써질) 논리 블록의 주소를 지시할 수 있다. 예를 들면, LBA는 동작 코드가 지시하는 동작으로 수행될(예를 들면, 읽거나 써질) 논리 블록을 지시할 수 있다. 어떤 실시예에서, PRP는 호스트 메모리(120)의 타겟 위치를 지시하며, 읽기의 경우 타겟 데이터가 전달되어야 하는 위치를 지시하고, 쓰기의 경우 타겟 데이터를 가져와야 할 위치를 지시할 수 있다.The fetch management module 420 checks the information transmitted through the event signal received from the context module 410 and retrieves the target SQ entry (i.e., NVMe command) from the host memory 120 (S540). In some embodiments, because doorbell events may occur simultaneously, the fetch management module 420 may mediate between different NVMe queues. For example, the fetch management module 420 can mediate between different NVMe queues according to NVMe specifications. After fetching the NVMe command, the fetch management module 420 parses the request information of the I/O request from the NVMe command and transmits it to the PRP engine 430 (S550). In some embodiments, the request information may include an operation code (opcode), logical address, size, and PRP. In some embodiments, the opcode may direct read, write, etc. In some embodiments, the logical address may be a logical block address (LBA), and the logical address is described below as an LBA. The LBA may indicate the address of a logical block to be performed (e.g., read or written) by the operation indicated by the operation code. For example, an LBA may indicate a logical block to be performed (e.g., read or written) with an operation indicated by the operation code. In some embodiments, the PRP may indicate a target location in the host memory 120, and may indicate a location from which the target data should be delivered in the case of reading, and a location from which the target data should be retrieved in the case of writing.

PRP 엔진(430)은 콘텍스트 모듈(410)로부터 전달받은 요청 정보에 기초해서 DMA 엔진(440)의 소스 주소와 목적지 주소를 설정한다(S560). DMA 엔진(440)은 소스 주수와 목적지 주소에 기초해서 타겟 데이터를 호스트 메모리(120)와 백엔드 메모리 모듈(470) 사이에서 전송한다(S560).The PRP engine 430 sets the source address and destination address of the DMA engine 440 based on the request information received from the context module 410 (S560). The DMA engine 440 transfers target data between the host memory 120 and the back-end memory module 470 based on the source number and destination address (S560).

어떤 실시예에서, PRP 엔진(430)은 페이지 정렬된(page-aligned) 데이터를 처리하기 위해 PRP를 통해 호스트 메모리(120)의 위치에 액세스하고, DMA 엔진(440)의 소스 주소와 목적지 주소를 설정할 수 있다. 어떤 실시예에서, 요청 정보의 동작 코드(opcode)가 읽기를 지시하는 경우, 소스 주소는 백엔드 메모리 모듈(470)의 주소이고, 목적지 주소는 호스트 메모리(120)의 주소일 수 있다. 요청 정보의 동작 코드(opcode)가 쓰기를 지시하는 경우, 소스 주소는 호스트 메모리(120)의 주소이고, 목적지 주소는 백엔드 메모리 모듈(470)의 주소일 수 있다. 어떤 실시예에서, 호스트 메모리(120)의 주소는 PRP에 기초해서 설정되고, 백엔드 메모리 모듈(470)의 주소는 논리 주소에 기초해서 설정될 수 있다.In some embodiments, PRP engine 430 accesses locations in host memory 120 via PRP to process page-aligned data, and uses the source address and destination address of DMA engine 440 to process page-aligned data. You can set it. In some embodiments, when the operation code (opcode) of the request information indicates reading, the source address may be the address of the backend memory module 470, and the destination address may be the address of the host memory 120. When the operation code (opcode) of the request information indicates writing, the source address may be the address of the host memory 120, and the destination address may be the address of the backend memory module 470. In some embodiments, the address of host memory 120 may be set based on a PRP, and the address of backend memory module 470 may be set based on a logical address.

어떤 실시예에서, 요청 정보의 동작 코드가 쓰기를 지시하는 경우, DMA 엔진(440)은 요청 정보에 기초해서 호스트 메모리(120)로부터 I/O 요청의 타겟 데이터를 읽고, 요청 정보에 기초해서 타겟 데이터를 백엔드 메모리 모듈(470)에 쓸 수 있다(S560). 요청 정보의 동작 코드가 읽기를 지시하는 경우, DMA 엔진(440)은 요청 정보에 기초해서 백엔드 메모리 모듈(470)로부터 I/O 요청의 타겟 데이터를 읽고, 요청 정보에 기초해서 타겟 데이터를 호스트 메모리(120)에 쓸 수 있다(S560).In some embodiments, when the operation code of the request information indicates write, the DMA engine 440 reads the target data of the I/O request from the host memory 120 based on the request information and writes the target data based on the request information. Data can be written to the backend memory module 470 (S560). When the operation code of the request information indicates read, the DMA engine 440 reads the target data of the I/O request from the backend memory module 470 based on the request information and stores the target data in the host memory based on the request information. It can be written in (120) (S560).

어떤 실시예에서, 쓰기의 경우, PRP 엔진(430)은 512B 청크(chunk)마다 호스트 메모리(120)의 데이터를 DMA 엔진(440)으로 복사할 수 있다. 어떤 실시예에서, DMA 엔진(440)은 데이터 전송 프로세스를 병렬화하기 위해 복수의 DMA 코어를 사용할 수 있다. 어떤 실시예에서, DMA 코어의 개수는 백엔드 메모리 모듈(470)의 채널 수에 기초해서 설정될 수 있다. 예를 들면, DMA 코어의 개수는 백엔드 메모리 모듈(470)의 채널 수와 동일할 수 있다. 어떤 실시예에서, DMA 엔진(440)은 단일 요청의 타겟 데이터를 복수의 작은 데이터 청크로 분할하고, 복수의 데이터 청크를 복수의 DMA 코어에 분산시킬 수 있다. 그러면, 메모리의 I/O 지연 시간을 단축할 수 있다.In some embodiments, in the case of writing, the PRP engine 430 may copy data in the host memory 120 to the DMA engine 440 every 512B chunk. In some embodiments, DMA engine 440 may use multiple DMA cores to parallelize the data transfer process. In some embodiments, the number of DMA cores may be set based on the number of channels of the backend memory module 470. For example, the number of DMA cores may be the same as the number of channels of the backend memory module 470. In some embodiments, DMA engine 440 may split the target data of a single request into multiple small data chunks and distribute the multiple data chunks to multiple DMA cores. Then, the memory I/O delay time can be shortened.

어떤 실시예에서, PCIe 패킷의 페이로드 크기가 4KB인 경우, 요청의 오프셋이 4KB 경계에 의해 정렬되지 않으면, 타겟 데이터가 호스트 메모리(120)의 서로 다른 두 메모리 페이지에 존재할 수 있다. 이 경우, 도 5에 도시한 것처럼, PRP 엔진(430)은 각각 PRP1 및 PRP2로 참조되는 두 개의 서로 다른 호스트 메모리(120)의 위치로부터 타겟 데이터를 가져올 수 있다. 어떤 실시예에서, 요청의 크기가 페이지보다 같거나 작은 경우, DMA 엔진(440)은 호스트 메모리(120)의 위치를 직접 지시하는 PRP1을 통해 타겟 데이터를 가져오거나 전달할 수 있다. 요청의 크기가 페이지보다 큰 경우, PRP 엔진(430)은 PRP2를 통해 호스트 메모리(120)로부터 PRP 리스트를 가져올 수 있다. PRP 리스트는 포인터의 집합으로 4KB 데이터를 지시하는 적어도 하나의 PRP 엔트리를 포함할 수 있다. 따라서, PRP 엔진(430)은 PRP 리스트의 각 PRP 엔트리를 파싱할 수 있다. 어떤 실시예에서, PRP 엔진(430)은 백엔드 메모리 모듈(470) 내에서 PRP 엔트리를 파싱할 수 있다. PRP 엔진(430)은 PRP 리스트의 모든 엔트리를 탐색하고 각 엔트리에 의해 참조되는 호스트 메모리(120)의 위치를 검출할 수 있다. DMA 엔진(440)에서 데이터 전송이 완료되면, PRP 엔진(430)은 완료 요청(즉, CQ 엔트리)을 생성하고 메시지 신호 인터럽트(message-signaled interrupt, MSI) 패킷을 관리하는 완료 핸들링 모듈(450)로 신호를 보낸다(S570).In some embodiments, if the payload size of a PCIe packet is 4 KB, the target data may reside in two different memory pages of host memory 120 if the offset of the request is not aligned by a 4 KB boundary. In this case, as shown in FIG. 5, the PRP engine 430 may retrieve target data from two different host memory 120 locations, respectively referred to as PRP1 and PRP2. In some embodiments, when the size of the request is equal to or smaller than a page, the DMA engine 440 may retrieve or transfer target data through PRP1, which directly indicates the location of the host memory 120. If the size of the request is larger than the page, the PRP engine 430 can retrieve the PRP list from the host memory 120 through PRP2. The PRP list is a set of pointers and may include at least one PRP entry indicating 4KB data. Accordingly, the PRP engine 430 can parse each PRP entry in the PRP list. In some embodiments, PRP engine 430 may parse PRP entries within backend memory module 470. The PRP engine 430 may search all entries in the PRP list and detect the location of the host memory 120 referenced by each entry. When data transmission is completed in the DMA engine 440, the PRP engine 430 generates a completion request (i.e., CQ entry) and a completion handling module 450 that manages message-signaled interrupt (MSI) packets. Send a signal (S570).

이상에서 설명한 것처럼, 쓰기의 경우, 타겟 데이터가 호스트 메모리(120)로부터 PCIe 인바운드 링크를 통해 NVMe 제어 장치(400)로 전송될 수 있다. 또한, 읽기의 경우, 타겟 데이터가 PCIe 아웃바운드 링크를 통해 호스트 메모리(120)로 전송될 수 있다.As described above, in the case of writing, target data may be transmitted from the host memory 120 to the NVMe control device 400 via a PCIe inbound link. Additionally, in case of reading, target data may be transmitted to the host memory 120 through a PCIe outbound link.

완료 핸들링 모듈(450)은 I/O 완료 및 인터럽트를 처리한다. PRP 엔진(430)과 DMA 엔진(440)이 I/O 요청의 처리를 완료하면, 완료 핸들링 모듈(450)은 CQ 엔트리를 작성할 타겟 CQ(402)를 자동으로 감지한다. 어떤 실시예에서, 완료 핸들링 모듈(430)은 페치 관리 모듈(420)로부터 전달되는 요청 정보를 확인하여 타겟 CQ(402)를 감지할 수 있다. 완료 핸들링 모듈(450)은 타겟 CQ(402)를 찾으면, 타겟 CQ(402)에 해당하는 호스트 메모리(120)의 위치에 CQ 엔트리를 작성함으로써 CQ 엔트리를 게시(post)한다(S570). 어떤 실시예에서, CQ 엔트리는 CQ(402)의 헤드(head)에 작성되고, 이에 따라 완료 핸들링 모듈(430)은 CQ(402)의 헤드 포인터를 증가시킬 수 있다. 다음, 완료 핸들링 모듈(450)은 호스트를 인터럽트하여서 호스트에 I/O 서비스 완료를 알린다(S580). 어떤 실시예에서, 완료 핸들링 모듈(450)은 호스트의 드라이버가 관리하는 MSI 영역에 PCIe 패킷(MSI 패킷)을 푸시(쓰기)하여 호스트를 인터럽트할 수 있다. 어떤 실시예에서, 호스트 드라이버는 자체 인터럽트 서비스 루틴을 호출(invoke)하여 I/O 서비스를 요청한 사용자에게 완료를 알릴 수 있다. 호스트는 I/O 서비스를 종료하고, CQ 헤드 도어벨을 작성한다(S590). 어떤 실시예에서, 호스트는 BAR(490)를 통해 CQ 헤드 도어벨 영역(412)의 대응하는 도어벨 엔트리에 헤드 포인터를 작성할 수 있다. 이와 같이, CQ 헤드 도어벨 영역(412)을 갱신함으로써, CQ(402)의 상태가 NVMe 제어 장치(400)와 동기화될 수 있다. 즉, 큐 동기화는 완료 핸들링 모듈(450)이 SQ(401) 및 CQ(402)의 타겟 엔트리의 해제를 의미하며, 이러한 방식으로 NVMe 제어 장치(400)의 내부 CQ 및 SQ 상태는 호스트의 SQ 및 CQ 상태와 일치할 수 있다.The completion handling module 450 processes I/O completion and interrupts. When the PRP engine 430 and the DMA engine 440 complete processing of the I/O request, the completion handling module 450 automatically detects the target CQ 402 for writing a CQ entry. In some embodiments, the completion handling module 430 may detect the target CQ 402 by checking request information transmitted from the fetch management module 420. When the completion handling module 450 finds the target CQ 402, it posts the CQ entry by creating a CQ entry in the location of the host memory 120 corresponding to the target CQ 402 (S570). In some embodiments, a CQ entry is written to the head of CQ 402, such that completion handling module 430 may increment the head pointer of CQ 402. Next, the completion handling module 450 interrupts the host and notifies the host of I/O service completion (S580). In some embodiments, completion handling module 450 may interrupt the host by pushing (writing) a PCIe packet (MSI packet) to an MSI area managed by the host's driver. In some embodiments, the host driver may invoke its own interrupt service routine to notify the user who requested the I/O service of completion. The host terminates the I/O service and creates a CQ head doorbell (S590). In some embodiments, the host may create a head pointer to a corresponding doorbell entry in the CQ head doorbell area 412 via BAR 490. In this way, by updating the CQ head doorbell area 412, the state of the CQ 402 can be synchronized with the NVMe control device 400. In other words, queue synchronization means that the completion handling module 450 releases the target entries of SQ 401 and CQ 402, and in this way the internal CQ and SQ states of the NVMe control device 400 are synchronized with the host's SQ and May correspond to CQ status.

어떤 실시예에서, 프론트 엔드(즉, SQ 테일 도어벨 영역(411) 및 페치 관리 모듈(420))의 응답성을 향상시키기 위해, 페치 관리 모듈(420)은 파이프 라인 방식으로 DMA 모듈(440) 및 완료 핸들링 모듈(450)의 동작 동안 나머지 요청을 계속 처리할 수 있다(S550).In some embodiments, to improve the responsiveness of the front end (i.e., the SQ tail doorbell area 411 and the fetch management module 420), the fetch management module 420 connects the DMA module 440 in a pipelined manner. And the remaining requests may continue to be processed during the operation of the completion handling module 450 (S550).

어떤 실시예에서, NVMe 큐를 쉽게 관리하기 위해 SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)를 나란히 배치할 수 있다. 그러나 NVMe 제출의 유입 속도와 NVMe 완료의 유입 속도가 비대칭이므로, SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)의 물리적 통합은 성능 및 구현 측면에서 유망하지 않을 수 있다. 따라서, 어떤 실시예에서, SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)를 완전히 분리할 수 있다. 이 경우, 앞에서 설명한 것처럼, CQ 및 SQ 상태를 페어링할 수 있다.In some embodiments, the SQ tail doorbell area 411 and the CQ head doorbell area 412 can be placed side by side to easily manage NVMe queues. However, since the inflow rate of NVMe submissions and the inflow rate of NVMe completions are asymmetric, the physical integration of the SQ tail doorbell area 411 and the CQ head doorbell area 412 may not be promising in terms of performance and implementation. Accordingly, in some embodiments, the SQ tail doorbell area 411 and the CQ head doorbell area 412 may be completely separated. In this case, the CQ and SQ states can be paired, as described previously.

어떤 실시예에서, SQ 테일 도어벨 영역(411)에 도어벨을 기록하고, SQ 엔트리를 가져오고, PRP를 가져오고, CQ 헤드 도어벨 영역(412)에 도어벨을 기록하는 프로세스(S520, S540, S560, S590)은 PCIe 패킷을 기록하는 PCIe 인바운드 프로세스일 수 있다. 한편, 읽기 요청의 경우, 호스트 메모리(120)로 데이터를 쓰는 프로세스는 PCIe 아웃바운드 프로세스일 수 있다. 따라서, 읽기 요청에서는 데이터와 NVMe 페이로드(도어벨, SQ 엔트리, PRP)가 병렬로 처리될 수 있으므로, 지연 시간을 줄일 수 있다.In some embodiments, the process of recording a doorbell in the SQ tail doorbell area 411, retrieving an SQ entry, retrieving a PRP, and recording a doorbell in the CQ head doorbell area 412 (S520, S540) , S560, S590) may be a PCIe inbound process that records PCIe packets. Meanwhile, in the case of a read request, the process that writes data to the host memory 120 may be a PCIe outbound process. Therefore, in read requests, data and NVMe payload (doorbell, SQ entry, PRP) can be processed in parallel, thereby reducing latency.

어떤 실시예에서, 콘텍스트 모듈(410)의 SQ 테일 도어벨 영역(411)과 페치 관리 모듈(420)은 큐 디스패치 모듈(예를 들면, 도 2의 210)로 동작하고, PRP 엔진(430)과 DMA 엔진(440)이 데이터 전송 모듈(예를 들면, 도 2의 220)로 동작하고, 완료 핸들링 모듈(450)과 콘텍스트 모듈(410)의 CQ 헤드 도어벨 영역(412)이 완료 핸들링 모듈(예를 들면, 도 2의 230)로 동작할 수 있다.In some embodiments, the SQ tail doorbell area 411 and the fetch management module 420 of the context module 410 operate as a queue dispatch module (e.g., 210 in FIG. 2), and the PRP engine 430 and The DMA engine 440 operates as a data transmission module (e.g., 220 in FIG. 2), and the completion handling module 450 and the CQ head doorbell area 412 of the context module 410 operate as a completion handling module (e.g. For example, it can be operated as 230 in FIG. 2.

이상에서 설명한 것처럼, 하드웨어에서 NVMe 제어 로직을 완전히 자동화하여 NVMe 제어 장치를 구현할 수 있다. 이에 따라, 소프트웨어의 개입 없이 NVMe 페이로드 및 데이터를 처리할 수 있다. 따라서, NVMe 제어 장치의 내장 프로세서에서의 펌웨어 실행에 의해 발생할 수 있는 지연 시간 및 발열 문제를 제거하거나 줄일 수 있다.As described above, an NVMe control device can be implemented by fully automating the NVMe control logic in hardware. Accordingly, NVMe payload and data can be processed without software intervention. Accordingly, latency and heat generation issues that may occur due to firmware execution on the embedded processor of the NVMe control device can be eliminated or reduced.

도 6은 본 발명의 한 실시예에 따른 NVMe 제어 장치의 연결 관계를 예시하는 도면이다.Figure 6 is a diagram illustrating the connection relationship of an NVMe control device according to an embodiment of the present invention.

도 6을 참고하면, NVMe 제어 장치(600)는 콘텍스트 모듈(610), 페치 관리 모듈(620), PRP 엔진(630), DMA 엔진(640) 및 완료 핸들링 모듈(650)을 포함한다. 어떤 실시예에서, NVMe 제어 장치(600)는 PCIe 프론트엔드(660)를 더 포함할 수 있다. 이러한 모듈(610-660)은 내부 메모리 버스를 통해 연결될 수 있다. 어떤 실시예에서, 내부 메모리 버스는 SoC 메모리 버스를 포함할 수 있다. 어떤 실시예에서, 내부 메모리 버스는 AXI(advanced extensible interface) 버스일 수 있다.Referring to FIG. 6, the NVMe control device 600 includes a context module 610, a fetch management module 620, a PRP engine 630, a DMA engine 640, and a completion handling module 650. In some embodiments, NVMe control device 600 may further include a PCIe frontend 660. These modules 610-660 may be connected through an internal memory bus. In some embodiments, the internal memory bus may include a SoC memory bus. In some embodiments, the internal memory bus may be an advanced extensible interface (AXI) bus.

콘텍스트 모듈(610)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트로부터 SQ 테일 포인터를 수신할 수 있다(672). 콘텍스트 모듈(610)은 페치 관리 모듈(620)과 메모리 버스를 통해 연결되어 이벤트 신호를 페치 관리 모듈(620)로 전달할 수 있다(673). 페치 관리 모듈(620)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트 메모리의 SQ로부터 타겟 SQ 엔트리를 가져올 수 있다(674).The context module 610 is connected to the front end 660 through a memory bus and can receive an SQ tail pointer from the host (672). The context module 610 is connected to the fetch management module 620 through a memory bus and can transmit an event signal to the fetch management module 620 (673). The fetch management module 620 is connected to the front end 660 through a memory bus and can retrieve a target SQ entry from the SQ of the host memory (674).

PRP 엔진(630)은 페치 관리 모듈(620)과 메모리 버스를 통해 연결되어 페치 관리 모듈(620)로부터 요청 정보를 수신할 수 있다(675). PRP 엔진(630)은 프론트엔드(660) 및 DMA 엔진(640)과 메모리 버스를 통해 연결되어 호스트 메모리로부터 타겟 데이터를 가져와 DMA 엔진(640)으로 전달하거나 DMA 엔진(640)을 통해 전송되는 타겟 데이터를 호스트 메모리로 전달할 수 있다(676).The PRP engine 630 is connected to the fetch management module 620 through a memory bus and can receive request information from the fetch management module 620 (675). The PRP engine 630 is connected to the front end 660 and the DMA engine 640 through a memory bus to retrieve target data from the host memory and transfer it to the DMA engine 640 or target data transmitted through the DMA engine 640. can be transferred to host memory (676).

완료 핸들링 모듈(650)은 PRP 엔진(630)과 메모리 버스를 통해 연결되어 PRP 엔진(630)으로부터 완료 요청을 수신하고, 프론트엔드(660)와 메모리 버스를 통해 연결되어 CQ 엔트리를 호스트 메모리의 CQ에 작성할 수 있다(677). 또한, 완료 핸들링 모듈(650)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트를 인터럽트하여 호스트에 I/O 서비스 완료를 알릴 수 있다(678). 콘텍스트 모듈(610)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트로부터 CQ 헤드 포인터를 수신할 수 있다(679).The completion handling module 650 is connected to the PRP engine 630 through a memory bus to receive a completion request from the PRP engine 630, and is connected to the front end 660 through a memory bus to send a CQ entry to the CQ in the host memory. It can be written in (677). Additionally, the completion handling module 650 is connected to the front end 660 through a memory bus and can interrupt the host to notify the host of I/O service completion (678). The context module 610 is connected to the front end 660 through a memory bus and can receive a CQ head pointer from the host (679).

어떤 실시예에서, NVMe 제어 장치를 높은 주파수에 동작하도록 하기 위해, 각 모듈의 입력과 출력을 한 방향으로만 연결할 수 있다. 어떤 실시예에서, 소스 모듈에서 전달되지 않은 필요한 정보가 있는 경우, 타겟 모듈은 메모리 버스(예를 들면, AXI 크로스바)의 메모리 주소 공간으로부터 필요한 정보를 직접 검색할 수 있다. 어떤 실시예에서, 각 모듈은 I/O 요청의 여러 부분을 파이프라인 방식으로 처리하므로, I/O 처리 대역폭을 향상시킬 수 있다.In some embodiments, to allow the NVMe control device to operate at high frequencies, the inputs and outputs of each module can be connected in only one direction. In some embodiments, if there is needed information that was not conveyed by the source module, the target module may retrieve the needed information directly from the memory address space of a memory bus (e.g., AXI crossbar). In some embodiments, each module processes multiple portions of an I/O request in a pipelined manner, thereby improving I/O processing bandwidth.

어떤 실시예에서, NVMe 제어 장치는 로직 모듈(예를 들면, 도 3의 310-330, 도 4의 410-450)에서 메모리 컨트롤러를 분리한 다음, 슈퍼 로직 영역(super logic region, SLR)의 경계를 고려하여 로직 모듈을 그룹화할 수 있다. 어떤 실시예에서, 모든 로직 모듈은 PCIe 및 AXI 크로스바 주변에 위치하지만, 메모리 컨트롤러를 포함하여 데이터 전송 및 DMA 엔진과 관련된 모듈은 2개의 SLR만 차지할 수 있다.In some embodiments, the NVMe control unit separates the memory controller from the logic module (e.g., 310-330 in Figure 3, 410-450 in Figure 4) and then controls the memory controller at the boundary of the super logic region (SLR). Logic modules can be grouped by taking into account. In some embodiments, all logic modules are located around the PCIe and AXI crossbars, but modules associated with the data transfer and DMA engines, including the memory controller, may occupy only two SLRs.

이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.Although the embodiments of the present invention have been described in detail above, the scope of the present invention is not limited thereto, and various modifications and improvements made by those skilled in the art using the basic concept of the present invention defined in the following claims are also possible. It falls within the scope of rights.

Claims (20)

프로세서 및 호스트 메모리를 포함하는 호스트와 비휘발성 메모리 모듈을 연결하는 비휘발성 메모리 제어 장치로서,
상기 호스트와의 연결을 위한 호스트 인터페이스의 BAR(base address registers)에 노출(expose)되는 내부 메모리 버스,
상기 내부 메모리 버스의 주소 공간에 매핑되어 상기 내부 메모리 버스를 통해 상기 BAR에 노출되고, 상기 호스트에서 I/O(input/output) 요청의 명령을 상기 호스트 메모리로 발행할 때 갱신되는 제1 도어벨 영역,
상기 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 상기 호스트 메모리로부터 상기 명령을 가져오는 페치 관리 모듈,
상기 명령에 포함되어 있는 요청 정보에 기초해서 상기 호스트 메모리의 위치를 확인하고, 상기 호스트 메모리와 상기 비휘발성 메모리 모듈 사이에서 상기 I/O 요청에 따른 타겟 데이터의 전송을 수행하는 데이터 전송 모듈,
상기 데이터 전송 모듈에서 상기 I/O 요청의 처리를 완료하는 경우, 상기 호스트 메모리에 완료 요청을 기록하고, 인터럽트를 처리하는 완료 핸들링 모듈, 그리고
상기 내부 메모리 버스의 주소 공간에 매핑되어 상기 내부 메모리 버스를 통해 상기 BAR에 노출되고, 상기 호스트에서 I/O 서비스를 종료할 때 갱신되는 제2 도어벨 영역
을 포함하는 비휘발성 메모리 제어 장치.
A non-volatile memory control device connecting a host including a processor and host memory and a non-volatile memory module,
An internal memory bus exposed to BAR (base address registers) of the host interface for connection to the host,
A first doorbell that is mapped to the address space of the internal memory bus and exposed to the BAR through the internal memory bus, and is updated when the host issues an I/O (input/output) request command to the host memory. area,
a fetch management module that retrieves the command from the host memory in response to an event signal generated when the first doorbell area is updated;
a data transfer module that confirms the location of the host memory based on the request information included in the command and performs transfer of target data according to the I/O request between the host memory and the non-volatile memory module;
When the data transfer module completes processing of the I/O request, a completion handling module that records the completion request in the host memory and processes an interrupt, and
A second doorbell area that is mapped to the address space of the internal memory bus and exposed to the BAR through the internal memory bus, and is updated when the host terminates the I/O service.
A non-volatile memory control device comprising a.
제1항에서,
상기 제1 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제2 도어벨 영역은 하드웨어로 구현되는, 비휘발성 메모리 제어 장치.
In paragraph 1:
The first doorbell area, the fetch management module, the data transmission module, the completion handling module, and the second doorbell area are implemented in hardware.
제2항에서,
상기 제1 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제2 도어벨 영역은 레지스터 전송 레벨(register transfer level, RTL)에서 하드웨어로 구현되는, 비휘발성 메모리 제어 장치.
In paragraph 2,
The first doorbell area, the fetch management module, the data transfer module, the completion handling module, and the second doorbell area are implemented in hardware at a register transfer level (RTL), non-volatile memory control device. .
제2항에서,
상기 제1 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제2 도어벨 영역은 상기 내부 메모리 버스에 의해 연결되는, 비휘발성 메모리 제어 장치.
In paragraph 2,
The first doorbell area, the fetch management module, the data transmission module, the completion handling module, and the second doorbell area are connected by the internal memory bus.
제1항에서,
상기 내부 메모리 버스는 AXI(advanced extensible interface) 인터페이스를 포함하는, 비휘발성 메모리 제어 장치.
In paragraph 1:
The internal memory bus includes an advanced extensible interface (AXI) interface.
삭제delete 제1항에서,
상기 호스트 인터페이스는 PCIe(peripheral component interconnect express) 인터페이스를 포함하는
비휘발성 메모리 제어 장치.
In paragraph 1:
The host interface includes a peripheral component interconnect express (PCIe) interface.
Non-volatile memory control unit.
제1항에서,
상기 페치 관리 모듈은 상기 명령으로부터 상기 요청 정보를 파싱하는, 비휘발성 메모리 제어 장치.
In paragraph 1:
The fetch management module parses the request information from the command.
제1항에서,
상기 요청 정보는 논리 주소 및 상기 호스트 메모리의 위치를 지시하는 호스트 메모리 주소를 포함하며,
상기 데이터 전송 모듈은,
상기 논리 주소 및 상기 호스트 메모리 주소에 기초해서 상기 데이터 전송 모듈을 위한 소스 주소와 목적지 주소를 설정하는 제1 엔진, 그리고
상기 소스 주소와 목적지 주소에 기초해서 상기 타겟 데이터의 전송을 수행하는 제2 엔진을 포함하는
비휘발성 메모리 제어 장치.
In paragraph 1:
The request information includes a logical address and a host memory address indicating the location of the host memory,
The data transmission module is,
A first engine that sets a source address and a destination address for the data transmission module based on the logical address and the host memory address, and
Comprising a second engine that performs transmission of the target data based on the source address and destination address.
Non-volatile memory control unit.
제9항에서,
상기 제2 엔진은 DMA(direct memory access) 엔진을 포함하는, 비휘발성 메모리 제어 장치.
In paragraph 9:
The non-volatile memory control device, wherein the second engine includes a direct memory access (DMA) engine.
제9항에서,
상기 호스트 메모리 주소는 PRP(physical region page)를 포함하는, 비휘발성 메모리 제어 장치.
In paragraph 9:
The host memory address includes a physical region page (PRP).
제11항에서,
상기 제1 엔진은 상기 PRP에 기초해서 상기 호스트 메모리로부터 PRP 리스트를 가져오며,
상기 PRP 리스트는 상기 호스트 메모리의 위치를 참조하는 적어도 하나의 PRP 엔트리를 포함하고,
상기 제1 엔진은 상기 PRP 엔트리에 의해 참조되는 상기 호스트 메모리의 위치를 검출하는
비휘발성 메모리 제어 장치.
In paragraph 11:
The first engine retrieves a PRP list from the host memory based on the PRP,
The PRP list includes at least one PRP entry referencing a location in the host memory,
The first engine detects the location of the host memory referenced by the PRP entry.
Non-volatile memory control unit.
제9항에서,
상기 비휘발성 메모리 제어 장치는 상기 비휘발성 메모리 모듈과 복수의 채널을 통해 연결되며,
상기 제2 엔진은 상기 복수의 채널에 각각 대응하는 복수의 DMA 코어를 포함하는
비휘발성 메모리 제어 장치.
In paragraph 9:
The non-volatile memory control device is connected to the non-volatile memory module through a plurality of channels,
The second engine includes a plurality of DMA cores each corresponding to the plurality of channels.
Non-volatile memory control unit.
제13항에서,
상기 제2 엔진은 상기 I/O 요청의 타겟 데이터를 복수의 데이터 청크로 분할하고, 상기 복수의 데이터 청크를 상기 복수의 DMA 코어에 분산하는, 비휘발성 메모리 제어 장치.
In paragraph 13:
The second engine divides the target data of the I/O request into a plurality of data chunks, and distributes the plurality of data chunks to the plurality of DMA cores.
제1항에서,
상기 호스트 메모리에 복수의 큐 쌍이 존재하며,
각 큐 쌍은 SQ(submission queue)와 CQ(competition queue)의 쌍을 포함하며,
상기 페치 관리 모듈은, 상기 복수의 큐 쌍 중에서 상기 제1 도어벨 영역에서 갱신된 엔트리에 대응하는 큐 쌍의 SQ로부터 상기 명령을 가져오는
비휘발성 메모리 제어 장치.
In paragraph 1:
A plurality of queue pairs exist in the host memory,
Each queue pair includes a pair of submission queues (SQ) and competition queues (CQ).
The fetch management module retrieves the command from the SQ of the queue pair corresponding to the updated entry in the first doorbell area among the plurality of queue pairs.
Non-volatile memory control unit.
제15항에서,
상기 완료 핸들링 모듈은 상기 페치 관리 모듈로부터 전달되는 정보에 기초해서 상기 명령을 가져온 상기 SQ에 대응하는 CQ를 감지하는, 비휘발성 메모리 제어 장치.
In paragraph 15:
The completion handling module detects a CQ corresponding to the SQ that brought the command based on information transmitted from the fetch management module.
프로세서 및 호스트 메모리를 포함하는 호스트와 비휘발성 메모리 모듈을 연결하는 비휘발성 메모리 제어 장치로서,
상기 호스트와의 연결을 위한 PCIe(peripheral component interconnect express) 인터페이스의 BAR(base address registers)에 노출(expose)되는 내부 메모리 버스,
상기 호스트 메모리의 타겟 SQ(submission queue)에 명령이 기록될 때 상기 타겟 SQ에 대응하는 엔트리가 갱신되는 제1 도어벨 영역과 상기 호스트에서 I/O 서비스를 종료할 때 타겟 CQ(completion queue)에 대응하는 엔트리가 갱신되는 제2 도어벨 영역을 포함하며, 상기 내부 메모리 버스의 주소 공간에 매핑되어 상기 내부 메모리 버스를 통해 상기 BAR에 노출되는 제1 모듈,
상기 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 상기 타겟 SQ로부터 상기 명령을 가져오는 제2 모듈,
상기 명령에 포함되어 있는 PRP(physical region page)에 기초해서 상기 호스트 메모리의 위치를 검출하는 제1 엔진,
상기 제1 엔진에 의해 검출된 상기 호스트 메모리의 위치와 상기 비휘발성 메모리 모듈 사이에서 상기 I/O 요청에 따른 타겟 데이터의 전송을 수행하는 제2 엔진, 그리고
상기 제2 엔진에서 상기 I/O 요청의 처리를 완료하는 경우, 상기 타겟 CQ에 완료 요청을 기록하고, 인터럽트를 처리하는 제3 모듈
을 포함하는 비휘발성 메모리 제어 장치.
A non-volatile memory control device connecting a host including a processor and host memory and a non-volatile memory module,
An internal memory bus exposed to base address registers (BAR) of a peripheral component interconnect express (PCIe) interface for connection to the host,
When a command is recorded in the target SQ (submission queue) of the host memory, an entry corresponding to the target SQ is updated, and in the target CQ (completion queue) when the I/O service is terminated in the host. A first module including a second doorbell area in which a corresponding entry is updated, and mapped to the address space of the internal memory bus and exposed to the BAR through the internal memory bus,
a second module that retrieves the command from the target SQ in response to an event signal generated when the first doorbell area is updated,
A first engine that detects the location of the host memory based on a physical region page (PRP) included in the command,
a second engine that performs transfer of target data according to the I/O request between the location of the host memory detected by the first engine and the non-volatile memory module, and
When the second engine completes processing of the I/O request, a third module records a completion request in the target CQ and processes an interrupt.
A non-volatile memory control device comprising a.
제17항에서,
상기 제1 엔진은 상기 PRP에 기초해서 상기 호스트 메모리로부터 PRP 리스트를 가져오며,
상기 PRP 리스트는 상기 호스트 메모리의 위치를 참조하는 적어도 하나의 PRP 엔트리를 포함하고,
상기 제1 엔진은 상기 PRP 엔트리에 의해 참조되는 상기 호스트 메모리의 위치를 검출하는
비휘발성 메모리 제어 장치.
In paragraph 17:
The first engine retrieves a PRP list from the host memory based on the PRP,
The PRP list includes at least one PRP entry referencing a location in the host memory,
The first engine detects the location of the host memory referenced by the PRP entry.
Non-volatile memory control unit.
제17항에서,
상기 제1 모듈, 상기 제2 모듈, 상기 제1 엔진, 상기 제2 엔진 및 상기 제3 모듈은 하드웨어로 구현되는, 비휘발성 메모리 제어 장치.
In paragraph 17:
The first module, the second module, the first engine, the second engine, and the third module are implemented in hardware.
프로세서 및 호스트 메모리를 포함하는 호스트에 연결되는 비휘발성 메모리 장치로서,
비휘발성 메모리 모듈,
상기 호스트와의 연결을 위한 호스트 인터페이스의 BAR(base address registers)에 노출(expose)되는 내부 메모리 버스,
상기 내부 메모리 버스의 주소 공간에 매핑되어 상기 내부 메모리 버스를 통해 상기 BAR에 노출되고, 상기 호스트에서 I/O(input/output) 요청의 명령을 상기 호스트 메모리로 발행할 때 갱신되는 제1 도어벨 영역,
상기 제1 도어벨 영역이 갱신될 때 생성되는 이벤트 신호에 응답하여 상기 호스트 메모리로부터 상기 명령을 가져오는 페치 관리 모듈,
상기 명령에 포함되어 있는 요청 정보에 기초해서 상기 호스트 메모리의 위치를 확인하고, 상기 호스트 메모리와 상기 비휘발성 메모리 모듈 사이에서 상기 I/O 요청에 따른 타겟 데이터의 전송을 수행하는 데이터 전송 모듈,
상기 데이터 전송 모듈에서 상기 I/O 요청의 처리를 완료하는 경우, 상기 호스트 메모리에 완료 요청을 기록하고, 인터럽트를 처리하는 완료 핸들링 모듈, 그리고
상기 내부 메모리 버스의 주소 공간에 매핑되어 상기 내부 메모리 버스를 통해 상기 BAR에 노출되고, 상기 호스트에서 I/O 서비스를 종료할 때 갱신되는 제2 도어벨 영역
을 포함하는 비휘발성 메모리 장치.
A non-volatile memory device coupled to a host including a processor and host memory,
non-volatile memory module,
An internal memory bus exposed to BAR (base address registers) of the host interface for connection to the host,
A first doorbell that is mapped to the address space of the internal memory bus and exposed to the BAR through the internal memory bus, and is updated when the host issues an I/O (input/output) request command to the host memory. area,
a fetch management module that retrieves the command from the host memory in response to an event signal generated when the first doorbell area is updated;
a data transfer module that confirms the location of the host memory based on the request information included in the command and performs transfer of target data according to the I/O request between the host memory and the non-volatile memory module;
When the data transfer module completes processing of the I/O request, a completion handling module that records the completion request in the host memory and processes an interrupt, and
A second doorbell area that is mapped to the address space of the internal memory bus and exposed to the BAR through the internal memory bus, and is updated when the host terminates the I/O service.
A non-volatile memory device including a.
KR1020210067487A 2020-07-23 2021-05-26 Non-volatile memory controller device and non-volatile memory device KR102656104B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US17/382,895 US11775452B2 (en) 2020-07-23 2021-07-22 Non-volatile memory controller device and non-volatile memory device

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20200091566 2020-07-23
KR1020200091566 2020-07-23

Publications (2)

Publication Number Publication Date
KR20220012806A KR20220012806A (en) 2022-02-04
KR102656104B1 true KR102656104B1 (en) 2024-04-11

Family

ID=80268235

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210067487A KR102656104B1 (en) 2020-07-23 2021-05-26 Non-volatile memory controller device and non-volatile memory device

Country Status (1)

Country Link
KR (1) KR102656104B1 (en)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10452278B2 (en) * 2017-03-24 2019-10-22 Western Digital Technologies, Inc. System and method for adaptive early completion posting using controller memory buffer
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
KR102395477B1 (en) * 2017-11-20 2022-05-09 삼성전자주식회사 Device controller that schedules memory accesses to a host memory, and storage device including the same

Also Published As

Publication number Publication date
KR20220012806A (en) 2022-02-04

Similar Documents

Publication Publication Date Title
US10318164B2 (en) Programmable input/output (PIO) engine interface architecture with direct memory access (DMA) for multi-tagging scheme for storage devices
KR100909119B1 (en) Apparatus and Method for High Performance Volatile Disk Drive Memory Access Using Integrated DMA Engine
CN112256601B (en) Data access control method, embedded storage system and embedded equipment
US20200257629A1 (en) Systems and methods for streaming storage device content
JP2014154155A (en) Method and system for reducing write latency in data storage system by using command-push model
US11635902B2 (en) Storage device processing stream data, system including the same, and operation method
KR20130056811A (en) Flash controller hardware architecture for flash devices
EP3074873A1 (en) Method and apparatus for storing data
WO2016038710A1 (en) Storage system
CN115495389B (en) Memory controller, calculation memory device, and operation method of calculation memory device
KR20130009926A (en) Flexible flash commands
US9189166B2 (en) Multi-host SATA controller
CN109799959B (en) Method for improving parallelism of open channel solid-state disk writing
CN112416250A (en) NVMe (network video Me) -based command processing method for solid state disk and related equipment
US11055220B2 (en) Hybrid memory systems with cache management
TW201303870A (en) Effective utilization of flash interface
US10705993B2 (en) Programming and controlling compute units in an integrated circuit
US20230229357A1 (en) Storage controller, computational storage device, and operational method of computational storage device
US20220027294A1 (en) Storage card and storage device
KR102656104B1 (en) Non-volatile memory controller device and non-volatile memory device
WO2017072868A1 (en) Storage apparatus
US11775452B2 (en) Non-volatile memory controller device and non-volatile memory device
Bougioukou et al. Prototyping and performance evaluation of a dynamically adaptable block device driver for PCIe-based SSDs
KR20220012803A (en) Storage card and storage device
US11995351B2 (en) DMA engines configured to perform first portion data transfer commands with a first DMA engine and second portion data transfer commands with second DMA engine

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right