CN113220608A - 一种NVMe命令处理器及其处理方法 - Google Patents
一种NVMe命令处理器及其处理方法 Download PDFInfo
- Publication number
- CN113220608A CN113220608A CN202110641849.7A CN202110641849A CN113220608A CN 113220608 A CN113220608 A CN 113220608A CN 202110641849 A CN202110641849 A CN 202110641849A CN 113220608 A CN113220608 A CN 113220608A
- Authority
- CN
- China
- Prior art keywords
- command
- dma
- component
- dma command
- completion
- Prior art date
- Legal status (The legal status 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 status listed.)
- Granted
Links
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
- G06F13/1694—Configuration of memory controller to different memory types
-
- 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/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
Abstract
本发明的实施例提供了一种NVMe命令处理器及其处理方法,NVMe命令处理器包括DMA命令存储组件、DMA命令控制组件、DMA组件和DMA命令完成组件;DMA命令存储组件与CPU组件连接,以存储CPU组件下发的第一合并命令,第一合并命令为将DMA命令与固件命令合并得到的命令;DMA命令控制组件与DMA命令存储组件连接;DMA组件分别与DMA命令控制组件和DMA命令完成组件连接;DMA命令完成组件与DMA命令存储组件连接。将CPU组件下发的固件命令数据结构和DMA命令数据结构合并,节省了多次读取与多个DMA命令对应的固件命令的时间,提高了NVMe命令的处理速度。
Description
技术领域
本发明涉及数据存储领域,具体而言,涉及一种NVMe命令处理器及其处理方法。
背景技术
随着信息技术的飞速发展,云计算和人工智能等领域的技术更是有了进一步的突破,其中,在数据信息存储领域,固态硬盘(Solid State Disk,简称SSD)拥有比机械硬盘更快的读写速度,现在大多数机器运用的是串行总线标准(Serial ATA,简称SATA),实际最高传输速度约为600MB/s,而支持高速串行计算机扩展总线标准(Peripheral ComponentInterconnect Express,简称PCIe),实际传输速度会超过1000MB/s,而非易失性存储器协议(Non-Volatile Memory Express,简称NVMe)是为PCIe制定的标准接口协议。相应地,支持NVMe协议的SSD更是以其低延迟、低功耗和高带宽等诸多优势在数据存储领域也获得越来越多的关注,成为存储设备发展的新风向。
在NVMe协议下,通常是根据提交队列(Submission Queue,简称SQ)来存放主机对SSD的操作命令,多采用NVMe固件命令队列和固件直接存储器访问(Direct MemoryAccess,简称DMA)命令队列的方式进行NVMe命令的处理,或者是将NVMe命令分成写数据搬移的DMA命令和负责读数据搬移的DMA命令。若要实现对NVMe命令的处理,需要多次读取与多个DMA命令对应的固件命令,无形中增加了NVMe命令的处理时间,以及需要针对多个DMA命令队列进行读写命令区分,操作复杂,降低了DMA命令的利用效率。
发明内容
本发明的目的包括,例如,提供了一种NVMe命令处理器及其处理方法,其能够至少解决上述部分问题。
第一方面,本申请实施例提供了一种NVMe命令处理器,用于处理CPU组件下发的DMA命令队列,所述NVMe命令处理器包括:DMA命令存储组件、DMA命令控制组件、DMA组件和DMA命令完成组件;
所述DMA命令存储组件用于与所述CPU组件连接,用于存储所述CPU组件下发的第一合并命令以及DMA命令完成条目,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令;
所述DMA命令控制组件与所述DMA命令存储组件连接,用于读取所述DMA命令存储组件中的所述第一合并命令并解析得到DMA命令;
所述DMA组件分别与所述DMA命令控制组件和所述DMA命令完成组件连接,用于解析所述DMA命令并执行对应的动作;
所述DMA命令完成组件与所述DMA命令存储组件连接,用于存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件。
在一种可能的实现方式中,所述NVMe命令处理器还包括DMA命令请求仲裁组件和DMA命令完成仲裁组件;
所述DMA命令存储组件存储至少一个DMA命令队列,所述DMA命令队列包括读命令存储区和写命令存储区,所述读命令存储区用于存储DMA读取命令,所述写命令存储区用于存储DMA写入命令;
在所述DMA命令存储组件存储有多个DMA命令队列的情形下,所述DMA命令请求仲裁组件分别与多个所述DMA组件和所述DMA命令控制组件连接,用于针对多个同时发起的DMA请求进行仲裁,其中,DMA请求用于请求读取所述DMA命令控制组件内的DMA命令;
所述DMA命令完成仲裁组件分别与多个所述DMA组件和所述DMA命令完成组件连接,用于针对多个同时完成的DMA命令访问所述DMA命令完成组件的访问进行仲裁。
在一种可能的实现方式中,所述DMA命令请求仲裁组件和所述DMA命令完成仲裁组件均为轮循仲裁组件。
在一种可能的实现方式中,所述NVMe命令处理器还包括DMA命令寄存器组件;
所述DMA命令寄存器组件用于与所述CPU组件连接,用于通过CPU寄存器配置总线进行配置;
所述DMA命令寄存器组件还分别与所述DMA命令控制组件和所述DMA命令完成组件连接,用于更新与DMA命令对应的读指针寄存器和写指针寄存器。
在一种可能的实现方式中,所述NVMe命令处理器还包括DMA引擎,用于执行DMA命令的搬移。
第二方面,本申请实施例提供了一种NVMe命令处理方法,应用于与CPU组件连接的NVMe命令处理器,处理器包括:DMA命令存储组件、DMA命令控制组件、DMA组件和DMA命令完成组件,所述方法包括:
所述DMA命令存储组件存储所述CPU组件下发的第一合并命令,以及DMA命令完成条目,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令;
所述DMA命令控制组件读取所述DMA命令存储组件中的所述第一合并命令并解析得到DMA命令;
所述DMA组件解析所述DMA命令并执行对应的动作;
所述DMA命令完成组件存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件。
第三方面,本申请实施例提供了一种计算机设备,所述计算机设备包括设备本体、存储器及处理器,所述存储器存储有计算机程序,所述计算机设备包括第二方面的NVMe命令处理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该指令用于执行第二方面的方法。
本发明实施例的有益效果包括,例如:
本申请实施例提供的NVMe命令处理器,通过DMA命令存储组件用于与CPU组件连接,存储CPU组件下发的第一合并命令以及DMA命令完成条目,其中,第一合并命令为将DMA命令与固件命令合并得到的命令,再根据DMA命令控制组件与DMA命令存储组件连接,用于读取DMA命令存储组件中的所述第一合并命令并解析得到DMA命令,完成对DMA命令的处理,通过将CPU组件下发的固件命令数据结构和DMA命令数据结构进行合并,省去了多次读取与多个DMA命令对应的固件命令的时间,提高了NVMe命令的处理速度。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种计算机设备的结构示意图;
图2为本申请实施例提供的一种NVMe命令处理器的结构示意图;
图3为本申请实施例提供的另一种NVMe命令处理器的结构示意图;
图4为本申请实施例提供的一种NVMe命令处理方法的流程图。
图标:
计算机设备100;设备本体110;存储器120;处理器130;
NVMe命令处理器200;DMA命令存储组件210;DMA命令控制组件220;DMA命令请求仲裁组件230;DMA组件240;DMA命令完成仲裁组件250;DMA命令完成组件260;DMA命令寄存器组件270;
CPU组件300。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
请参照图1,图1为本实施例提供的计算机设备的结构示意图。所述计算机设备100包括设备本体110、计算机可读存储介质120及处理器130。
所述计算机可读存储介质120及处理器130各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述设备本体110包括至少一个可以软件或固件(Firmware)的形式存储于所述计算机可读存储介质120中或固化在所述计算机设备100的操作***(OperatingSystem,简称OS)中的软件功能模块。所述处理器130用于执行所述计算机可读存储介质120中存储的可执行模块,例如所述设备本体110所包括的软件功能模块及计算机程序等,所述设备本体110还包括设备外壳和硬件接口等。
其中,所述计算机可读存储介质120可以是,但不限于,随机存取存储器(RandomAccess Memory,简称RAM),只读存储器(Read Only Memory,简称ROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),可擦除只读存储器(ErasableProgrammable Read-Only Memory,简称EPROM),电可擦除只读存储器(Electric ErasableProgrammable Read-Only Memory,简称EEPROM)等。其中,计算机可读存储介质120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。
所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Process,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
请参照图2,图2为一种NVMe命令处理器的结构示意图,所提供的NVMe命令处理器200可以为图1中处理器130。所述NVMe命令处理器200包括:DMA命令存储组件210、DMA命令控制组220件、DMA组件240和DMA命令完成组件260;
所述DMA命令存储组件210用于与所述CPU组件300连接,用于存储所述CPU组件300下发的第一合并命令以及DMA命令完成条目,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令;
所述DMA命令控制组件220与所述DMA命令存储组件210连接,用于读取所述DMA命令存储组件210中的所述第一合并命令并解析得到DMA命令;
所述DMA组件240分别与所述DMA命令控制组件220和所述DMA命令完成组件260连接,用于解析所述DMA命令并执行对应的动作;
所述DMA命令完成组件260与所述DMA命令存储组件210连接,用于存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件210。
具体地,为了使NVMe SSD可以获取所述CPU组件300生成的DMA命令,所述DMA命令存储组件210用于与所述CPU组件300连接,其中,所述DMA命令存储组件210作为所述CPU组件300和NVMe SSD之间的存储介质,其可以选择包括静态随机存取存储器(Static Random-Access Memory,简称SRAM)、动态随机存取存储器(Dynamic Random-Access Memory,简称DRAM)和所述CPU组件300内部的存储空间中的任意一种,可以根据不同的需求进行选择,本申请在此不做限定。
其中,考虑到CPU组件300需要分别下发固件命令和DMA命令,在命令读取的过程中,则需要分别读取固件命令和DMA命令,不仅占用了大量的命令读取时间,而且使得操作过程复杂化,另外,还考虑到CPU组件300下发的固件命令的命令数据结构较为简单,可以将固件命令的命令数据结构与DMA命令的命令数据结构进行合并,形成新的DMA命令的命令数据结构,所述DMA命令存储组件210便可以存储第一合并命令,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令。那么,后续对DMA命令进行的读取的过程便不需要再单独读取CPU组件300下发的固件命令,省去了读取固件命令的操作,节省了命令处理的时间,提高了命令处理的速度。
在所述CPU组件300下发DMA命令队列条目到DMA命令队列之后,再将所述DMA命令队列存储到所述DAM命令存储组件210,便完成了对DMA命令的存储,但仍需要对所述DMA命令进行提取和执行操作。
具体地,通过所述DMA命令控制组件220读取所述DMA命令存储组件210中的所述第一合并命令并解析得到DMA命令。其中,所述DMA命令控制组件220根据存储在所述DMA命令存储组件210中的DMA命令队列读取所述DMA命令,如果该DMA命令数据结构中的sq_entry域为1,则从DMA命令数据结构的I/O命令地址中读取I/O命令并将需要的命令信息写入DMA命令控制组件220内部的命令存储SRAM中,该SRAM的写地址即为DMA命令数据结构中的cmd_id域,并将DMA命令的非IO命令部分写入到DMA命令控制组件220的先入先出(FirstlnFirstOut,简称FIFO)寄存器中。
另外,所述DMA组件240分别与所述DMA命令请求仲裁组件230和所述DMA命令完成仲裁组件250连接,用于解析所述DMA命令并执行对应的动作。可选地,在下发的DMA命令较少,通过一个DMA命令队列便可以实现存储的情形下,所述DMA组件240可仅设置一个,用于执行该DMA命令。
执行完所述DMA命令以后,需要向所述CPU组件300反馈执行结果,进一步地,则通过所述DMA命令存储组件210存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件210。
根据本实施例提供的一种NVMe命令处理器,通过DMA命令存储组件用于与CPU组件连接,存储CPU组件下发的第一合并命令以及DMA命令完成条目,其中,第一合并命令为将DMA命令与固件命令合并得到的命令,再根据DMA命令控制组件与DMA命令存储组件连接,用于读取DMA命令存储组件中的所述第一合并命令并解析得到DMA命令,完成对DMA命令的处理,通过将CPU组件下发的固件命令数据结构和DMA命令数据结构进行合并,省去了多次读取与多个DMA命令对应的固件命令的时间,提高了NVMe命令的处理速度。
考虑到在存有多个DMA命令的情形下,一个DMA命令队列无法存储所有DMA命令,会形成多个DMA命令队列进行存储,相应地,也需要至少一个DMA组件执行多个DMA命令,在一种可能的实施方式中,可以增设多个DMA组件并进行选择的方案。
具体地,请参照图3,图3为另一种NVMe命令处理器的结构示意图。在一种可能的实施方式中,所述NVMe命令处理器200还包括DMA命令请求仲裁组件230和DMA命令完成仲裁组件250,以分配DMA命令至空闲的DMA组件中并执行。
针对每个DMA命令均设有一个DMA命令队列且将DMA命令队列区分为读DMA命令队列和写DMA命令队列的情形,容易造成操作过程复杂,需要多次读取写DMA命令和读DMA命令,在一种可能的实施方式中,可以将多个DMA命令队列进行合并,然后存储在所述DMA命令存储组件210中,减少了NVMe SSD从所述DMA命令存储组件210中的读取次数,也简化了读取DMA命令的操作流程。
具体地,所述DMA命令存储组件210存储至少一个DMA命令队列,合并后的DMA命令队列包括读命令存储区和写命令存储区,所述读命令存储区用于存储DMA读取命令,所述写命令存储区用于存储DMA写入命令,如此,读取出的DMA命令既可以支持读命令操作也可以支持写命令操作,简化了命令读取的操作流程。
另外,所述DMA命令请求仲裁组件230分别与多个所述DMA组件240和所述DMA命令控制组件220连接。
在所述DMA命令存储组件210存储有多个DMA命令队列的情形下,所述DMA命令请求仲裁组件230便可针对多个同时发起的DMA请求进行仲裁,其中,DMA请求用于请求读取所述DMA命令控制组件220内的DMA命令。
其中,多个所述DMA组件240可以包括DMA0组件、DMA1组件,……,DMAn组件,可根据需要选择所述DMA组件240的个数。
所述DMA命令完成仲裁组件250分别与多个所述DMA组件240和所述DMA命令完成组件260连接,可以针对多个同时完成的DMA命令访问所述DMA命令完成组件260的访问进行仲裁。
可选地,所述DMA命令完成仲裁组件250和所述DMA命令请求仲裁组件230均可以设置为轮循仲裁组件,以实现针对DMA命令的轮循仲裁。
可选地,所述NVMe命令处理器200还包括与所述CPU组件300连接的DMA命令寄存器组件270,在将DMA命令写入到所述DMA命令存储组件210以后,所述CPU组件300对所述DMA命令寄存器组件270里的寄存器进行更新。此外,所述DMA命令寄存器组件270还分别与所述DMA命令控制组件220和所述DMA命令完成组件260连接,用于更新与DMA命令对应的读指针寄存器和写指针寄存器。
为了实现DMA命令数据的搬移,可选地,所述NVMe命令处理器200还包括DMA引擎,负责DMA命令数据的快速传输,具体地,负责控制在两个主存之间进行快速的数据传输,比如在中央控制器的SRAM和缓存芯片之间的DMA命令数据传输。
基于上述设计,通过将CPU组件下发的固件命令数据结构和DMA命令数据结构进行合并,省去了多次读取与多个DMA命令对应的固件命令的时间,提高了NVMe命令的处理速度,另外,将多个DMA命令队列进行合并,然后存储在所述DMA命令存储组件中,减少了NVMeSSD从所述DMA命令存储组件中的读取次数,也简化了读取DMA命令的操作流程。
以下将对本申请中CPU组件300下发的DMA命令的命令数据结构和固件命令的命令数据结构进行合并,得到新的DMA命令数据结构,下表1为新的DMA命令数据结构的结构分析表。
表1
其中,DW表示DMA命令数据结构中的域段,对各个域段的解释如下:
dma_id:用于标识该DMA命令,DMA完成队列条目里的dma_id与此相对应;
cmd_id:用于表示该DMA命令属于哪一个固件命令,DMA完成队列条目里的cmd_id与此相对应;
cq_id:指示当dma_ctrl域的auto_cq_en为1时需要用哪一个CQ回复CQ条目;
trans_length:表示该笔DMA需要传输的数据长度,单位为倍特;
host_offset_addr:表示该笔DMA主机端的起始偏移地址;
sgl_base_addr:表示该笔DMA设备端SGL的起始地址;
sgl_length:表示该SGL的长度,单位为倍特;
sq_entry_addr:表示该SQ命令存放的起始地址,仅当dma_ctrl域的sq_entry比特为1时有效。
其中,dma_ctrl的各比特具体信息见下表2。
表2
本申请的DMA命令完成信息的数据结构见下表3。
表3
对表3中的各个域的描述如下:
dma_id:表示该DMA完成条目的信息属于哪一个DMA,与DMA命令数据结构的dma_id域相对应;
cmd_id:表示该DMA属于哪一个固件命令,与DMA命令数据结构的cmd_id域相对应;
dma_err_status:DMA命令执行结果的错误上报信息,这些错误信息如dma_length_err(DMA命令数据结构的trans_length无效),dma_cmd_invalid(DMA命令无效即下DMA的cmd_id无效),PRP相关协议错误,SGL相关协议错误等等;
cmd_err_status:固件命令执行结果的错误上报信息,仅在dma_status域的cmd_done比特为1时有效,这些错误信息如dma_length_err(DMA命令数据结构的trans_length无效),dma_cmd_invalid(DMA命令无效即下DMA的cmd_id无效),PRP相关协议错误,SGL相关协议错误等等;
其中,表4中的dma_status域的各比特信息具体描述如下:
表4
本实施例也提供了一种NVMe命令处理方法,请参照图4,图4为一种NVMe命令处理方法的流程图,以下将对所述方法包括各个步骤进行详细阐述。
S410,所述DMA命令存储组件210存储所述CPU组件300下发的第一合并命令,以及DMA命令完成条目,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令。
CPU组件300下发的固件命令的命令数据结构较为简单,可以将固件命令的命令数据结构与DMA命令的命令数据结构进行合并,所述DMA命令存储组件210便可以存储第一合并命令,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令。在后续对DMA命令进行的读取的过程便不需要再单独读取CPU组件300下发的固件命令,省去了读取固件命令的操作,节省了命令处理的时间,提高了命令处理的速度。
S420,所述DMA命令控制组件220读取所述DMA命令存储组件210中的所述第一合并命令并解析得到DMA命令。
S430,所述DMA组件240解析所述DMA命令并执行对应的动作。
S440,所述DMA命令完成组件260存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件210。
其中,在DMA命令执行完成以后,需要将DMA命令完成条目写入所述DMA命令存储组件210,所述CPU组件300进而可以查看DMA命令完成条目以处理其中的DMA命令执行结果。
在一种可能的实施方式中,所述NVMe命令处理器200还包括DMA命令请求仲裁组件230和DMA命令完成仲裁组件250。
所述DMA命令存储组件210存储至少一个DMA命令队列,所述DMA命令队列包括读命令存储区和写命令存储区,所述读命令存储区用于存储DMA读取命令,所述写命令存储区用于存储DMA写入命令。
在所述DMA命令存储组件210存储有多个DMA命令队列的情形下,所述DMA命令请求仲裁组件230针对多个同时发起的DMA请求进行仲裁,其中,DMA请求用于请求读取所述DMA命令控制组件220内的DMA命令。
所述DMA命令完成仲裁组件250针对多个同时完成的DMA命令访问所述DMA命令完成组件260的访问进行仲裁。
具体地,考虑到在存有多个DMA命令的情形下,一个DMA命令队列无法存储所有DMA命令,会形成多个DMA命令队列进行存储,相应地,也需要至少一个DMA组件执行多个DMA命令,因此,增设多个DMA组件240并进行选择的方案。其中,所述DMA命令存储组件210存储至少一个DMA命令队列,所述DMA命令队列包括读命令存储区和写命令存储区,所述读命令存储区用于存储DMA读取命令,所述写命令存储区用于存储DMA写入命令。
另外,针对每个DMA命令均设有一个DMA命令队列且将DMA命令队列区分为读DMA命令队列和写DMA命令队列的情形,操作过程复杂,需要多次读取写DMA命令和读DMA命令,这种情形下,可以将多个DMA命令队列进行合并,然后存储在所述DMA命令存储组件210中,减少了NVMe SSD从所述DMA命令存储组件210中的读取次数,也简化了读取DMA命令的操作流程。
可选地,所述NVMe命令处理器200还包括DMA命令寄存器组件270,以更新与DMA命令对应的读指针寄存器和写指针寄存器。
在一种可能的实施方式中,所述DMA组件240用于解析所述DMA命令并执行对应的动作,具体地,若所述DMA命令为读命令,则从设备端读取所述DMA命令并写入所述CPU组件300,若所述DMA命令为写命令,则将所述DMA命令从所述CPU组件300读取并写入到设备端缓存器中,其中,所述设备端缓存器包括SRAM和DRAM。
其次,在读取DMA命令队列中的DMA命令的情形下,还需要检测DMA命令队列是否为空,若所述DMA命令队列不为空,跳转执行读取所述DMA命令队列中的DMA命令的操作,若所述DMA命令队列为空,则持续检测DMA命令队列是否为空直至满足预设停止条件时停止,其中,所述预设停止条件包括所述DMA命令队列不为空,可选地,预设停止条件还可包括预设时长,若有命令产生但在该预设时常以后仍读取不到命令,此时,便可以生成警告信息以提醒可能存在的设备故障。
本实施例提供的NVMe命令的处理方法的具体实施过程,也可以参见上述NVMe命令处理器中的具体实施过程。
本实施例也提供了一种计算机设备,所述计算机设备包括设备本体、存储器和处理器,所述处理器执行所述存储器中存储的计算机指令,使得所述计算机设备执行时实现所述的NVMe命令处理方法。
本实施例也提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的NVMe命令处理方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。也要注意的是,结构图和/或流程图中的每个方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种NVMe命令处理器,其特征在于,用于处理CPU组件下发的DMA命令队列,所述NVMe命令处理器包括:DMA命令存储组件、DMA命令控制组件、DMA组件和DMA命令完成组件;
所述DMA命令存储组件用于与所述CPU组件连接,用于存储所述CPU组件下发的第一合并命令以及DMA命令完成条目,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令;
所述DMA命令控制组件与所述DMA命令存储组件连接,用于读取所述DMA命令存储组件中的所述第一合并命令并解析得到DMA命令;
所述DMA组件分别与所述DMA命令控制组件和所述DMA命令完成组件连接,用于解析所述DMA命令并执行对应的动作;
所述DMA命令完成组件与所述DMA命令存储组件连接,用于存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件。
2.根据权利要求1所述的NVMe命令处理器,其特征在于,所述NVMe命令处理器还包括DMA命令请求仲裁组件和DMA命令完成仲裁组件;
所述DMA命令存储组件存储至少一个DMA命令队列,所述DMA命令队列包括读命令存储区和写命令存储区,所述读命令存储区用于存储DMA读取命令,所述写命令存储区用于存储DMA写入命令;
在所述DMA命令存储组件存储有多个DMA命令队列的情形下,所述DMA命令请求仲裁组件分别与多个所述DMA组件和所述DMA命令控制组件连接,用于针对多个同时发起的DMA请求进行仲裁,其中,DMA请求用于请求读取所述DMA命令控制组件内的DMA命令;
所述DMA命令完成仲裁组件分别与多个所述DMA组件和所述DMA命令完成组件连接,用于针对多个同时完成的DMA命令访问所述DMA命令完成组件的访问进行仲裁。
3.根据权利要求2所述的NVMe命令处理器,其特征在于,所述DMA命令请求仲裁组件和所述DMA命令完成仲裁组件均为轮循仲裁组件。
4.根据权利要求1所述的NVMe命令处理器,其特征在于,所述NVMe命令处理器还包括DMA命令寄存器组件;
所述DMA命令寄存器组件用于与所述CPU组件连接,用于通过CPU寄存器配置总线进行配置;
所述DMA命令寄存器组件还分别与所述DMA命令控制组件和所述DMA命令完成组件连接,用于更新与DMA命令对应的读指针寄存器和写指针寄存器。
5.根据权利要求1所述的NVMe命令处理器,其特征在于,所述NVMe命令处理器还包括DMA引擎,用于执行DMA命令的搬移。
6.一种NVMe命令处理方法,其特征在于,应用于与CPU组件连接的NVMe命令处理器,处理器包括:DMA命令存储组件、DMA命令控制组件、DMA组件和DMA命令完成组件,所述方法包括:
所述DMA命令存储组件存储所述CPU组件下发的第一合并命令,以及DMA命令完成条目,其中,所述第一合并命令为将DMA命令与固件命令合并得到的命令;
所述DMA命令控制组件读取所述DMA命令存储组件中的所述第一合并命令并解析得到DMA命令;
所述DMA组件解析所述DMA命令并执行对应的动作;
所述DMA命令完成组件存储DMA命令完成条目,并将所述DMA命令完成条目写入所述DMA命令存储组件。
7.根据权利要求6所述的NVMe命令处理方法,其特征在于,所述NVMe命令处理器还包括DMA命令请求仲裁组件和DMA命令完成仲裁组件,所述DMA组件解析所述DMA命令并执行对应的动作的步骤,包括:
所述DMA命令存储组件存储至少一个DMA命令队列,所述DMA命令队列包括读命令存储区和写命令存储区,所述读命令存储区用于存储DMA读取命令,所述写命令存储区用于存储DMA写入命令;
在所述DMA命令存储组件存储有多个DMA命令队列的情形下,所述DMA命令请求仲裁组件针对多个同时发起的DMA请求进行仲裁,其中,DMA请求用于请求读取所述DMA命令控制组件内的DMA命令;
所述DMA命令完成仲裁组件针对多个同时完成的DMA命令访问所述DMA命令完成组件的访问进行仲裁。
8.根据权利要求6所述的NVMe命令处理方法,其特征在于,所述NVMe命令处理器还包括DMA命令寄存器组件,所述DMA组件解析所述DMA命令并执行对应的动作的步骤之后,所述方法还包括:
更新与DMA命令对应的读指针寄存器和写指针寄存器。
9.根据权利要求6所述的NVMe命令处理方法,其特征在于,所述DMA组件解析所述DMA命令并执行对应的动作的步骤,包括:
若所述DMA命令为读命令,则从设备端读取所述DMA命令并写入所述CPU组件;
若所述DMA命令为写命令,则将所述DMA命令从所述CPU组件读取并写入到设备端缓存器中,其中,所述设备端缓存器包括静态随机存取存储器和动态随机存取存储器。
10.根据权利要求6所述的NVMe命令处理方法,其特征在于,所述读取DMA命令队列中的DMA命令的步骤,包括:
检测DMA命令队列是否为空;
若所述DMA命令队列不为空,跳转执行读取所述DMA命令队列中的DMA命令的操作;
若所述DMA命令队列为空,则持续检测DMA命令队列是否为空直至满足预设停止条件时停止,其中,所述预设停止条件包括所述DMA命令队列不为空。
11.一种计算机设备,其特征在于,所述计算机设备包括设备本体、存储器和处理器,所述处理器执行所述存储器中存储的计算机指令,使得所述计算机设备执行权利要求6至10中所述的NVMe命令处理方法的步骤。
12.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求6至10中所述的NVMe命令处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110641849.7A CN113220608B (zh) | 2021-06-09 | 2021-06-09 | 一种NVMe命令处理器及其处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110641849.7A CN113220608B (zh) | 2021-06-09 | 2021-06-09 | 一种NVMe命令处理器及其处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113220608A true CN113220608A (zh) | 2021-08-06 |
CN113220608B CN113220608B (zh) | 2022-06-28 |
Family
ID=77083546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110641849.7A Active CN113220608B (zh) | 2021-06-09 | 2021-06-09 | 一种NVMe命令处理器及其处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113220608B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836238A (zh) * | 2021-09-30 | 2021-12-24 | 杭州数梦工场科技有限公司 | 数据命令的批量处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090248903A1 (en) * | 2008-03-28 | 2009-10-01 | Fujitsu Limited | Data communication control device |
US20160292100A1 (en) * | 2015-03-31 | 2016-10-06 | Kabushiki Kaisha Toshiba | Method for on-demand fetching of sgl pointers based buffer, traffic and command requirements |
CN107992436A (zh) * | 2016-10-26 | 2018-05-04 | 杭州华为数字技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
CN110073322A (zh) * | 2017-03-24 | 2019-07-30 | 西部数据技术公司 | 用于快速执行封装体内命令的***和方法 |
CN112765055A (zh) * | 2019-11-01 | 2021-05-07 | 北京忆芯科技有限公司 | 存储设备的控制部件 |
-
2021
- 2021-06-09 CN CN202110641849.7A patent/CN113220608B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090248903A1 (en) * | 2008-03-28 | 2009-10-01 | Fujitsu Limited | Data communication control device |
US20160292100A1 (en) * | 2015-03-31 | 2016-10-06 | Kabushiki Kaisha Toshiba | Method for on-demand fetching of sgl pointers based buffer, traffic and command requirements |
CN107992436A (zh) * | 2016-10-26 | 2018-05-04 | 杭州华为数字技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
CN110073322A (zh) * | 2017-03-24 | 2019-07-30 | 西部数据技术公司 | 用于快速执行封装体内命令的***和方法 |
CN112765055A (zh) * | 2019-11-01 | 2021-05-07 | 北京忆芯科技有限公司 | 存储设备的控制部件 |
Non-Patent Citations (2)
Title |
---|
何天宇: "《基于SATA端口多路器芯片的固件研究和实现》", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
冯志华: "《基于BRAM 的NVMe控制器原型仿真平台设计》", 《计算机工程与设计》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836238A (zh) * | 2021-09-30 | 2021-12-24 | 杭州数梦工场科技有限公司 | 数据命令的批量处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113220608B (zh) | 2022-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3796179A1 (en) | System, apparatus and method for processing remote direct memory access operations with a device-attached memory | |
CN102414671B (zh) | 对于不同源的分级内存仲裁技术 | |
CN107305534B (zh) | 同时进行内核模式访问和用户模式访问的方法 | |
US20150186068A1 (en) | Command queuing using linked list queues | |
US5682551A (en) | System for checking the acceptance of I/O request to an interface using software visible instruction which provides a status signal and performs operations in response thereto | |
JP7039631B2 (ja) | アクセスリクエストを管理するための方法、装置、デバイス、および記憶媒体 | |
CN110858188A (zh) | 具有分布式信箱结构的多处理器***及其沟通方法 | |
WO2020177577A1 (zh) | 一种控制器加载多核固件的方法、装置及计算机设备 | |
US20240143392A1 (en) | Task scheduling method, chip, and electronic device | |
CN110941395A (zh) | 动态随机存取存储器、内存管理方法、***及存储介质 | |
CN113220608B (zh) | 一种NVMe命令处理器及其处理方法 | |
EP3872629B1 (en) | Method and apparatus for executing instructions, device, and computer readable storage medium | |
CN114721975A (zh) | 链表处理方法、装置、加速器、电路板、设备和存储介质 | |
WO2013148439A1 (en) | Hardware managed allocation and deallocation evaluation circuit | |
CN110399219B (zh) | 内存访问方法、dmc及存储介质 | |
CN115840654B (zh) | 消息的处理方法、***、计算设备及可读存储介质 | |
US10915447B1 (en) | Systems, devices, and methods for reduced critical path latency and increased work parallelization in memory writes | |
CN111625281A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN111177027A (zh) | 动态随机存取存储器、内存管理方法、***及存储介质 | |
CN111078618A (zh) | 电子设备以及双处理器的通信方法 | |
CN112732176B (zh) | 基于fpga的ssd访问方法及装置、存储***及存储介质 | |
US11275707B2 (en) | Multi-core processor and inter-core data forwarding method | |
US8307141B2 (en) | Multi-core processor, control method thereof, and information processing apparatus | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
CN112711442A (zh) | 一种主机命令写入方法、设备、***及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |