CN107045483B - 基于队列的消息交换方法及其装置 - Google Patents
基于队列的消息交换方法及其装置 Download PDFInfo
- Publication number
- CN107045483B CN107045483B CN201610168927.5A CN201610168927A CN107045483B CN 107045483 B CN107045483 B CN 107045483B CN 201610168927 A CN201610168927 A CN 201610168927A CN 107045483 B CN107045483 B CN 107045483B
- Authority
- CN
- China
- Prior art keywords
- queue
- completing
- order
- command process
- entries
- 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
- 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/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
Abstract
本发明公开了一种基于队列的消息交换方法,该方法包括:命令处理方从提交队列取出第一命令,对第一命令进行处理,判定第一命令处理是否成功,如果处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;如果处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;命令发出方处理精简完成队列的队列条目,判定精简完成队列的队列条目指示的第一命令是否成功,如果判定成功,更新完成队列的队首指针;如果判定失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针。
Description
技术领域
本发明涉及基于队列的消息交换方法及其装置。
背景技术
设备之间通过队列交换命令或消息是常用的。命令发送方将命令插入提交队列尾部,命令接收方从队列尾部取出命令并处理,将处理结果插入到完成队列尾部,命令发送方从完成队列头部取出命令处理结果。通过队列交换命令,能够在发送方与接收方直接维护多个并发的命令,并且命令之间的处理速度不必一致。NVMe协议(参见“NVM ExpressRevision 1.2”,2014年11月3日,通过引用将其全文合并于本说明书)定义了主机(Host)与设备(Device)之间交换数据的命令与数据结构(如图1所示)。主机中维护多个队列,每个队列中可填充多个命令。主机与设备基于队列交换数据。主机将命令C填入提交队列,设备从提交队列中取得命令C,并按命令C的内容进行处理,将处理结果填入完成队列。主机从完成队列获取命令C的处理结果以知晓命令C的处理完成。
依据NVMe协议,在设备端维护多个队列的队首与队尾指针。主机与设备都会更新队首与队尾指针。主机向设备发送命令时,主机将命令插入提交队列的队尾,并更新队尾指针。设备端比较提交队列的队首指针与队尾指针,在二者不同时,确定队列中有待处理的命令。设备端从队列中取出命令后,更新队首指针。主机端基于队首指针与队尾指针,可确定队列中是否有空间容纳新的命令。
在软件组件之间、集成电路组件之间以及软件与硬件之间也使用队列交换消息或命令。
发明内容
为了传递命令处理结果的多种可能情况(命令处理成功、命令处理失败、失败原因等),在完成队列的一个条目中,需要有足够大的尺寸以容纳多种信息。在NVMe协议中,定义了完成队列条目的大小为16字节。然而受限于总线宽度或cache line大小,需要多次访存操作才能获取一个完整的完成队列条目,影响了队列处理速度。
本发明希望克服访问完成队列时,传输队列条目需要多个总线周期,访问速度慢;而完成队列需要的存储空间大,大容量存储器的访问速度也难以提高。通过本发明,希望实现加快队列处理速度的目的。
根据本发明的一个方面,提供了一种基于队列的消息交换方法,所述方法包括:命令处理方从提交队列取出第一命令,对第一命令进行处理,判定第一命令处理是否成功,如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;命令发出方处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否成功,如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令失败,基于所述完成队列的所述队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针。
根据本发明的一个实施方式,进一步包括:命令发出方从取出的完成队列的队列条目中获取第一命令处理失败的信息,并进行错误处理。
根据本发明的一个实施方式,进一步包括:命令发出方依据提交队列的队尾指针指示的位置,向提交队列的队尾填充第一命令,更新提交队列的队尾指针。
根据本发明的一个实施方式,其中,命令发出方基于精简完成队列的队尾指针和队首指针确定精简完成队列非空,并从精简完成队列的队首取出队列条目。
根据本发明的一个实施方式,其中,命令处理方依据提交队列的队首指针指示的位置,从提交队列中取出队列条目,获得第一命令,更新提交队列的队首指针。
根据本发明的一个实施方式,还包括,如果第一命令处理成功,将指示第一命令处理成功的信息填充所述完成队列。
根据本发明的一个实施方式,其中,所述精简完成队列与所述完成队列具有相同深度。
根据本发明的一个实施方式,其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸,以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
根据本发明的一个实施方式,其中,所述第一命令为写命令。
根据本发明的一个实施方式,其中,所述错误处理为命令发出方重新发出写命令。
根据本发明的一个实施方式,其中,所述第一命令为读命令。
根据本发明的一个实施方式,其中,所述错误处理为命令发出方再次发出读命令,或者利用容错机制尝试读取其他数据来恢复出错的数据。
根据本发明的一个实施方式,其中,所述命令发出方为主机、CPU或电路组件,所述命令处理方为U盘、固态硬盘或闪存接口控制器。
根据本发明的第二方面,本发明还提供了一种基于队列的消息交换设备,所述设备包括:用于命令处理方从提交队列取出第一命令,对第一命令进行处理,判定第一命令处理是否成功的装置,如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;用于命令发出方处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否成功的装置,如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令失败,基于所述完成队列的所述队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针。
根据本发明的第三方面,还提供了一种基于队列的消息交换方法,所述方法包括:命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功,如果判定精简完成队列的所述队列条目指示第一命令执行成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的所述队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针。
根据本发明的第三方面的一个实施方式,其中从所述完成队列的队首取出队列条目的操作进一步包括:命令发出方从取出的完成队列的队列条目中获取第一命令执行失败的信息,并进行错误处理。
根据本发明的第三方面的一个实施方式,进一步包括:命令发出方依据提交队列的队尾指针,向提交队列的队尾填充第一命令,更新提交队列的队尾指针。
根据本发明的第三方面的一个实施方式,其中,命令发出方基于精简完成队列的队尾指针和队首指针确定精简完成队列非空,并从精简完成队列的队首取出队列条目。
根据本发明的第三方面的一个实施方式,其中,所述精简完成队列与所述完成队列具有相同的深度。
根据本发明的第三方面的一个实施方式,其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸,以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
根据本发明的第三方面的一个实施方式,其中,所述第一命令为写命令。
根据本发明的第三方面的一个实施方式,其中,所述错误处理为命令发出方向用户或上层系统提示错误原因。
根据本发明的第三方面的一个实施方式,其中,所述第一命令为读命令。
根据本发明的第三方面的一个实施方式,其中,所述错误处理为命令发出方向用户或上层系统提示错误原因或尝试读取其他数据来恢复出错的数据。
根据本发明的第三方面的一个实施方式,其中,所述命令发出方为主机、CPU或电路部件。
根据本发明的第四方面,还提供了一种基于队列的消息交换设备,所述设备包括:用于命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功的装置,如果判定精简完成队列的所述队列条目指示第一命令执行成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的所述队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针。
根据本发明的第五方面,还提供了一种基于队列的消息交换方法,所述方法包括:命令发出方确定命令处理方是否使用了精简完成队列;若命令处理方使用了精简完成队列,命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功,如果判定精简完成队列的所述队列条目指示第一命令执行成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的所述队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;若命令处理方未使用精简完成队列,命令发出方基于完成队列的队首指针处理完成队列的队列条目。
根据本发明的第六方面,还提供了一种基于队列的消息交换设备,所述设备包括:用于命令发出方确定命令处理方是否使用了精简完成队列的装置;若命令处理方使用了精简完成队列,命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功,如果判定精简完成队列的所述队列条目指示第一命令执行成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的所述队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;若命令处理方未使用精简完成队列,命令发出方基于完成队列的队首指针处理完成队列的队列条目。
根据本发明的第七方面,还提供了一种基于队列的消息交换方法,所述方法包括:命令处理方从提交队列取出第一命令,对第一命令进行处理,并判定第一命令的处理是否成功,如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列;如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列。
根据本发明的第七方面的一个实施方式,其中,命令处理方依据提交队列的队首指针,从提交队列中取出队列条目,获得第一命令,并更新提交队列的队首指针。
根据本发明的第七方面的一个实施方式,其中,所述精简完成队列与所述完成队列具有相同深度。
根据本发明的第七方面的一个实施方式,其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸,以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
根据本发明的第七方面的一个实施方式,其中,所述第一命令为读命令。
根据本发明的第七方面的一个实施方式,其中,所述第一命令为写命令。
根据本发明的第七方面的一个实施方式,其中,所述命令处理方为U盘、固态硬盘、CPU或电路组件。
根据本发明的第八方面,还提供了一种基于队列的消息交换设备,所述设备包括:用于命令处理方从提交队列取出第一命令,对第一命令进行处理,并判定第一命令的处理是否成功的装置,如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列;如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列。
根据本发明的第九方面,还提供了一种基于队列的消息交换方法,所述方法包括:命令处理方判断命令发出方是否使用精简完成队列;命令处理方从提交队列取出第一命令,对第一命令进行处理,并判定第一命令的处理是否成功;若命令发出方使用精简完成队列,以及如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列,如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;若命令发出方不使用精简完成队列,以及如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充完成队列,如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列。
根据本发明的第十方面,还提供了一种基于队列的消息交换设备,所述设备包括:用于命令处理方判断命令发出方是否使用精简完成队列的装置;用于命令处理方从提交队列取出第一命令,对第一命令进行处理,并判定第一命令的处理是否成功的装置;若命令发出方使用精简完成队列,以及如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列,如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;若命令发出方不使用精简完成队列,以及如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充完成队列,如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列。
根据本发明的第十一方面,提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行根据本发明一方面提供的基于队列的消息交换方法或者根据本发明第三方面提供的基于队列的消息交换方法或者本发明第五方面提供的基于队列的消息交换方法或者本发明第七方面提供的基于队列的消息交换方法或者本发明第九方面提供的基于队列的消息交换方法。
根据本发明的第十二方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行根据本发明一方面提供的基于队列的消息交换方法或者根据本发明第三方面提供的基于队列的消息交换方法或者本发明第五方面提供的基于队列的消息交换方法或者本发明第七方面提供的基于队列的消息交换方法或者本发明第九方面提供的基于队列的消息交换方法。
本发明能够克服访问完成队列时,传输队列条目需要多个总线周期,访问速度慢的问题及而完成队列需要的存储空间大,大容量存储器的访问速度也难以提高的问题,从而达到加快队列处理速度的目的。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。其中在附图中,参考数字之后的字母标记指示多个相同的部件,当泛指这些部件时,将省略其最后的字母标记。在附图中:
图1示出了现有技术中NVMe协议定义了主机与设备之间交换数据的命令与数据结构示意图;
图2A示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图;
图2B示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图;
图2C示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图;
图3A示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图;
图3B示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图;
图4示出了根据本发明的一个实施方式的基于队列的消息交换设备的结构示意图;
图5A示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图;
图5B示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图;
图6示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图;
图7示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图;
图8示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图。
在附图中,使用相同或类似的标号来指代相同或类似的元素。
具体实施方式
下面结合附图和具体的实施方式对本发明作进一步的描述。
图2A示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图。图2A所示的流程图仅仅是示意性的,其中记载的步骤可以按照不同顺序执行、并行执行、省略和/或增加其他步骤。
图3A示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图。图3B示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图。
如图2A所示,基于队列的消息交换方法包括:
步骤S210:命令处理方从提交队列取出第一命令;
步骤S220:对第一命令进行处理,判定第一命令处理是否成功;
步骤S230:如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;
步骤S240:如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
步骤S250:命令发出方处理精简完成队列的队列条目,判定精简完成队列的队列条目指示的第一命令是否成功;
步骤S260:如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;
步骤S270:如果判定精简完成队列的队列条目指示第一命令失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针。
结合图2A和图3A,在步骤S210中,命令处理方可选的为U盘、固态硬盘或作为集成电路组件的闪存接口控制器。命令处理方从提交队列(SQ,Submission Queue)的队首取出命令C1,在步骤S220,对命令C1进行处理,命令处理方判定命令C1处理是否成功。如果命令C1处理成功,进入到步骤S230,命令处理方依据完成队列(CQ,Completion Queue)的队尾指针,将与命令C1处理成功的信息(精简队列条目sS1)填充到精简完成队列sCQ的队尾,并更新队尾指针来指向精简完成队列sCQ的新队尾。进一步的实施例中,如果命令C1处理成功,命令处理方将指示命令C1处理成功的信息(队列条目S1)填充完成队列CQ。如果命令C1处理失败,进入到步骤S240,命令处理方用指示命令C1处理失败的错误信息(队列条目S1)填充完成队列CQ,而用指示第一命令处理失败的错误信息的部分(精简队列条目sS1)填充精简完成队列sCQ。
结合图2A和图3B,在步骤S250中,命令发出方可选的为主机、CPU或电路组件,命令发出方处理精简完成队列sCQ的队列条目。在图3B中,随着对完成队列的处理,指示命令C1的执行结果的队列条目S1位于完成队列的队首,指示命令C1的执行结果精简队列条目sS1位于精简完成队列的队首。命令发出方基于精简完成队列sCQ的队尾指针和队首指针确定精简完成队列sCQ非空,并从精简完成队列sCQ的队首取出队列条目sS1,判定精简完成队列sCQ的队列条目指示的命令C1是否执行成功。如果判定精简完成队列sCQ的队列条目sS1指示命令C1成功,进入到步骤S260,命令发出方更新完成队列CQ的队首指针。在命令C1处理成功时,命令发出方依据精简完成队列sCQ的条目sS1即能够获得全部需要的信息。命令发出方读取精简完成队列sCQ,在精简完成队列sCQ的条目sS1指示命令C1处理成功时,命令发出方无需再读取完成队列CQ。而精简完成队列sCQ的条目sS1的尺寸较小,访问速度快。如果判定精简完成队列sCQ的队列条目sS1指示命令C1执行失败,进入到步骤S270,命令发出方基于完成队列CQ的队首指针,从完成队列CQ的队首取出队列条目S1,并更新完成队列CQ的队首指针。从完成队列CQ取出的队列条目S1中包括完整的指示命令C1处理失败的错误信息,从而命令发出方可依据错误信息决定后续该进入何种处理(例如尝试错误恢复,或者上报错误信息)。
图2B示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图。图2B所示的流程图仅仅是示意性的,其中记载的步骤可以按照不同顺序执行、并行执行、省略和/或增加其他步骤。
如图2B所示,基于队列的消息交换方法包括以下步骤:
步骤S210:命令处理方从提交队列取出第一命令;
步骤S220:对第一命令进行处理,判定第一命令处理是否成功;
步骤S230:如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;
步骤S240:如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
步骤S250:命令发出方处理精简完成队列的队列条目,判定精简完成队列的队列条目指示的第一命令是否成功;
步骤S260:如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;
步骤S270:如果判定精简完成队列的队列条目指示第一命令失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针。
步骤S272:命令发出方从取出的完成队列的队列条目中获取第一命令处理失败的信息,并进行错误处理。
结合图3A、图3B和图2B,命令发出方基于完成队列的队首指针,从精简完成队列的队首取出的条目sS1确定命令C1的执行失败,命令发出方从完成队列的队首取出队列条目S1。在步骤S272中,命令发出方从取出的完成队列CQ的队列条目S1中获取命令C1处理失败的信息,并进行错误处理。处理失败的信息例如可以为错误类型信息、错误原因信息、出错位置信息等。命令C1可以为写命令,也可以为读命令。如果命令C1为写命令,命令发出方为进行错误处理,可以例如重新发出写命令。如果命令C1为读命令,命令发出方为进行错误处理,可以例如再次发出读命令,或者利用容错机制尝试读取其他数据来恢复出错的数据。
图2C示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图。图2C所示的流程图仅仅是示意性的,其中记载的步骤可以按照不同顺序执行、并行执行、省略和/或增加其他步骤。
如图2C所示,基于队列的消息交换方法包括以下步骤:
步骤S205:命令发出方依据提交队列的队尾指针指示的位置,向提交队列的队尾填充第一命令,更新提交队列的队尾指针;
步骤S210:命令处理方从提交队列取出第一命令;
步骤S220:对第一命令进行处理,判定第一命令处理是否成功;
步骤S230:如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;
步骤S240:如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
步骤S250:命令发出方处理精简完成队列的队列条目,判定精简完成队列的队列条目指示的第一命令是否成功;
步骤S260:如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;
步骤S270:如果判定精简完成队列的队列条目指示第一命令失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针;
步骤S272:命令发出方从取出的完成队列的队列条目中获取第一命令处理失败的信息,并进行错误处理。
结合图3A、图3B和图2C,在步骤S205中,命令发出方依据提交队列SQ的队尾指针指示的位置,向提交队列SQ的队尾填充命令C1(未示出),并更新提交队列SQ的队尾指针。随着命令处理方不断从提交队列SQ中取出命令并处理,队首指针被移动并指向存储命令C1的提交队列SQ条目(参见图3A)。在步骤210,命令处理方依据提交队列SQ的队首指针指示的位置,从提交队列SQ中取出队列条目,获得命令C1,更新提交队列SQ的队首指针。在图2C示出的根据本发明的实施例中,步骤S210以及之后的步骤与在图2B中示出的实施例相同,在此不再叙述。
在根据本发明的实施例中,精简完成队列sCQ与完成队列CQ有相同的寻址方式与深度。例如,以及NVme协议,依据完成队列CQ的队首指针与队尾指针访问完成队列CQ的条目;在根据本发明的实施例中,除了依据完成队列CQ的队首指针与队尾指针访问完成队列CQ的条目,依据完成队列CQ的队首指针与队尾指针还能够访问精简完成队列sCQ的条目。从而根据本发明的命令发出方与命令处理方能够协作。而且根据本发明的命令发出方与根据现有技术的命令处理方也能够协作,以及根据本发明的命令处理方与根据现有技术的命令发出方也能够协作。
精简完成队列sCQ的队列条目的尺寸小于完成队列CQ。优选地,精简完成队列sCQ的队列条目的尺寸能够在1次存储器访问或总线传输中完成队列CQ的队列条目的访问。例如,对于32位总线,选择精简完成队列sCQ的队列条目尺寸为32比特。又例如,基于存储器接口宽度或超高速缓冲存储器线(cache line)大小确定精简完成队列sCQ的队列条目尺寸。进一步的实施例中,精简完成队列sCQ的队列条目的尺寸小,可以采用价格高但高性能的存储器结构,例如用DRAM实现完成队列CQ,而用SRAM实现精简完成队列sCQ。进一步的,选择精简完成队列sCQ的队列条目的尺寸,使得能够在一个超高速缓冲存储器线(cache line)中容纳精简完成队列sCQ的队列条目,从而有利于超高速缓冲存储器的填充、替换等操作。
即使在根据本发明的实施例提供精简完成队列sCQ,以及命令处理方使用了精简完成队列sCQ,而命令发出方可以不使用精简完成队列sCQ,并且不处理精简完成队列sCQ,从而提供兼容性,使得根据本发明的命令处理方可以同根据现有技术的命令发出方协作。例如对于NVMe协议,在NVMe中定义了提交队列SQ与完成队列CQ结构及其处理过程,支持精简完成队列sCQ的设备(命令处理方),可以被现有技术的符合NVMe规范的主机(命令发出方)所使用,而无需处理精简完成队列sCQ。进一步地,根据本发明的命令处理方,对命令发出方的能力进行检查。在识别出命令发出方不使用精简完成队列sCQ时,不再填充精简完成队列sCQ,而仅填充完成队列CQ。在识别出命令发出方使用精简完成队列sCQ时,才填充精简完成队列sCQ。
另一方面,根据本发明实施例的命令发出方可以检测命令处理方是否使用了精简完成队列。从而根据本发明的命令发出方在同现有技术的命令处理方协作时,不处理精简完成队列sCQ,而在同根据本发明实施例的命令处理方协作时,使用精简完成队列sCQ。进一步地,根据本发明的命令发出方,对命令处理方的能力进行检查。在识别出命令处理方不使用精简完成队列时,不再从精简完成队列sCQ提取队列条目,而仅从完成队列CQ提取队列条目。在识别出命令处理方使用精简完成队列时,才从精简完成队列sCQ提取队列条目。
大多数情况下,命令处理是成功的。在完成队列CQ的队列条目中,仅使用少数比特即可指示命令处理成功的状态。在完成队列CQ的队列条目中,更多数的比特用来指示在命令处理出错时的多种错误可能性。
在精简完成队列sCQ中,由于其队列条目尺寸较小,因而与命令相对应的精简完成消息仅用来携带较少的信息。例如指示命令处理成功/失败的信息,读取的数据的存储地址等;在精简完成消息中不携带负载的指示错误种类或原因的负载信息。
因而,在命令处理成功时,依据精简完成队列sCQ即能够获得全部需要的信息。命令发出方读取精简完成队列sCQ,在精简完成队列sCQ指示命令处理成功时,命令发出方无需再读取完成队列CQ;而精简完成队列sCQ的尺寸较小,访问速度快。
在命令处理失败时,依据精简完成队列sCQ仅能获知命令处理失败,若需要进一步获得错误类型/原因等附加信息,命令发出方再次访问完成队列CQ,以获取完整的完成队列CQ的队列条目。
虽然在命令处理失败时,需要访问精简完成队列sCQ与完成队列CQ,增加了处理时间,但由于命令处理成功是大多数情况,使得在大多数情况下,仅需访问精简完成队列sCQ而无需访问完成队列CQ,从而总体上降低了完成队列的数据访问量,降低了处理时间,提高了处理速度。
根据本发明的另一个方面,本发明还提供了一种基于队列的消息交换设备,如图4所示,该设备包括:用于命令处理方从提交队列取出第一命令,对第一命令进行处理,判定第一命令处理是否成功的装置410,如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;用于命令发出方处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否成功的装置420,如果判定精简完成队列的队列条目指示第一命令成功,更新完成队列的队首指针;如果判定精简完成队列的队列条目指示第一命令失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针。
图5A示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图。图5B示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图。
如图5A所示,在根据本发明实施例的命令发出方实施的基于队列的消息交换方法包括:步骤S510:命令发出方处理精简完成队列的队列条目,判定精简完成队列的队列条目指示的第一命令是否成功;步骤S520:如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;步骤S530:如果判定精简完成队列的队列条目指示第一命令失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针。
如图5B所示,在根据本发明又一实施例的命令发出方实施的基于队列的消息交换方法包括:步骤S510:命令发出方处理精简完成队列的队列条目,判定精简完成队列的队列条目指示的第一命令是否成功;步骤S520:如果判定精简完成队列的所述队列条目指示第一命令成功,更新完成队列的队首指针;步骤S530:如果判定精简完成队列的队列条目指示第一命令失败,基于完成队列的队首指针,从完成队列的队首取出队列条目,并更新完成队列的队首指针;步骤S540:命令发出方从取出的完成队列的队列条目中获取第一命令执行失败的信息,并进行错误处理。
图6示出了根据本发明的一个实施方式的基于队列的消息交换方法的流程图。
如图6所示,基于队列的消息交换方法包括:步骤S610:命令处理方从提交队列取出第一命令;步骤S620:对第一命令进行处理,并判定第一命令的处理是否成功;步骤S630:如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列;步骤S640:如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列。
图7示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图。
在图7所示出的实施例中,命令发出方为CPU,命令处理方为闪存接口控制器,CPU与闪存接口控制器通过提交队列SQ、完成队列CQ和精简完成队列sCQ交换消息。分别为提交队列SQ与完成队列CQ提供队首指针与队尾指针。CPU与闪存接口控制器能够访问队首指针与队尾指针。通过完成队列CQ的队首指针与队尾指针,CPU与闪存接口控制器还能访问精简完成队列sCQ。
CPU通过提交队列SQ向闪存接口控制器发出读命令或写命令。闪存接口控制器将命令执行结果通过完成队列CQ和/或精简完成队列sCQ发送给CPU。
写命令处理的操作过程包括:(a)依据提交队列SQ的队尾指针指示的位置,CPU向提交队列SQ的队尾填充写命令Cw,更新队尾指针;(b)闪存接口控制器依据提交队列SQ队首指针指示的位置,从提交队列SQ中取出队列条目,发现为写命令Cw;更新提交队列SQ的队首指针;(c)闪存接口控制器处理写命令Cw,若成功将数据写入闪存,闪存接口控制器生成指示写命令Cw处理成功的完成消息,并依据完成队列CQ的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示写命令Cw处理成功)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;若写命令Cw执行失败,闪存接口控制器生成指示写命令Cw处理失败的完成消息,在完成消息中包括例如错误原因等信息;并依据完成队列的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示写命令Cw处理失败,但作为举例不包括错误原因信息)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;(d)CPU依据完成队列CQ队首指针指示的位置,从精简完成队列sCQ中读取队列条目,发现写命令Cw处理成功,做出相应处理(例如,向用户或上层系统提示写入成功);CPU若发现写命令Cw处理失败,从完成队列CQ中读取队列条目,获取详细的错误信息,并进行错误处理(例如,重新发出写入命令)。
读命令处理的操作过程包括:(a)依据提交队列SQ的队尾指针指示的位置,CPU向提交队列SQ的队尾填充读命令Cr,更新队尾指针;(b)闪存接口控制器依据提交队列SQ队首指针指示的位置,从提交队列SQ中取出队列条目,发现为读命令Cr;更新提交队列SQ的队首指针;(c)闪存接口控制器处理读命令Cr,若从闪存中成功读出正确数据,闪存接口控制器生成指示Cr处理成功以及读出数据的存储位置的完成消息,并依据完成队列CQ的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示读命令Cr处理成功以及读出数据的存储位置)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;若读命令Cr执行失败(例如读出数据错误),闪存接口控制器生成指示读命令Cr处理失败的完成消息,在完成消息中包括例如错误原因等信息;并依据完成队列的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示读命令Cr处理失败,但作为举例不包括错误原因信息)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;(d)CPU依据完成队列CQ队首指针指示的位置,从精简完成队列sCQ中读取队列条目,发现读命令Cr处理成功,做出相应处理(例如,依据读出数据的存储位置获取所读出的数据,向用户或上层系统提示读入成功,并传回数据);CPU若发现读命令Cr处理失败,从完成队列CQ中读取队列条目,获取详细的错误信息,并进行错误处理(例如,选择不同的读出模式再次发出读命令,或者利用RAID等容错机制,尝试读取其他数据来恢复出错的数据)。
图8示出了根据本发明的一个实施方式的基于队列的消息交换方法的示意图。
如图8所示,命令发出方为主机(例如计算机或服务器),命令处理方为设备(在本例中,设备是固态硬盘,而设备还可以是例如U盘、机械硬盘等),主机与设备基于NVMe协议通过提交队列SQ、完成队列CQ和精简完成队列sCQ(精简的CQ)交换消息。在NVMe协议中定义了提交队列SQ与完成队列CQ,而没有定义精简完成队列sCQ。精简完成队列sCQ的队列条目尺寸(例如32比特)小于完成队列CQ的队列条目尺寸。在精简完成队列sCQ的队列条目中存储命令执行状态与命令标识符。在主机存储提交队列SQ、完成队列CQ和精简完成队列sCQ,在设备中分别为提交队列SQ与完成队列CQ提供队首指针与队尾指针。主机与设备能访问队首指针与队尾指针。通过完成队列CQ的队首指针与队尾指针,主机与设备还能访问精简完成队列sCQ。
主机通过提交队列SQ向设备发出命令(例如,读命令或写命令)。设备将命令执行结果通过完成队列和/或精简完成队列sCQ发送给CPU。
写命令处理的操作过程包括:(a)依据提交队列SQ的队尾指针指示的位置,主机向提交队列SQ的队尾填充写命令Cw,更新队尾指针;(b)设备依据提交队列SQ的队首指针指示的位置,从提交队列SQ中取出队列条目,发现为写命令Cw,并更新提交队列SQ的队首指针;(c)设备处理写命令Cw,从主机获取待写入的数据并写入闪存,若成功将数据写入闪存,设备生成指示写命令Cw处理成功的完成消息,并依据完成队列CQ的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示写命令Cw处理成功)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;若写命令Cw执行失败,设备生成指示写命令Cw处理失败的完成消息,在完成消息中包括例如错误原因等信息;并依据完成队列的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示写命令Cw处理失败,但作为举例不包括错误原因信息)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;(d)主机依据完成队列CQ的队首指针指示的位置,从精简完成队列sCQ中读取队列条目,发现写命令Cw处理成功,做出相应处理(例如,向用户或上层系统提示写入成功,回收存储所写入数据的缓存);主机若发现写命令Cw处理失败,从完成队列CQ中读取队列条目,获取详细的错误信息,并进行错误处理(例如,向用户或上层系统提示错误原因)。
读命令处理的操作过程包括:(a)依据提交队列SQ的队尾指针指示的位置,主机向提交队列SQ的队尾填充读命令Cr,更新队尾指针;(b)设备依据提交队列SQ的队首指针指示的位置,从提交队列SQ中取出队列条目,发现为读命令Cr,并更新提交队列SQ的队首指针;(c)设备处理读命令Cr,若从闪存中成功读出正确数据并传送到主机,设备生成指示读命令Cr处理成功的完成消息,并依据完成队列CQ的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示处理成功以及读命令Cr的标识符)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;若读命令Cr执行失败(例如读出数据错误),设备生成指示读命令Cr处理失败的完成消息,在完成消息中包括例如错误原因等信息;并依据完成队列的队尾指针将完成消息填入完成队列CQ,将精简的完成消息(指示读命令Cr处理失败,但作为举例不包括错误原因信息)填入精简完成队列sCQ,并更新完成队列CQ的队尾指针;(d)主机依据完成队列CQ的队首指针指示的位置,从精简完成队列sCQ中读取队列条目,发现读命令Cr处理成功,做出相应处理(例如,向用户或上层系统提示读入成功,并传回数据);主机若发现读命令Cr处理失败,从完成队列CQ中读取队列条目,获取详细的错误信息,并进行错误处理(例如,尝试读取其他数据来恢复出错的数据,或向用户或上层系统提示读操作失败原因)。
本发明能够克服访问完成队列时,传输队列条目需要多个总线周期,访问速度慢的问题及而完成队列需要的存储空间大,大容量存储器的访问速度也难以提高的问题,从而达到加快队列处理速度的目的。
应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。
这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作步骤,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的步骤。
因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的步骤的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或步骤的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。
上述的不同块、操作以及技术的至少一部分可以被执行,通过使用硬件,控制设备执行固件指令,控制设备执行软件指令,或者及其任意组合。当采用执行固件以及软件指令的控制设备执行时,软件或固件指令可以被存储在任意计算机可读存储介质中,例如磁盘,光盘或者其他存储介质,在RAM或者ROM或者flash存储器,控制设备,硬盘,光盘,磁盘等等。同样地,软件和固件指令可以被传输到用户或者系统,通过任意已知的或者期望的传输方式包括,例如,在计算机可读盘或者其他便携式计算机存储机制或者通过通信媒介。通信媒介典型地具体化计算机可读指令,数据结构,序模块或者在已调制数据信号中的其它数据例如载波或者其他传输机制。通过示例,并非限制,通信介质包括有线介质例如有线网络或者单线连接,以及无线媒介,例如声、无线频率,红外以及其它无线介质。从而,软件和固件指令可以被传输给用户或者系统,通过通信信道,例如电话线,DSL线,电缆电视线,光纤线缆,无线信道,因特网,等等(通过便携式存储介质提供这样的软件,其被看作是相同的或者可互换的)。软件或者固件指令可以包括机器可读指令,这些可读指令在由控制设备执行时,导致控制设备执行不同动作。
当在硬件中执行时,硬件可以包括一个或多个离散组件,集成电路,应用的集成电路(ASIC),等等。
需要理解的是,本发明可以以纯软件、纯硬件、固件以及上述的各种组合来实现。硬件例如可以是控制设备、专用集成电路、大规模集成电路等等。
虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。
这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
Claims (9)
1.一种基于队列的消息交换方法,所述方法包括:
命令处理方从提交队列取出第一命令,对第一命令进行处理,判定第一命令处理是否成功,
如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;
如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
命令发出方处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否成功,
如果判定所述精简完成队列的队列条目指示第一命令成功,更新完成队列的队首指针;
如果判定所述精简完成队列的队列条目指示第一命令失败,基于所述完成队列的队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
2.根据权利要求1所述的方法,其中,命令发出方基于精简完成队列的队尾指针和队首指针确定精简完成队列非空,并从精简完成队列的队首取出队列条目。
3.一种基于队列的消息交换设备,所述设备包括:
用于命令处理方从提交队列取出第一命令,对第一命令进行处理,判定第一命令处理是否成功的装置,
如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列;
如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
用于命令发出方处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否成功的装置,
如果判定所述精简完成队列的队列条目指示第一命令成功,更新完成队列的队首指针;
如果判定所述精简完成队列的队列条目指示第一命令失败,基于所述完成队列的队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
4.一种基于队列的消息交换方法,所述方法包括:
命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功,
如果判定所述精简完成队列的队列条目指示第一命令执行成功,更新完成队列的队首指针;
如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
5.一种基于队列的消息交换设备,所述设备包括:
用于命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功的装置,
如果判定所述精简完成队列的队列条目指示第一命令执行成功,更新完成队列的队首指针;
如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
6.一种基于队列的消息交换方法,所述方法包括:
命令发出方确定命令处理方是否使用了精简完成队列;
若命令处理方使用了精简完成队列,命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功,如果判定所述精简完成队列的队列条目指示第一命令执行成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;
若命令处理方未使用精简完成队列,命令发出方基于完成队列的队首指针处理完成队列的队列条目;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
7.一种基于队列的消息交换设备,所述设备包括:
用于命令发出方确定命令处理方是否使用了精简完成队列的装置;
若命令处理方使用了精简完成队列,命令发出方基于完成队列的队首指针处理精简完成队列的队列条目,判定所述精简完成队列的队列条目指示的第一命令是否执行成功,如果所述判定精简完成队列的队列条目指示第一命令执行成功,更新完成队列的队首指针;如果判定所述精简完成队列的队列条目指示第一命令执行失败,基于所述完成队列的队首指针,从所述完成队列的队首取出队列条目,并更新完成队列的队首指针;
若命令处理方未使用精简完成队列,命令发出方基于完成队列的队首指针处理完成队列的队列条目;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
8.一种基于队列的消息交换方法,所述方法包括:
命令处理方从提交队列取出第一命令,对第一命令进行处理,并判定第一命令的处理是否成功,
如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列;
如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
9.一种基于队列的消息交换方法,所述方法包括:
命令处理方判断命令发出方是否使用精简完成队列;
命令处理方从提交队列取出第一命令,对第一命令进行处理,并判定第一命令的处理是否成功;
若命令发出方使用精简完成队列,以及如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充精简完成队列与完成队列,如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列,而用指示第一命令处理失败的错误信息的部分填充精简完成队列;
若命令发出方不使用精简完成队列,以及如果第一命令处理成功,依据完成队列的队尾指针,用指示第一命令处理成功的信息填充完成队列,如果第一命令处理失败,用指示第一命令处理失败的错误信息填充完成队列;
其中,精简完成队列的条目的尺寸小于完成队列的条目的尺寸;
以及在1次存储器访问中或总线传输中能够完成对精简完成队列的队列条目的传输。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2016100813519 | 2016-02-05 | ||
CN201610081351 | 2016-02-05 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107045483A CN107045483A (zh) | 2017-08-15 |
CN107045483B true CN107045483B (zh) | 2019-10-18 |
Family
ID=59542657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610168927.5A Active CN107045483B (zh) | 2016-02-05 | 2016-03-23 | 基于队列的消息交换方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107045483B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104246742A (zh) * | 2012-01-17 | 2014-12-24 | 英特尔公司 | 用于远程客户端访问存储设备的命令验证的技术 |
CN104283938A (zh) * | 2013-07-08 | 2015-01-14 | 英特尔公司 | 用于在存储服务器之间复制数据的技术 |
CN104536701A (zh) * | 2014-12-23 | 2015-04-22 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140331001A1 (en) * | 2013-05-02 | 2014-11-06 | Lsi Corporation | Command Barrier for a Solid State Drive Controller |
US9563367B2 (en) * | 2014-08-26 | 2017-02-07 | HGST Netherlands B.V. | Latency command processing for solid state drive interface protocol |
-
2016
- 2016-03-23 CN CN201610168927.5A patent/CN107045483B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104246742A (zh) * | 2012-01-17 | 2014-12-24 | 英特尔公司 | 用于远程客户端访问存储设备的命令验证的技术 |
CN104283938A (zh) * | 2013-07-08 | 2015-01-14 | 英特尔公司 | 用于在存储服务器之间复制数据的技术 |
CN104536701A (zh) * | 2014-12-23 | 2015-04-22 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107045483A (zh) | 2017-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103257933B (zh) | 无序处理器中的事务存储器执行的方法、设备和系统 | |
CN105190622B (zh) | 用于分布式数据库系统的快速崩溃恢复 | |
CN103248684B (zh) | 一种互联网中资源获取方法和装置 | |
CN104246742B (zh) | 用于远程客户端访问存储设备的命令验证的技术 | |
CN105210062B (zh) | 用于分布式数据库系统的系统范围检查点避免 | |
CN104007935B (zh) | 存储器设备 | |
CN109791471A (zh) | 虚拟化外围装置处的非易失性存储装置 | |
CN103412822B (zh) | 操作非易失性内存和数据操作的方法和相关装置 | |
CN107305534A (zh) | 对使用NVMe接口的装置同时进行的内核模式和用户模式访问 | |
CN109343790A (zh) | 一种基于nand flash的数据存储方法、终端设备及存储介质 | |
CN109117092A (zh) | NVMe协议处理器及其处理方法 | |
CN105094691B (zh) | 一种数据操作的方法、设备和系统 | |
CN109597816A (zh) | 参数校验方法、装置、计算机存储介质及嵌入式设备 | |
CN110275840A (zh) | 在存储器接口上的分布式过程执行和文件系统 | |
CN108667903B (zh) | 数据发送方法、装置和存储介质 | |
CN109814896A (zh) | 服务器升级方法、装置、计算机系统及可读存储系统 | |
CN106909516A (zh) | 存储系统及其操作方法 | |
CN104252416B (zh) | 一种加速器以及数据处理方法 | |
CN108389600A (zh) | 数据储存装置以及参数改写方法 | |
CN107045483B (zh) | 基于队列的消息交换方法及其装置 | |
CN110134329A (zh) | 用于使用来自退役服务器的dimm来促进高容量共享存储器的方法和系统 | |
CN110275901A (zh) | 一种缓存数据调取方法及装置 | |
CN112884587A (zh) | 区块链交易执行方法、区块链节点及控制装置 | |
CN111666559A (zh) | 一种支持权限管理的数据总线管理方法、装置、电子设备及存储介质 | |
CN106250188B (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 | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Patentee after: Beijing yihengchuangyuan Technology Co.,Ltd. Address before: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Patentee before: MEMBLAZE TECHNOLOGY (BEIJING) Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |