CN112765052A - 处理NVMe完成队列(CQ)阻塞的方法与存储设备 - Google Patents
处理NVMe完成队列(CQ)阻塞的方法与存储设备 Download PDFInfo
- Publication number
- CN112765052A CN112765052A CN201911066563.XA CN201911066563A CN112765052A CN 112765052 A CN112765052 A CN 112765052A CN 201911066563 A CN201911066563 A CN 201911066563A CN 112765052 A CN112765052 A CN 112765052A
- Authority
- CN
- China
- Prior art keywords
- completion queue
- queue
- command
- cqm
- register
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供了处理NVMe完成队列(CQ)组合的方法与存储设备,该方法包括:从第一缓存区获取命令的处理结果;若完成队列不可用,将命令的处理结果存放至CQM寄存器;将CQM寄存器的内容搬移到第二缓存区;在完成队列可用时,将第一缓存区中的命令的处理结果和/或第二缓存区中的命令的处理结果填充到完成队列。通过执行NVMe队列管理方法,使得队列填满时,处理结果不需要一直排队等待,从而改善NVMeSSD控制器的数据处理能力。
Description
技术领域
本申请涉及存储技术,特别地,涉及NVMe存储设备中处理NVMe完成队列(CQ)阻塞的方法与存储设备。
背景技术
图1展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial AttachedSCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandom Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)、XPoint存储器等是常见的NVM。
提交队列(SQ)与完成队列(CQ)在NVMe协议中,专门用于服务NVMe命令。主机与存储设备之间的信息交互就是基于NVMe队列中的SQ(SubmissionQueue,提交队列)和CQ(CompletionQueue,完成队列)实现的,主机通过SQ下发命令,NVMe存储设备通过CQ返回命令响应。在NVMe存储设备处理命令的速度快,而主机从CQ中获取命令处理的结果的速度较慢时,很可能会出现由于CQ的深度有限而导致CQ队列溢出。NVMe设备需要防止CQ队列溢出发生,并处理CQ队列满而无法接收命令处理结果的情况。
发明内容
根据本申请的第一方面,提供了根据本申请的第一方面的第一NVMe队列管理方法,包括:从第一缓存区获取命令的处理结果;若完成队列不可用,将命令的处理结果存放至CQM寄存器;将CQM寄存器的内容搬移到第二缓存区;在完成队列可用时,将第一缓存区中的命令的处理结果和/或第二缓存区中的命令的处理结果填充到完成队列。
根据本申请的实施例中,在完成队列不可用时,先将命令处理结果存放在第二缓存区内,等到完成队列可用之后,再将从第二缓存区域中的命令处理结果填充到完成队列,从而在完成队列已满之后,不需要为了提交命令处理结果而一直查询并等待完成队列可用,使处理结果灵活的流动到缓存区,从而减少占据用于数据处理的资源,改善存储设备的控制部件的数据处理能力。
进一步地,完成队列可用是通常情况,控制部件的硬件将命令处理结果填充完成队列;而完成队列不可用是异常情况,为了不因处理少数的异常情况而增加硬件设计的复杂度,在完成队列不可用时,硬件仅将命令处理结果填充到第二缓冲区或者CQM寄存器,而将检查完成队列可用等后续处理交由处理器或CPU核执行。从而在硬件与固件(软件)之间合理划分任务,由硬件高效处理通常任务,而由CPU处理复杂的异常任务。
根据本申请的第一NVMe队列管理方法,提供了根据本申请的第一方面的第二NVMe队列管理方法,在将命令的处理结果存放至CQM寄存器之前,判断完成队列是否可用,其中,在完成队列有可写入数据的存储空间时,判断完成队列可用,在完成队列没有可写入数据的存储空间时,判断完成队列不可用。
本实施方式中,提前判断完成队列是否可用,从而可以根据判断结果及时且快速的确定处理结果后续的去处,进一步提高NVMeSSD控制器的数据处理能力。
根据本申请的第一或第二NVMe队列管理方法,提供了根据本申请的第一方面的第三NVMe队列管理方法,在从第一缓存区获取命令的处理结果之后,将命令的处理结果发送给NVMe控制器。
根据本申请的第三NVMe队列管理方法,提供了根据本申请的第一方面的第四NVMe队列管理方法,将命令的处理结果存放至CQM寄存器,包括:NVMe控制器将命令的处理结果搬移至CQM寄存器;或者,NVMe控制将命令的处理结果从第一缓存区搬移至CQM寄存器。
上述两种实施方式中,采用NVMe控制器来搬运数据,NVMe控制器作为一种硬件,能够加速处理数据的速度,从而能够提高本方法的执行速度。
根据本申请的第一至第四NVMe队列管理方法之一,提供了根据本申请的第一方面的第五NVMe队列管理方法,CQM寄存器位于第二缓存区内,响应于将命令的处理结果存放至CQM寄存器,更新CQM寄存器在第二缓存区内的位置,使得CQM寄存器得以接收新的命令的处理结果。
本实施方式中,将CQM寄存器设置在第二缓存区内,从而将命令的处理结果搬运到CQM寄存器就直接将该处理结果搬移到第二缓存区内,简化了数据搬移的过程,使本方法更易于实现。
根据本申请的第一至第五NVMe队列管理方法之一,提供了根据本申请的第一方面的第六NVMe队列管理方法,将CQM寄存器的内容搬移到第二缓存区,包括:响应于CQM寄存器被填充了数据,将CQM寄存器的内容搬移到第二缓存区;或者,向处理器发送中断,以使处理器将CQM寄存器的内容搬移到第二缓存区。
本实施方式中,提供了将CQM寄存器的内容搬移到第二缓存区的多种方式,从而能够根据实际需求灵活的选择,提高了本方法的灵活性。
根据本申请的第二NVMe队列管理方法,提供了根据本申请的第一方面的第七NVMe队列管理方法,在完成队列可用时,将第一缓存区中的命令的处理结果填充到完成队列。
根据本申请的第一至第六NVMe队列管理方法之一,提供了根据本申请的第一方面的第八NVMe队列管理方法,在完成队列可用时,将第一缓存区中的命令的处理结果和/或第二缓存区中的命令的处理结果填充到完成队列,包括:在将CQM寄存器的内容搬移到第二缓存区之后,将第二缓存区中的命令的处理结果搬移至第一缓存区;响应于完成队列可用,将第一缓存区中的命令的处理结果填充到完成队列;或者,在将CQM寄存器的内容搬移到第二缓存区之后,响应于完成队列可用,将第二缓存区中的命令的处理结果填充到完成队列。
本实施方式中,提供了将命令的处理结果填充到完成队列的多种方式,分分别对应于多种场景,从而可以根据场景直接而快速的确定所需采用的方式,达到加快执行速度的效果。
根据本申请的第八NVMe队列管理方法,提供了根据本申请的第一方面的第九NVMe队列管理方法,将第二缓存区中的命令的处理结果搬移至第一缓存区,包括:在第一缓存区存储有除第二缓存区中的命令的处理结果之外的其它命令的处理结果时,将第二缓存区中的命令的处理结果搬移至第一缓存区,以使在将第一缓存区中的命令的处理结果填充到完成队列时,先将从第二缓存区搬移来的命令的处理结果先填充到完成队列。
根据本申请的第八NVMe队列管理方法,提供了根据本申请的第一方面的第十NVMe队列管理方法,响应于完成队列可用,该方法还包括:确定第二缓存区域中是否有命令的处理结果;若第二缓存区中没有命令的处理结果,则将第一缓存区中的命令的处理结果填充到完成队列;若第二缓存区中有命令的处理结果,则将第二缓存区中的命令的处理结果填充到完成队列,再将第一缓存区中的命令的处理结果填充到完成队列。
本上述两种实施方式中,提供了在完成队列可用之后,多种将命令的处理结果填充到完成队列的方式,从而能够根据实际需求灵活的选择,提高了本方法的灵活性。
根据本申请的第二至第十NVMe队列管理方法之一,提供了根据本申请的第一方面的第十一NVMe队列管理方法,判断完成队列是否可用,包括:检测完成队列已使用的存储空间的容量;比较预存的完成队列的存储空间的总容量和已使用的存储空间的容量;在已使用的存储空间的容量小于总容量时,判断完成队列可用;或者,若完成队列在主机内,向主机发送查询请求,查询请求用于询问主机完成队列是否可用;在主机返回指示完成队列可用是,判断完成队列可用。
本实施方式中,提供了多种判断完成是否可用的方式,从而能够根据实际需求灵活的选择,提高了本方法的灵活性。
根据本申请的第一至第十一NVMe队列管理方法之一,提供了根据本申请的第一方面的第十二NVMe队列管理方法,第一缓存区和/或第二缓存区为队列。
本实施方式中,第一缓存区和/或第二缓存区采用队列这种数据存储方式简单易实现,且队列也与完成队列的数据存储方式契合,是的缓存区中的数据写入完成队列时可以按照原先的顺序,不需要进行调整,从而达到简化操作的效果。
根据本申请的第二方面,提供了根据本申请的第二方面的第一NVMe队列管理器,包括获取模块、数据处理模块、CQM寄存器和队列填充模块,其中,获取模块从第一缓存区获取命令的处理结果;若完成队列不可用,数据处理模块将命令的处理结果存放至CQM寄存器,数据处理模块将CQM寄存器的内容搬移到第二缓存区;在完成队列可用时,队列填充模块将第一缓存区中的命令的处理结果和/或第二缓存区中的命令的处理结果填充到完成队列。
根据本申请的第一NVMe队列管理器,提供了根据本申请的第二方面的第二NVMe队列管理器,NVMe队列管理器还包括判断模块,判断模块在将命令的处理结果存放至CQM寄存器之前,判断完成队列是否可用,其中,在完成队列有可写入数据的存储空间时,判断完成队列可用,在完成队列没有可写入数据的存储空间时,判断完成队列不可用。
根据本申请的第一或第二NVMe队列管理器,提供了根据本申请的第二方面的第三NVMe队列管理器,数据处理模块在从第一缓存区获取命令的处理结果之后,将命令的处理结果存放至NVMe控制器;NVMe控制器与NVMe队列管理器耦合或者NVMe队列管理器包括NVMe控制器。
根据本申请的第三NVMe队列管理器,提供了根据本申请的第二方面的第四NVMe队列管理器,数据处理模块在将命令的处理结果存放至CQM寄存器,包括:所述NVMe控制器将所述命令的处理结果搬移至所述CQM寄存器;或者,所述NVMe控制将所述命令的处理结果从所述第一缓存区搬移至所述CQM寄存器。
根据本申请的第一至第四NVMe队列管理器之一,提供了根据本申请的第二方面的第五NVMe队列管理器,第二缓存区位于CQM寄存器内,数据处理模块响应于所述将所述命令的处理结果存放至CQM寄存器,更新所述CQM寄存器在所述第二缓存区内的位置,使得所述CQM寄存器得以接收新的命令的处理结果。
根据本申请的第一至第五NVMe队列管理器之一,提供了根据本申请的第二方面的第六NVMe队列管理器,数据处理模块将CQM寄存器的内容搬移到第二缓存区,包括:数据处理模块向CQM寄存器发送第三命令,以使CQM寄存器将自身的内容搬移到第二缓存区;或者,数据处理模块向处理器发送第四命令,以使处理器将内容从CQM寄存器搬移到第二缓存区,处理器与CQM寄存器耦合。
根据本申请的第二NVMe队列管理器,提供了根据本申请的第二方面的第七NVMe队列管理器,在完成队列可用时,队列填充模块将第一缓存区中的命令的处理结果填充到完成队列。
根据本申请的第一至第六NVMe队列管理器之一,提供了根据本申请的第二方面的第八NVMe队列管理器,队列填充模块在完成队列可用时,将第一缓存区中的命令的处理结果和/或第二缓存区中的命令的处理结果填充到完成队列,包括:在将CQM寄存器的内容搬移到第二缓存区之后,队列填充模块将第二缓存区中的命令的处理结果搬移至第一缓存区;响应于完成队列可用,队列填充模块将第一缓存区中的命令的处理结果填充到完成队列;或者,在将CQM寄存器的内容搬移到第二缓存区之后,响应于完成队列可用,队列填充模块将第二缓存区中的命令的处理结果填充到完成队列。
根据本申请的第八NVMe队列管理器,提供了根据本申请的第二方面的第九NVMe队列管理器,队列填充模块将第二缓存区中的命令的处理结果搬移至第一缓存区,包括:在第一缓存区存储有除第二缓存区中的命令的处理结果之外的其它命令的处理结果时,队列填充模块将第二缓存区中的命令的处理结果搬移至第一缓存区,以使队列填充模块在将第一缓存区中的命令的处理结果填充到完成队列时,先将从第二缓存区搬移来的命令的处理结果先填充到完成队列。
根据本申请的第八NVMe队列管理器,提供了根据本申请的第二方面的第十NVMe队列管理器,响应于完成队列可用,队列填充模块还确定第二缓存区域中是否有命令的处理结果;若第二缓存区中没有命令的处理结果,则队列填充模块将第一缓存区中的命令的处理结果填充到完成队列;若第二缓存区中有命令的处理结果,则队列填充模块将第二缓存区中的命令的处理结果填充到完成队列,再将第一缓存区中的命令的处理结果填充到完成队列。
根据本申请的第二至第十NVMe队列管理器之一,提供了根据本申请的第二方面的第十一NVMe队列管理器,判断模块判断完成队列是否可用,包括:判断模块检测完成队列已使用的存储空间的容量;比较预存的完成队列的存储空间的总容量和已使用的存储空间的容量;在已使用的存储空间的容量小于总容量时,判断完成队列可用;或者,若完成队列在主机内,判断模块向主机发送查询请求,查询请求用于询问主机完成队列是否可用;在主机返回指示完成队列可用是,判断完成队列可用。
根据本申请的第一至第十一NVMe队列管理器之一,提供了根据本申请的第二方面的第十二NVMe队列管理器,第一缓存区和/或第二缓存区为队列。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为现有技术中的存储设备的框图;
图2为本申请实施例提供的一种主机与根据NVMe协议的存储设备控制部件交换命令的架构图;
图3为本申请实施例提供的一种NVMe队列管理器的结构示意图;
图4为本申请实施例提供的一种NVMe队列管理方法的流程图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请说明、权利要求书及附图中的术语“第一”、“第二”和“第三”等是用于区分不同对象,而不是用于限定特定顺序。此外,术语“包括”和“具有”以及它们的各种变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,二是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或模块。
本申请中提及的“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地或隐式地理解的是,本申请所描述的实施例可以与其它实施例相结合。
为了便于本领域技术人员理解,下面对本申请的部分用语进行解释。
递交队列SQ和完成队列CQ都是一种先入先出(FirstInputFirstOutput,FIFO)的队列。主机和支持NVMe协议的存储设备的控制部件都可以访问SQ和CQ。SQ和CQ通常位于主机的DDRDRAM(DoubleDataRate Synchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器)中,SQ和CQ也可以设置于存储设备的控制部件内。SQ和CQ会将一个存储区域划分出若干个等长的小存储块(称为队列条目或条目),每个条目用于存储一个定长的消息(例如发送消息和完成消息)。这两个队列均包括一个头指针和一个尾指针,每次写入一个消息,尾指针就向后移动一个小存储块;每次读出一个消息后,头指针也向后移动一个条目。当头指针和尾指针相等时,即头指针和尾指针指向同一个条目,队列为空。指针移动到队列的最后一个条目之后,下一次移动就会回到最开始的条目,也就是说,SQ和CQ是圆环队列。而当尾指针的下一次就会移动到头指针所在的条目时,表征该队列已经满了,不能再写入新的消息。
本申请中的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,表示单独存在A、同时存在A和B、或单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
下面结合附图对本申请的实施例进行描述。
为了更好的理解本申请的实施例,下面先对本申请实施例的基本架构进行描述。参见图2,图2为本申请实施例提供的一种主机与根据NVMe协议的存储设备控制部件交换命令的架构图。图2中的SQ201和CQ202位于主机200内,存储设备的控制部件203与主机耦合。例如,主机200将读命令写入SQ201内,并向存储设备的控制部件203发出提示信息,以提示存储设备的控制部件203从SQ201中读取出该读命令。存储设备的控制部件203在处理完读命令之后,将处理结果写入CQ202中,然后存储设备的控制部件203向主机200发出提示信息,从而告知主机200可以从CQ中读取出该处理结果。本实施例中,提示信息包括中断请求、更新根据NVMe协议的门铃寄存器等,在此不做限制。
图3示例性地给出了NVMe队列管理器的结构示意图。参见图3,NVMe队列管理器300包括获取模块301、数据处理模块302、CQM(CompletionQueueManager,完成队列管理)寄存器303、队列填充模块304、判断模块305。本实施例中的NVMe队列管理器300执行本申请中的NVMe队列管理方法。应当理解的是,本申请中的NVMe队列管理方法并不限于由NVMe队列管理器300执行,还可以由其他与NVMe队列管理器300实现相同功能的电子器件执行,或集成于控制部件203内。
下面将以NVMe队列管理器300执行本申请的中NVMe队列管理方法为例,来描述本申请中的NVMe队列管理方法。
参见图4,本实施例中的NVMe队列管理方法包括以下步骤:
步骤S401,从第一缓存区获取命令的处理结果;
步骤S402,若完成队列不可用,将命令的处理结果存放至CQM寄存器;
步骤S403,将CQM寄存器的内容搬移到第二缓存区;
步骤S404,在完成队列可用时,将第一缓存区中的命令的处理结果和/或第二缓存区中的命令的处理结果填充到完成队列。
首先,获取模块301执行步骤S401。
例如,获取模块301从第一缓存区306获取命令的处理结果,该命令的处理结果为控制部件203存储到第一缓存区306的。需要说明的是,第一缓存区306中可以存储多个命令的处理结果,获取模块301获取处理结果时,可以获取至少一个处理结果,由于数量并非本申请的重点,并未强调该数量。本申请全文中的命令的处理结果均意为至少一个处理结果,在下文不再赘述。例如,获取模块301从第一缓存区306中获取了5个命令的处理结果,这5个命令包括读命令、写命令和/或擦除命令等。
可选地,在数据处理模块302执行步骤S402之前,由判断模块305判断完成队列是否可用,其中,在完成队列有可写入数据的存储空间时,判断完成队列可用,在完成队列没有可写入数据的存储空间时,判断完成队列不可用。
作为举例,判断模块305采取以下方式来进行判断,包括:
方式1,检测完成队列已使用的存储空间的容量;比较预存的完成队列的存储空间的总容量和已使用的存储空间的容量;在已使用的存储空间的容量小于总容量时,判断完成队列可用。
方式2,若完成队列在主机内,向主机发送查询请求,查询请求用于询问主机完成队列是否可用;在主机返回指示完成队列可用是,判断完成队列可用。
方式3,访问完成队列的头指针和尾指针;若尾指针所指向的小存储块的下一个为头指针所指向的小存储块,则确定完成队列可用。
对于上述方式1,例如CQ的总大小为640比特,已经使用的存储空间为128比特,从而已使用的存储空间的容量小于总容量,判断该完成队列可用。
对于上述方式2,判断模块305向主机200发送查询请求,由主机200自行判断完成队列当前是否可用,并将判断结果指示给判断模块305。例如主机200判断当前完成队列不可用,从而指示判断模块305完成队列不可用。需要注意的是,本申请中的CQ可以位于主机或控制部件203内,在此不做限定。
对于上述方式3,判断模块305通过访问头指针和尾指针,得到尾指针和头指针当前的位置,例如,尾指针当前距离头指针12个条目,从而判断完成队列可用。
执行完步骤S401之后,数据处理模块302执行步骤S402或S404。
具体的,在完成队列可用时,执行步骤S404,将第一缓存区中的命令的处理结果填充到完成队列。在这种情况下,由于将命令的处理结果存储到第一缓存区306之后,完成队列可用,从而队列填充模块304可以直接将该处理结果填充到完成队列。例如,第一缓存区306中有10个命令的处理结果,完成队列可用,但完成队列当前只能存储5个命令的处理结果,则队列填充模块304将第一缓存区306最靠前的5个处理结果填充到完成队列。
而在完成队列不可用时,数据处理模块302则执行步骤S402,即数据处理模块302将命令的处理结果存放至CQM寄存器303。
可选地,数据处理模块302响应于完成队列不可用,而将命令处理结果存储到CQM寄存器303,而不关心CQM寄存器303是否已被写入了其他的命令处理结果。从而数据模块302的设计得以简化。
在一些实施例中,数据处理模块302将从第一缓存区获取命令的处理结果发送给NVMe控制器,从而命令的处理结果可以暂时在NVMe控制器中存放,等待确定完成队列是否可用。该NVMe控制器与NVMe队列管理器300耦合,或者,NVMe队列管理器300包括该NVMe控制器。从而在执行步骤S402时,NVMe控制器将命令的处理结果搬移至CQM寄存器303;或者,NVMe控制器将命令的处理结果从第一缓存区306搬移至CQM寄存器。
例如,数据处理模块302向NVMe控制器发送搬移请求,NVMe控制器将命令的处理结果搬移至CQM寄存器303。
又如,获取模块301没有将命令的处理结果暂时保存在NVMe控制器内,数据处理模块302向NVMe控制器发送另一搬移请求,从而NVMe控制器将第一缓存区306中的命令的处理结果搬移至CQM寄存器303
在一些实施例中,CQM寄存器303是位于第二缓存区307内的虚拟的寄存器。CQM寄存器303同第二缓存区307的存储位置相关联。将命令处理结果搬移到CQM寄存器即为将命令处理结果搬移到第二缓存区307内的同CQM寄存器关联的存储位置。以及响应于将命令的处理结果存放至CQM寄存器,更新CQM寄存器同第二缓存区内相关联的存储位置,使得CQM寄存器得以接收新的命令的处理结果。例如,第二缓存区307被组织为队列,CQM寄存器关联于第二缓存器307内的队列的队尾,向CQM寄存器写入数据相当于向队列填充数据。响应于向CQM寄存器写入了数据,使更新队列的队尾指针。
执行完步骤S402之后,执行步骤S403。即,将CQM寄存器303的内容搬移到第二缓存区307。
可选地,采用下列方式:
方式3,响应于CQM寄存器303被填充了数据,将CQM寄存器的内容搬移到第二缓存区307;
方式4,向处理器发送中断,处理器通过执行中断服务程序将CQM寄存器303的内容搬移到第二缓存区307。
对于方式3,例如,CQM寄存器303在检测到自身被写入数据之后或者自身已被写满,主动将自身保存的所有内容搬移到第二缓存区307
对于方式4,例如,NVMe队列管理器300还包括一处理器(未在图中示出),CQM寄存器303在被数据填充满以后或周期性地向处理器发送数据搬移请求,从而处理器将CQM寄存器303的内容搬移到第二缓存区307。
从而CQM寄存器303中的内容被及时搬移到第二缓存区307,即使下一个命令的处理结果在很短时间内又被数据处理模块302写入了CQM寄存器,也不会导致CQM寄存器之前保存的命令处理结果被覆盖。而第二缓存区307相比于CQM寄存器有更大的存储空间,能容纳更多的无法被提交给完成队列的命令处理结果。
可选地,第二缓存区307被组织为队列,队列的每个条目容纳命令的处理结果之一。依然可选地,在中断服务程序中管理和操作第二缓存区307的队列。
在执行完步骤S403之后,也会执行步骤S404。具体包括以下情况:
情况1,在将CQM寄存器303的内容搬移到第二缓存区307之后,将第二缓存区307中的命令的处理结果搬移至第一缓存区306;响应于完成队列可用,将第一缓存区306中的命令的处理结果填充到完成队列。
情况2,在将CQM寄存器303的内容搬移到第二缓存区307之后,响应于完成队列可用,将第二缓存区306中的命令的处理结果填充到完成队列。
对于情况1,在命令的处理结果搬移到第二缓存区307之后,会周期性地或响应于指定条件满足而将第二缓存区307内的命令的处理结果搬移到第一缓存区306内,并可继续按照步骤S401-S404的方法循环执行,直至命令的处理结果均填充到完成队列中。例如,处理器会计时,每隔3s或30s将第二缓存区307中处理结果搬移到第一缓存区306。又如,在将处理结果搬移到第二缓存区307之后,周期性地通过判断模块305判断完成队列是否可用,并在得到完成队列可用的判断结果时,将第二缓存区307内的处理结果搬移到第一缓存区306内,然后将第一缓存区306内的处理结果填充到完成队列。
可选地,第一缓存区306和/或第二缓存区307为队列。例如,第一缓存区和第二缓存区307均为队列,则仍旧按照处理结果在第二缓存区307内的排列方式将处理结果搬移到第一缓存区306,从而不需要调整处理结果的顺序即可搬移该处理结果。
而对于情况2,例如,在将处理结果搬移到第二缓存区307之后,周期性地或响应于指定条件发生判断完成队列是否可用,在得到完成队列可用的判断结果时,将第二缓存区307内的处理结果填充到完成队列。
在一些实施例中,在将处理结果搬移到第二缓存区307之后,周期性地或响应于指定条件发生判断完成队列是否可用,并在得到完成队列可用的判断结果时,将第二缓存区307内的处理结果搬移到第一缓存区306内,并且使得在将第一缓存区中的命令的处理结果填充到完成队列之前,先将从第二缓存区搬移来的命令的处理结果先填充到完成队列。
在另一些实施例中,在确定完成队列可用时,还确定第二缓存区307中是否有命令的处理结果;若第二缓存区307中没有命令的处理结果,则将第一缓存区306中的命令的处理结果填充到完成队列;若第二缓存区307中有命令的处理结果,则将第二缓存区307中的命令的处理结果填充到完成队列,再将第一缓存区306中的命令的处理结果填充到完成队列。
由于存储在第二缓存区307的命令的处理结果是因为完成队列已满或出现错误,从而导致这些命令的处理结果暂时无法填充到完成队列中,而第一缓存区306会一直存储新的命令的处理结果,从而为了保证先将旧的命令的处理结果先于新的命令的处理结果填充到完成队列,本实施例中,在每次确定完后队列可用之后,还会判断第二缓存区307内是否有命令的处理结果。例如,判断出第二缓存区307内有命令的处理结果,则先将第二缓存区307内的处理结果填充到完成队列。例如,第二缓存区307内有8个命令的处理结果,而完成队列虽然可用,但完成队列仅能填充4个处理结果,从而将第二缓存区307内排序在前的4个处理结果填充到完成队列,剩余的4个继续等待下一次完成队列可用,而此时的第一缓存区306中的命令的处理结果则执行步骤S401、S402和S403。
继续参见图3,本申请实施例还提供了NVMe队列管理器300,包括获取模块301、数据处理模块302、CQM寄存器303和队列填充模块304。本实施例中,NVMe队列管理器300执行上述实施例中NVMe队列管理方法的方式可参见上文中描述,在此不再赘述。本实施例中获取模块301从第一缓存区306获取命令的处理结果;若完成队列不可用,数据处理模块302将命令的处理结果存放至CQM寄存器303,数据处理模块302将CQM寄存器303的内容搬移到第二缓存区;在完成队列可用时,队列填充模块304将第一缓存区306中的命令的处理结果和/或第二缓存区307中的命令的处理结果填充到完成队列。
可选地,队列填充模块304用于将第一缓存区306中的命令的处理结果填充到完成队列,而处理器通过执行固件(软件)将第二缓存区307中的命令的处理结果填充到完成队列。进一步地,处理器通过执行固件(软件)而识别第二缓存区307中有命令的处理结果,而优先于第一缓存区306中的命令处理结果而先将第二缓冲区307中的命令的处理结果搬移到完成队列。可选地,CPU响应于第二缓存区307有命令的处理结果而指示队列填充模块304暂停搬移第一缓存区306中的命令处理结果到完成队列。
在一个实施例中,NVMe队列管理器300还包括判断模块305,判断模块305在将命令的处理结果存放至CQM寄存器303之前,判断完成队列202是否可用,其中,在完成队列202有可写入数据的存储空间时,判断完成队列可用202,在完成队列202没有可写入数据的存储空间时,判断完成队列202不可用。
在一些实施例中,数据处理模块在从第一缓存区获取命令的处理结果之后,将命令的处理结果存放至NVMe控制器;NVMe控制器与NVMe队列管理器耦合或者NVMe队列管理器包括NVMe控制器。
在一个实施例中,数据处理模块302在将命令的处理结果存放至CQM寄存器303,包括:所述NVMe控制器将所述命令的处理结果搬移至所述CQM寄存器303;或者,所述NVMe控制将所述命令的处理结果从所述第一缓存区搬306移至所述CQM寄存器303。
在一些实施例中,CQM寄存器303位于第二缓存区307内,数据处理模块302响应于所述将所述命令的处理结果存放至CQM寄存器303,更新所述CQM寄存器303在所述第二缓存区307内的位置,使得所述CQM寄存器303得以接收新的命令的处理结果。
在一些实施例中,数据处理模块302将CQM寄存器303的内容搬移到第二缓存区3077,包括:数据处理模块302向CQM寄存器303发送第三命令,以使CQM寄存器303将自身的内容搬移到第二缓存区307;或者,数据处理模块302向处理器发送第四命令,以使处理器将内容从CQM寄存器303搬移到第二缓存区307,处理器与CQM寄存器303耦合。
在一个实施例中,在完成队列202可用时,队列填充模块304将第一缓存区306中的命令的处理结果填充到完成队列202。
在一些实施例中,队列填充模块304在完成队列202可用时,将第一缓存区306中的命令的处理结果和/或第二缓存区307中的命令的处理结果填充到完成队列202,包括:在将CQM寄存器303的内容搬移到第二缓存区307之后,队列填充模块304将第二缓存区307中的命令的处理结果搬移至第一缓存区306;响应于完成队列202可用,队列填充模块304将第一缓存区306中的命令的处理结果填充到完成队列202;或者,在将CQM寄存器303的内容搬移到第二缓存区307之后,响应于完成队列202可用,队列填充模块304将第二缓存区307中的命令的处理结果填充到完成队列202。
在一个实施例中,队列填充模304块将第二缓存区307中的命令的处理结果搬移至第一缓存区306,包括:在第一缓存区306存储有除第二缓存区307中的命令的处理结果之外的其它命令的处理结果时,队列填充模304块将第二缓存区307中的命令的处理结果搬移至第一缓存区306,以使队列填充模块304在将第一缓存区306中的命令的处理结果填充到完成队列202时,先将从第二缓存区307搬移来的命令的处理结果先填充到完成队列304。
在一个实施例中,响应于完成队列202可用,队列填充模块304还确定第二缓存区域307中是否有命令的处理结果;若第二缓存区307中没有命令的处理结果,则队列填充模块304将第一缓存区307中的命令的处理结果填充到完成队列202;若第二缓存区307中有命令的处理结果,则队列填充模块304将第二缓存区307中的命令的处理结果填充到完成队列202,再将第一缓存区306中的命令的处理结果填充到完成队列202。
在一些实施例中,判断模块305判断完成队列202是否可用,包括:判断模块305检测完成队列202已使用的存储空间的容量;比较预存的完成队列202的存储空间的总容量和已使用的存储空间的容量;在已使用的存储空间的容量小于总容量时,判断完成队列202可用;或者,若完成队列202在主机内,判断模块305向主机发送查询请求,查询请求用于询问主机完成队列202是否可用;在主机返回指示完成队列202可用是,判断完成队列202可用。
在一些实施例中,第一缓存区和/或第二缓存区为队列。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种NVMe队列管理方法,其特征在于,所述方法包括:
从第一缓存区获取命令的处理结果;
若完成队列不可用,将所述命令的处理结果存放至CQM寄存器;
将CQM寄存器的内容搬移到第二缓存区;
在所述完成队列可用时,将所述第一缓存区中的命令的处理结果和/或所述第二缓存区中的命令的处理结果填充到所述完成队列。
2.如权利要求1所述的方法,其特征在于,在将所述命令的处理结果存放至CQM寄存器之前,所述方法还包括:
判断所述完成队列是否可用,其中,在所述完成队列有可写入数据的存储空间时,判断所述完成队列可用,在所述完成队列没有可写入数据的存储空间时,判断所述完成队列不可用。
3.如权利要求1或2所述的方法,其特征在于,所述CQM寄存器位于所述第二缓存区内,响应于所述将所述命令的处理结果存放至CQM寄存器,更新所述CQM寄存器在所述第二缓存区内的位置,使得所述CQM寄存器得以接收新的命令的处理结果。
4.如权利要求1-3中任一项所述的方法,其特征在于,所述将CQM寄存器的内容搬移到第二缓存区,包括:
响应于CQM寄存器被填充了数据,将CQM寄存器的内容搬移到所述第二缓存区;或者,
向处理器发送中断,以使所述处理器将所述CQM寄存器的内容搬移到所述第二缓存区。
5.如权利要求1-4中任一项所述的方法,其特征在于,所述在所述完成队列可用时,将所述第一缓存区中的命令的处理结果和/或所述第二缓存区中的命令的处理结果填充到所述完成队列,包括:
在所述将CQM寄存器的内容搬移到第二缓存区之后,将所述第二缓存区中的命令的处理结果搬移至所述第一缓存区;响应于所述完成队列可用,将所述第一缓存区中的命令的处理结果填充到所述完成队列;或者,
在所述将CQM寄存器的内容搬移到第二缓存区之后,响应于所述完成队列可用,将所述第二缓存区中的命令的处理结果填充到所述完成队列。
6.如权利要求5所述的方法,其特征在于,所述将所述第二缓存区中的命令的处理结果搬移至所述第一缓存区,包括:
在所述第一缓存区存储有除所述第二缓存区中的命令的处理结果之外的其它命令的处理结果时,将所述第二缓存区中的命令的处理结果搬移至所述第一缓存区,以使在将所述第一缓存区中的命令的处理结果填充到所述完成队列时,先将从所述第二缓存区搬移来的命令的处理结果先填充到所述完成队列。
7.如权利要求5所述的方法,其特征在于,响应于所述完成队列可用,所述方法还包括:
确定所述第二缓存区域中是否有命令的处理结果;
若所述第二缓存区中没有命令的处理结果,则将所述第一缓存区中的命令的处理结果填充到所述完成队列;
若所述第二缓存区中有命令的处理结果,则将所述第二缓存区中的命令的处理结果填充到所述完成队列,再将所述第一缓存区中的命令的处理结果填充到所述完成队列。
8.如权利要求2-7中任一项所述的方法,其特征在于,所述判断所述完成队列是否可用,包括:
检测所述完成队列已使用的存储空间的容量;比较预存的完成队列的存储空间的总容量和所述已使用的存储空间的容量;在所述已使用的存储空间的容量小于所述总容量时,判断所述完成队列可用;或者,
若所述完成队列在主机内,向所述主机发送查询请求,所述查询请求用于询问所述主机所述完成队列是否可用;在所述主机返回指示所述完成队列可用是,判断所述完成队列可用。
9.一种NVMe队列管理器,其特征在于,包括获取模块、数据处理模块、CQM寄存器和队列填充模块,其中,
所述获取模块从第一缓存区获取命令的处理结果;
若完成队列不可用,所述数据处理模块将所述命令的处理结果存放至所述CQM寄存器,所述数据处理模块将所述CQM寄存器的内容搬移到第二缓存区;
在所述完成队列可用时,所述队列填充模块将所述第一缓存区中的命令的处理结果和/或所述第二缓存区中的命令的处理结果填充到所述完成队列。
10.如权利要求9所述的NVMe队列管理器,其特征在于,所述队列填充模块在所述完成队列可用时,将所述第一缓存区中的命令的处理结果和/或所述第二缓存区中的命令的处理结果填充到所述完成队列,包括:
在所述将CQM寄存器的内容搬移到第二缓存区之后,所述队列填充模块将所述第二缓存区中的命令的处理结果搬移至所述第一缓存区;响应于所述完成队列可用,所述队列填充模块将所述第一缓存区中的命令的处理结果填充到所述完成队列;或者,
在所述将CQM寄存器的内容搬移到第二缓存区之后,响应于所述完成队列可用,所述队列填充模块将所述第二缓存区中的命令的处理结果填充到所述完成队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911066563.XA CN112765052A (zh) | 2019-11-04 | 2019-11-04 | 处理NVMe完成队列(CQ)阻塞的方法与存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911066563.XA CN112765052A (zh) | 2019-11-04 | 2019-11-04 | 处理NVMe完成队列(CQ)阻塞的方法与存储设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112765052A true CN112765052A (zh) | 2021-05-07 |
Family
ID=75692594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911066563.XA Pending CN112765052A (zh) | 2019-11-04 | 2019-11-04 | 处理NVMe完成队列(CQ)阻塞的方法与存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112765052A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722090A (zh) * | 2021-07-26 | 2021-11-30 | 浪潮电子信息产业股份有限公司 | 一种任务管理方法、装置、设备及计算机可读存储介质 |
-
2019
- 2019-11-04 CN CN201911066563.XA patent/CN112765052A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722090A (zh) * | 2021-07-26 | 2021-11-30 | 浪潮电子信息产业股份有限公司 | 一种任务管理方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10282132B2 (en) | Methods and systems for processing PRP/SGL entries | |
EP2529308B1 (en) | A system and method for read-while-write with nand memory device | |
US10338846B2 (en) | Method for reducing read buffer size requirements in NVMe based solid state drives | |
US20130212319A1 (en) | Memory system and method of controlling memory system | |
US10379745B2 (en) | Simultaneous kernel mode and user mode access to a device using the NVMe interface | |
US20150134857A1 (en) | System and Method for I/O Optimization in a Multi-Queued Environment | |
US7234004B2 (en) | Method, apparatus and program product for low latency I/O adapter queuing in a computer system | |
EP3608790B1 (en) | Modifying nvme physical region page list pointers and data pointers to facilitate routing of pcie memory requests | |
US9703716B2 (en) | Partial memory command fetching | |
US20080209084A1 (en) | Hardware-Based Concurrent Direct Memory Access (DMA) Engines On Serial Rapid Input/Output SRIO Interface | |
US8886741B2 (en) | Receive queue models to reduce I/O cache consumption | |
US20150253992A1 (en) | Memory system and control method | |
CN101877666B (zh) | 基于零拷贝方式的多应用程序报文接收方法和装置 | |
US20190035445A1 (en) | Method and Apparatus for Providing Low Latency Solid State Memory Access | |
CN111475438A (zh) | 提供服务质量的io请求处理方法及其装置 | |
US11520520B2 (en) | Memory system and method of controlling nonvolatile memory | |
CN111258932A (zh) | 加速ufs协议处理的方法与存储控制器 | |
CN112416250A (zh) | 基于NVMe的固态硬盘的命令处理方法及相关设备 | |
US11966585B2 (en) | Storage device and storage system | |
CN107851065B (zh) | 预先缓存分配器 | |
CN112765052A (zh) | 处理NVMe完成队列(CQ)阻塞的方法与存储设备 | |
CN117591023A (zh) | 一种基于硬件卸载的分散聚集列表查询写入读取方法及装置 | |
US11972110B2 (en) | Storage device and storage system | |
US20100306483A1 (en) | Data Processor with Efficient Scalable Queuing and Method Therefor | |
CN115801814A (zh) | 一种基于串口双fifo缓冲区结构的数据传输方法、系统及存储介质 |
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 |