CN106569736B - NVMe协议处理器及其处理方法 - Google Patents
NVMe协议处理器及其处理方法 Download PDFInfo
- Publication number
- CN106569736B CN106569736B CN201510887865.9A CN201510887865A CN106569736B CN 106569736 B CN106569736 B CN 106569736B CN 201510887865 A CN201510887865 A CN 201510887865A CN 106569736 B CN106569736 B CN 106569736B
- Authority
- CN
- China
- Prior art keywords
- nvme
- doorbell
- shared memory
- host
- cpu
- 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.)
- Active
Links
Classifications
-
- 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- 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/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/161—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
- G06F13/1636—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement using refresh
-
- 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
- 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/0024—Peripheral component interconnect [PCI]
Abstract
本发明公开了一种NVMe协议处理器及NVMe协议处理方法,所述NVMe协议处理器包括CPU子系统、共享存储器、Gather DMA模块、Scatter DMA模块、主机存取模块、独立Doorbell寄存器和Doorbell检测模块。Gather DMA模块与共享存储器连接,用于将外部主机的数据通过PCIe控制器搬移到共享存储器;Scatter DMA模块与共享存储器连接,用于将共享存储器的数据通过PCIe控制器搬移到外部主机;主机存取模块通过PCIe控制器连接在共享存储器和外部主机之间,以访问共享存储器;独立Doorbell寄存器连接在主机存取模块和Doorbell检测模块之间,用于存储Doorbell指针;所述Doorbell检测模块用于检测Doorbell指针的更新。本发明易于在NVMe协议升级或扩展时进行适应性修改,无需重新设计NVMe协议处理器的硬件电路,方便易用,适应性强。
Description
技术领域
本发明涉及固态存储设备(Solid Storage Device,SSD),更具体地,本发明涉及存储器控制器中用于处理NVMe(Non Volatile Memory express,非易失存储器)协议的NVMe协议处理器及NVMe协议处理方法。
背景技术
NVMe协议的处理流程一般为:
1.命令提交
(1)主机向提交队列(Submission Queue,SQ)写入NVMe命令;
(2)主机写入更新后的SQ队列尾指针,作为Doorbell(门铃)通知NVMe协议处理器有新命令要处理;
2.命令处理
(1)NVMe协议处理器从主机的SQ队列取得NVMe命令;
(2)NVMe协议处理器处理NVMe命令;
3.命令完成
(1)NVMe协议处理器向完成队列(Completion Queue,CQ)队尾写入数据,指示命令处理完成;
(2)NVMe协议处理器生成MSI-X中断,指示主机处理;
(3)主机处理CQ中的数据;
(4)主机写入更新后的完成队列CQ的头指针,作为Doorbell通知NVMe协议处理器。
现有技术中主要以全硬件方式实现对NVMe协议的处理,当NVMe协议升级时,或者对NVMe协议进行扩展时,例如增加功能,需要修改硬件设计才能实现对升级或扩展后的NVMe协议的处理。
如果用全硬件方式实现NVMe协议,假设需要支持三条NVMe命令A,B和C,并实现了对应的命令处理功能。但是,如果NVMe协议升级,需要支持5条命令,那么多出来的两条命令D和E就得通过增加硬件电路的方式来实现。而对于ASIC(Application SpecificIntegrated Circuit,专用集成电路),增加硬件电路就需要重新进行前后端设计、仿真验证,会带来高昂的研发成本。
发明内容
本发明的目的是为解决目前采用全硬件方式实现NVMe协议处理器不能很好地适应NVMe协议升级或扩展的技术问题。
为了实现上述发明目的,一方面,本发明提供了一种NVMe协议处理器,所述NVMe协议处理器第一种实现方案如下:
包括:CPU子系统、共享存储器、Gather DMA模块、Scatter DMA模块、主机存取模块和PCIe控制器;
所述CPU子系统包括一个或多个CPU,所述CPU耦合到所述共享存储器;
所述Gather DMA模块与所述共享存储器连接,用于将外部主机的数据通过所述PCIe控制器搬移到所述共享存储器;
所述Scatter DMA模块与所述共享存储器连接,用于将所述共享存储器的数据通过所述PCIe控制器搬移到外部主机;
所述主机存取模块通过所述PCIe控制器耦合在所述共享存储器和外部主机之间,以使外部主机访问所述共享存储器;
所述共享存储器中设有Doorbell寄存器,用于存储Doorbell指针;
所述PCIe控制器用于在所述外部主机与所述NVMe协议处理器之间交换数据。
进一步地,还包括Doorbell检测模块,所述Doorbell检测模块与所述Doorbell寄存器相耦合,用于检测所述Doorbell寄存器的更新。
进一步地,所述Gather DMA模块和所述Scatter DMA模块还分别耦合到外部的SDD控制器。
所述NVMe协议处理器第二种实现方案如下:
包括:CPU子系统、共享存储器、Gather DMA模块、Scatter DMA模块、主机存取模块、独立Doorbell寄存器、Doorbell检测模块和PCIe控制器;
所述CPU子系统包括一个或多个CPU,所述CPU连接到所述共享存储器;
所述Gather DMA模块与所述共享存储器连接,用于将外部主机的数据通过所述PCIe控制器搬移到所述共享存储器;
所述Scatter DMA模块与所述共享存储器连接,用于将所述共享存储器的数据通过所述PCIe控制器搬移到外部主机;
所述主机存取模块通过所述PCIe控制器连接在所述共享存储器和外部主机之间,以访问所述共享存储器;
所述独立Doorbell寄存器连接在所述主机存取模块和Doorbell检测模块之间,用于存储Doorbell指针;
所述Doorbell检测模块用于检测所述独立Doorbell寄存器的更新;
所述Gather DMA模块和所述Scatter DMA模块还分别耦合到外部的SDD控制器。
另一方面,本发明还提供了一种NVMe协议处理方法,第一种实现方案如下:包括如下步骤:
(1)主机将NVMe命令写入NVMe协议处理器的共享存储器;
(2)所述NVMe协议处理器的CPU处理所述共享存储器中的NVMe命令;
(3)所述NVMe协议处理器依据处理完成的NVMe命令,填充所述主机的完成队列(CQ);
(4)所述主机从所述完成队列(CQ)中取出数据并处理,并告知所述NVMe协议处理器完成队列(CQ)的处理情况。
所述NVMe协议处理方法,第二种实现方案如下:
包括如下步骤:
(1)主机向NVMe协议处理器发送Doorbell指针值;
(2)所述NVMe协议处理器的CPU获知Doorbell值的更新;
(3)所述NVMe协议处理器的CPU配置Gather DMA模块从所述主机的提交队列(SQ)取得NVMe命令,并存入共享存储器;
(4)所述NVMe协议处理器的CPU处理共享存储器中的NVMe命令;
(5)所述NVMe协议处理器的CPU依据处理完成的NVMe命令,配置Scatter DMA模块,指示Scatter DMA模块将数据写入主机的完成队列(CQ),该数据指示处理完成的NVMe命令;
(6)所述主机从完成队列(CQ)中取出数据并处理,并将所述完成队列(CQ)对应的Doorbell指针值发送给所述NVMe协议处理器;
(7)所述NVMe协议处理器的CPU获知Doorbell值的更新并完成NVMe命令的处理。
所述NVMe协议处理方法,第三种实现方案如下:
包括:
检查对应于提交队列(SQ)的第一Doorbell寄存器是否被更新;
若第一Doorbell寄存器被更新,配置Gatter DMA模块来将主机的提交队列(SQ)中的NVMe命令传送到共享存储器;
对共享存储器中的NVMe命令进行处理,将指示NVMe命令处理结果的数据写入共享存储器,并通过配置Scatter DMA模块,将共享存储器中的指示NVMe命令处理结果的数据传送到主机的完成队列(CQ);
检查对应于完成队列(CQ)的第二Doorbell寄存器是否被更新;若第二Doorbell寄存器被更新,完成所述NVMe命令的处理。
进一步地,所述第一Doorbell寄存器与第二Doorbell寄存器位于所述共享存储器的存储空间。
进一步地,所述检查对应于提交队列(SQ)的第一Doorbell寄存器是否被更新,包括:
轮询所述Doorbell寄存器以确定所述第一Doorbell寄存器被更新。
所述NVMe协议处理方法,第四种实现方案如下:
包括:
响应于接收到指示对应于提交队列(SQ)的第一Doorbell寄存器被更新的中断请求,配置Gatter DMA模块来将主机的提交队列(SQ)中的NVMe命令传送到共享存储器;
对共享存储器中的NVMe命令进行处理,将指示NVMe命令处理结果的数据写入共享存储器,并通过配置Scatter DMA模块,将共享存储器中的指示NVMe命令处理结果的数据传送到主机的完成队列(CQ);
检查对应于完成队列(CQ)的第二Doorbell寄存器是否被更新;若第二Doorbell寄存器被更新,完成所述NVMe命令的处理。
根据本发明的一个方面,本发明还提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行上面所述的多种方法之一。
根据本发明的另一个方面,还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行上面所述的多种方法之一。
根据本发明的又一方面,提供了一种在其上具有所记录的程序的机器可读存储介质,其中所述程序使得所述机器执行上面所述的多种方法之一。
根据本发明的又一方面,提供了一种存储控制器。所述存储控制器包括根据本发明的上述多种NVMe协议处理器之一。
根据本发明的又一方面,提供了一种集成电路。所述集成电路包括根据本发明的上述多种NVMe协议处理器之一。
本发明的有益效果是,本发明提供了一种全新的NVMe协议处理器结构及NVMe协议处理方法。根据本发明的NVMe协议处理器的具体形态可以是ASIC(专用集成电路)或者ASIC的组成部分。根据本发明的NVMe协议处理器的形态还可以为能通过编程反复重新配置其功能的集成电路,如FPGA(Field-Programmable Gate Array,现场可编程门阵列)。也可为以硬件描述语言开发的IP核,该IP核可以在ASIC设计中作为电路模块而集成到ASIC中。根据本发明的IP核也可直接用于配置FPGA来实现NVMe协议处理器的功能。本发明的实施例还可为运行在嵌入式CPU中的软件,易于在NVMe协议升级或扩展时进行适应性修改,无需重新设计NVMe协议处理器的硬件电路,仅需通过修改软件来实现对升级后NVMe协议的支持,易于应对NVMe协议的升级,方便易用,适应性强。
另外,本发明的NVMe协议处理流程中,在处理NVMe命令前后均可采用CPU轮询(polling)的方式查询Doorbell值是否发生更新,根据查询结果决定是否进行NVMe命令的处理,这是现有NVMe协议规范中未定义的,相对于中断处理方式,在待处理事件较多,中断过于频繁及中断后处理的数据较少的情况下能一定程度上提高CPU的工作效率。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1是本发明的NVMe协议处理器一个实施例的原理框图;
图2是本发明的NVMe协议处理器另一个实施例的原理框图;
图3是本发明的NVMe协议处理器又一个实施例的原理框图;
图4是本发明的NVMe协议处理方法一个实施例的流程图;
图5是本发明的NVMe协议处理方法另一个实施例的流程图;
图6是本发明的NVMe协议处理方法又一个实施例的流程图;以及
图7是本发明的NVMe协议处理方法中NVMe控制器的CPU所实施的处理流程实施例的流程图。
图中,不同的NVMe协议处理器实施例中,为说明清楚起见,同样的部件用不同的标记,具体如下:
10、20、30:NVMe协议处理器;101、201、301:共享存储器;1011、2011:共享存储器中的Doorbell寄存器;102、202、302:CPU子系统;103、203、303:主机存取模块;104、204、304:Gather DMA模块;105、205、305:Scatter DMA模块;206、306:Doorbell检测模块;11、207、307:PCIe控制器;308:独立Doorbell寄存器;12、21、31:主机;22、32:SDD控制器。
具体实施方式
现在结合附图对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
实施例1
如图1所示,本发明的NVMe协议处理器10为图中虚线框内的部分,包括:
CPU子系统102、共享存储器101、Gather DMA模块104、Scatter DMA模块105和主机存取模块103。
CPU子系统102包括多个CPU,CPU连接到共享存储器101。在CPU子系统102的CPU中运行程序,用于处理共享存储器中的数据和/或NVMe命令、配置Gather DMA模块104与Scatter DMA模块105并指示其实施数据搬运,并控制NVMe协议的处理过程。在其他实施例中,CPU子系统102中包括一个CPU。
Gather DMA模块104与共享存储器101连接,用于将外部主机12的数据通过外部PCIe控制器11搬移到共享存储器101。数据的内容可以是NVMe协议相关的NVMe命令,还可以是NVMe命令所指示的写等操作对应的数据。
Scatter DMA模块105与共享存储器101连接,用于将共享存储器101的数据通过外部PCIe控制器11搬移到外部主机12。数据的内容可以是NVMe协议相关的NVMe命令,还可以是NVMe命令所指示的读等操作对应的数据。
在根据本发明的一个实施例中,共享存储器101中存储NVMe协议相关的NVMe命令,而将NVMe命令所指示的读、写操作对应的数据存储在根据本发明实施例的NVMe协议处理器外部。在另一个实施例中,共享存储器101中存储NVMe协议相关的NVMe命令,以及与NVMe命令所指示的读、写操作对应的数据。
共享存储器101中包括Doorbell寄存器1011,用于存储Doorbell指针。Doorbell寄存器可以是共享存储器101中的特定或可配置的存储区域。Doorbell指针包括提交队列(SQ)的尾指针与完成队列(CQ)的头指针。Doorbell寄存器1011中还可以存储提交队列(SQ)的头指针与完成队列(CQ)的尾指针。在其他实施例中,Doorbell寄存器是一个或多个物理寄存器,与共享存储器101统一编址。共享存储器101中还存储主机12下发的NVMe命令。
主机存取模块103通过外部PCIe控制器11连接在共享存储器101和外部主机12之间,以使主机103访问共享存储器101。外部主机12通过主机存取模块103访问共享存储器101。例如,外部主机12通过主机存期模块103更新Doorbell寄存器的值,以指示提交队列(SQ)的尾指针被更新,或完成队列(CQ)的头指针被更新。
CPU子系统102中的CPU监视Doorbell寄存器1011的状态。当发现提交队列(SQ)被更新时,通过执行软件,CPU从共享存储器101中读出NVMe命令并进行处理,以及更新Doorbell寄存器1011的值,以向主机12指示提交队列(SQ)的头指针被更新。在处理NVMe命令时,CPU指示Gather DMA模块104和/或Scatter DMA模块105执行相应的数据搬运操作。NVMe命令处理完成后,CPU更新Doorbell寄存器1011的值,以向主机12指示完成队列(CQ)的尾指针被更新,并向主机12发送中断。主机12相应地对完成队列进行处理,并通过主机存取模块103更新Doorbell寄存器的值,以指示完成队列(CQ)的头指针被更新。从而完成NVMe协议的处理流程。
实施例2
如图2所示,本发明的NVMe协议处理器20为图中虚线框内的部分,包括:
CPU子系统202、共享存储器201、Gather DMA模块204、Scatter DMA模块205、主机存取模块203、PCIe控制器207和Doorbell检测模块206。
CPU子系统202包括多个CPU,CPU连接到共享存储器201。在其他实施例中,CPU子系统202中包括一个CPU。
Gather DMA模块204与共享存储器201连接,用于将外部主机21的数据通过内部PCIe控制器207搬移到共享存储器201。数据的内容是例如主机生成并写入提交队列(SQ)的NVMe命令。
Scatter DMA模块205与共享存储器201连接,用于将共享存储器201的数据通过内部PCIe控制器207搬移到外部主机21。数据的内容是例如CPU子系统202生成的用于填充完成队列(CQ)的内容。以及该数据被搬移到主机21的完成队列(CQ)中。
主机存取模块203通过内部PCIe控制器207连接在共享存储器201和外部主机21之间,以使主机能够访问共享存储器201。在另一个实施例中,主机存取模块203使主机能够访问SSD控制器22的数据。
共享存储器201中设有Doorbell寄存器2011,用于存储Doorbell指针。
Doorbell检测模块206与共享存储器201或Doorbell寄存器2011连接,用于检测Doorbell指针的更新。
Gather DMA模块204和Scatter DMA模块205还分别连接到外部的SDD控制器22,使得Gather DMA模块204、Scatter DMA模块205能通过SDD控制器22与后端(例如,闪存)进行数据交换。
实施例2与实施例1的区别在于,将实施例1中的外部PCIe控制器11作为NVMe协议处理器20的一部分,成为NVMe协议处理器20内部的PCIe控制器207,还在实施例1的基础上增加了Doorbell检测模块206,增加了Gatter DMA模块204、Scatter DMA模块205与SDD控制器22的连接。
Doorbell检测模块206轮询Doorbell寄存器2011,来识别Doorbell寄存器被主机21或CPU子系统202更新。当Doorbell检测模块206发现Doorbell寄存器2011被主机21更新,其通知CPU子系统202。在另一实施例中,Doorbell监视Doorbell寄存器的值,以识别提交队列(SQ)中有待处理的NVMe命令,并通知CPU子系统202。
在实施例2中,共享存储器201中存储NVMe协议相关的NVMe命令,而将NVMe命令所指示的读、写操作对应的数据存储在位于NVMe协议处理器外部的SSD控制器22管理的存储器内。在根据本发明的另一实施例中,共享存储器201中存储NVMe协议相关的NVMe命令,而将NVMe命令所指示的读、写操作对应的数据存储在另一存储器内。该另一存储器不属于根据本发明实施例2的NVMe协议处理器20,也不属于SSD控制器22,但NVMe协议处理器20与SSD控制器22均可访问该另一存储器。
实施例3
如图3所示,本发明的NVMe协议处理器30为图中虚线框内的部分,包括:
CPU子系统302、共享存储器301、Gather DMA模块304、Scatter DMA模块305、主机存取模块303、PCIe控制器307、Doorbell检测模块306和独立Doorbell寄存器308。Doorbell寄存器308可以物理寄存器,并具有比共享存储器301高的访问性能。
CPU子系统302包括多个CPU,CPU连接到共享存储器301。在其他实施例中,CPU子系统302中包括一个CPU。
Gather DMA模块304与共享存储器301连接,用于将外部主机31的数据通过内部PCIe控制器307搬移到共享存储器301或SSD控制器32。在一个例子中,被搬移到共享存储器301中的数据的内容是例如主机生成并写入提交队列(SQ)的NVMe命令;而被搬移到SSD控制器32的数据的内容是NVMe命令所指示的写操作对应的数据。
Scatter DMA模块305与共享存储器301连接,用于将共享存储器301或SSD控制器32的数据通过内部PCIe控制器307搬移到外部主机31。在一个例子中,被从共享存储器301中搬移到外部主机的数据的内容是例如CPU子系统302生成并将写入完成队列(CQ)的与NVMe命令相对应的数据;而被从SSD控制器32搬移到外部主机的数据的内容是NVMe命令所指示的读操作对应的数据。
主机存取模块303通过内部PCIe控制器307连接在共享存储器301和外部主机31之间,以使主机访问共享存储器301。
独立Doorbell寄存器308连接在主机存取模块303和Doorbell检测模块306之间,用于存储Doorbell指针。
Doorbell检测模块306检测Doorbell指针的更新,并通知CPU子系统302。
Gather DMA模块304和Scatter DMA模块305分别连接到外部的SDD控制器32,使Gather DMA模块304、Scatter DMA模块305能通过SDD控制器32与后端(例如,闪存)进行数据交换。
实施例3与实施例2的区别在于,将实施例2中设于共享存储器201中的Doorbell寄存器2011改为独立于共享存储器301的Doorbell寄存器308,利于Doorbell指针的读写和检测。
实施例4
如图4所示,本发明实施例的NVMe协议处理方法,包括如下步骤:
S100:主机向NVMe协议处理器发送Doorbell指针值。具体地,在主机向提交队列(SQ)填充了新内容(例如,NVMe命令)时,主机将更新后的提交队列(SQ)的尾指针作为Doorbell指针值发送给NVMe协议处理器。主机通过主机存储模块将Doorbell指针值写入共享存储器。
S110:NVMe协议处理器的CPU获知Doorbell值的更新。例如,CPU轮询存储了提交队列(SQ)的尾指针的Doorbell寄存器,以获知主机对提交队列(SQ)尾指针的更新。对提交队列尾指针的更新,意味着提交队列(SQ)中被填充了新内容。
S120:CPU解析Doorbell指针,并配置Gather DMA模块以从主机的提交队列(SQ)中获取NVMe命令。在一个例子中,NVMe协议处理器的CPU比较提交队列(SQ)的尾指针与头指针,以获知提交队列(SQ)中待处理器的NVMe命令数量以及在主机中的存储位置,并操作Gather DMA模块以从主机的提交队列(SQ)中获取NVMe命令。
S130:Gather DMA模块向主机请求Doorbell指针指示的提交队列(SQ)中的NVMe命令。
S140:主机向Gather DMA模块返回提交队列(SQ)中的NVMe命令,NVMe命令被写入共享存储器。
S150:CPU解析被写入共享存储器的NVMe命令,若NVMe命令是主机“读”命令,则继续到步骤S155,若NVMe命令是主机“写”命令,则转到步骤S156。
S155:CPU通知后端设备(例如,图2的SSD控制器22,或图3的SSD控制器32)准备主机需要“读”的数据,并配置Scatter DMA模块,Scatter DMA模块将数据发给主机,转到步骤S160。
S156:CPU根据主机“写”命令信息配置Gather DMA模块,Gather DMA模块向主机请求待写的数据,主机向Gather DMA模块返回待写的数据,Gather DMA模块将数据写入共享存储器或后端设备的存储空间。
S160:CPU依据提交队列(SQ)中被处理完成的NVMe命令准备相对应的用于填充完成队列(CQ)的数据,并配置Scatter DMA模块,Scatter DMA模块将数据写入主机的完成队列(CQ)。
S170:CPU配置Scatter DMA模块,Scatter DMA模块向主机发起MSI-X中断。
S180:主机得到MSI-X中断后,从完成队列(CQ)取出数据并处理,并将完成队列(CQ)对应的新Doorbell指针值(完成队列的头指针)发至NVMe协议处理器。例如,主机通过主机存储模块将Doorbell指针值(完成队列的头指针)写入共享存储器。
S190:CPU读取到新Doorbell指针值后完成NVMe命令处理,准备处理下一个NVMe命令。具体地,NVMe协议处理器的CPU获知完成队列的头指针被主机更新,因而确定相应的NVMe命令处理在主机端已完成,并继而完成对该NVMe命令的处理。
实施例5
如图5所示,本发明的NVMe协议处理方法,包括如下步骤:
S200:主机向PCIe控制器发送包括Doorbell指针值的数据包,PCIe控制器通过主机存取模块将数据包发送至NVMe协议处理器中共享存储器里的Doorbell寄存器;
S210:NVMe协议处理器中独立的Doorbell检测模块检测到Doorbell值更新后,通过中断方式通知CPU。或者Doorbell检测模块检测到Doorbell值更新后,向共享存储器中写入标志,由CPU查询标志获知Doorbell值的更新(CPU轮询(polling)方式)。
S220:CPU解析到Doorbell指针后配置Gather DMA模块。在一个例子中,CPU配置Gather DMA模块以从主机的提交队列(SQ)中获取NVMe命令。在一个例子中,NVMe协议处理器的CPU比较提交队列(SQ)的尾指针与头指针,以获知提交队列(SQ)中待处理器的NVMe命令数量以及在主机中的存储位置,并操作Gather DMA模块以从主机的提交队列(SQ)中获取NVMe命令。
S230:Gather DMA模块向主机请求Doorbell指针指示的提交队列(SQ)中的NVMe命令。
S240:主机通过PCIe控制器向Gather DMA模块返回提交队列(SQ)中的NVMe命令,Gather DMA模块将NVMe命令被写入共享存储器。
S250:CPU解析被写入共享存储器的NVMe命令,若NVMe命令是主机“读”命令,则继续到步骤S255,若NVMe命令是主机“写”命令,则转到步骤S256。
S255:CPU通知后端设备(例如,图2的SSD控制器22,或图3的SSD控制器32)准备主机需要“读”的数据,并配置Scatter DMA模块,Scatter DMA模块将数据发给主机,转到步骤S260;
S256:CPU根据“写”命令信息配置Gather DMA模块,Gather DMA模块通过PCIe控制器向主机请求待写的数据,主机收到数据请求后将对应内存的数据通过PCIe控制器向Gather
DMA模块返回,Gather DMA模块将返回的数据写入共享存储器或后端设备的存储空间。
S260:CPU依据提交队列(SQ)中被处理完成的NVMe命令准备相对应的用于填充完成队列(CQ)的数据,并配置Scatter DMA模块,Scatter DMA模块将数据写入主机的完成队列(CQ)。
S270:CPU配置Scatter DMA模块,Scatter DMA模块向主机发起MSI-X中断。
S280:主机得到MSI-X中断后,从完成队列(CQ)取出数据并处理,并将完成队列(CQ)的头指针值通过主机存取模块写入共享存储器里的Doorbell
寄存器;
S290:CPU获知完成队列(CQ)头指针被更新后,后完成相应NVMe命令处理,准备处理下一个NVMe命令。Doorbell检测模块检测到Doorbell值更新后,通过中断方式通知CPU。或者Doorbell检测模块检测到Doorbell值更新后,向共享存储器中写入标志,由CPU查询标志获知Doorbell值的更新。在另一个例子中,CPU可轮询Doorbell寄存器以获知完成队列(CQ)头指针被更新。
实施例6
如图6所示,本发明的NVMe协议处理方法,包括如下步骤:
S300:主机向PCIe控制器发送包括Doorbell指针值的数据包,PCIe控制器通过主机存取模块将数据包发送至NVMe协议处理器中独立的Doorbell寄存器。
S310:CPU通过查询独立Doorbell寄存器的变化来获知Doorbell值的更新,即CPU轮询(polling)方式。在另一个例子中,NVMe协议处理器中独立的Doorbell检测模块检测到独立Doorbell寄存器的值更新后,通过中断方式通知CPU。或者Doorbell检测模块检测到独立Doorbell寄存器的值更新后,向共享存储器中写入标志,由CPU查询标志获知Doorbell值的更新。
S320:CPU解析到Doorbell指针后配置Gather DMA模块。
S330:从Gather DMA模块将数据请求发送到PCIe控制器,PCIe控制器将请求发送给主机,向主机请求Doorbell指针指示的提交队列(SQ)中的NVMe命令。
S340:主机通过PCIe控制器向Gather DMA模块返回提交队列(SQ)中的NVMe命令,NVMe命令被写入共享存储器。
S350:CPU解析被写入共享存储器的NVMe命令,若NVMe命令是主机“读”命令,则继续到步骤S355,若NVMe命令是主机“写”命令,则转到步骤S356。
S355:CPU通知后端设备(例如,图2的SSD控制器22,或图3的SSD控制器32)准备主机需要“读”的数据,并配置Scatter DMA模块,Scatter DMA模块将数据发给主机,转到步骤S360。
S356:CPU根据“写”指令信息配置Gather DMA模块,Gather DMA模块通过PCIe控制器向主机请求待写的数据,主机收到数据请求后将对应的数据通过PCIe控制器向GatherDMA模块返回,Gather DMA模块将返回的数据写入共享存储器或后端设备的存储空间。
S360:CPU依据提交队列(SQ)中被处理完成的NVMe命令准备相对应的用于填充完成队列(CQ)的数据,并配置Scatter DMA模块,Scatter DMA模块将数据写入主机的完成队列(CQ)。
S370:CPU配置Scatter DMA模块,Scatter DMA模块向主机发起MSI-X中断。
S380:主机得到MSI-X中断后,从完成队列(CQ)取出数据并处理,并将完成队列(CQ)对应的新指针值通过主机存取模块写入独立Doorbell寄存器。
S390:CPU轮询到新Doorbell指针值后完成NVMe命令处理,准备处理下一个NVMe命令。在另一个例子中,NVMe协议处理器中独立的Doobell检测模块检测到独立Doorbell寄存器的值更新后,通过中断方式通知CPU。或者Doorbell检测模块检测到独立Doorbell寄存器的值更新后,向共享存储器中写入标志,由CPU查询标志获知Doorbell值的更新。
实施例7
在图7中展示了根据本发明实施例的由NVMe协议处理器的CPU通过执行软件、程序或指令而实施的处理流程。
S410:NVMe协议处理器的CPU通过中断或轮询方式检查Doorbell寄存器是否更新。从Doorbell寄存器中,获得提交队列(SQ)的尾指针。若提交队列(SQ)的尾指针不同于提交队列(SQ)的头指针,则表示提交队列(SQ)中存在需要被处理的NVMe命令。
S420:CPU检查到Doorbell寄存器更新后配置Gather DMA模块,以指示Gather DMA模块向主机请求Doorbell指针指示的提交队列(SQ)中的NVMe命令。在一个例子中,CPU通过执行软件,来比较Doorbell寄存器中的提交队列(SQ)的头指针与尾指针,以获得提交队列(SQ)中所存在的NVMe命令的数量和存储位置,并配置Gather DMA模块来从提交队列(SQ)获取NVMe命令,并写入共享存储器。
S450:CPU解析被写入共享存储器的NVMe命令,若NVMe命令是主机“读”命令,则继续到步骤S455,若NVMe命令是主机“写”命令,则转到步骤S456。
S455:CPU通知后端设备(例如,图2的SSD控制器22,或图3的SSD控制器32)准备主机需要“读”的数据,并配置Scatter DMA模块,使Scatter DMA模块将数据发给主机,转到步骤S460。
S456:CPU根据主机“写”命令信息配置Gather DMA模块,使得Gather DMA模块向主机请求待写的数据,并将数据写入共享存储器或者后端设备的存储空间。
S460:CPU依据提交队列(SQ)中被处理完成的NVMe命令准备相对应的用于填充完成队列(CQ)的数据,并配置Scatter DMA模块,使Scatter DMA模块将数据写入主机的完成队列(CQ)。
S470:CPU配置Scatter DMA模块,使Scatter DMA模块向主机发起MSI-X中断。
S490:NVMe协议处理器的CPU通过中断或轮询方式检查Doorbell寄存器是否更新,从Doorbell寄存器中,获得完成队列(CQ)的头指针,以确定对应的NVMe命令已处理完成,并可准备处理下一个NVMe命令。
上面已经公开了NVMe协议处理器以及NVMe协议处理方法。所属领域技术人员还将意识到本发明中所公开的方法或操作流程可由软件、固件及其任何组合实现。实现本发明实施例的方法或操作流程的软件、固件可由存储设备的控制器执行。实现本发明实施例的方法或操作的软件、固件可存储于网络服务器、访问存储设备的主机和/或存储设备。
以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。
Claims (9)
1.NVMe协议处理器,其特征在于,包括:CPU子系统、共享存储器、Gather DMA模块、Scatter DMA模块、主机存取模块和PCIe控制器;
所述CPU子系统包括一个或多个CPU,所述CPU耦合到所述共享存储器;
所述Gather DMA模块与所述共享存储器连接,用于将外部主机的数据通过所述PCIe控制器搬移到所述共享存储器;
所述Scatter DMA模块与所述共享存储器连接,用于将所述共享存储器的数据通过所述PCIe控制器搬移到外部主机;
所述主机存取模块通过所述PCIe控制器耦合在所述共享存储器和外部主机之间,以使外部主机访问所述共享存储器;
所述共享存储器中设有Doorbell寄存器,用于存储Doorbell指针;
所述PCIe控制器用于在所述外部主机与所述NVMe协议处理器之间交换数据。
2.根据权利要求1所述的NVMe协议处理器,其特征在于,还包括Doorbell检测模块,所述Doorbell检测模块与所述Doorbell寄存器相耦合,用于检测所述Doorbell寄存器的更新。
3.根据权利要求1或2所述的NVMe协议处理器,其特征在于,所述Gather DMA模块和所述Scatter DMA模块还分别耦合到SDD控制器。
4.NVMe协议处理器,其特征在于,包括:CPU子系统、共享存储器、Gather DMA模块、Scatter DMA模块、主机存取模块、Doorbell寄存器、Doorbell检测模块和PCIe控制器;
所述CPU子系统包括一个或多个CPU,所述CPU连接到所述共享存储器;
所述Gather DMA模块与所述共享存储器连接,用于将外部主机的数据通过所述PCIe控制器搬移到所述共享存储器;
所述Scatter DMA模块与所述共享存储器连接,用于将所述共享存储器的数据通过所述PCIe控制器搬移到外部主机;
所述主机存取模块通过所述PCIe控制器连接在所述共享存储器和外部主机之间,以使外部主机访问所述共享存储器;
所述Doorbell寄存器连接在所述主机存取模块和Doorbell检测模块之间,用于存储Doorbell指针;
所述Doorbell检测模块用于检测所述Doorbell寄存器的更新;
所述Gather DMA模块和所述Scatter DMA模块还分别耦合到外部的SDD控制器。
5.NVMe协议处理方法,其特征在于,包括如下步骤:
(1)主机向NVMe协议处理器发送Doorbell指针值;
(2)所述NVMe协议处理器的CPU获知Doorbell值的更新;
(3)所述NVMe协议处理器的CPU配置Gather DMA模块从所述主机的提交队列(SQ)取得NVMe命令,并存入共享存储器;
(4)所述NVMe协议处理器的CPU处理共享存储器中的NVMe命令;
(5)所述NVMe协议处理器的CPU依据处理完成的NVMe命令,配置Scatter DMA模块,指示Scatter DMA模块将数据写入完成队列(CQ),该数据指示被所述NVMe协议处理器处理完成的NVMe命令;
(6)所述主机从完成队列(CQ)中取出数据并处理,并将所述完成队列(CQ)对应的Doorbell指针值发送给所述NVMe协议处理器。
6.NVMe协议处理方法,其特征在于,包括:
检查对应于提交队列(SQ)的第一Doorbell寄存器是否被更新;
若第一Doorbell寄存器被更新,配置Gatter DMA模块来将主机的提交队列(SQ)中的NVMe命令传送到共享存储器;
对共享存储器中的NVMe命令进行处理,将指示NVMe命令处理结果的数据写入共享存储器,并通过配置Scatter DMA模块,将共享存储器中的指示NVMe命令处理结果的数据传送到主机的完成队列(CQ);
检查对应于完成队列(CQ)的第二Doorbell寄存器是否被更新;若第二Doorbell寄存器被更新,完成所述NVMe命令的处理。
7.根据权利要求6所述的方法,其特征在于,所述第一Doorbell寄存器与第二Doorbell寄存器位于所述共享存储器的存储空间。
8.根据权利要求6或7所述的方法,其特征在于,所述检查对应于提交队列(SQ)的第一Doorbell寄存器是否被更新,包括:
轮询所述Doorbell寄存器以确定所述第一Doorbell寄存器被更新。
9.NVMe协议处理方法,其特征在于,包括:
响应于接收到指示对应于提交队列(SQ)的第一Doorbell寄存器被更新的中断请求,配置Gatter DMA模块来将主机的提交队列(SQ)中的NVMe命令传送到共享存储器;
对共享存储器中的NVMe命令进行处理,将指示NVMe命令处理结果的数据写入共享存储器,并通过配置Scatter DMA模块,将共享存储器中的指示NVMe命令处理结果的数据传送到主机的完成队列(CQ);
检查对应于完成队列(CQ)的第二Doorbell寄存器是否被更新;若第二Doorbell寄存器被更新,完成所述NVMe命令的处理。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810929604.2A CN109117092A (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
CN201811013214.7A CN109117095B (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510652158 | 2015-10-10 | ||
CN2015106521581 | 2015-10-10 |
Related Child Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811013214.7A Division CN109117095B (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
CN201810929604.2A Division CN109117092A (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106569736A CN106569736A (zh) | 2017-04-19 |
CN106569736B true CN106569736B (zh) | 2018-10-19 |
Family
ID=58508680
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811013214.7A Active CN109117095B (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
CN201810929604.2A Pending CN109117092A (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
CN201510887865.9A Active CN106569736B (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811013214.7A Active CN109117095B (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
CN201810929604.2A Pending CN109117092A (zh) | 2015-10-10 | 2015-12-07 | NVMe协议处理器及其处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (3) | CN109117095B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107357746B (zh) * | 2017-07-26 | 2020-05-29 | 郑州云海信息技术有限公司 | 一种通信方法及系统 |
CN115934597A (zh) * | 2017-09-27 | 2023-04-07 | 成都忆芯科技有限公司 | PCIe控制器与使用PCIe控制器的密钥更新 |
CN111797046B (zh) * | 2017-09-27 | 2022-04-08 | 成都忆芯科技有限公司 | PCIe控制器及其数据传输方法 |
US11210247B2 (en) | 2017-09-27 | 2021-12-28 | Chengdu Starblaze Technology Co., Ltd. | PCIe controller and loopback data path using PCIe controller |
CN107957970A (zh) * | 2017-10-23 | 2018-04-24 | 记忆科技(深圳)有限公司 | 一种异构多核的通讯方法及固态硬盘控制器 |
US10649674B2 (en) | 2018-05-03 | 2020-05-12 | Western Digital Technologies, Inc. | Extended controller pre-initialization using boot partitions in solid state systems |
CN110515872B (zh) * | 2018-05-21 | 2020-07-31 | 阿里巴巴集团控股有限公司 | 直接内存存取方法、装置、专用计算芯片及异构计算系统 |
TWI703446B (zh) * | 2019-01-29 | 2020-09-01 | 瑞昱半導體股份有限公司 | 介面轉接電路 |
CN110109626B (zh) * | 2019-05-20 | 2022-01-25 | 哈尔滨工业大学 | 一种基于FPGA的NVMe SSD命令处理方法 |
CN113051206A (zh) * | 2020-05-04 | 2021-06-29 | 威盛电子股份有限公司 | 桥接电路与计算机系统 |
CN112162941B (zh) * | 2020-09-29 | 2022-09-27 | 超越科技股份有限公司 | 一种NVMe固态存储系统的实现方法及架构 |
CN112486574A (zh) * | 2020-12-16 | 2021-03-12 | 江苏国科微电子有限公司 | 一种完成队列的回复管理方法、装置、设备及存储介质 |
CN114328345B (zh) * | 2021-12-10 | 2024-05-03 | 北京泽石科技有限公司 | 控制信息的处理方法、装置以及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104246742A (zh) * | 2012-01-17 | 2014-12-24 | 英特尔公司 | 用于远程客户端访问存储设备的命令验证的技术 |
CN104272257A (zh) * | 2012-03-23 | 2015-01-07 | Dssd股份有限公司 | 具有组播直接存储器存取和统一地址空间的存储系统 |
CN104536701A (zh) * | 2014-12-23 | 2015-04-22 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9141571B2 (en) * | 2010-12-28 | 2015-09-22 | Avago Technologies General Ip (Singapore) Pte. Ltd. | PCI express switch with logical device capability |
US9652182B2 (en) * | 2012-01-31 | 2017-05-16 | Pavilion Data Systems, Inc. | Shareable virtual non-volatile storage device for a server |
US9256384B2 (en) * | 2013-02-04 | 2016-02-09 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Method and system for reducing write latency in a data storage system by using a command-push model |
US9009397B1 (en) * | 2013-09-27 | 2015-04-14 | Avalanche Technology, Inc. | Storage processor managing solid state disk array |
US8966164B1 (en) * | 2013-09-27 | 2015-02-24 | Avalanche Technology, Inc. | Storage processor managing NVME logically addressed solid state disk array |
US9430412B2 (en) * | 2013-06-26 | 2016-08-30 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over Ethernet-type networks |
-
2015
- 2015-12-07 CN CN201811013214.7A patent/CN109117095B/zh active Active
- 2015-12-07 CN CN201810929604.2A patent/CN109117092A/zh active Pending
- 2015-12-07 CN CN201510887865.9A patent/CN106569736B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104246742A (zh) * | 2012-01-17 | 2014-12-24 | 英特尔公司 | 用于远程客户端访问存储设备的命令验证的技术 |
CN104272257A (zh) * | 2012-03-23 | 2015-01-07 | Dssd股份有限公司 | 具有组播直接存储器存取和统一地址空间的存储系统 |
CN104536701A (zh) * | 2014-12-23 | 2015-04-22 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109117092A (zh) | 2019-01-01 |
CN106569736A (zh) | 2017-04-19 |
CN109117095A (zh) | 2019-01-01 |
CN109117095B (zh) | 2021-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106569736B (zh) | NVMe协议处理器及其处理方法 | |
US9645956B2 (en) | Delivering interrupts through non-transparent bridges in a PCI-express network | |
US9467511B2 (en) | Techniques for use of vendor defined messages to execute a command to access a storage device | |
US11169938B2 (en) | Non-volatile memory (NVM) express (NVMe) data processing method and system | |
CN107992436B (zh) | 一种NVMe数据读写方法及NVMe设备 | |
US7899944B2 (en) | Open exchange limiting in an I/O processing system | |
US20180113615A1 (en) | Storage device generating adaptive interrupt and operating method thereof | |
US9311110B2 (en) | Techniques to initialize from a remotely accessible storage device | |
CN110109626B (zh) | 一种基于FPGA的NVMe SSD命令处理方法 | |
CN101727414B (zh) | 用于在计算机系统中传递中断的技术 | |
TW201738763A (zh) | 使用nvme介面存取元件的同時核心模式和使用者模式的方法、非暫時性電腦可讀取媒體及主機電腦系統 | |
WO2018040038A1 (zh) | 一种闪存介质的访问方法及控制器 | |
CN112256601A (zh) | 数据存取控制方法、嵌入式存储系统及嵌入式设备 | |
US20160224479A1 (en) | Computer system, and computer system control method | |
US11372782B2 (en) | Computing system for reducing latency between serially connected electronic devices | |
CN112416250A (zh) | 基于NVMe的固态硬盘的命令处理方法及相关设备 | |
KR101428317B1 (ko) | 고성능 ahci 인터페이스 | |
CN115454902A (zh) | 一种基于pcie接口的nvme通信系统及方法 | |
CN109522056B (zh) | VxWorks系统下大容量存储设备的主机控制器驱动实现方法 | |
JP5847013B2 (ja) | 計算機及び計算機における入出力制御方法 | |
CN107153580A (zh) | 获取队列精确状态的装置及其方法 | |
CN111176726A (zh) | 可配置的命令撤销方法及其装置 | |
US20220137998A1 (en) | Storage virtualization device supporting virtual machine, operation method thereof, and operation method of system having the same | |
JP6089492B2 (ja) | システム制御装置、情報処理システム、システム制御装置の制御方法およびシステム制御装置の制御プログラム | |
CN112732176B (zh) | 基于fpga的ssd访问方法及装置、存储系统及存储介质 |
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 | ||
EC01 | Cancellation of recordation of patent licensing contract |
Assignee: BEIJING MEMBLAZE TECHNOLOGY Co.,Ltd. Assignor: Shanghai Pleiades Microelectronics Co.,Ltd. Contract record no.: 2016110000016 Date of cancellation: 20211026 |
|
EC01 | Cancellation of recordation of patent licensing contract |