首页> 中国专利> 获取队列精确状态的装置及其方法

获取队列精确状态的装置及其方法

摘要

提供了获取队列精确状态的装置及其方法。命令队列处理方法包括:清除标志寄存器;更新存储器中的队首指针;读取标志寄存器,确定所述标志寄存器被置位后,才访问所述状态寄存器,并依据所述状态寄存器对所述命令队列进行处理。

著录项

  • 公开/公告号CN107153580A

    专利类型发明专利

  • 公开/公告日2017-09-12

    原文格式PDF

  • 申请/专利权人 北京忆恒创源科技有限公司;

    申请/专利号CN201610122532.1

  • 发明设计人 伍德斌;汤峰;

    申请日2016-03-04

  • 分类号

  • 代理机构

  • 代理人

  • 地址 100192 北京市海淀区西小口路66号中关村东升科技园B-2号楼A302室

  • 入库时间 2023-06-19 03:19:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-18

    授权

    授权

  • 2019-02-12

    实质审查的生效 IPC(主分类):G06F9/54 申请日:20160304

    实质审查的生效

  • 2017-09-12

    公开

    公开

说明书

技术领域

本发明涉及用于处理NVMe命令的NVMe控制器,特别地,涉及在NVMe控制器中准确识别NVMe队列状态。

背景技术

设备之间通过队列交换命令或消息是常用的。命令发送方将命令插入提交队列尾部,命令接收方从队列尾部取出命令并处理,将处理结果插入到完成队列尾部,命令发送方从完成队列头部取出命令处理结果。通过队列交换命令,能够在发送方与接收方直接维护多个并发的命令,并且命令之间的处理速度不必一致。NVMe协议(参见“NVM ExpressRevision 1.2”,2014年11月3日,通过引用将其全文合并于本说明书)定义了主机(Host)与设备(Device)之间交换数据的命令与数据结构(如图1所示)。主机中维护多个队列,每个队列中可填充多个命令。主机与设备基于队列交换数据。主机将命令C填入提交队列,设备从提交队列中取得命令C,并按命令C的内容进行处理,将处理结果填入完成队列。主机从完成队列获取命令C的处理结果以知晓命令C的处理完成。

依据NVMe协议,在设备端维护多个队列的队首与队尾指针。主机与设备都会更新队首与队尾指针。主机向设备发送命令时,主机将命令插入提交队列的队尾,并更新队尾指针。设备端比较提交队列的队首指针与队尾指针,在二者不同时,确定队列中有待处理的命令。设备端从队列中取出命令后,更新队首指针。主机端基于队首指针与队尾指针,可确定队列中是否有空间容纳新的命令。

在软件组件之间、集成电路组件之间以及软件与硬件之间也使用队列交换消息或命令。

发明人提出了在设备端维护队列指针的方式(申请号为201510997494.X、发明名称为NVMe门铃处理方法及其装置的中国专利申请)。(参看图2),将队列指针存储在设备端的NVMe控制器的存储器中,从而设备端的NVMe控制器可维护不同数量的NVMe队列指针。当在主机与设备之间有N个队列时,在存储器中存储2N个指针。为每个队列在存储器中存储队首指针与队尾指针。在NVMe控制器中还提供状态寄存器,用以指示各个队列的状态(队首指针与队尾指针是否相同,队首指针与队尾指针不同,意味着队列中有待处理的NVMe命令),状态寄存器中为每个队列提供一个寄存器位。

在图2中,主机能够访问设备端的存储器中存储的队列指针;NVMe控制器的CPU能够访问存储器中存储的队列指针;监控器组件1,在监视到主机更新存储器中的队尾指针时,设置状态寄存器中与该队尾指针所属的队列所对应的位;监控器组件2,在监视到NVMe控制器的CPU更新存储器中的队首指针时,读取与该队首指针相对应的队尾指针,在队首指针与队尾指针不同时,设置状态寄存器中与该队尾指针所属的队列所对应的位;在队首指针与队尾指针相同时,清除状态寄存器中与该队尾指针所属的队列所对应的位。

发明内容

然而,(1)存储器的访问速度较慢,而NVMe控制器中的CPU指令执行速度较快。从而当CPU执行指令更新存储器中的队列指针后,会继续依据状态寄存器的指示,确定是否对队列进行处理。而在NVMe CPU更新存储器中的队列指针与状态寄存器反映出真实的队列状态之间存在时间窗口。在该时间窗口内,状态寄存器可能指示队列中有命令需要处理,但相应的命令已被NVMe CPU处理完成。从而状态寄存器指示的状态信息是错误的。在多CPU的情况下,这种问题将更加严重。

参看下表,在t0时刻,NVMe控制器CPU发出指令更新队列指针(队首指针)。存储器的访问速度较慢,在t2时候才完成对存储器中的队首指针的更新。监控器在t3时刻从存储器中查询到队尾指针。在t4时刻,状态寄存器才能反映出队列真实的状态。这导致在t1-t3的时间窗口内,NVMe CPU无法通过状态寄存器获得队列的真实状态。

时间轴t0t1t2t3t4NVMe CPU发出指令更新队首指针存储器队首指针被更新监控器查询查询队尾指针状态寄存器错误队列状态错误队列状态错误队列状态反映真实队列状态

(2)主机与NVMe控制器的CPU都会更新存储器中的队首指针和/或队尾指针;在NVMe控制器CPU更新存储器中的队列指针后,依然需要查询存储器才能确定队列状态,这也导致在一定时间窗口内状态寄存器指示的状态信息是错误的。

参看下表,在t0时刻,NVMe控制器CPU发出指令更新队列指针(队首指针)。在t1时刻,主机更新队尾指针,由于存储器访问端口被占用,直到t5时刻,状态寄存器才能反映出队列真实的状态。这导致在t1-t4的时间窗口内,NVMe CPU无法通过状态寄存器获得队列的真实状态。

时间轴t0t1t2t3t4t5NVMe CPU发出指令更新队首指针主机发出指令更新队尾指针存储器队首指针被更新队尾指针被更新监控器查询查询队尾指针状态寄存器错误队列状态错误队列状态错误队列状态反映真实队列状态

因而,需要提供技术方案,使得NVMe控制器CPU能够获知队列的真实状态。

根据本发明的第一方面,提供了根据本发明第一方面的第一命令队列处理器,包括存储器、处理器、监视器、状态寄存器以及标志寄存器;所述状态寄存器用于指示命令队列的状态,其中在命令队列非空时,所述状态寄存器中相对应的比特被所述监视器置位;所述标志寄存器可被所述CPU与所述监视器访问;其中当所述标志寄存器被置位时,所述标志寄存器指示所述状态寄存器的值反应了队列的真实状态,而当所述标志寄存器被清除时,所述标志寄存器指示所述状态寄存器的值并不反映队列的真实状态。

根据本发明第一方面的第一命令队列处理器,还提供了根据本发明第一方面的第二命令队列处理器,其中当所述CPU更新所述存储器中的队列指针后,所述CPU清除所述标志寄存器;以及当所述监视器设置所述状态寄存器后,还将所述标志寄存器置位。

根据本发明第一方面的第一与第二命令队列处理器之一,还提供了根据本发明第一方面的第三命令队列处理器,其中所述CPU读取所述标志寄存器,确定所述标志寄存器被置位后,才访问所述状态寄存器,并依据所述状态寄存器对所述命令队列进行处理。

根据本发明第一方面的第一至第三命令队列处理器之一,还提供了根据本发明第一方面的第四命令队列处理器,其中所述CPU读取所述标志寄存器,确定所述标志寄存器被清除时,忽略所述状态寄存器的指示。

根据本发明第一方面的第一至第四命令队列处理器之一,还提供了根据本发明第一方面的第五命令队列处理器,其中所述监视器响应于所述CPU更新了所述存储器中的第一队列指针,所述监视器读取与所述第一队列指针相对应的第二队列指针,并依据所述第一队列指针与所述第二队列指针确定所述命令队列的状态,并进而更新所述状态寄存器以及将所述标志寄存器置位。

根据本发明第一方面的第一至第五命令队列处理器之一,还提供了根据本发明第一方面的第六命令队列处理器,其中所述监控器基于所述CPU访问所述存储器的地址识别所述CPU更新了所述存储器中的第一队列指针。

根据本发明第一方面的第一至第六命令队列处理器之一,还提供了根据本发明第一方面的第七命令队列处理器,所述命令队列处理器还包括第二处理器,其中所述标志寄存器与所述存储器可被所述第二处理器访问;所述CPU或第二CPU访问所述状态寄存器前,对所述标志寄存器加锁,并依据所述标记寄存器的内容决定是否访问所述状态寄存器。

根据本发明第一方面的第一至第七命令队列处理器之一,还提供了根据本发明第一方面的第八命令队列处理器,其中所述监视器响应于主机更新了所述存储器中的第二队列指针,将所述状态寄存器置位,并将所述标志寄存器置位,所述CPU基于所述标志寄存器被置位,确定当前所述状态寄存器反映了所述队列的真实状态。

根据本发明的第二方面,提供了根据本发明第二方面的第一命令队列处理方法,包括:清除标志寄存器;更新存储器中的队首指针;读取标志寄存器,确定所述标志寄存器被置位后,才访问所述状态寄存器,并依据所述状态寄存器对所述命令队列进行处理。

根据本发明第二方面的第一命令队列处理方法,还提供了根据本发明第二方面的第一命令队列处理方法,还包括:在更新存储器中的队首指针后,读取标志寄存器之前,执行不依赖于状态寄存器的任务或休眠。

根据本发明第二方面的第一或第二命令队列处理方法,还提供了根据本发明第二方面的第三命令队列处理方法,其中读取标志寄存器,确定所述标志寄存器被清除时,忽略所述状态寄存器的指示或休眠。

根据本发明第二方面的第一至第三命令队列处理方法之一,还提供了根据本发明第二方面的第四命令队列处理方法,其中访问所述标志寄存器时,对所述状态寄存器加锁。

根据本发明第二方面的第一至第四命令队列处理方法之一,还提供了根据本发明第二方面的第五命令队列处理方法,其中访问状态寄存器前,对所述标志寄存器加锁,并依据所述标记寄存器的内容决定是否访问所述状态寄存器。

根据本发明第二方面的第三至第五命令队列处理方法之一,还提供了根据本发明第二方面的第六命令队列处理方法,还包括查询所述标志寄存器,确定所述标志寄存器被置位后,才访问所述状态寄存器,并依据所述状态寄存器对所述命令队列进行处理。

根据本发明第二方面的第三至第六命令队列处理方法之一,还提供了根据本发明第二方面的第七命令队列处理方法,其中所述清除标志寄存器与所述更新存储器中的队首指针的操作是原子操作。

根据本发明的第三方面,提供了根据本发明第三方面的命令队列处理装置,包括:用于清除标志寄存器的模块;用于更新存储器中的队首指针的模块;以及用于读取标志寄存器,确定所述标志寄存器被置位后,才访问所述状态寄存器,并依据所述状态寄存器对所述命令队列进行处理的模块。

根据本发明的第四方面,提供了根据本发明第四方面的包括指令代码的程序,当被载入存储设备并在存储设备上执行时,所述程序使所述存储设备的处理器执行根据本发明第二方面的命令队列处理方法之一。

附图说明

当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:

图1示出了现有技术中主机与设备间通过队列交换命令的示意图;

图2示出了根据现有技术的NVMe控制器的方框图;

图3示出了根据本发明实施例的NVMe控制器的方框图;

图4示出了根据本发明实施例的NVMe控制器CPU队列处理过程的流程图;

图5示出了根据本发明又一实施例的NVMe控制器的方框图;

图6示出了根据本发明依然又一实施例的NVMe控制器的方框图。

具体实施方式

图3示出了根据本发明实施例的NVMe控制器的方框图。在根据图3的实施例中,主机与设备根据NVMe协议而通过队列交换命令。在设备中包括NVMe控制器。设备作为举例可以是支持NVMe协议的固态硬盘。

图3的NVMe控制器包括存储器、处理器(CPU)、监控器、状态寄存器以及可被处理器与监控器访问的标志寄存器。在存储器中存储根据NVMe协议的队列指针。主机能够访问存储器中存储的队列指针。NVMe控制器的CPU能够访问存储器中存储的队列指针。监控器在监视到NVMe控制器的CPU更新存储器中的队首指针时,读取与该队首指针相对应的队尾指针,在队首指针与队尾指针不同时,设置状态寄存器中与该队尾指针所属的队列所对应的位;在队首指针与队尾指针相同时,清除状态寄存器中与该队尾指针所属的队列所对应的位。

CPU与监控器均可访问标志寄存器。NVMe控制器CPU通过执行指令可清除标志寄存器,NVMe控制器CPU通过执行指令可读取标志寄存器的值。监控器可置位标志寄存器。

标志寄存器被置位时,表示状态寄存器的值反应了队列的当前真实状态,而当标志寄存器被清除时,表示状态寄存器的值并不反映队列的真实状态。

(在操作时)在NVMe控制器CPU更新存储器中的队列指针(队首指针)后,一并清除标志寄存器的值。从而提示NVMe控制器CPU中执行的软件,状态寄存器当前并不反映队列的真实状态。NVMe控制器CPU中执行的软件可查询标志寄存器,当发现标志寄存器被清除,则可知晓状态寄存器并不反映队列的真实状态。

监控器在发现NVMe控制器CPU更新了共享存储器中的队列指针后,监控器读取与NVMe控制器CPU更新的队列指针(队首指针)相对应的队尾指针,并确定队列是否有待处理的条目,进而更新状态寄存器。此时状态寄存器指示了队列的真实状态。继而监控器设置标志寄存器。此后,NVMe控制器CPU再查询标志寄存器时,将发现标志寄存器被置位,从而知晓状态寄存器反映了队列的真实状态。继而NVMe控制器CPU可查询状态寄存器并对队列中的条目进行处理。

图4示出了根据本发明实施例的NVMe控制器CPU队列处理过程的流程图。NVMe控制器CPU在从命令队列(从队首)中取出主机发出的NVMe命令后,会更新命令队列的头指针。头指针存放于存储器中。在CPU更新存储器中的头指针(参看图4,步骤420)之前或同时,CPU操作标志寄存器来清除标志寄存器(步骤410)。作为举例,清除标志寄存器可以是将标志寄存器设为逻辑0。从而此后该CPU或其他CPU能够识别到标志寄存器的值为逻辑0,并意识到当前状态寄存器的值不能反映队列的真实状态。

接下来,CPU等待状态寄存器反映队列的真实状态(即等待标志寄存器被监控器置位,例如,设为逻辑1),在等待期间,CPU可以执行其他操作以提高效率(步骤430)。当CPU发现标志寄存器被置位(步骤450),此时状态寄存器已经反映队列的真实状态,因而CPU读取状态寄存器,并依据状态寄存器确定是否有命令队列需要处理。

结合图3与图4,CPU更新存储其中的队列头指针时(步骤420),监控器识别到CPU对存储器中的队列头指针的更新。作为响应,监控器从存储器中读取与该头指针相对应的尾指针,并通过比较头指针与尾指针来确定队列状态(队列中是否有命令需要处理,或者队列为空或非空的状态)。监控器在状态寄存器中反映队列的状态,接下来设置标志寄存器以向CPU指示对状态寄存器的更新已经完成,状态寄存器已经反映了队列的真实状态。

在一个例子中,CPU以访问通用寄存器的方式访问标志寄存器。

在另一个例子中,CPU执行访存指令时,作为访存指令的附加作用,当访问指定地址空间(存储队首指针的地址空间)时,清除标志寄存器。可以在访存指令中指示存储队首指针的地址空间,也可以在寄存器中配置存储队首指针的地址空间。

在又一个例子中,标志寄存器用作CPU的条件操作指令的标志位,CPU在读取状态寄存器时,使用条件操作指令。当标志寄存器被置位时,执行对状态寄存器的读取操作,而当标志寄存器被清除时,忽略对状态寄存器的读取操作。

在依然又一个例子中,估计从CPU更新队首指针到状态寄存器反映队列的真实状态的时间间隔t,并依据该时间间隔t设置定时器。在CPU更新队首指针后启动定时器,而在定时器到时后CPU再尝试访问标志寄存器以判断状态寄存器是否反映了队列的真实状态。

图5示出了根据本发明又一实施例的NVMe控制器的方框图。图5的NVMe控制器包括存储器、处理器1(CPU1)、处理器2(CPU2)、监控器、状态寄存器以及可被处理器与监控器访问的标志寄存器。在存储器中存储根据NVMe协议的队列指针。主机能够访问存储器中存储的队列指针。NVMe控制器的CPU能够访问存储器中存储的队列指针。监控器在监视到NVMe控制器的CPU更新存储器中的队首指针时,读取与该队首指针相对应的队尾指针,在队首指针与队尾指针不同时,设置状态寄存器中与该队尾指针所属的队列所对应的位;在队首指针与队尾指针相同时,清除状态寄存器中与该队尾指针所属的队列所对应的位。

CPU1、CPU2与监控器均可访问标志寄存器。CPU通过执行指令可清除标志寄存器,NVMe控制器CPU通过执行指令可读取标志寄存器的值。监控器可置位标志寄存器。

标志寄存器为CPU1与CPU2所共享。在CPU1或CPU2访问状态寄存器前,需要对标志寄存器加锁,以独占对标志寄存器的访问权,并获取标志寄存器的值,并依据标志寄存器的内容决定如何访问状态寄存器。在标志寄存器被置位时,状态寄存器反映了队列的真实状态,而在标志寄存器被清除时,状态寄存器不反映队列的真实状态。

图6示出了根据本发明的依然又一实施例的NVMe控制器的方框图。图6的NVMe控制器包括存储器、处理器(CPU)、监控器1、监控器2、状态寄存器以及可被处理器与监控器访问的标志寄存器。监控器1与监控器2均可访问标志寄存器。在存储器中存储根据NVMe协议的队列指针。主机能够访问存储器中存储的队列指针。NVMe控制器的CPU能够访问存储器中存储的队列指针。

为了向设备发送命令,主机将命令填入命令队列,并更新存储器中的队列队尾指针。监控器2在监视到主机更新存储器中的队尾指针时,更新状态寄存器,以反映队列中有新命令等待处理,接下来或同时,监控器2还将标志寄存器置位,以指示当前状态寄存器反映了队列的真实状态。

监控器1在监视到NVMe控制器的CPU更新存储器中的队首指针时,读取与该队首指针相对应的队尾指针,在队首指针与队尾指针不同时,设置状态寄存器中与该队尾指针所属的队列所对应的位;在队首指针与队尾指针相同时,清除状态寄存器中与该队尾指针所属的队列所对应的位。

总体而言,当监控器1或监控器2识别到对存储中的队列指针的更新,依据队列状态设置状态寄存器,并设置标志寄存器已向CPU指示当前状态寄存器反映队列的真实状态。而在无论何时CPU访问状态寄存器前,都先查询标志寄存器,以确定状态寄存器是否反映队列的真实状态,以及在CPU更新存储器中的队列指针前,都清除标志寄存器。CPU清除标志寄存器的操作与更新存储器中的队首指针的操作,优选地紧邻地执行,以使标志寄存器尽可能准确地反映状态寄存器的真实性。

所属领域技术人员将意识到,除应用于访问根据NVMe协议的命令队列的NVMe控制器,根据本发明的实施例还可应用于其他基于队列交换在发送方与接收方交换命令和/或数据的场合。

本发明实施例还提供一种包含程序代码的程序,当被载入CPU并在CPU中执行时,所述程序代码使所述CPU执行上面所述的方法。

本发明实施例还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序使所述存储设备的处理器执行上面所述的方法之一。

应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。

这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。

因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。

虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。

这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号