一种完成队列的回复管理方法、装置、设备及存储介质与流程

    专利2022-07-08  78


    本申请涉及电子
    技术领域
    ,特别涉及一种完成队列的回复管理方法、装置、电子设备及计算机可读存储介质。
    背景技术
    :随着云计算,人工智能和物联网的高速发展,终端产品和服务器对存储的需求越来越大,在此过程中,nvme(non-volatilememoryexpress)固态硬盘(solidstatedisk,ssd)以其低延迟、低功耗、高带宽等诸多优势获得也存储届越来越多的关注,也成为了存储设备发展的新风向。其中,nvme是一种以寄存器接口作为交互界面的主机端控制接口。主机端与nvme控制器的交互过程,是基于提交队列(submissionqueue,sq)和完成队列(completionqueue,cq)而实现的。概括来说,主机端利用提交队列来存放主机端对nvme固态硬盘的操作命令,并利用sq门铃机制通知nvme控制器;nvme控制器读取提交队列的操作命令后,便会在处理完命令后将相应的信息以完成队列的形式回复给主机端。现有技术中,nvme控制器一般多是完全基于硬件电路来进行命令回复的,即,完全由硬件电路负责生成完成队列并发送至主机端。如此,虽然可以充分发挥硬件电路低延时的优点,但是,硬件电路的处理能力非常有限,基于硬件电路只能解决一些固式问题,灵活性较差。鉴于此,提供一种解决上述技术问题的方案,已经是本领域技术人员所亟需关注的。技术实现要素:本申请的目的在于提供一种完成队列的回复管理方法、装置、电子设备及计算机可读存储介质,以便有效兼顾低延时性能与灵活性,提高命令处理的综合性能。为解决上述技术问题,第一方面,本申请公开了一种完成队列的回复管理方法,应用于nvme控制器,包括:获取并执行主机端发送的操作命令;根据所述操作命令对预设的特征变量进行置位;在命令执行结束后,根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;基于所述硬件电路将所述完成队列发送至所述主机端。可选地,所述特征变量包括第一特征变量和第二特征变量;所述第一特征变量的不同取值用于指定当命令正常执行结束后由所述cpu或者所述硬件电路生成所述完成队列;所述第二特征变量的不同取值用于指定当命令异常执行结束后由所述cpu或者所述硬件电路生成所述完成队列。可选地,所述对预设的特征变量进行置位,包括:判断所述操作命令是否为nvme协议升级后定义的新型操作命令;若是,则将所述第一特征变量置于第一标志位,以指定当命令正常执行结束后由所述cpu生成所述完成队列;若否,则将所述第一特征变量置于第二标志位,以指定当命令正常执行结束后由所述硬件电路生成所述完成队列。可选地,所述对预设的特征变量进行置位,包括:判断所述操作命令异常执行时的故障是否属于硬件可恢复的故障类型;若否,则将所述第二特征变量置于第一标志位,以指定当命令异常执行结束后由所述cpu生成所述完成队列;若是,则将所述第二特征变量置于第二标志位,以指定当命令异常执行结束后由所述硬件电路生成所述完成队列。可选地,所述根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列,包括:基于状态机控制法,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;其中,所述状态机的状态切换条件包括命令执行情况和所述特征变量的值。可选地,在基于所述cpu生成用于回复所述操作命令的所述完成队列之后,还包括:基于所述cpu将所述完成队列暂存在所述nvme控制器的完成队列缓存器中;配置所述完成队列的参数寄存器。可选地,所述完成队列的参数寄存器包括所述完成队列的缓存器基地址寄存器、缓存器配置寄存器、缓存器指针寄存器;其中,所述缓存器指针寄存器中的写指针由所述cpu在将所述完成队列写入所述完成队列缓存器后进行更新,所述缓存器指针寄存器中的读指针由所述硬件电路在从所述完成队列缓存器中读取所述完成队列后进行更新。又一方面,本申请公开了一种完成队列的回复管理装置,应用于nvme控制器,包括:执行模块,用于获取并执行主机端发送的操作命令;置位模块,用于根据所述操作命令对预设的特征变量进行置位;生成模块,用于在命令执行结束后,根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;发送模块,用于基于所述硬件电路将所述完成队列发送至所述主机端。又一方面,本申请还公开了一种电子设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序以实现如上所述的任一种完成队列的回复管理方法的步骤。又一方面,本申请还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如上所述的任一种完成队列的回复管理方法的步骤。本申请所提供的完成队列的回复管理方法包括:获取并执行主机端发送的操作命令;根据所述操作命令对预设的特征变量进行置位;在命令执行结束后,根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;基于所述硬件电路将所述完成队列发送至所述主机端。本申请所提供的完成队列的回复管理方法、装置、电子设备及计算机可读存储介质所具有的有益效果是:本申请提供了两种完成队列回复机制,由此可以根据实际情况而灵活选择延时较小或者处理能力较强的回复机制,从而可兼顾对完成队列进行回复的延时性和灵活性,有效提高命令处理的综合性能。附图说明为了更清楚地说明现有技术和本申请实施例中的技术方案,下面将对现有技术和本申请实施例描述中需要使用的附图作简要的介绍。当然,下面有关本申请实施例的附图描述的仅仅是本申请中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本申请的保护范围。图1为本申请实施例公开的一种完成队列的回复管理方法的流程图;图2为本申请实施例公开的一种完成队列的回复机制的状态机控制图;图3为本申请实施例公开的一种完成队列的回复管理装置的结构框图;图4为本申请实施例公开的一种电子设备的结构框图。具体实施方式本申请的核心在于提供一种完成队列的回复管理方法、装置、电子设备及计算机可读存储介质,以便有效兼顾低延时性能与灵活性,提高命令处理的综合性能。为了对本申请实施例中的技术方案进行更加清楚、完整地描述,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行介绍。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。当前,随着云计算,人工智能和物联网的高速发展,终端产品和服务器对存储的需求越来越大,在此过程中,nvme(non-volatilememoryexpress)固态硬盘(solidstatedisk,ssd)以其低延迟、低功耗、高带宽等诸多优势获得也存储届越来越多的关注,也成为了存储设备发展的新风向。其中,nvme是一种以寄存器接口作为交互界面的主机端控制接口。主机端与nvme控制器的交互过程,是基于提交队列(submissionqueue,sq)和完成队列(completionqueue,cq)而实现的。概括来说,主机端利用提交队列来存放主机端对nvme固态硬盘的操作命令,并利用sq门铃机制通知nvme控制器;nvme控制器读取提交队列的操作命令后,便会在处理完命令后将相应的信息以完成队列的形式回复给主机端。现有技术中,nvme控制器一般多是完全基于硬件电路来进行命令回复的,即,完全由硬件电路负责生成完成队列并发送至主机端。如此,虽然可以充分发挥硬件电路低延时的优点,但是,硬件电路的处理能力非常有限,基于硬件电路只能解决一些固式问题,灵活性较差。鉴于此,本申请提供了一种完成队列的回复管理方案,可有效解决上述问题。参见图1所示,本申请实施例公开了一种完成队列的回复管理方法,应用于nvme控制器,主要包括:s101:获取并执行主机端发送的操作命令。s102:根据操作命令对预设的特征变量进行置位。s103:在命令执行结束后,根据命令执行情况和特征变量的值,选择基于nvme控制器的cpu或者硬件电路生成用于回复操作命令的完成队列。s104:基于硬件电路将完成队列发送至主机端。具体地,需要指出的是,本申请所提供的完成队列的回复管理方法,具体提供了两种完成队列回复机制:第一种,由nvme控制器的硬件电路生成完成队列并发送至主机端;第二种,由nvme控制器的cpu生成完成队列,由硬件电路发送至主机端。可见,两种回复机制的区别在于选择由硬件电路还是cpu来生成完成队列。其中,利用硬件电路生成cpu可有效降低延时,提高回复处理效率,但是适用场景有限,灵活性较差;而利用cpu来生成完成队列,则可适用于较多应用场景,处理能力较强,灵活性较高,但是延时相对较大。本申请为了兼顾延时性和灵活性,因而提供了两种完成队列回复机制,以便根据实际情况而灵活选择。其中,对于具体采用哪个完成队列回复机制,本申请是依据操作命令的具体情况需要以及命令执行情况来决定的。其中,操作命令的具体情况需要是从操作命令需求的角度出发,来考虑该操作命令是仅由硬件电路回复即可还是需由cpu才能回复。命令执行情况则是从操作命令实际执行情况的角度出发,来考虑该操作命令是否得以正常执行,某些操作命令在正常和异常执行情况下,对应的回复消息不同,能够生成对应回复消息的器件也未必相同。在命令执行结束后,根据命令执行情况以及特征变量的值,即可选择对应的完成队列回复机制。当完成队列生成后,便可由硬件电路回复至主机端,以便主机端获取操作命令的处理结果。本申请实施例所提供的完成队列的回复管理方法包括:获取并执行主机端发送的操作命令;根据操作命令对预设的特征变量进行置位;在命令执行结束后,根据命令执行情况和特征变量的值,选择基于nvme控制器的cpu或者硬件电路生成用于回复操作命令的完成队列;基于硬件电路将完成队列发送至主机端。可见,本申请所提供的完成队列的回复管理方法,提供了两种完成队列回复机制,由此可以根据实际情况而灵活选择延时较小或者处理能力较强的回复机制,从而可兼顾对完成队列进行回复的延时性和灵活性,有效提高命令处理的综合性能。作为一种具体实施例,本申请实施例所提供的完成队列的回复管理方法在上述内容的基础上,特征变量包括第一特征变量和第二特征变量;第一特征变量的不同取值用于指定当命令正常执行结束后由cpu或者硬件电路生成完成队列;第二特征变量的不同取值用于指定当命令异常执行结束后由cpu或者硬件电路生成完成队列。具体地,两个特征变量的置位具体由nvme控制器的cpu管理,不妨将第一特征变量记为auto_cq_en,将第二特征变量可记为auto_err_cq_en。作为一种具体实施例,本申请实施例所提供的完成队列的回复管理方法在上述内容的基础上,对预设的特征变量进行置位,包括:判断操作命令是否为nvme协议升级后定义的新型操作命令;若是,则将第一特征变量置于第一标志位,以指定当命令正常执行结束后由cpu生成完成队列;若否,则将第一特征变量置于第二标志位,以指定当命令正常执行结束后由硬件电路生成完成队列。作为一种具体实施例,本申请实施例所提供的完成队列的回复管理方法在上述内容的基础上,对预设的特征变量进行置位,包括:判断操作命令异常执行时的故障是否属于硬件可恢复的故障类型;若否,则将第二特征变量置于第一标志位,以指定当命令异常执行结束后由cpu生成完成队列;若是,则将第二特征变量置于第二标志位,以指定当命令异常执行结束后由硬件电路生成完成队列。具体地,作为一个具体实施例,第一标志位即取值为0,第二标志位即取值为1。参见表1,表1示出了nvme命令数据结构中关于完成队列的域的设计,其中列出了两个特征变量的取值及其对应的具体含义。表1作为一种具体实施例,本申请实施例所提供的完成队列的回复管理方法在上述内容的基础上,在基于cpu生成用于回复操作命令的完成队列之后,还包括:基于cpu将完成队列暂存在nvme控制器的完成队列缓存器中;配置完成队列的参数寄存器。具体地,在第二种完成队列回复机制中,cpu生成完成队列后可先将其暂存在完成队列缓存器中,并配置参数寄存器,通知硬件电路来读取和发送完成队列。该完成队列缓存器可具体使用nvme控制器的片上存储资源。进一步地,作为一种具体实施例,完成队列的参数寄存器包括完成队列的缓存器基地址寄存器、缓存器配置寄存器、缓存器指针寄存器。其中,缓存器基地址寄存器主要用于存储该完成队列的缓存器基地址(不妨记为cq_dlvq_base),其数据结构可参见表2。缓存器配置寄存器主要用于存储该完成队列的配置参数,例如大小(不妨记为cq_dlvq_sz)和保留位等参数,其数据结构可参见表3。缓存器指针寄存器主要用于存储该完成队列的缓存器读指针(不妨记为cq_dlvq_rptr)和写指针(不妨记为cq_dlvq_wptr)。表2表3比特域名权限复位值描述31:16cq_dlvq_szrw16’h0完成队列的缓存器的大小15:0保留位ro16’h0保留位表4比特域名权限复位值描述31:16cq_dlvq_rptrro16’h0完成队列的缓存器读指针15:0cq_dlvq_wptrrw16’h0完成队列的缓存器写指针其中,缓存器指针寄存器中的写指针由cpu在将完成队列写入完成队列缓存器后进行更新维护,缓存器指针寄存器中的读指针由硬件电路在从完成队列缓存器中读取完成队列后进行更新维护。cpu下发的完成队列的数据结构如表5所示,一个完成队列由4个dw(doubleword,32bit)组成。完成队列的缓存器写指针加1,表示nvme控制器的cpu已经写了一个新的完成队列(4个dw),完成队列的缓存器读指针加1,表示nvme控制器的硬件电路已经读了一个新的完成队列(4个dw)。表5如前所述,在nvme命令的执行过程中,当主机端将对ssd的操作命令下发到提交队列之后,一般通过sq门铃(doorbell)来通知ssd“命令已经放好,请空闲时来读取”。sq门铃包括sq头门铃(headdoorbell)和sq尾门铃(taildoorbell),由主机端管理sq尾门铃,以表明主机下发了多少提交队列的命令,由nvme控制器管理sq头门铃,以表明nvme控制器已取了多少提交队列的命令。nvme控制器收到这个消息之后,当检查到自己可以取sq命令后,便从主机端内存中将sq命令取出来,并进行处理,处理结束之后,再向主机端回复完成队列即cq。cq也有一套门铃(doorbell)管理机制,由nvme控制器管理cq尾门铃,由主机端管理cq头门铃。nvme控制器更新了cq尾门铃后,向主机端发送中断消息,以告诉主机端“命令已执行完毕,请查看具体执行结果及状态”。主机端收到中断消息即查看cq的内容,并更新cq头门铃以告诉nvme控制器该完成队列已被主机端查阅。表5中的数据结构由nvme协议规定。其中,dw0表示完成队列的数据,不同的命令的完成队列值不一样;dw1是保留位,填32比特0;dw2的低16比特是该提交队列所属的sq的sq头门铃的值,此域cpu直接写16比特0,由硬件电路完成对sq头门铃的实时替换,以最大程度提高回复给主机的sq头门铃时效性,dw2的高16比特是sqid,表示该提交队列所属的sq的值,由cpu填写;dw3的低16比特是该sq的命令id,由cpu填写,dw3的比特16为p比特,表示该完成队列是新的完成队列,此比特由硬件电路自动更新,cpu填0即可,dw3的高15比特是该命令的具体执行结果及状态,由cpu根据命令的实际结果和协议定义填写。作为一种具体实施例,本申请实施例所提供的完成队列的回复管理方法在上述内容的基础上,根据命令执行情况和特征变量的值,选择基于nvme控制器的cpu或者硬件电路生成用于回复操作命令的完成队列,包括:基于状态机控制法,选择基于nvme控制器的cpu或者硬件电路生成用于回复操作命令的完成队列;其中,状态机的状态切换条件包括命令执行情况和特征变量的值。在一个实施例中,状态机的控制图即完成队列的回复机制设计可具体参见图2。如图2所示的状态机,共有8个状态。idle状态,为等待生成完成队列的初始状态。若auto_cq_en=0且命令正常执行结束,或者auto_err_cq_en=0且命令异常执行结束,则条件①满足,意味着nvme控制器的cpu已经生成完成队列并暂存至完成队列缓存器中,则此时状态机将跳转至src_req状态。若auto_cq_en=1且命令正常执行结束,或者auto_err_cq_en=1且命令异常执行结束,则触发信号cq_req有效,硬件电路自动生成完成队列,则此时状态机将直接跳转至cq_sq状态。src_req状态,表示硬件电路向nvme控制器的完成队列缓存器发出读请求,每次读取一个完成队列;当完成队列缓存器向此nvme控制器回复dev_r_ack信号有效时,即读完成队列缓存器得到回应,状态机跳转至src_data状态。src_data状态,表示等待完成队列缓存器回复读数据,当完成队列缓存器回复dev_r_data_valid信号有效时,表示读数据已回复,跳转至cq_sq状态。cq_sq状态,硬件电路将自动查找表5中的sqid和sq头门铃的值,并暂存,然后跳转至prp_chk状态。其中,prp指physicalregionpage,即物理区页。prp_chk状态,硬件电路检查主机端的下一个cqprp地址是否有效,如果地址有效,则直接跳转至cq状态。若无效,则向pcie(peripheralcomponentinterconnectexpress,高速外围组件互连)发起读主机端cqprp的请求,当pcie回复host_r_ack时,表示已接收该读请求,由pcie发起读主机端cqprp的请求,跳转至prpl_wait状态。prpl_wait状态,当host_r_data_valid信号有效时,表示pcie已从主机端读回新的cqprp的值,跳转至cq状态。cq状态,向pcie发起传输完成队列的请求,当pcie回复host_w_ack信号有效时,跳转至cq_wait状态。当数据传输完毕、host_done信号有效时,状态机回到idle状态,表示该完成队列已从nvme发送到pcie完毕。由此,基于上述状态机,当auto_cq_en为1且命令正常执行时,或者,当auto_err_cq_en为1且命令执行过程发生错误时,可由硬件电路产生完成队列并发送到主机端;而当auto_cq_en为0且命令正常执行时,或者,当auto_err_cq_en为0且命令执行过程发生错误时,可由cpu下发完成队列,并由硬件电路发送到主机端,如此同时保证了应用的灵活性和高效性。参见图3所示,本申请实施例公开了一种完成队列的回复管理装置,应用于nvme控制器,主要包括:执行模块201,用于获取并执行主机端发送的操作命令;置位模块202,用于根据操作命令对预设的特征变量进行置位;生成模块203,用于在命令执行结束后,根据命令执行情况和特征变量的值,选择基于nvme控制器的cpu或者硬件电路生成用于回复操作命令的完成队列;发送模块204,用于基于硬件电路将完成队列发送至主机端。可见,本申请实施例所公开的完成队列的回复管理装置,提供了两种完成队列回复机制,由此可以根据实际情况而灵活选择延时较小或者处理能力较强的回复机制,从而可兼顾对完成队列进行回复的延时性和灵活性,有效提高命令处理的综合性能。关于上述完成队列的回复管理装置的具体内容,可参考前述关于完成队列的回复管理方法的详细介绍,这里就不再赘述。作为一种具体实施例,本申请实施例所公开的完成队列的回复管理装置在上述内容的基础上,特征变量包括第一特征变量和第二特征变量;第一特征变量的不同取值用于指定当命令正常执行结束后由cpu或者硬件电路生成完成队列;第二特征变量的不同取值用于指定当命令异常执行结束后由cpu或者硬件电路生成完成队列。作为一种具体实施例,本申请实施例所公开的完成队列的回复管理装置在上述内容的基础上,置位模块202在对预设的特征变量进行置位时具体用于:判断操作命令是否为nvme协议升级后定义的新型操作命令;若是,则将第一特征变量置于第一标志位,以指定当命令正常执行结束后由cpu生成完成队列;若否,则将第一特征变量置于第二标志位,以指定当命令正常执行结束后由硬件电路生成完成队列。作为一种具体实施例,本申请实施例所公开的完成队列的回复管理装置在上述内容的基础上,置位模块202在对预设的特征变量进行置位时具体用于:判断操作命令异常执行时的故障是否属于硬件可恢复的故障类型;若否,则将第二特征变量置于第一标志位,以指定当命令异常执行结束后由cpu生成完成队列;若是,则将第二特征变量置于第二标志位,以指定当命令异常执行结束后由硬件电路生成完成队列。作为一种具体实施例,本申请实施例所公开的完成队列的回复管理装置在上述内容的基础上,生成模块203具体用于:基于状态机控制法,选择基于nvme控制器的cpu或者硬件电路生成用于回复操作命令的完成队列;其中,状态机的状态切换条件包括命令执行情况和特征变量的值。作为一种具体实施例,本申请实施例所公开的完成队列的回复管理装置在上述内容的基础上,在基于cpu生成用于回复操作命令的完成队列之后,还包括:基于cpu将完成队列暂存在nvme控制器的完成队列缓存器中;配置完成队列的参数寄存器。作为一种具体实施例,本申请实施例所公开的完成队列的回复管理装置在上述内容的基础上,完成队列的参数寄存器包括完成队列的缓存器基地址寄存器、缓存器配置寄存器、缓存器指针寄存器;其中,缓存器指针寄存器中的写指针由cpu在将完成队列写入完成队列缓存器后进行更新,缓存器指针寄存器中的读指针由硬件电路在从完成队列缓存器中读取完成队列后进行更新。参见图4所示,本申请实施例公开了一种电子设备,包括:存储器301,用于存储计算机程序;处理器302,用于执行所述计算机程序以实现如上所述的任一种完成队列的回复管理方法的步骤。进一步地,本申请实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如上所述的任一种完成队列的回复管理方法的步骤。关于上述电子设备和计算机可读存储介质的具体内容,可参考前述关于完成队列的回复管理方法的详细介绍,这里就不再赘述。本申请中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的设备而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。还需说明的是,在本申请文件中,诸如“第一”和“第二”之类的关系术语,仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或者操作之间存在任何这种实际的关系或者顺序。此外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。以上对本申请所提供的技术方案进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本
    技术领域
    的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请的保护范围内。当前第1页1 2 3 
    技术特征:

    1.一种完成队列的回复管理方法,其特征在于,应用于nvme控制器,包括:

    获取并执行主机端发送的操作命令;

    根据所述操作命令对预设的特征变量进行置位;

    在命令执行结束后,根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;

    基于所述硬件电路将所述完成队列发送至所述主机端。

    2.根据权利要求1所述的完成队列的回复管理方法,其特征在于,所述特征变量包括第一特征变量和第二特征变量;

    所述第一特征变量的不同取值用于指定当命令正常执行结束后由所述cpu或者所述硬件电路生成所述完成队列;

    所述第二特征变量的不同取值用于指定当命令异常执行结束后由所述cpu或者所述硬件电路生成所述完成队列。

    3.根据权利要求2所述的完成队列的回复管理方法,其特征在于,所述对预设的特征变量进行置位,包括:

    判断所述操作命令是否为nvme协议升级后定义的新型操作命令;

    若是,则将所述第一特征变量置于第一标志位,以指定当命令正常执行结束后由所述cpu生成所述完成队列;

    若否,则将所述第一特征变量置于第二标志位,以指定当命令正常执行结束后由所述硬件电路生成所述完成队列。

    4.根据权利要求3所述的完成队列的回复管理方法,其特征在于,所述对预设的特征变量进行置位,包括:

    判断所述操作命令异常执行时的故障是否属于硬件可恢复的故障类型;

    若否,则将所述第二特征变量置于第一标志位,以指定当命令异常执行结束后由所述cpu生成所述完成队列;

    若是,则将所述第二特征变量置于第二标志位,以指定当命令异常执行结束后由所述硬件电路生成所述完成队列。

    5.根据权利要求1至4任一项所述的完成队列的回复管理方法,其特征在于,所述根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列,包括:

    基于状态机控制法,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;其中,所述状态机的状态切换条件包括命令执行情况和所述特征变量的值。

    6.根据权利要求5所述的完成队列的回复管理方法,其特征在于,在基于所述cpu生成用于回复所述操作命令的所述完成队列之后,还包括:

    基于所述cpu将所述完成队列暂存在所述nvme控制器的完成队列缓存器中;

    配置所述完成队列的参数寄存器。

    7.根据权利要求6所述的完成队列的回复管理方法,其特征在于,所述完成队列的参数寄存器包括所述完成队列的缓存器基地址寄存器、缓存器配置寄存器、缓存器指针寄存器;

    其中,所述缓存器指针寄存器中的写指针由所述cpu在将所述完成队列写入所述完成队列缓存器后进行更新,所述缓存器指针寄存器中的读指针由所述硬件电路在从所述完成队列缓存器中读取所述完成队列后进行更新。

    8.一种完成队列的回复管理装置,其特征在于,应用于nvme控制器,包括:

    执行模块,用于获取并执行主机端发送的操作命令;

    置位模块,用于根据所述操作命令对预设的特征变量进行置位;

    生成模块,用于在命令执行结束后,根据命令执行情况和所述特征变量的值,选择基于所述nvme控制器的cpu或者硬件电路生成用于回复所述操作命令的完成队列;

    发送模块,用于基于所述硬件电路将所述完成队列发送至所述主机端。

    9.一种电子设备,其特征在于,包括:

    存储器,用于存储计算机程序;

    处理器,用于执行所述计算机程序以实现如权利要求1至7任一项所述的完成队列的回复管理方法的步骤。

    10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如权利要求1至7任一项所述的完成队列的回复管理方法的步骤。

    技术总结
    本申请公开了一种完成队列的回复管理方法、装置、电子设备及计算机可读存储介质,该方法应用于NVMe控制器,包括:获取并执行主机端发送的操作命令;根据所述操作命令对预设的特征变量进行置位;在命令执行结束后,根据命令执行情况和所述特征变量的值,选择基于所述NVMe控制器的CPU或者硬件电路生成用于回复所述操作命令的完成队列;基于所述硬件电路将所述完成队列发送至所述主机端。本申请提供了两种完成队列回复机制,由此可以根据实际情况而灵活选择延时较小或者处理能力较强的回复机制,从而可兼顾对完成队列进行回复的延时性和灵活性,有效提高命令处理的综合性能。

    技术研发人员:刘海亮;施楠;黄泰然;刘洋
    受保护的技术使用者:江苏国科微电子有限公司
    技术研发日:2020.12.16
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-24357.html

    最新回复(0)