KR102656104B1 - Non-volatile memory controller device and non-volatile memory device - Google Patents
Non-volatile memory controller device and non-volatile memory device Download PDFInfo
- 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
Links
- 230000015654 memory Effects 0.000 title claims abstract description 274
- 238000012546 transfer Methods 0.000 claims abstract description 41
- 238000000034 method Methods 0.000 claims abstract description 21
- 230000008569 process Effects 0.000 claims abstract description 19
- 238000012545 processing Methods 0.000 claims abstract description 12
- 230000004044 response Effects 0.000 claims abstract description 8
- 230000005540 biological transmission Effects 0.000 claims description 18
- 230000002093 peripheral effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 12
- 238000013461 design Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 101000907912 Homo sapiens Pre-mRNA-splicing factor ATP-dependent RNA helicase DHX16 Proteins 0.000 description 2
- 101000798532 Homo sapiens Transmembrane protein 171 Proteins 0.000 description 2
- 101150101414 PRP1 gene Proteins 0.000 description 2
- 102100023390 Pre-mRNA-splicing factor ATP-dependent RNA helicase DHX16 Human genes 0.000 description 2
- 101100368710 Rattus norvegicus Tacstd2 gene Proteins 0.000 description 2
- 101100342406 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) PRS1 gene Proteins 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000020169 heat generation Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000012782 phase change material Substances 0.000 description 1
- 230000004043 responsiveness Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4234—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/16—Memory 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.
Description
아래에서 설명하는 기술은 비휘발성 메모리 제어 장치 및 비휘발성 메모리 장치에 관한 것이다.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
어떤 실시예에서, 컴퓨팅 장치는 다양한 유형의 컴퓨팅 장치 중 어느 하나일 수 있다. 다양한 유형의 컴퓨팅 장치는 스마트폰(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
메모리(120)는 CPU(110)에 의해 액세스되어 사용되는 시스템 메모리이며, 예를 들면 동적 랜덤 액세스 메모리(dynamic random-access memory, DRAM)일 수 있다. 어떤 실시예에서, CPU(110)와 메모리(120)는 시스템 버스를 통해 연결될 수 있다. 프로세서(110)와 메모리(120)를 포함하는 시스템을 호스트라 할 수 있다. 메모리(120)를 호스트 메모리라 할 수 있다.The
메모리 모듈(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
비휘발성 메모리 제어 장치(130)는 CPU(110)와 메모리(120)를 포함하는 호스트와 메모리 모듈(140)을 연결한다. 어떤 실시예에서, 비휘발성 메모리 제어 장치(130)는 비휘발성 메모리 기반 메모리 모듈(140)에 액세스하기 위한 프로토콜로 NVMe(non-volatile memory express) 프로토콜을 사용할 수 있다. 아래에서는 프로토콜을 NVMe 프로토콜로, 비휘발성 메모리 제어 장치(130)를 NVMe 제어 장치로 설명하지만, 실시예는 이에 한정되지 않고 다른 프로토콜이 사용될 수 있다.The non-volatile
어떤 실시예에서, NVMe 제어 장치(130)는 호스트 인터페이스를 통해 호스트와 연결될 수 있다. 어떤 실시예에서, 호스트 인터페이스는 PCIe(peripheral component interconnect express) 인터페이스를 포함할 수 있다. 앞으로, 호스트 인터페이스를 PCIe 인터페이스로 설명하지만, 실시예는 이에 한정되지 않고 다른 호스트 인터페이스가 사용될 수도 있다.In some embodiments,
어떤 실시예에서, 컴퓨팅 장치(100)는 CPU(110)와 메모리(120)를 포함하는 호스트와 비휘발성 메모리 제어 장치(130)를 연결하기 위한 인터페이스 장치(150)를 더 포함할 수 있다. 어떤 실시예에서, 인터페이스 장치(150)는 PCIe 시스템에서 호스트와 비휘발성 메모리 제어 장치(130)를 연결하는 루트 콤플렉스(150)를 포함할 수 있다.In some embodiments, the
먼저, 도 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
프로세서(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
데이터가 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
따라서, 효율적인 펌웨어 설계는 스토리지 카드의 핵심 역할을 하지만, 새로운 비휘발성 메모리의 액세스 지연 시간이 약 몇 ㅅ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
큐 디스패치 모듈(310)은 도어벨(doorbell) 모니터링(311), 명령 페치(fetch)(312) 및 명령 파싱(313)을 포함하는 일련의 절차를 수행할 수 있다. 큐 디스패치 모듈(310)은 NVMe 장치(300)의 데이터 경로 시작 부분에 위치하며, 내부 메모리 버스(340)에 매핑된 레지스터(도어벨 영역)(311)의 모니터링에 따라 제출 큐(submission queue, SQ)로부터 I/O 요청(즉, NVMe 명령)을 가져와서 파싱할 수 있다. 큐 디스패치 모듈(310)의 도어벨 영역(311)을 SQ 테일(tail) 도어벨 영역이라 할 수 있다.The
데이터 전송 모듈(320)은 호스트 메모리 주소를 통해 호스트 메모리(예를 들면, 도 1의 120)에서 데이터 위치를 확인하고, 호스트 메모리(120)와 백엔드 메모리 모듈(350) 사이에서 데이터 전송을 수행한다. 어떤 실시예에서, 호스트 메모리 주소는 물리 영역 페이지(physical region page, PRP)일 수 있으며, 아래에서는 호스트 메모리 주소를 PRP로 설명한다. PRP는 호스트 메모리(120)의 타겟 위치를 지시하며, 읽기의 경우 타겟 데이터가 전달되어야 하는 위치를 지시하고, 쓰기의 경우 타겟 데이터를 가져와야 할 위치를 지시할 수 있다. 어떤 실시예에서, 데이터 전송은 DMA(direct memory access)로 수행될 수 있다. 이를 위해, 데이터 전송 모듈(320)은 DMA 엔진(321)과 PRP 엔진(322)을 사용할 수 있다.The
완료 핸들링 모듈(330)은 도어벨 모니터링(331), 인터럽트 핸들링(332) 및 I/O 완료(333)을 포함하는 일련의 절차를 수행할 수 있다. 타겟 데이터가 백엔드 메모리 모듈(350)에 기록되거나(쓰기) 타겟 데이터가 백엔드 메모리 모듈(350)로부터 호스트 메모리(120)로 전달되면(읽기), 내부 메모리 버스(340)에 매핑된 레지스터(즉, 도어벨 영역)를 통해 인터럽트 및 완료 큐(completion queue, CQ)를 관리할 수 있다. 완료 핸들링 모듈(330)의 도어벨 영역을 CQ 헤드(head) 도어벨 영역이라 할 수 있다.The
어떤 실시예에서, 큐 디스패치 모듈(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,
어떤 실시예에서, NVMe 제어 장치는 백엔드 메모리 모듈(350)에서의 I/O 서비스를 수행하는 메모리 컨트롤러(340)를 더 포함할 수 있다. 어떤 실시예에서, 메모리 컨트롤러는 NVMe 제어 장치의 전체 하드웨어 설계의 일부로서 구현될 수 있다.In some embodiments, the NVMe control device may further include a
어떤 실시예에서, 큐 디스패치 모듈(310), 데이터 전송 모듈(320) 및 완료 핸들링 모듈(330)은 내부 메모리 버스(340)를 통해 PCIe 인터페이스 및 메모리 컨트롤러(350)와 연결될 수 있다. 어떤 실시예에서, 내부 메모리 버스(340)는 내부 SoC(system on chip) 메모리 버스를 포함할 수 있다. 어떤 실시예에서, 내부 메모리 버스(340)는 AXI(advanced extensible interface) 인터페이스를 포함할 수 있다. 어떤 실시예에서, 내부 메모리 버스(340)는 AXI 크로스바를 포함할 수 있다.In some embodiments,
어떤 실시예에서, 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
도 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
어떤 실시예에서, 콘텍스트 모듈(410), 페치 관리 모듈(420), PRP 엔진(430), 데이터 전송 엔진(440), 완료 핸들링 모듈(450) 및 PCIe 프론트엔드(460)는 내부 메모리 버스(480)에 의해 서로 연결될 수 있다. 어떤 실시예에서, 메모리 버스(480)는 AXI 인터페이스를 포함할 수 있다.In some embodiments,
어떤 실시예에서, 콘텍스트 모듈(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
호스트에는 입출력(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
도 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
콘텍스트 모듈(410)은 SQ 테일 도어벨 영역(411)의 도어벨 이벤트에 응답하여 이벤트 신호를 생성하고, 이벤트 신호를 페치 관리 모듈(420)로 전달한다(S530). 어떤 실시예에서, SQ 테일 도어벨 영역(411)의 도어벨 엔트리에 테일 포인터가 작성될 때마다, 콘텍스트 모듈(410)은 SQ 테일 도어벨 영역(411)에 매핑된 메모리 버스 주소 공간을 통해 이벤트 신호를 전달할 수 있다(S530).The
페치 관리 모듈(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
PRP 엔진(430)은 콘텍스트 모듈(410)로부터 전달받은 요청 정보에 기초해서 DMA 엔진(440)의 소스 주소와 목적지 주소를 설정한다(S560). DMA 엔진(440)은 소스 주수와 목적지 주소에 기초해서 타겟 데이터를 호스트 메모리(120)와 백엔드 메모리 모듈(470) 사이에서 전송한다(S560).The
어떤 실시예에서, PRP 엔진(430)은 페이지 정렬된(page-aligned) 데이터를 처리하기 위해 PRP를 통해 호스트 메모리(120)의 위치에 액세스하고, DMA 엔진(440)의 소스 주소와 목적지 주소를 설정할 수 있다. 어떤 실시예에서, 요청 정보의 동작 코드(opcode)가 읽기를 지시하는 경우, 소스 주소는 백엔드 메모리 모듈(470)의 주소이고, 목적지 주소는 호스트 메모리(120)의 주소일 수 있다. 요청 정보의 동작 코드(opcode)가 쓰기를 지시하는 경우, 소스 주소는 호스트 메모리(120)의 주소이고, 목적지 주소는 백엔드 메모리 모듈(470)의 주소일 수 있다. 어떤 실시예에서, 호스트 메모리(120)의 주소는 PRP에 기초해서 설정되고, 백엔드 메모리 모듈(470)의 주소는 논리 주소에 기초해서 설정될 수 있다.In some embodiments,
어떤 실시예에서, 요청 정보의 동작 코드가 쓰기를 지시하는 경우, 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
어떤 실시예에서, 쓰기의 경우, 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
어떤 실시예에서, 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
이상에서 설명한 것처럼, 쓰기의 경우, 타겟 데이터가 호스트 메모리(120)로부터 PCIe 인바운드 링크를 통해 NVMe 제어 장치(400)로 전송될 수 있다. 또한, 읽기의 경우, 타겟 데이터가 PCIe 아웃바운드 링크를 통해 호스트 메모리(120)로 전송될 수 있다.As described above, in the case of writing, target data may be transmitted from the
완료 핸들링 모듈(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
어떤 실시예에서, 프론트 엔드(즉, SQ 테일 도어벨 영역(411) 및 페치 관리 모듈(420))의 응답성을 향상시키기 위해, 페치 관리 모듈(420)은 파이프 라인 방식으로 DMA 모듈(440) 및 완료 핸들링 모듈(450)의 동작 동안 나머지 요청을 계속 처리할 수 있다(S550).In some embodiments, to improve the responsiveness of the front end (i.e., the SQ
어떤 실시예에서, NVMe 큐를 쉽게 관리하기 위해 SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)를 나란히 배치할 수 있다. 그러나 NVMe 제출의 유입 속도와 NVMe 완료의 유입 속도가 비대칭이므로, SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)의 물리적 통합은 성능 및 구현 측면에서 유망하지 않을 수 있다. 따라서, 어떤 실시예에서, SQ 테일 도어벨 영역(411)과 CQ 헤드 도어벨 영역(412)를 완전히 분리할 수 있다. 이 경우, 앞에서 설명한 것처럼, CQ 및 SQ 상태를 페어링할 수 있다.In some embodiments, the SQ
어떤 실시예에서, 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
어떤 실시예에서, 콘텍스트 모듈(410)의 SQ 테일 도어벨 영역(411)과 페치 관리 모듈(420)은 큐 디스패치 모듈(예를 들면, 도 2의 210)로 동작하고, PRP 엔진(430)과 DMA 엔진(440)이 데이터 전송 모듈(예를 들면, 도 2의 220)로 동작하고, 완료 핸들링 모듈(450)과 콘텍스트 모듈(410)의 CQ 헤드 도어벨 영역(412)이 완료 핸들링 모듈(예를 들면, 도 2의 230)로 동작할 수 있다.In some embodiments, the SQ
이상에서 설명한 것처럼, 하드웨어에서 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
콘텍스트 모듈(610)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트로부터 SQ 테일 포인터를 수신할 수 있다(672). 콘텍스트 모듈(610)은 페치 관리 모듈(620)과 메모리 버스를 통해 연결되어 이벤트 신호를 페치 관리 모듈(620)로 전달할 수 있다(673). 페치 관리 모듈(620)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트 메모리의 SQ로부터 타겟 SQ 엔트리를 가져올 수 있다(674).The
PRP 엔진(630)은 페치 관리 모듈(620)과 메모리 버스를 통해 연결되어 페치 관리 모듈(620)로부터 요청 정보를 수신할 수 있다(675). PRP 엔진(630)은 프론트엔드(660) 및 DMA 엔진(640)과 메모리 버스를 통해 연결되어 호스트 메모리로부터 타겟 데이터를 가져와 DMA 엔진(640)으로 전달하거나 DMA 엔진(640)을 통해 전송되는 타겟 데이터를 호스트 메모리로 전달할 수 있다(676).The
완료 핸들링 모듈(650)은 PRP 엔진(630)과 메모리 버스를 통해 연결되어 PRP 엔진(630)으로부터 완료 요청을 수신하고, 프론트엔드(660)와 메모리 버스를 통해 연결되어 CQ 엔트리를 호스트 메모리의 CQ에 작성할 수 있다(677). 또한, 완료 핸들링 모듈(650)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트를 인터럽트하여 호스트에 I/O 서비스 완료를 알릴 수 있다(678). 콘텍스트 모듈(610)은 프론트엔드(660)와 메모리 버스를 통해 연결되어 호스트로부터 CQ 헤드 포인터를 수신할 수 있다(679).The
어떤 실시예에서, 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 도어벨 영역, 상기 페치 관리 모듈, 상기 데이터 전송 모듈, 상기 완료 핸들링 모듈 및 상기 제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.
상기 제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. .
상기 제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.
상기 내부 메모리 버스는 AXI(advanced extensible interface) 인터페이스를 포함하는, 비휘발성 메모리 제어 장치.In paragraph 1:
The internal memory bus includes an advanced extensible interface (AXI) interface.
상기 호스트 인터페이스는 PCIe(peripheral component interconnect express) 인터페이스를 포함하는
비휘발성 메모리 제어 장치.In paragraph 1:
The host interface includes a peripheral component interconnect express (PCIe) interface.
Non-volatile memory control unit.
상기 페치 관리 모듈은 상기 명령으로부터 상기 요청 정보를 파싱하는, 비휘발성 메모리 제어 장치.In paragraph 1:
The fetch management module parses the request information from the command.
상기 요청 정보는 논리 주소 및 상기 호스트 메모리의 위치를 지시하는 호스트 메모리 주소를 포함하며,
상기 데이터 전송 모듈은,
상기 논리 주소 및 상기 호스트 메모리 주소에 기초해서 상기 데이터 전송 모듈을 위한 소스 주소와 목적지 주소를 설정하는 제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.
상기 제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.
상기 호스트 메모리 주소는 PRP(physical region page)를 포함하는, 비휘발성 메모리 제어 장치.In paragraph 9:
The host memory address includes a physical region page (PRP).
상기 제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.
상기 비휘발성 메모리 제어 장치는 상기 비휘발성 메모리 모듈과 복수의 채널을 통해 연결되며,
상기 제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.
상기 제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.
상기 호스트 메모리에 복수의 큐 쌍이 존재하며,
각 큐 쌍은 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.
상기 완료 핸들링 모듈은 상기 페치 관리 모듈로부터 전달되는 정보에 기초해서 상기 명령을 가져온 상기 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.
상기 제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.
상기 제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.
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)
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 |
-
2021
- 2021-05-26 KR KR1020210067487A patent/KR102656104B1/en active IP Right Grant
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 |