一种NVMe协议管理命令处理的硬件卸载方法转让专利

申请号 : CN201911271813.3

文献号 : CN111124959B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯志华裴可安东博万星李艳婷原晋杰梁书铭余仲

申请人 : 北京计算机技术及应用研究所

摘要 :

本发明涉及一种NVMe协议管理命令处理的硬件卸载方法,其中,包括:将硬件逻辑分为命令接收模块、命令分析模块以及命令处理模块;命令接收模块接收来自PCIe IP核的NVMe管理命令,接收到的命令存储在本地缓存命令FIFO中;命令分析模块检测该FIFO的空标志,如果该FIFO不为空,则读取该FIFO中的命令,读取完成之后,提取管理命令中的操作码,并参照NVMe协议,识别出不同的NVMe管理命令,交由命令处理模块进行处理;命令处理模块接收来自命令分析模块中分析的指令,针对不同指令处理不同的NVMe管理命令。本发明可以提高NVMe管理命令的响应处理时间,能够提高大容量固态盘的能效比。

权利要求 :

1.一种NVMe协议管理命令处理的硬件卸载方法,其特征在于,包括:将硬件逻辑分为命令接收模块、命令分析模块以及命令处理模块;

命令接收模块接收来自PCIe IP核的NVMe管理命令,接收到的命令存储在本地缓存命令FIFO中;命令分析模块检测该FIFO的空标志,如果该FIFO不为空,则读取该FIFO中的命令,读取完成之后,提取管理命令中的操作码,并参照NVMe协议,识别出不同的NVMe管理命令,交由命令处理模块进行处理;命令处理模块接收来自命令分析模块中分析的指令,针对不同指令处理不同的NVMe管理命令;

命令处理模块接收命令分析模块的指令,如果是识别命令,从ROM中读取数据结构,通过PCIe模块发送;如果是其他指令,直接写相应的寄存器,处理完成通知主机。

2.如权利要求1所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,命令分析模块采用状态机的方式实现,由6个状态描述,分别是空闲状态、读取缓存命令FIFO状态、提取操作码状态、判断命令状态、发送识别命令状态和发送其他指令状态。

3.如权利要求2所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,在空闲状态下,检测命令接收模块中缓存命令FIFO的空标志,如果该FIFO为空,则表示没有收到NVMe管理命令,状态保持在空闲状态;当缓存命令FIFO不为空,则表示有NVMe管理命令待处理,状态跳转到读取缓存命令FIFO状态;

在读取缓存命令FIFO状态下,读取NVMe管理命令,缓存命令FIFO位宽为128位,该读取缓存命令FIFO状态持续至读取一次提交命令的时间,然后状态跳转到提取操作码状态;

在提取操作码状态,提取NVMe管理提交命令中的操作码,提取完成之后,状态跳转到判断命令状态;

在判断命令状态下,判断NVMe管理命令是否为识别命令,如果为识别命令,则状态跳转到发送识别命令状态;如果不是识别命令,则状态跳转到发送其他指令状态;

在发送识别命令状态下,向命令处理模块发送操作码和PCIe地址,发送完成之后,状态跳转到空闲状态;

在发送其他指令状态下,向命令处理模块发送其他指令,该其他指令中包含操作码信息,发送完成之后,状态跳转到空闲状态。

4.如权利要求1所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,命令处理模块采用状态机的方式实现,由10个状态描述,分别是空闲状态、提取有效数据状态、判断命令类型状态、ROM读状态、PCIe请求状态、等待PCIe应答状态、PCIe写数据状态、判断命令是否完成状态、命令完成状态和写寄存器状态。

5.如权利要求4所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,在空闲状态下,判断是否有效命令标志为高,如果为高,则状态跳转到提取有效数据状态,否则状态不变;

在提取有效数据状态下,提取操作码、PCIe地址以及标识号,状态跳转到判断命令类型状态;

在判断命令类型状态下,判断命令是否为识别命令,如果是,则状态跳转到ROM读状态,否则状态跳转到写寄存器状态;

在写寄存器状态下,将提取出来的有效信息写入相应寄存器中,状态跳转到命令完成状态;

在ROM读状态下,向缓存识别命令数据的ROM发起读请求,状态跳转到PCIe请求状态;

在PCIe写请求状态下,向PCIe模块发起请求使用发送通道资源的信号,状态跳转到等待PCIe应答状态;

在等待PCIe应答信号状态下,判断PCIe模块是否返回应答信号,如果有,则状态跳转到PCIe写数据状态;

在PCIe写数据状态下,将缓存识别命令数据的ROM块中的数据填入字段中写出去,状态跳转到判断命令是否完成状态;

在命令是否完成状态下,判断剩余数据长度是否为0,如果是,则状态跳转到命令完成状态;否则状态跳转到ROM读状态;

在命令完成状态下,向主机发送完成报文,状态跳转到空闲状态。

6.如权利要求1所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,管理命令包括:

(1)删除I/O提交队列;

(2)创建I/O提交队列;

(3)删除I/O完成队列;

(4)创建I/O完成队列;以及

(5)识别。

7.如权利要求1或3所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,在发送其他指令状态下,向命令处理模块发送其他指令,该其他指令中包含操作码,发送完成之后,状态跳转到空闲状态。

8.如权利要求1所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,命令分析模块分析主机下发的命令类型,识别命令和其他管理命令处理有所不同,在处理模块中区别对待。

9.如权利要求1所述的NVMe协议管理命令处理的硬件卸载方法,其特征在于,其中命令分析模块直接从命令接收模块的缓存命令FIFO中读取NVMe管理命令,取出其中的操作码进行分析,针对不同的NVMe管理命令,发送不同的标识指令到命令处理模块。

说明书 :

一种NVMe协议管理命令处理的硬件卸载方法

技术领域

[0001] 本发明涉及高能效固态存储领域,特别涉及NVMe协议管理命令处理的硬件卸载方法。

背景技术

[0002] 现有固态盘控制器通常采用CPU与专用电路协同处理主机下发的NVMe管理命令,其处理流程在命令分析阶段有所不同,专用电路收到NVMe管理命令之后,CPU检测标志位,
通过片上总线从专用电路中读取NVMe管理命令,读取完之后,在CPU上对这些命令进行分
析,针对不同命令,给专用电路下发不同的处理命令,处理这些管理命令。
[0003] 固态盘控制器CPU与专用电路交互一次需要消耗多个时钟周期,每个提交命令有64字节,总线位宽32位,需要消耗16次交互,总的交互时间已经达到us级,再加上CPU对NVMe
管理命令的分析处理,时间消耗较大;而且固态盘控制器的CPU任务较多,需要不断巡检专
用硬件电路中命令有无的标志位,消耗CPU的处理资源,不利于固态盘提高性能。

发明内容

[0004] 本发明涉及一种NVMe协议管理命令处理的硬件卸载方法,用于解决NVMe管理命令处理占用CPU资源,同时提高NVMe管理命令的响应速度的问题。
[0005] 本发明一种NVMe协议管理命令处理的硬件卸载方法,其中,包括:将硬件逻辑分为命令接收模块、命令分析模块以及命令处理模块;命令接收模块接收来自PCIe IP核的NVMe
管理命令,接收到的命令存储在本地缓存命令FIFO中;命令分析模块检测该FIFO的空标志,
如果该FIFO不为空,则读取该FIFO中的命令,读取完成之后,提取管理命令中的操作码,并
参照NVMe协议,识别出不同的NVMe管理命令,交由命令处理模块进行处理;命令处理模块接
收来自命令分析模块中分析的指令,针对不同指令处理不同的NVMe管理命令。
[0006] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,命令分析模块采用状态机的方式实现,由6个状态描述,分别是空闲状态、读取缓存命令FIFO状态、
提取操作码状态、判断命令状态、发送识别命令状态和发送其他指令状态。
[0007] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,在空闲状态下,检测命令接收模块中缓存命令FIFO的空标志,如果该FIFO为空,则表示没有收到
NVMe管理命令,状态保持在空闲状态;当缓存命令FIFO不为空,则表示有NVMe管理命令待处
理,状态跳转到读取FIFO状态;在读取缓存命令FIFO状态下,读取NVMe管理命令,缓存命令
FIFO位宽为128位,该状态持续至读取一次提交命令的时间,然后状态跳转到提取操作码状
态;在提取操作码状态,提取NVMe管理提交命令中的操作码,提取完成之后,状态跳转到判
断命令状态;在判断命令状态下,判断NVMe管理命令是否为识别命令,如果为识别命令,则
状态跳转到发送识别命令状态;如果不是识别命令,则状态跳转到发送其他指令状态;在发
送识别命令状态下,向命令处理模块发送操作码和PCIe地址,发送完成之后,状态跳转到空
闲状态;在发送其他指令状态下,向命令处理模块发送其他指令,该其他指令中包含操作码
等信息,发送完成之后,状态跳转到空闲状态。
[0008] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,命令处理模块采用状态机的方式实现,由10个状态描述,分别是空闲状态、提取有效数据状态、判
断命令类型状态、ROM读状态、PCIe请求状态、等待PCIe应答状态、PCIe写数据状态、判断命
令是否完成状态、命令完成状态和写寄存器状态。
[0009] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,在空闲状态下,判断是否有效命令标志为高,如果为高,则状态跳转到提取有效数据状态,否则状
态不变;在提取有效数据状态下,提取操作码、PCIe地址以及标识号,状态跳转到判断命令
类型状态;在判断命令类型状态下,判断命令是否为识别命令,如果是,则状态跳转到ROM读
状态,否则状态跳转到写寄存器状态;在写寄存器状态下,将提取出来的有效信息写入相应
寄存器中,状态跳转到命令完成状态;在ROM读状态下,向缓存识别命令数据的ROM发起读请
求,状态跳转到PCIe写请求状态;在PCIe写请求状态下,向PCIe模块发起请求使用发送通道
资源的信号,状态跳转到等待PCIe应答信号状态;在等待PCIe应答信号状态下,判断PCIe模
块是否返回应答信号,如果有,则状态跳转到PCIe写数据状态;在PCIe写数据状态下,将缓
存识别命令数据的ROM块中的数据填入字段中写出去,状态跳转到命令是否完成状态;在命
令是否完成状态下,判断剩余数据长度是否为0,如果是,则状态跳转到命令完成状态;否则
状态跳转到ROM读状态;在命令完成状态下,向主机发送完成报文,状态跳转到空闲状态。
[0010] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,管理命令包括:(1)删除I/O提交队列;(2)创建I/O提交队列;(3)删除I/O完成队列;(4)创建I/O完
成队列;以及(5)识别。
[0011] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,在发送其他指令状态下,向命令处理模块发送其他指令,该指令中包含操作码,发送完成之后,状
态跳转到空闲状态。
[0012] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,命令分析模块分析主机下发的命令类型,识别命令和其他管理命令处理有所不同,在处理模块中
区别对待。
[0013] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,命令处理模块接收命令分析模块的指令,如果是识别命令,从ROM中读取数据结构,通过PCIe模块
发送;如果是其他模块,直接写相应的寄存器,处理完成通知主机。
[0014] 根据本发明的NVMe协议管理命令处理的硬件卸载方法的一实施例,其中,其中命令分析模块直接从命令接收模块的缓存命令FIFO中读取NVMe管理命令,取出其中的操作码
进行分析,针对不同的NVMe管理命令,发送不同的标识指令到命令处理模块。
[0015] 本发明一种NVMe协议管理命令处理的硬件卸载方法,该方法通过硬件电路实现NVMe协议管理命令,无需CPU参与,以提高运行效率。该硬件电路包括命令接收模块、命令分
析模块和命令处理模块。另外,为提高命令执行效率,在硬件中增加存放识别命令数据的
ROM。该硬件电路工作流程为管理命令经PCIe模块,由命令接收模块接收,命令分析模块和
命令处理模块直接在硬件中对其进行处理,缩短命令处理时间。该方法可以用于高能效固
态盘控制器的设计中。

附图说明

[0016] 图1为NVMe管理命令卸载示意图;
[0017] 图2为NVMe控制器管理命令分析模块处理流程图;
[0018] 图3为NVMe控制器管理命令处理模块流程图。

具体实施方式

[0019] 为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0020] 图1为NVMe管理命令卸载示意图,图2为NVMe控制器管理命令分析模块处理流程图,图3为NVMe控制器管理命令处理模块流程图,如图1至图3所示,本发明一种NVMe协议管
理命令处理的硬件卸载方法,步骤如下:
[0021] (1)主机的标准NVMe驱动通过PCIe接口发送命令到固态盘存储器中,发送的命令如创建I/O提交命令等管理命令;
[0022] (2)固态盘控制器通过PCIe IP核接收主机下发的管理命令;
[0023] (3)固态盘控制器命令分析模块分析主机下发的命令类型,识别命令和其他管理命令处理有所不同,在处理模块中区别对待;
[0024] (4)控制器中命令处理模块接收命令分析模块的指令,如果是识别命令,从ROM中读取数据结构,通过PCIe模块发送;如果是其他模块,直接写相应的寄存器,处理完成通知
主机。
[0025] 其中命令分析模块直接从命令接收模块的缓存命令FIFO中读取NVMe管理命令,取出其中的操作码进行分析,针对不同的NVMe管理命令,发送不同的标识指令到命令处理模

[0026] 如图1所示,固态盘控制器利用硬件卸载的思想,单独采用硬件专用电路处理NVMe管理命令,无需CPU参与,从而提高NVMe管理命令的处理速度。硬件模块调用PCIe IP核,命
令接收模块接收来自PCIe IP核的NVMe管理命令,接收到的命令存储在本地缓存命令FIFO
中;命令分析模块检测该FIFO的空标志,如果该FIFO不为空,则读取该FIFO中的命令,读取
完成之后,提取管理命令中的操作码,参照NVMe协议,识别出不同的NVMe管理命令,交由命
令处理模块进行处理;命令处理模块接收来自命令分析模块中分析的指令,针对不同指令
处理不同的NVMe管理命令。
[0027] 如图2所示,命令分析模块采用状态机的方式实现功能。该模块状态机由6个状态描述,分别是空闲状态、读取缓存命令FIFO状态、提取操作码状态、判断命令状态、发送识别
命令状态和发送其他指令状态。
[0028] 在空闲状态下,检测命令接收模块中缓存命令FIFO的空标志,如果该FIFO为空,则表示没有收到NVMe管理命令,状态保持在空闲状态;当缓存命令FIFO不为空,则表示有NVMe
管理命令待处理,状态跳转到读取FIFO状态;
[0029] 在读取缓存命令FIFO状态下,读取NVMe管理命令。缓存命令FIFO位宽为128位,读取一次提交命令需要4个时钟,所以该状态持续4个时钟,然后状态跳转到提取操作码状态;
[0030] 在提取操作码状态,提取NVMe管理提交命令中的操作码,提取完成之后,状态跳转到判断命令状态;
[0031] 在判断命令状态下,判断NVMe管理命令是否为识别命令。识别命令涉及到从ROM中读取识别命令字段,需要命令处理模块与ROM交互,所以分开处理;如果为识别命令,则状态
跳转到发送识别命令状态;如果不是识别命令,则状态跳转到发送其他指令状态;
[0032] 在发送识别命令状态下,向命令处理模块发送操作码和PCIe地址,发送完成之后,状态跳转到空闲状态;
[0033] 在发送其他指令状态下,向命令处理模块发送其他指令,该指令中包含操作码等信息,发送完成之后,状态跳转到空闲状态。
[0034] 如图3所示,命令处理模块采用状态机的方式实现功能。该模块由10个状态描述,分别是空闲状态、提取有效数据状态、判断命令类型状态、ROM读状态、PCIe请求状态、等待
PCIe应答状态、PCIe写数据状态、判断命令是否完成状态、命令完成状态和写寄存器状态。
[0035] 在空闲状态下,判断是否有效命令标志为高,如果为高,则状态跳转到提取有效数据状态;否则状态不变;
[0036] 在提取有效数据状态下,提取操作码、PCIe地址、标识号等信息,状态跳转到判断命令类型状态;
[0037] 在判断命令类型状态下,判断命令是否为识别命令,如果是,则状态跳转到ROM读状态;否则状态跳转到写寄存器状态;
[0038] 在写寄存器状态下,将提取出来的有效信息写入相应寄存器中,状态跳转到命令完成状态;
[0039] 在ROM读状态下,向缓存识别命令数据的ROM发起读请求,状态跳转到PCIe写请求状态;
[0040] 在PCIe写请求状态下,向PCIe模块发起请求使用发送通道资源的信号,状态跳转到等待PCIe应答信号状态;
[0041] 在等待PCIe应答信号状态下,判断PCIe模块是否返回应答信号,如果有,则状态跳转到PCIe写数据状态,否则在该状态等待;
[0042] 在PCIe写数据状态下,将缓存识别命令数据的ROM块中的数据填入字段中写出去,状态跳转到命令是否完成状态;
[0043] 在命令是否完成状态下,判断剩余数据长度是否为0,如果是,则状态跳转到命令完成状态;否则状态跳转到ROM读状态;
[0044] 在命令完成状态下,向主机发送完成报文,状态跳转到空闲状态。
[0045] 本发明采用一种NVMe协议管理命令处理的硬件卸载方法,可以极大提高NVMe管理命令的响应处理时间,同时释放一部分CPU资源,能够提高大容量固态盘的能效比。
[0046] 本发明在固态盘控制器内部引入硬件卸载的思想,将命令分析模块和命令处理模块下放到硬件中实现,更加靠近命令源,缩短了命令的处理路径。把原本由CPU与专用电路
协同处理的NVMe管理命令完全卸载到硬件电路中实现。相比传统的协同处理方式,该方法
无需CPU参与,减轻了CPU的资源消耗,减少CPU与专用电路之间的总线交互,提高了大容量
固态盘的稳定性;专用电路直接从内部模块读取NVMe管理命令,提高了NVMe管理命令的响
应速度和分析速度,提升了固态盘的能效比。
[0047] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形
也应视为本发明的保护范围。