CN107562669B - 一种NVMe协议命令处理方法、装置及*** - Google Patents
一种NVMe协议命令处理方法、装置及*** Download PDFInfo
- Publication number
- CN107562669B CN107562669B CN201610505459.6A CN201610505459A CN107562669B CN 107562669 B CN107562669 B CN 107562669B CN 201610505459 A CN201610505459 A CN 201610505459A CN 107562669 B CN107562669 B CN 107562669B
- Authority
- CN
- China
- Prior art keywords
- command
- data transmission
- controller
- nvme protocol
- queue
- 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
Images
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/1668—Details of memory controller
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Communication Control (AREA)
- Computer And Data Communications (AREA)
Abstract
公开了NVMe协议命令处理方法、装置及***。所公开的实施例提供了在终端设备中处理NVMe协议命令的方法、装置及***,在处理NVMe协议命令的过程中,一个NVMe协议命令对应于一个命令ID,一个命令ID对应于一个缓存区域,第一控制器通过第一队列和第三队列,将处理NVMe协议命令所需的指令发送至第二控制器,第二控制器通过第二队列和第四队列,将处理NVMe协议命令所需的指令发送至第一控制器,第一控制器和第二控制器根据所述命令ID,从所述命令ID对应的缓存区域获取处理NVMe协议命令所需的信息,从而实现终端设备中处理NVMe协议命令。
Description
技术领域
本发明涉及信息处理技术领域,特别是涉及一种NVMe协议命令处理方法、装置及***。
背景技术
主机与终端设备之间基于队列进行数据交换,如图10所示。主机创建提交队列和完成队列,主机将进行数据交换所需的命令填充至提交队列。终端设备从提交队列中获取命令,并对根据该命令的内容进行处理,将对该命令的处理结果填充至完成队列。主机从完成队列中获取该命令的处理结果,该命令处理完成。
目前,主机与终端设备之间按照上述过程实现数据交换时,由高速非易失存储(Non-Volatile Memory Express,NVMe)协议规定了主机填充至提交队列的命令,以及所采用的数据结构。但是,NVMe协议中并未规定终端设备如何处理NVMe协议规定的命令。
发明内容
本发明解决的技术问题在于提供一种NVMe协议命令处理方法、装置及***,从而创造性的提供了终端设备处理NVMe协议命令的实现方案。
为此,本发明解决技术问题的技术方案是:
本发明实施例提供一种NVMe协议命令处理方法,包括:
第一控制器从主机接收高速非易失存储NVMe协议命令,将所述NVMe协议命令存储至命令标识ID所对应的缓存区域;
所述第一控制器响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID;
所述第一控制器从第二队列中获取数据传输请求,所述数据传输请求包括所述命令ID,根据所述命令ID获取数据传输信息,所述数据传输请求和所述数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述数据传输请求被所述第二控制器填充至第二队列,所述数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
所述第一控制器根据所述数据传输信息发起主机与终端设备之间的数据传输;
数据传输完成后,所述第一控制器生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述命令ID;
所述第一控制器从第四队列获取命令处理完成指令,所述命令处理完成指令包括所述命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机,所述命令处理完成指令和所述NVMe协议命令完成信息是所述第二控制器判断所述NVMe协议命令处理完成后生成的,所述命令处理完成指令被所述第二控制器填充至第四队列,所述NVMe协议命令完成信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
可选的,还包括:
所述第一控制器从所述第二队列中获取新的数据传输请求,所述新的数据传输请求包括所述命令ID,根据所述命令ID获取新的数据传输信息,所述新的数据传输请求和所述新的数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述新的数据传输请求被所述第二控制器填充至第二队列,所述新的数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
返回执行所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输这一步骤。
可选的,还包括:
数据传输完成后,所述第一控制器生成数据传输完成信息,将所述数据传输完成信息存储至所述命令ID对应的缓存区域,所述数据传输完成信息用于指示数据传输是否正确。
可选的,其中,
所述第一队列和所述第三队列为同一个队列;
所述第二队列和所述第四队列为同一个队列。
可选的,还包括:
所述第一控制器分配所述命令ID,所述命令ID与缓存区域相对应。
可选的,还包括:
所述第一控制器将所述NVMe协议命令完成信息发送给主机后,释放所述命令ID所对应的缓存区域。
可选的,其中,
所述缓存区域包括至少三个子缓存区域,所述三个子缓存区域分别用于存储所述NVMe协议命令、所述数据传输信息与所述NVMe协议命令完成信息。
本发明实施例提供一种NVMe协议命令处理方法,包括:
所述第二控制器响应于第一队列中的高速非易失存储NVMe命令处理请求,所述NVMe命令处理请求包括命令ID,根据所述命令ID获取NVMe协议命令,所述NVMe命令处理请求为第一控制器响应于所接收的NVMe协议命令生成的,所述NVMe协议命令被所述第一控制器存储至所述命令ID所对应的缓存区域;
所述第二控制器处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域;
所述第二控制器响应于第三队列中的数据传输完成指令,所述数据传输完成指令包括所述命令ID,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成,所述数据传输完成指令是所述第一控制器在主机与终端设备之间的数据传输完成后生成的;
所述NVMe协议命令处理完成时,所述第二控制器生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域,所述命令处理完成指令用于指示所述第一控制器获取所述NVMe协议命令完成信息并发给主机。
可选的,还包括:
根据所述NVMe协议命令,所述第二控制器生成新的数据传输请求和新的数据传输信息,所述第二数据传输请求包括所述命令ID,将所述新的数据传输请求填充至第二队列,将所述新的数据传输信息存储至所述命令ID所对应的缓存区域,所述新的数据传输命令用于指示所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输;
返回执行所述第二控制器响应于第三队列中的数据传输完成指令,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成这一步骤。
可选的,还包括:
所述第二控制器根据所述命令ID获取数据传输完成信息,所述数据传输完成信息为数据传输完成后,所述第一控制器生成的,并且被所述第一控制器存储至所述命令ID对应的缓存区域;
所述第二控制器判断所述NVMe协议命令是否处理完成具体为:
所述第二控制器根据所述数据传输完成信息判断所述NVMe协议命令所对应的数据传输是否全部处理完成。
可选的,
所述第一队列和所述第三队列为同一个队列;
所述第二队列和所述第四队列为同一个队列。
本发明实施例提供一种NVMe协议命令处理方法,包括:
第一控制器从主机接收多个高速非易失存储NVMe协议命令,给每个NVMe协议命令生成一个命令ID,每个命令ID对应独立的缓存区域;
所述第一控制器响应于所接收的多个NVMe协议命令,给每个NVMe协议命令生成一个NVMe命令处理请求,将多个NVMe协议命令对应的NVMe命令处理请求填充至第一队列,每个NVMe命令处理请求包括该NVMe命令处理请求对应的NVMe命令所对应的命令ID;
所述第二控制器响应于所述第一队列中的多个NVMe命令处理请求,根据每个NVMe命令处理请求的命令ID获取该NVMe命令处理请求对应的NVMe协议命令;
所述第二控制器处理所述多个NVMe命令处理请求对应的NVMe协议命令,为每个NVMe命令处理请求生成对应的数据传输请求和数据传输信息,将每个NVMe命令处理请求对应的数据传输请求填充至第二队列,每个数据传输请求包括该数据传输请求对应的NVMe命令处理请求的命令ID,将每个NVMe命令处理请求对应的数据传输信息存储至该数据传输信息对应的NVMe命令处理请求的命令ID所对应的缓存区域;
所述第一控制器从所述第二队列中获取多个数据传输请求,根据每个数据传输请求的命令ID获取该数据传输请求对应的数据传输信息;
所述第一控制器根据每个数据传输请求对应的数据传输信息发起主机与终端设备之间的数据传输;
每次数据传输完成后,所述第一控制器生成与该数据传输请求对应的数据传输完成指令,数据传输完成指令包括该数据传输完成指令对应的数据传输请求的命令ID,将该数据传输完成指令填充至第三队列;
所述第二控制器从所述第三队列中获取多个数据传输完成指令,根据每个数据传输完成指令的命令ID获取NVMe协议命令,判断该NVMe协议命令是否处理完成;
所述第二控制器给每个处理完成的NVMe协议命令生成一个命令处理完成指令和NVMe协议命令完成信息,该命令处理完成指令包括该命令处理完成指令对应的NVMe协议命令的命令ID,将该命令处理完成指令填充至第四队列,将该NVMe协议命令完成信息存储至该NVMe协议命令完成信息对应的NVMe协议命令的命令ID所对应的缓存区域;
所述第一控制器从所述第四队列获取多个命令处理完成指令,根据每个命令处理完成指令的命令ID获取NVMe协议命令完成信息并发送给主机。
本发明实施例提供一种用于处理NVMe协议命令的第一装置,包括:
存储单元,用于从主机接收高速非易失存储NVMe协议命令,将所述NVMe协议命令存储至命令标识ID所对应的缓存区域;
第一生成单元,用于响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID;
获取单元,用于从第二队列中获取数据传输请求,所述数据传输请求包括所述命令ID,根据所述命令ID获取数据传输信息,所述数据传输请求和所述数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述数据传输请求被所述第二控制器填充至第二队列,所述数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
传输单元,用于根据所述数据传输信息发起主机与终端设备之间的数据传输;
第二生成单元,用于数据传输完成后,生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述命令ID;
发送单元,用于从第四队列获取命令处理完成指令,所述命令处理完成指令包括所述命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机,所述命令处理完成指令和所述NVMe协议命令完成信息是所述第二控制器判断所述NVMe协议命令处理完成后生成的,所述命令处理完成指令被所述第二控制器填充至第四队列,所述NVMe协议命令完成信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
可选的,其中,
所述获取单元,还用于从所述第二队列中获取新的数据传输请求,所述新的数据传输请求包括所述命令ID,根据所述命令ID获取新的数据传输信息,所述新的数据传输请求和所述新的数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述新的数据传输请求被所述第二控制器填充至第二队列,所述新的数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
返回所述传输单元。
可选的,还包括:
第三生成单元,用于数据传输完成后,生成数据传输完成信息,将所述数据传输完成信息存储至所述命令ID对应的缓存区域,所述数据传输完成信息用于指示数据传输是否正确。
可选的,还包括:
分配单元,用于分配所述命令ID,所述命令ID与缓存区域相对应。。
可选的,还包括:
释放单元,用于将所述NVMe协议命令完成信息发送给主机后,释放所述命令ID所对应的缓存区域。
本发明实施例提供一种用于处理NVMe协议命令的第二装置,包括:
第一获取单元,用于响应于第一队列中的高速非易失存储NVMe命令处理请求,所述NVMe命令处理请求包括命令ID,根据所述命令ID获取NVMe协议命令,所述NVMe命令处理请求为第一控制器响应于所接收的NVMe协议命令生成的,所述NVMe协议命令被所述第一控制器存储至命令ID所对应的缓存区域;
第一生成单元,用于处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域;
判断单元,用于响应于第三队列中的数据传输完成指令,所述数据传输完成指令包括所述命令ID,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成,所述数据传输完成指令是所述第一控制器在主机与终端设备之间的数据传输完成后生成的;
第二生成单元,用于所述NVMe协议命令处理完成时,生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域,所述命令处理完成指令用于指示所述第一控制器获取所述NVMe协议命令完成信息并发给主机。
可选的,其中,
所述第一生成单元,还用于根据所述NVMe协议命令,生成新的数据传输请求和新的数据传输信息,所述第二数据传输请求包括所述命令ID,将所述新的数据传输请求填充至第二队列,将所述新的数据传输信息存储至所述命令ID所对应的缓存区域,所述新的数据传输命令用于指示所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输;
返回所述判断单元。
可选的,还包括:
第二获取单元,用于根据所述命令ID获取数据传输完成信息,所述数据传输完成信息为数据传输完成后,所述第一控制器生成的,将所述数据传输完成信息存储至所述命令ID对应的缓存区域;
则所述判断单元具体用于:根据所述数据传输完成信息判断所述NVMe协议命令所对应的数据传输是否全部处理完成。
本发明实施例提供了一种用于处理NVMe协议命令的第一装置,包括:
处理器,存储器,高速***组件互联((Peripheral Component InterconnectExpress,PCIe))控制器,所述存储器与所述PCIe控制器分别与所述处理器相耦合;
所述PCIe控制器用于从主机接收数据以及向主机发送数据;
所述存储器还用于存储指令,所述处理器用于从所述存储器取得指令并执行,所述指令使所述处理器执行下列步骤:
响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID;
从第二队列中获取数据传输请求,所述数据传输请求包括所述命令ID,根据所述命令ID获取数据传输信息,所述数据传输请求和所述数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述数据传输请求被所述第二控制器填充至第二队列,所述数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
根据所述数据传输信息发起主机与终端设备之间的数据传输;
数据传输完成后,生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述命令ID;
从第四队列获取命令处理完成指令,所述命令处理完成指令包括所述命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机,所述命令处理完成指令和所述NVMe协议命令完成信息是所述第二控制器判断所述NVMe协议命令处理完成后生成的,所述命令处理完成指令被所述第二控制器填充至第四队列,所述NVMe协议命令完成信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
可选的,其中,
通过执行指令,处理器还用于从所述第二队列中获取新的数据传输请求,所述新的数据传输请求包括所述命令ID,根据所述命令ID获取新的数据传输信息,所述新的数据传输请求和所述新的数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述新的数据传输请求被所述第二控制器填充至第二队列,所述新的数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
返回执行所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输这一步骤。
可选的,其中,
通过执行指令,处理器还用于数据传输完成后,所述第一控制器生成数据传输完成信息,将所述数据传输完成信息存储至所述命令ID对应的缓存区域,所述数据传输完成信息用于指示数据传输是否正确。
可选的,其中,
通过执行指令,处理器还用于分配所述命令ID,所述命令ID与缓存区域相对应。。
可选的,其中,
通过执行指令,处理器还用于将所述NVMe协议命令完成信息发送给主机后,释放所述命令ID所对应的缓存区域。
本发明实施例提供了一种用于处理NVMe协议命令的第二装置,包括:
处理器以及存储器,所述处理器与所述存储器相连;
所述存储器用于存储指令,所述处理器用于从所述存储器中取得指令并执行,所述指令使所述处理器执行下列步骤:
响应于第一队列中的NVMe命令处理请求,所述NVMe命令处理请求包括所述命令ID,根据命令标识ID获取NVMe协议命令,所述NVMe命令处理请求为第一控制器响应于所接收的NVMe协议命令生成的,所述NVMe协议命令被所述第一控制器存储至命令ID所对应的缓存区域;
处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域;
响应于第三队列中的数据传输完成指令,所述数据传输完成指令包括所述命令ID,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成,所述数据传输完成指令是所述第一控制器在主机与终端设备之间的数据传输完成后生成的;
所述NVMe协议命令处理完成时,生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域,所述命令处理完成指令用于指示所述第一控制器获取所述NVMe协议命令完成信息并发给主机。
可选的,其中,
通过执行指令,处理器还用于根据所述NVMe协议命令,生成新的数据传输请求和新的数据传输信息,所述第二数据传输请求包括所述命令ID,将所述新的数据传输请求填充至第二队列,将所述新的数据传输信息存储至所述命令ID所对应的缓存区域,所述新的数据传输命令用于指示所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输;
返回执行响应于第三队列中的数据传输完成指令,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成这一步骤。
可选的,其中,
通过执行指令,处理器还用于根据所述命令ID获取数据传输完成信息,所述数据传输完成信息为数据传输完成后,所述第一控制器生成的,并且被所述第一控制器存储至所述命令ID对应的缓存区域;
判断所述NVMe协议命令是否处理完成具体为:
根据所述数据传输完成信息判断所述NVMe协议命令所对应的数据传输是否全部处理完成。
本发明实施例提供了一种用于处理NVMe协议命令的***,包括:
至少一个本发明实施例提供的第一装置,至少一个本发明实施例提供的第二装置,至少一个第一装置的处理器与至少一个第二装置的处理器通过第一队列、第二队列、第三队列与第四队列交换指令,至少一个第一装置的处理器与至少一个第二装置的处理器通过缓存区域交换数据。
本发明实施例提供了一种NVMe协议处理器,包括第一控制器、第二控制器与存储器;
所述第一控制器与所述第二控制器通过多个队列交换信息;
所述第一控制器与所述第二控制器均可访问所述存储器;
所述第一控制器耦合到主机以接收来自主机的NVMe协议命令;
所述第二控制器耦合到非易失存储器,以访问非易失存储器;
所述存储器包括多个缓存区域,每个缓存区域同一个命令ID相对应;
所述第一控制器接收来自主机的第一NVMe协议命令,将第一NVMe协议命令存储至第一命令ID所对应的缓存区域,将所述第一命令ID填充至第一队列;
第二控制器响应于收到来自第一队列的第二命令ID,根据第二命令ID获取第二NVMe协议命令,处理所述第二NVMe协议命令以将第一数据传输信息存储至所述第二命令ID所对应的缓存区域,并将所述第二命令ID填充至第二队列;
所述第一控制器响应于收到来自第二队列的第三命令ID,根据第三命令ID获取第二数据传输信息,根据所述第二数据传输信息发起所述主机与设备之间的数据传输;响应于数据传输完成,将所述第三命令ID填充至第三队列;
所述第二控制器响应于收到来自第三队列的第四命令ID,根据所述第四命令ID判断第四NVMe协议命令是否处理完成;在所述第四NVMe协议命令处理完成时,生成第四NVMe协议命令完成信息,将所述第四NVMe协议命令完成信息存储至所述第四命令ID所对应的缓存区域,并将所述第四命令ID填充至第四队列;以及
所述第一控制器响应于收到来自第四队列的第五命令ID,根据所述第五命令ID获取第五NVMe协议命令完成信息并发送给所述主机。
本发明实施例提供了一种NVMe协议命令处理方法,包括:
响应于要处理来自主机的NVMe协议命令,将所述NVMe协议命令存储至第一命令ID所对应的缓存区域,将所述第一命令ID填充至第一队列;
响应于收到来自第二队列的第二命令ID,根据第二命令ID获取数据传输信息;
根据所述数据传输信息发起所述主机与终端设备之间的数据传输;
响应于数据传输完成,将所述第二命令ID填充至第三队列;
响应于收到来自第四队列的第三命令ID,根据所述第三命令ID获取NVMe协议命令完成信息并发送给所述主机。
可选的,还包括:
响应于将NVMe协议命令完成信息发送给所述主机,释放所述第三命令ID。
可选的,还包括,
申请命令ID,若申请命令ID成功,从主机获取要处理的NVMe协议命令;以及若申请命令ID失败,再次申请命令ID。
可选的,其中
命令ID对应多个缓存区域,分别用于存储NVMe协议命令、数据传输信息与NVMe协议命令完成信息;以及
根据所述第三命令ID获取NVMe协议命令完成信息是从与所述第三命令ID对应的缓存区域中获取NVMe协议命令完成信息;根据第二命令ID获取数据传输信息是从与所述第二命令ID对应的缓存区域中获取数据传输信息。
本发明实施例提供了一种NVMe协议命令处理方法,包括:
响应于收到来自第一队列的第一命令ID,根据第一命令ID获取第一NVMe协议命令,处理所述第一NVMe协议命令以将第一数据传输信息存储至所述第一命令ID所对应的缓存区域,并将第一命令ID填充至第二队列;
响应于收到来自第三队列的第二命令ID,根据所述第二命令ID判断第二NVMe协议命令是否处理完成;在所述第二NVMe协议命令处理完成时,生成第二NVMe协议命令完成信息,将所述第二NVMe协议命令完成信息存储至所述第二命令ID所对应的缓存区域,并将第二命令ID填充至第四队列。
可选的,其中,所述第二NVMe协议命令完成信息遵循NVMe协议并指示所述第二NVMe协议命令处理完成。
可选的,其中
判断所述第二NVMe协议命令是否处理完成,在所述第二NVMe协议命令处理未完成时,将第二数据传输信息存储至所述第二命令ID所对应的缓存区域,并将第二命令ID填充至第二队列。
可选的,其中,响应于收到来自第三队列的第二命令ID,还包括:更新所述第二NVMe协议命令,以指示所述第二NVMe协议命令的处理进度。
可选的,其中,数据传输信息是DMA描述符。
可选的,其中,响应于收到来自第一队列的第一命令ID,还包括:
将第三数据传输信息存储到所述第一命令ID所对应的缓存区域,并将第一命令ID填充至第五队列。
本发明实施例提供了一种NVMe协议命令处理方法,包括:
第一控制器响应于要处理来自主机的第一NVMe协议命令,申请命令ID并得到第一命令ID,将所述NVMe协议命令存储至所述第一命令ID所对应的缓存区域,将所述第一命令ID填充至第一队列;
第二控制器响应于收到来自第一队列的第一命令ID,根据第一命令ID获取第一NVMe协议命令,处理所述第一NVMe协议命令以将第一数据传输信息存储至所述第一命令ID所对应的缓存区域,并将第一命令ID填充至第二队列;
所述第一控制器响应于收到来自第二队列的第一命令ID,根据第一命令ID获取数据传输信息,根据所述数据传输信息发起所述主机与终端设备之间的数据传输;响应于数据传输完成,将所述第一命令ID填充至第三队列;
所述第二控制器响应于收到来自第三队列的第一命令ID,根据所述第一命令ID判断第一NVMe协议命令是否处理完成;在所述第一NVMe协议命令处理完成时,生成第一NVMe协议命令完成信息,将所述第一NVMe协议命令完成信息存储至所述第一命令ID所对应的缓存区域,并将第一命令ID填充至第四队列;以及
所述第一控制器响应于收到来自第四队列的第一命令ID,根据所述第一命令ID获取NVMe协议命令完成信息并发送给所述主机。
可选的,其中,
所述第二控制器判断所述第一NVMe协议命令是否处理完成,在所述第一NVMe协议命令处理未完成时,将第二数据传输信息存储至所述第一命令ID所对应的缓存区域,并将第一命令ID填充至第二队列。
可选的,其中,所述第二控制器响应于收到来自第三队列的第一命令ID,还包括:更新所述第一NVMe协议命令,以指示所述第一NVMe协议命令的处理进度。
本发明实施例提供了一种NVMe协议命令处理方法,包括:
第一控制器响应于收到来自主机的第一NVMe协议命令,申请命令ID并得到第一命令ID,将所述NVMe协议命令存储至所述第一命令ID所对应的缓存区域,将所述第一命令ID填充至第一队列;
第二控制器响应于收到来自第一队列的第二命令ID,根据第二命令ID获取第二NVMe协议命令,处理所述第二NVMe协议命令以将数据传输信息存储至所述第二命令ID所对应的缓存区域,并将第二命令ID填充至第二队列;
所述第一控制器响应于收到来自第二队列的第三命令ID,根据第三命令ID获取数据传输信息,根据数据传输信息发起所述主机与终端设备之间的数据传输;响应于数据传输完成,将所述第三命令ID填充至第三队列;
所述第二控制器响应于收到来自第三队列的第四命令ID,根据所述第四命令ID判断第四NVMe协议命令是否处理完成;在所述第四NVMe协议命令处理完成时,生成NVMe协议命令完成信息,将所述NVMe协议命令完成信息存储至所述第四命令ID所对应的缓存区域,并将第四命令ID填充至第四队列;以及
所述第一控制器响应于收到来自第四队列的第五命令ID,根据所述第五命令ID获取NVMe协议命令完成信息并发送给所述主机。
可选的,其中,
所述第二控制器判断所述第四NVMe协议命令是否处理完成,在所述第四NVMe协议命令处理未完成时,将第二数据传输信息存储至所述第四命令ID所对应的缓存区域,并将第四命令ID填充至第二队列。
可选的,其中,所述第二控制器响应于收到来自第三队列的第四命令ID,还包括:更新所述第四NVMe协议命令,以指示所述第四NVMe协议命令的处理进度。
通过上述技术方案可知,本发明有如下有益效果:
本发明实施例提供了在终端设备中处理NVMe协议命令的方法、装置及***,在处理NVMe协议命令的过程中,一个NVMe协议命令对应于一个命令ID,一个命令ID对应于一个缓存区域,第一控制器通过第一队列和第三队列,将处理NVMe协议命令所需的指令发送至第二控制器,第二控制器通过第二队列和第四队列,将处理NVMe协议命令所需的指令发送至第一控制器,第一控制器和第二控制器根据所述命令ID,从所述命令ID对应的缓存区域获取处理NVMe协议命令所需的信息,从而实现终端设备中处理NVMe协议命令的技术方案。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的用于处理NVMe协议命令的的终端设备结构示意图;
图2为本发明实施例提供的NVMe协议命令的处理方法流程图;
图3为本发明实施例提供的NVMe协议命令处理方法另一实例流程图;
图4为本发明实施例提供的NVMe协议命令处理方法实例示意图;
图5为本发明实施例提供的NVMe协议命令处理方法又一流程图;
图6为本发明实施例提供的NVMe协议命令处理方法又一流程图;
图7为本发明实施例提供的用于处理NVMe协议命令的***的框图;
图8为本发明另一实施例提供的用于处理NVMe协议命令的***的框图;
图9本发明实施例提供的用于处理NVMe协议命令的终端设备又一结构示意图;以及
图10示出了现有技术中主机与设备间通过队列交换NVMe协议命令的示意图。
具体实施方式
为了给出在终端设备中处理NVMe协议命令的的实现方案,本发明实施例提供了一种NVMe协议命令处理方法、装置及***,以下结合说明书附图对本发明的优选实施例进行说明。
实施例一
图1为本发明实施例提供的用于处理NVMe协议命令的的终端设备结构示意图,图1中终端设备包括第一控制器101和第二控制器102,第一控制器101和第二控制器102通过第一队列,第二队列,第三队列和第四队列交换命令。第一控制器101和第二控制器102根据命令ID访问存储器103,存储器103中有与所述命令ID对应的缓存区域,一个NVMe协议命令对应于一个命令ID,即一个NVMe协议命令独占一个缓存区域,第一控制器101和第二控制器102从命令ID对应的缓存区域中获取处理NVMe协议命令所需的信息。
在存储器103中提供多片缓存区域,每片缓存区域由一个唯一的命令ID所指示,从而存储器103的缓存区域的数量暗示了终端设备中能并行处理的NVMe命令的数量。
作为举例,终端设备是固态硬盘。终端设备中还包括非易失性存储器以及用于访问非易失存储器的存储器接口。终端设备在处理NVMe协议命令期间访问非易失存储器,并根据访问结果生成对NVMe协议命令的响应。
下面根据图1所示的终端设备结构示意图,对本发明实施例提供的NVMe协议命令的处理方法进行详细说明。
图2为本发明实施例提供的NVMe协议命令的处理方法流程图,所述方法包括:
201:第一控制器从主机接收NVMe协议命令,将所述NVMe协议命令存储至命令ID所对应的缓存区域。
第一控制器可以耦合到主机,接收主机发送的NVMe门铃,NVMe门铃用于指示有来自主机的待处理的NVMe协议命令。第一控制器接收到NVMe门铃后,分配一个命令ID,所述命令ID与缓存区域相对应,所述命令ID用于访问该缓存区域。接下来从主机获取NVMe协议命令。在一个例子中,第一控制器从提交队列取得主机发送的NVMe协议命令存储至给该NVMe协议命令分配的命令ID所对应的缓存区域,从而通过该命令ID可以访问NVMe协议命令。在另一个例子中,第一控制器发起直接存储器访问(Direct Memory Access,DMA)传输,来请主机将NVMe命令直接发送至命令ID对应的缓存区域进行存储。
可通过多种方式获得命令ID。在一个例子中,响应于第一控制器接收到NVMe协议门铃,第一控制器给待处理的NVMe协议命令分配一个命令ID,所述命令ID与缓存区域相对应,通过该命令ID可以访问该缓存区域。并将主机发送的NVMe协议命令存储至该命令ID对应的缓存区域。
在另一个例子中,预先设置命令ID与缓存区域之间的对应关系,第一控制器接收到一个NVMe协议门铃时,给待处理的NVMe协议命令分配一个尚未使用的缓存区域,所述缓存区域对应的命令ID即为该NVMe协议命令对应的命令ID,将该NVMe协议命令存储至该命令ID对应的缓存区域。在依然另一个例子中,将缓存区域的地址作为命令ID。
当然,还可以根据实际需要,采用其他技术方案实现给NVMe协议命令分配命令ID。
需要说明的是,第一处理器接收到NVMe协议门铃时,若没有可用的缓存区域,则暂时无法给待处理的NVMe协议命令分配命令ID。在此情况下,临时挂起该NVMe协议命令或暂停对NVMe协议命令的处理(例如,暂时不从NVMe提交队列中获取NVMe协议命令)。待第一处理器有可用的缓存区域时,成功给该NVMe协议命令分配命令ID,再从主机接收NVMe协议命令并进行处理。
202:所述第一控制器响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID。
203:第二控制器响应于第一队列中的NVMe命令处理请求,根据NVMe命令处理请求所包括的命令ID获取NVMe协议命令。
204:所述第二控制器处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域。
205:所述第一控制器响应于从第二队列中获取数据传输请求,根据数据传输请求中的命令ID获取数据传输信息。
206:所述第一控制器根据所述数据传输信息发起主机与终端设备之间的数据传输。
207:数据传输完成后,所述第一控制器生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述数据传输对应的数据传输请求所包括的命令ID。
208:所述第二控制器响应于第三队列中的数据传输完成指令,根据数据传输完成指令中的命令ID获取NVMe协议命令,判断所述NVMe协议命令是否处理完成。若所述NVMe协议命令未处理完成,返回步骤204。
第一控制器给所述NVMe协议命令生成一个NVMe命令处理请求,NVMe命令处理请求包括命令ID,通过第一队列将所述NVMe命令处理请求发送给第二控制器。NVMe命令处理请求用于指示第二控制器处理NVMe协议命令。
响应于从第一队列中收到NVMe命令处理请求,第二控制器根据命令ID从缓存区域中获取NVMe协议命令,处理所述NVMe协议命令,生成终端设备与主机进行数据传输所需的数据传输请求和数据传输信息。第二控制器通过第二队列将数据传输请求发送至第一控制器,将数据传输信息存储到与命令ID对应的缓存区域。
其中,数据传输请求包括所述命令ID,用于指示第一控制器发起终端设备与主机之间的数据传输。数据传输信息为数据传输所需的信息。数据传输信息包括主机地址终端设备的内存地址。作为举例,从NVMe协议命令中能够获取一个或多个主机内存地址,以及明示或者暗示地来自每个主机内存地址的数据长度。第二控制器从中生成数据传输信息。第二控制器为数据传输分配终端设备的内存,将主机内存地址、终端设备的内存地址作为数据传输信息。可选的,数据传输信息还可以包括数据传输长度、数据传输类型(如直接存储器访问(Direct Memory Access,DMA)传输标识符,数据传输的方向)等。
第一控制器从第二队列中获取数据传输请求,根据命令ID从缓存区域中获取数据传输信息,依据数据传输信息中的主机地址以及终端设备的内存地址,发起终端设备与主机之间的数据传输。数据传输完成后,第一控制器生成数据传输完成指令填充第三队列,数据传输完成指令包括所述命令ID,用于告知第二控制器所述数据传输请求处理完成。
在一个例子中,可选地,第一控制器将数据传输信息中数据传输长度所指示的数据传输完成后,生成数据传输完成信息,数据传输完成信息用于告知第二控制器当前处理完成的数据传输是否正确。数据传输完成信息也存储至命令ID对应的缓存区域,第二控制器可以根据命令ID访问该命令ID对应的缓存区域,获取数据传输完成信息。
第二控制器从第三队列中获取数据传输完成信息,根据命令ID从缓冲区域获取NVMe协议命令。第二控制器判断该NVMe协议命令是否处理完成。例如,第二控制器可以根据NVMe协议命令所指示的数据是否全部传输完毕,判断该NVMe协议命令是否处理完成。又例如,第二控制器还可以根据命令ID获取数据传输完成信息,根据该数据传输完成信息判断数据传输是否正确并进而确定NVMe协议命令是否处理完成。可选地,第二控制器还释放为数据传输所分配的终端设备的内存,以使该部分内存可用于其他数据传输。
在一个例子中,NVMe协议命令指示从4个主机内存地址处传输数据,而当前仅完成1次数据传输,则NVMe协议命令没有处理完(步骤208,“否”)。则第二控制器根据NVMe协议命令生成一个新的数据传输请求和一个新的数据传输信息(步骤204),新的数据传输请求包括所述命令ID。将新的数据传输请求填充至第二队列,将新的数据传输信息存储至命令ID所对应的缓存区域。
第一控制器从第二队列中获取新的数据传输请求,根据命令ID获取新的数据传输信息,根据新的数据传输信息发起主机与终端设备之间的数据传输。数据传输完成后,第一控制器再生成新的数据传输完成指令填充第三队列,新的数据传输完成指令包括命令ID。
第二控制器响应于所述第三队列中的新的数据传输完成指令,根据命令ID获取NVMe协议命令,判断该NVMe协议命令是否处理完成。若该NVMe协议命令还未处理完,则第二控制器根据该NVMe协议命令再生成一个新的数据传输请求和一个新的数据传输信息,如此循环往复,直至该NVMe协议命令处理完成。
在另一个例子中,NVMe协议命令指示将主机内存A地址处开始的4KB数据写入终端设备。第二控制器根据该NVMe协议命令生成数据传输请求和数据传输信息,数据传输信息中数据传输长度为4KB。则第一控制器接收该数据传输请求,根据命令ID从缓存区域获取数据传输信息,根据数据传输信息发起终端设备与主机的数据传输,通过一次数据传输即可将数据传输完毕。第二控制器判断NVMe协议命令处理完成,不再生成新的数据传输请求和新的数据传输信息。
在依然另一个例子中,NVMe协议命令指示将主机内存地址A1、A2、A3与A4处开始的4段4KB数据写入终端设备。第二控制器根据NVMe协议命令分配终端设备中用于接收数据的内存(地址为B1),生成数据传输请求和数据传输信息,数据传输信息中主机内存地址为A1、终端设备内存地址为B1而数据传输长度为4KB。则第一控制器接收所述数据传输请求,根据命令ID从缓存区域中获取数据传输信息,根据数据传输信息发起终端设备与主机的4KB数据传输。响应于从第三队列收到数据传输完成消息,第二控制器判断NVMe协议命令没有处理完成,再生成新的数据传输指令和新的数据传输信息(以指示主机内存地址为A2、终端设备内存地址为B2而数据传输长度为4KB)。第二控制器还在缓存区域中标记所述NVMe命令的处理进度(要传输16KB数据,已完成4KB数据)。第一控制器再接收新的数据传输指令,根据命令ID从缓存区域获取新的数据传输信息,根据新的数据传输信息发起终端设备与主机的第二次数据传输,如此往复。第二控制器需要生成4次数据传输请求和4个数据传输信息,第一控制器需要根据第二控制器4次生成的数据传输信息,发起4次主机与终端设备之间的数据传输。
这里需要说明的是,上述例子只是为了更好的说明本发明所提供的技术方案,便于读者理解,本发明所提供的NVMe协议命令处理的实现方案,并不限于上述场景实例的实现方式。
209:所述NVMe协议命令处理完成时,所述第二控制器生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述NVMe协议命令对应的命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域。
210:所述第一控制器从第四队列获取命令处理完成指令,所述命令处理完成指令包括命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机。
当NVMe协议命令处理完成时,第二控制器生成命令处理完成指令和NVMe协议命令完成信息。NVMe协议命令完成信息是遵循NVMe协议的命令完成信息,可以作为队列条目被填充到NVMe完成队列。NVMe协议命令完成信息被第二控制器写入缓存区域。第二控制器通过四队列将NVMe协议命令完成指令发送至第一控制器。第一控制器根据命令处理完成指令中的命令ID获取NVMe协议命令完成信息,将NVMe协议命令完成信息发送至主机。从而实现终端设备处理NVMe协议命令。
在一个例子中,第一队列,第二队列,第三队列和第四队列是四个单独的队列。在另一个例子中,第一控制器向第二控制器传输信息的第一队列和第三队列可以是同一个队列,第一控制器在处理NVMe协议命令的不同阶段,通过第一队列(即第三队列)向第二控制器分别发送NVMe命令处理请求以及数据传输完成指令。类似的,第二控制器向第一控制器传输信息的第二队列和第四队列也可以是同一个队列,第二控制器在处理NVMe协议命令的不同阶段,通过第二队列(即第四队列)向第一控制器分别发送数据传输请求和命令处理完成指令。
在一个例子中,命令ID所对应的缓存区域包括至少三个子缓存区域,三个子缓存区域分别用于存储NVMe协议命令、数据传输信息与NVMe协议命令完成信息。
在另一个例子中,命令ID对应的缓存区域是一个较大的缓存区域,NVMe协议命令、数据传输信息与NVMe协议命令完成信息分别存储在缓存区域的不同的子缓存区域。在依然另一个例子中,数据传输完成后,第一控制器还生成数据传输完成信息。以及缓存区域还包括一个用于存储数据传输完成信息的子缓存区域。第一控制器和第二控制器都可以根据命令ID访问该命令ID所对应的缓存区域。
由上述内容可知,本发明有如下有益效果:
在处理NVMe协议命令的过程中,一个NVMe协议命令对应于一个命令ID,一个命令ID对应于一个缓存区域,第一控制器通过第一队列和第三队列,将处理NVMe协议命令所需的指令发送至第二控制器,第二控制器通过第二队列和第四队列,将处理NVMe协议命令所需的信息发送至第一控制器,第一控制器和第二控制器根据所述命令ID,从所述命令ID对应的缓存区域获取处理NVMe协议命令所需的信息。以此方式,将处理NVMe协议命令的过程划分多个阶段任务,第一控制器和第二控制器分别处理各阶段任务,实现了终端设备中处理NVMe协议命令,降低了NVMe命令处理的延迟,提升了NVMe命令处理的并发性。
实施例二
图3为本发明另一实施例提供的NVMe协议命令处理方法流程图。在图3的实施例中,终端设备同时处理多个NVMe命令。
301:所述第一控制器从主机接收多个NVMe协议命令,将每个NVMe协议命令存储至命令ID所对应的缓存区域。
302:所述第一控制器响应于所接收的多个NVMe协议命令,给每个NVMe协议命令生成一个NVMe命令处理请求,将多个NVMe协议命令对应的NVMe命令处理请求填充至第一队列,每个NVMe命令处理请求包括该NVMe命令处理请求对应的NVMe命令所对应的命令ID。
第一控制器从主机接收多个NVMe协议命令,每接收一个NVMe协议命令,就将该NVMe协议命令存储至给该NVMe协议命令分配的缓存区域。第一控制器还要给每个所接收到的NVMe协议命令生成一个NVMe命令处理请求,并填充至第一队列。一个NVMe协议命令对应于一个命令ID,即一个NVMe协议命令对应于一个缓存区域,处理该NVMe协议命令的信息存储至该缓存区域。
在一个例子中,如图4所示,第一控制器接收第一NVMe协议命令,给第一NVMe协议命令分配一个命令ID(图4所示,命令ID为13),将第一NVMe协议命令存储至该命令ID(图4所示,命令ID为13)对应的缓存区域(命令请求缓冲区13),所述第一控制器给第一NVMe协议命令生成一个第一NVMe命令处理请求(包括命令ID 13)填充至第一队列。第一控制器接收第二NVMe协议命令,给第二NVMe协议命令分配一个命令ID(图4所示,命令ID为14),将第二NVMe协议命令存储至该命令ID(图4所示,命令ID为14)对应的缓存区域(命令请求缓冲区14),第一控制器给第二NVMe协议命令生成一个第二NVMe命令处理请求(包括命令ID 14)填充至第一队列。所述第一控制器接收第三NVMe协议命令,给第三NVMe协议命令分配一个命令ID(图4所示,命令ID为15),将第三NVMe协议命令存储至该命令ID(图4所示,命令ID为15)对应的缓存区域(命令请求缓冲区15),第一控制器给第三NVMe协议命令生成一个第三NVMe命令处理请求(包括命令ID 15)填充至第一队列。如此类推,第一队列中有多个NVMe命令处理请求。
本发明的实施例中,命令ID与缓存区域的独立存储空间一一对应。图4所示的实例中,缓存区域包括16份独立的存储空间,每份存储空间包括命令请求缓冲区、命令完成缓冲区与数据传输信息缓冲区。通过命令ID可寻址专用于该命令ID的缓存区域以及缓存区域中的命令请求缓冲区、命令完成缓冲区与数据传输信息缓冲区。图4所示的缓存区域能够容纳同时被处理的16个NVMe协议命令。
为分配命令ID,第一控制器寻找当前未被使用的命令ID。在图4中,编号为1-15的命令ID已被使用,而编号为16的命令ID能够被分配给新收到的NVMe协议命令。因而,在上图的情况下,若收到新的NVMe协议命令,第一控制器可为处理该NVMe协议命令而分配编号为16的命令ID。若没有可用的命令ID,则第一控制器暂时挂起对新NVMe协议命令的处理。在NVMe协议命令处理完成后,为其分配的命令ID将被回收,并可被分配给新的NVMe协议命令。
在另一个例子中,响应于收到NVMe门铃,第一控制器获取可用的命令ID。在有可用的命令ID时,再从主机获取NVMe协议命令,并将所获取的可用命令ID分配给所获取的NVMe协议命令。当终端设备没有可用的命令ID时,暂停从主机获取NVMe协议命令。以及在依然另一个例子中,响应于收到NVMe门铃,第一控制器获取N个可用的命令ID,并从主机中获取N个NVMe协议命令,为每个NVMe协议命令分配命令ID。以此方式减少主机与终端设备之间的数据传输次数,充分利用总线带宽。
303:所述第二控制器响应于所述第一队列中的多个NVMe命令处理请求,根据每个NVMe命令处理请求的命令ID获取该NVMe命令处理请求对应的NVMe协议命令。
304:所述第二控制器处理所述多个NVMe命令处理请求对应的NVMe协议命令,为每个NVMe命令处理请求生成对应的数据传输请求和数据传输信息,将每个NVMe命令处理请求对应的数据传输请求填充至第二队列,每个数据传输请求包括该数据传输请求对应的NVMe命令处理请求的命令ID,将每个NVMe命令处理请求对应的数据传输信息存储至该数据传输信息对应的NVMe命令处理请求的命令ID所对应的缓存区域。
第二控制器响应第一队列中每个NVMe命令处理请求,根据每个NVMe命令处理请求携带的命令ID从缓存区域获取NVMe协议命令进行处理。
在图4所示的例子中,第二控制器响应于从第一队列中获取包括编号为9的命令ID的NVMe命令处理请求,根据编号为9的命令ID从缓存区域的命令请求缓冲区的编号为9的条目获取NVMe协议命令,处理NVMe协议命令生成包括编号为9的命令ID的数据传输请求和数据传输信息,将包括编号为9的命令ID的数据传输请求填充至第二队列,将数据传输信息存储至缓存区域的数据传输缓冲区的编号为9的条目。第二控制器响应于从第一队列中获取包括编号为10的命令ID的NVMe命令处理请求,根据NVMe命令处理请求的命令ID从缓存区域的命令请求缓冲区的编号为10的条目获取NVMe协议命令,处理NVMe协议命令生成包括编号为10的命令ID的数据传输请求和数据传输信息,将数据传输请求填充至第二队列,将数据传输信息存储至缓存区域的数据传输缓冲区的编号为10的条目。第二控制器还响应于从第二队列中获取包括编号为11的命令ID的NVMe命令处理请求,根据NVMe命令处理请求的命令ID从缓存区域的命令请求缓冲区的编号为11的条目获取NVMe协议命令,处理NVMe协议命令生成包括编号为11的命令ID的数据传输请求和数据传输信息,将数据传输请求填充至第二队列,将数据传输信息存储至缓存区域的数据传输缓冲区的编号为11的条目。如此类推,第二队列中依次排列有多个数据传输请求。
305:所述第一控制器从所述第二队列中获取多个数据传输请求,根据每个数据传输请求的命令ID获取该数据传输请求对应的数据传输信息。
306:所述第一控制器根据每个数据传输请求对应的数据传输信息发起主机与终端设备之间的数据传输。
307:每次数据传输完成后,所述第一控制器生成与该数据传输请求对应的数据传输完成指令,数据传输完成指令包括该数据传输完成指令对应的数据传输请求的命令ID,将该数据传输完成指令填充至第三队列。
第一控制器处理第二队列中的数据传输请求,每次数据传输完成后,第一控制器生成一个与该数据传输请求对应的数据传输完成指令填充至第三队列。
在图4所示例子中,第一控制器响应于从第二队列收到包括编号为5的命令ID的数据传输请求,从数据传输信息缓冲区的编号为5的条目中取出数据传输信息,根据数据传输信息在终端设备与主机之间发起数据传输。数据传输完成后,第一控制器生成包括编号为5的命令ID的数据传输完成指令,将数据传输完成指令填充至第三队列。第一控制器响应于从第二队列收到包括编号为6的命令ID的第二数据传输请求,从数据传输信息缓冲区的编号为6的条目中取出数据传输信息,根据数据传输信息在终端设备与主机之间发起数据传输。数据传输完成后,第一控制器生成包括编号为6的命令ID的数据传输完成指令,将数据传输完成指令填充至第三队列。如此类推,所述第三队列中依次排列有多个数据传输完成指令。在数据传输期间,第一控制器可处理第二队列中的其他数据传输请求,处理第四队列中的命令处理完成指令,或处理主机发出的NVMe门铃。
可选地,数据传输完成指令中还指示对应的数据传输成功与否,和/或数据传输失败的原因。
308:所述第二控制器从所述第三队列中获取多个数据传输完成指令,根据每个数据传输完成指令的命令ID获取NVMe协议命令,判断该NVMe协议命令是否处理完成。对于未处理完成的NVMe协议命令,返回步骤304。对于处理完成的NVMe协议命令,推进要步骤309。
309:所述第二控制器给每个处理完成的NVMe协议命令生成一个命令处理完成指令和NVMe协议命令完成信息,该命令处理完成指令包括该命令处理完成指令对应的NVMe协议命令的命令ID,将该命令处理完成指令填充至第四队列,将该NVMe协议命令完成信息存储至该NVMe协议命令完成信息对应的NVMe协议命令的命令ID所对应的缓存区域。
在图4所示的例子中,第二控制器响应于从第三队列获得包括编号为1的命令ID的数据传输完成指令,从命令请求缓冲区的编号为1的条目中获取NVMe协议命令,第二控制器判断该NVMe协议命令处理完成,生成包括编号为1的命令ID的命令处理完成指令和NVMe协议命令完成信息,将该命令处理完成指令填充至第四队列,将该NVMe协议命令完成信息存储至缓存区域的命令完成缓冲区的编号为1的条目。第二控制器响应于从第三队列获得包括编号为2的命令ID的数据传输完成指令,从命令请求缓冲区的编号为2的条目中获取NVMe协议命令,第二控制器判断该NVMe协议命令处理完成时,生成包括编号为1的命令ID的命令处理完成指令和NVMe协议命令完成信息,将该命令处理完成指令填充至第四队列,将该NVMe协议命令完成信息存储至缓存区域的的命令完成缓冲区的编号为2的条目。如此类推,所述第四队列中依次排列有多个命令处理完成指令。
第二控制器收到数据传输完成指令后,若判断对应的NVMe协议命令处理未完成,为继续处理该NVMe协议命令,生成数据传输请求与数据传输信息,将数据传输请求***第二队列,而将数据传输信息写入数据传输信息缓冲区。以及,第二控制器还在命令请求缓冲区中记录该NVMe协议命令的处理进度。
这里需要说明的是,上述实例中,第一NVMe协议命令,第二NVMe协议命令以及第三NVMe协议命令处理完成的顺序与实际情况有关,并不仅限于上述场景实例的描述,也不限于先接收的NVMe协议命令就会先处理完成。
可选地,数据传输完成指令中还指示对应的数据传输成功与否,和/或数据传输失败的原因。第二控制器从数据传输完成指令中发现数据传输失败时,使用数据传输完成指令所包括的命令ID,重新生成数据传输请求,并***第二队列。以及无需更新该命令ID所指示的数据传输缓冲区的条目,以指示第一控制器再次使用该命令ID所指示的数据传输缓冲区的条目中的数据传输信息,在主机与终端设备之间发起数据传输。
在数据传输完成指令中指示数据传输成功与否会增加数据传输完成指令的尺寸,并降低第三队列的访问性能或增加第三队列的数据宽度。在依然另一个例子中,在缓存区域中提供数据传输完成信息缓冲区。类似于数据传输信息缓冲区,在数据传输完成信息缓冲区中包括可通过命令ID寻址的条目,以容纳数据传输完成信息,所述数据传输完成信息用于指示数据传输成功与否和/或数据传输失败的原因。第二控制器响应于收到数据传输完成指令,还使用数据传输完成指令所包括的命令ID,访问数据传输信息完成缓冲区中的数据传输完成信息,以获知数据传输的执行结果。
310:所述第一控制器从所述第四队列获取多个命令处理完成指令,根据每个命令处理完成指令的命令ID获取NVMe协议命令完成信息并发送给主机。
在图4所示的例子中,第一控制器响应于从第四队列获取包括编号为1的命令ID的命令处理完成指令,从命令完成缓冲区的编号为1的条目中获取NVMe协议命令完成信息并发送给主机。以及释放编号为1的命令ID。第一控制器响应于从第四队列获取包括编号为2的命令ID的命令处理完成指令,将从命令完成缓冲区的编号为2的条目中获取NVMe协议命令完成信息并发送给主机。以及释放编号为2的命令ID。如此类推。
这里需要说明的是,在根据本发明的实施例中,每个NVMe协议命令处理的过程被划分为多个阶段。即,在同一时刻,第一控制器接收NVMe协议命令,第二控制器响应于第一队列中的NVMe命令处理请求(此NVMe命令处理请求是第一控制器根据先前时刻接收的NVMe协议命令生成的),第一控制器从所述第二队列中获取数据传输请求(此数据传输请求是第二控制器在先前时刻生成的),第二控制器响应于第三队列中的数据传输完成指令(此数据传输完成指令是第一控制器在先前时刻生成的),第一控制器从第四队列获取命令处理完成指令(此命令处理完成指令是第二控制器在先前时刻生成的)。也就是说,在同一时刻,第一控制器和第二控制器通过多个队列进行交互,同时并行处理多个NVMe协议命令。如图4所示,15个NVMe协议命令被并行处理,其中对应于编号为13-15的命令ID的NVMe协议命令刚被分配了命令ID,对应于编号为5-12的命令ID的NVMe协议命令在进行数据传输,而对应于编号为1-4的命令ID的NVMe协议命令已被执行完成,但尚未向主机传输NVMe协议命令完成信息。
实施例二中对多个NVMe协议命令的不同处理阶段的并行处理方式,可以提高NVMe协议命令的处理效率。
实施例三
图5为本发明实施例提供的NVMe协议命令处理方法又一流程图。
501:第一控制器从主机接收NVMe协议命令,将所述NVMe协议命令存储至命令标识ID所对应的缓存区域。
502:所述第一控制器响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID。
503:所述第一控制器响应于从第二队列中获取数据传输请求,所述数据传输请求包括命令ID,根据命令ID获取数据传输信息,所述数据传输请求和所述数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述数据传输请求被所述第二控制器填充至第二队列,所述数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
504:所述第一控制器根据所述数据传输信息发起主机与终端设备之间的数据传输。
505:数据传输完成后,所述第一控制器生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述数据传输所对应的数据传输请求的命令ID。
506:所述第一控制器响应于从第四队列获取命令处理完成指令,所述命令处理完成指令包括命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机,所述命令处理完成指令和所述NVMe协议命令完成信息是所述第二控制器判断所述NVMe协议命令处理完成后生成的,所述命令处理完成指令被所述第二控制器填充至第四队列,所述NVMe协议命令完成信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
实施例三描述了以第一控制器为执行主体的NVMe协议命令处理方法。
实施例四
图6为本发明实施例提供的NVMe协议命令处理方法又一流程图。
601:第二控制器响应于第一队列中的NVMe命令处理请求,所述NVMe命令处理请求包括所述命令ID,根据命令标识ID获取NVMe协议命令,所述NVMe命令处理请求为第一控制器响应于所接收的NVMe协议命令生成的,所述NVMe协议命令被所述第一控制器存储至命令ID所对应的缓存区域。
602:所述第二控制器处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域。
603:所述第二控制器响应于第三队列中的数据传输完成指令,所述数据传输完成指令包括命令ID,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成,所述数据传输完成指令是所述第一控制器在主机与终端设备之间的数据传输完成后生成的。
604:NVMe协议命令处理完成时,所述第二控制器生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述NVMe协议命令对应的命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域,所述命令处理完成指令用于指示所述第一控制器获取所述NVMe协议命令完成信息并发给主机。
实施例五
图7为本发明实施例提供的用于处理NVMe协议命令的***的框图。
根据本发明实施例的用于处理NVMe协议命令的***包括第一控制器、第二控制器、DRAM(动态随机访问存储器)与PCIe控制器。该***通过PCIe总线耦合到主机。第一控制器与第二控制器通过总线耦合到DRAM。
主机通过PCIe控制器更新NVMe门铃寄存器(图7中未示出)。第一控制器响应于NVMe门铃寄存器被更新,通过PCIe控制器从主机的NVMe提交队列中获取NVMe协议命令。第一控制器还能够通过PCIe控制器发起在主机和DRAM之间的数据传输(例如,DMA传输)。在DRAM中提供命令请求缓冲区、命令完成缓冲区与数据传输信息缓冲区。第一控制器与第二控制器通过命令ID可寻址DRAM中的命令请求缓冲区、命令完成缓冲区与数据传输信息缓冲区。
第一控制器与第二控制器之间通过多个队列(队列1、队列2、队列3与队列4)交换信息。在图7的例子中,第一控制器通过队列1与队列3向第二控制器发送消息,第二控制器从队列1与队列3接收消息。第二控制器通过队列2与队列4向第一控制器发送消息,第一控制器从队列2与队列4接收消息。在图7的例子中,多个队列是硬件队列,并且队列条目的宽度可容纳命令ID。在另一个例子中,在DRAM或SRAM中提供由软件维护的多个队列。在另一个例子中,由在第一控制器与第二控制器之间的消息交换网络来替代多个队列,并且无需保证消息之间的顺序性。
第一控制器可以是一个或多个CPU,而第二控制器可以是一个或多个CPU。通过在CPU中执行软件或固件,使第一控制器与第二控制器执行各自的功能。
实施例六
图8为本发明又一实施例提供的用于处理NVMe协议命令的***的框图。
根据图8的实施例的用于处理NVMe协议命令的***包括第一控制器、第二控制器、SRAM(静态随机访问存储器)与PCIe控制器。该***通过PCIe总线耦合到主机。第一控制器与第二控制器各自耦合到DRAM。第一控制器与第二控制器之间通过多个队列(队列1、队列2、队列3与队列4)交换信息。
同图7的实施例相比,在图8的实施例中,在耦合到第一控制器的SRAM中提供数据传输信息缓冲区,在耦合到第二控制器的SRAM中提供命令请求缓冲区与命令完成缓冲区。使得将数据存储在距离使用它的控制器较近的存储器中。根据命令ID,第一控制器可寻址耦合到自己的SRAM,以及可选地,第一控制器也可寻址耦合到第二控制器的SRAM。根据命令ID,第二控制器可寻址耦合到自己的SRAM,以及可选地,第一控制器也可寻址耦合到第二控制器的SRAM。
为从主机获取NVMe协议命令,在图8的实施例中,第一控制器在主机与耦合到第二控制器的SRAM之间发起数据传输,将NVMe协议命令存储在耦合到第二控制器的SRAM的命令请求缓冲区。以及为了向主机传输NVMe协议命令完成信息,第一控制器在主机与耦合到第二控制器的SRAM之间发起数据传输,将NVMe协议命令完成信息从耦合到第二控制器的SRAM的命令完成缓冲区传输到内存。
可选地,第二控制器根据NVMe协议命令生成数据传输信息,将数据传输信息存储在耦合到第一控制器的SRAM的数据传输信息缓冲区。
前面已经结合图5描述了第一控制器执行的功能,以及结合图6描述了的第二控制器执行的功能。在此不再赘述。
实施例七
参看图9,缓存区域中命令请求缓冲区与命令完成缓冲区各包括16个条目,以支持同时处理16个NVMe命令。数据传输信息缓冲区包括4组(在图9中用附图标记“(1)”、“(2)”、“(3)”与“(4)”指示),每组中包括16个条目,从而使得对一个NVMe命令的多次数据传输可以并行执行,从而降低NVMe命令处理的延迟。
参看图9,第二控制器之一响应于从第一队列中接收到包括编号为5的命令ID的NVMe命令处理请求,从命令请求缓冲区的编号为5的条目中获取NVMe协议命令。第二控制器之一从NVMe协议命令中发现为处理该NVMe协议命令,要进行4次数据传输。第二控制器之一生成分别包括编号为5-1、5-2、5-3与5-4的命令ID的四个数据传输请求,并将这些数据传输***第二队列。由于任务分时处理、存在多个第二控制器或者多线程处理等原因,分别包括编号为5-1、5-2、5-3与5-4的命令ID的四个数据传输请求,在第二队列中可能位于不连续的队列条目中。
编号为5-1的命令ID,指示了对应的数据传输信息存储在数据传输缓冲区的第(1)组的编号为5的条目中;编号为5-2的命令ID,指示了对应的数据传输信息存储数据传输缓冲区的第(2)组的编号为5的条目中。以此方式,第二控制器将对应于编号为5的命令ID的NVMe协议命令的4次数据传输的数据传输信息分别存储在数据传输信息缓冲区的4个条目中,从而第一控制器能够并行处理对应于编号为5的命令ID的NVMe协议命令的4次数据传输。4次数据传输可以由多个第一控制器之一处理,也可以由多个第一控制器同时处理。
在图9所示的例子中,第一控制器已经处理完成对应编号为5-1与5-2的命令ID的数据传输请求,并将对应的数据传输完成指令放入第三队列。
在图9所示的例子中,第二控制器可通过任意次数的数据传输来处理NVMe协议命令,而对于每一条NVMe协议命令,并行处理的数据传输数量是4。例如,若编号为5的命令ID所对应的NVMe命令需要8次传输,第二控制器已经在编号为5-1、5-2、5-3与5-4的命令ID的四个数据传输请求***第二队列,在从第三队列获取到编号为5-1与5-2的命令ID所对应的数据传输完成指令后,依据该NVMe命令的处理进度,再次利用编号为5-1和/或5-2的命令ID来生成命令传输请求(***第二队列)与数据传输信息(写入数据传输缓冲区)。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (9)
1.一种NVMe协议命令处理方法,包括:
第一控制器从主机接收高速非易失存储NVMe协议命令,将所述NVMe协议命令存储至命令标识ID所对应的缓存区域;
所述第一控制器响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID;
所述第一控制器从第二队列中获取数据传输请求,所述数据传输请求包括所述命令ID,根据所述命令ID获取数据传输信息,所述数据传输请求和所述数据传输信息是第二控制器处理所述NVMe协议命令生成的,所述数据传输请求被所述第二控制器填充至第二队列,所述数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
所述第一控制器根据所述数据传输信息发起主机与终端设备之间的数据传输;
数据传输完成后,所述第一控制器生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述命令ID;
所述第一控制器从第四队列获取命令处理完成指令,所述命令处理完成指令包括所述命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机,所述命令处理完成指令和所述NVMe协议命令完成信息是所述第二控制器判断所述NVMe协议命令处理完成后生成的,所述命令处理完成指令被所述第二控制器填充至第四队列,所述NVMe协议命令完成信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
2.根据权利要求1所述的方法,还包括:
所述第一控制器从所述第二队列中获取新的数据传输请求,所述新的数据传输请求包括所述命令ID,根据所述命令ID获取新的数据传输信息,所述新的数据传输请求和所述新的数据传输信息是所述第二控制器处理所述NVMe协议命令生成的,所述新的数据传输请求被所述第二控制器填充至第二队列,所述新的数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
返回执行所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输这一步骤。
3.根据权利要求1-2任意一项所述的方法,还包括:
所述第一控制器分配所述命令ID,所述命令ID与缓存区域相对应。
4.一种NVMe协议命令处理方法,包括:
第二控制器响应于第一队列中的高速非易失存储NVMe命令处理请求,所述NVMe命令处理请求包括命令ID,根据所述命令ID获取NVMe协议命令,所述NVMe命令处理请求为第一控制器响应于所接收的NVMe协议命令生成的,所述NVMe协议命令被所述第一控制器存储至所述命令ID所对应的缓存区域;
所述第二控制器处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域;
所述第二控制器响应于第三队列中的数据传输完成指令,所述数据传输完成指令包括所述命令ID,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成,所述数据传输完成指令是所述第一控制器在主机与终端设备之间的数据传输完成后生成的;
所述NVMe协议命令处理完成时,所述第二控制器生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域,所述命令处理完成指令用于指示所述第一控制器获取所述NVMe协议命令完成信息并发给主机。
5.根据权利要求4所述的方法,还包括:
根据所述NVMe协议命令,所述第二控制器生成新的数据传输请求和新的数据传输信息,第二数据传输请求包括所述命令ID,将所述新的数据传输请求填充至第二队列,将所述新的数据传输信息存储至所述命令ID所对应的缓存区域,所述新的数据传输命令用于指示所述第一控制器根据所述新的数据传输信息发起所述主机与所述终端设备之间的数据传输;
返回执行所述第二控制器响应于第三队列中的数据传输完成指令,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成这一步骤。
6.根据权利要求4-5任意一项所述的方法,还包括:
所述第二控制器根据所述命令ID获取数据传输完成信息,所述数据传输完成信息为数据传输完成后,所述第一控制器生成的,并且被所述第一控制器存储至所述命令ID对应的缓存区域;
所述第二控制器判断所述NVMe协议命令是否处理完成具体为:
所述第二控制器根据所述数据传输完成信息判断所述NVMe协议命令所对应的数据传输是否全部处理完成。
7.一种用于处理NVMe协议命令的装置,包括:
处理器,存储器,高速***组件互联PCIe控制器,所述存储器与所述PCIe控制器分别与所述处理器相耦合;
所述PCIe控制器用于从主机接收数据以及向主机发送数据;
所述存储器用于存储指令,所述处理器用于从所述存储器取得指令并执行,所述指令使所述处理器执行下列步骤:
响应于所述NVMe协议命令,生成NVMe命令处理请求填充至第一队列,所述NVMe命令处理请求包括所述命令ID;
从第二队列中获取数据传输请求,所述数据传输请求包括所述命令ID,根据所述命令ID获取数据传输信息,所述数据传输请求和所述数据传输信息是第二控制器处理所述NVMe协议命令生成的,所述数据传输请求被所述第二控制器填充至第二队列,所述数据传输信息被所述第二控制器存储至所述命令ID所对应的缓存区域;
根据所述数据传输信息发起主机与终端设备之间的数据传输;
数据传输完成后,生成数据传输完成指令填充第三队列,所述数据传输完成指令包括所述命令ID;
从第四队列获取命令处理完成指令,所述命令处理完成指令包括所述命令ID,根据所述命令ID获取NVMe协议命令完成信息发送给主机,所述命令处理完成指令和所述NVMe协议命令完成信息是所述第二控制器判断所述NVMe协议命令处理完成后生成的,所述命令处理完成指令被所述第二控制器填充至第四队列,所述NVMe协议命令完成信息被所述第二控制器存储至所述命令ID所对应的缓存区域。
8.一种用于处理NVMe协议命令的装置,包括:
处理器以及存储器,所述处理器与所述存储器相连;
所述存储器用于存储指令,所述处理器用于从所述存储器中取得指令并执行,所述指令使所述处理器执行下列步骤:
响应于第一队列中的NVMe命令处理请求,所述NVMe命令处理请求包括所述命令ID,根据命令标识ID获取NVMe协议命令,所述NVMe命令处理请求为第一控制器响应于所接收的NVMe协议命令生成的,所述NVMe协议命令被所述第一控制器存储至命令ID所对应的缓存区域;
处理所述NVMe协议命令生成数据传输请求和数据传输信息,将所述数据传输请求填充至第二队列,所述数据传输请求包括所述命令ID,将所述数据传输信息存储至所述命令ID所对应的缓存区域;
响应于第三队列中的数据传输完成指令,所述数据传输完成指令包括所述命令ID,根据所述命令ID获取所述NVMe协议命令,判断所述NVMe协议命令是否处理完成,所述数据传输完成指令是所述第一控制器在主机与终端设备之间的数据传输完成后生成的;
所述NVMe协议命令处理完成时,生成命令处理完成指令和NVMe协议命令完成信息,所述命令处理完成指令包括所述命令ID,将所述命令处理完成指令填充第四队列,将所述NVMe协议命令完成信息存储至所述命令ID所对应的缓存区域,所述命令处理完成指令用于指示所述第一控制器获取所述NVMe协议命令完成信息并发给主机。
9.一种NVMe协议处理器,包括第一控制器、第二控制器与存储器;
所述第一控制器与所述第二控制器通过多个队列交换信息;
所述第一控制器与所述第二控制器均可访问所述存储器;
所述第一控制器耦合到主机以接收来自主机的NVMe协议命令;
所述第二控制器耦合到非易失存储器,以访问非易失存储器;
所述存储器包括多个缓存区域,每个缓存区域同一个命令ID相对应;
所述第一控制器接收来自主机的第一NVMe协议命令,将第一NVMe协议命令存储至第一命令ID所对应的缓存区域,将所述第一命令ID填充至第一队列;
第二控制器响应于收到来自第一队列的第二命令ID,根据第二命令ID获取第二NVMe协议命令,处理所述第二NVMe协议命令以将第一数据传输信息存储至所述第二命令ID所对应的缓存区域,并将所述第二命令ID填充至第二队列;
所述第一控制器响应于收到来自第二队列的第三命令ID,根据第三命令ID获取第二数据传输信息,根据所述第二数据传输信息发起所述主机与设备之间的数据传输;响应于数据传输完成,将所述第三命令ID填充至第三队列;
所述第二控制器响应于收到来自第三队列的第四命令ID,根据所述第四命令ID判断第四NVMe协议命令是否处理完成;在所述第四NVMe协议命令处理完成时,生成第四NVMe协议命令完成信息,将所述第四NVMe协议命令完成信息存储至所述第四命令ID所对应的缓存区域,并将所述第四命令ID填充至第四队列;以及
所述第一控制器响应于收到来自第四队列的第五命令ID,根据所述第五命令ID获取第五NVMe协议命令完成信息并发送给所述主机。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010162892.0A CN111352873B (zh) | 2016-06-30 | 2016-06-30 | NVMe协议命令处理方法与装置 |
CN201610505459.6A CN107562669B (zh) | 2016-06-30 | 2016-06-30 | 一种NVMe协议命令处理方法、装置及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610505459.6A CN107562669B (zh) | 2016-06-30 | 2016-06-30 | 一种NVMe协议命令处理方法、装置及*** |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010162892.0A Division CN111352873B (zh) | 2016-06-30 | 2016-06-30 | NVMe协议命令处理方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107562669A CN107562669A (zh) | 2018-01-09 |
CN107562669B true CN107562669B (zh) | 2020-04-07 |
Family
ID=60969339
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010162892.0A Active CN111352873B (zh) | 2016-06-30 | 2016-06-30 | NVMe协议命令处理方法与装置 |
CN201610505459.6A Active CN107562669B (zh) | 2016-06-30 | 2016-06-30 | 一种NVMe协议命令处理方法、装置及*** |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010162892.0A Active CN111352873B (zh) | 2016-06-30 | 2016-06-30 | NVMe协议命令处理方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN111352873B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165105A (zh) * | 2018-08-17 | 2019-01-08 | 郑州云海信息技术有限公司 | 一种主机和物理机*** |
CN109634875A (zh) * | 2018-12-12 | 2019-04-16 | 深圳忆联信息***有限公司 | 命令数据缓存处理方法、装置、计算机设备和存储介质 |
CN109639597B (zh) * | 2018-12-29 | 2021-06-25 | 深圳市道通科技股份有限公司 | 车辆通信接口装置中的数据传输方法及车辆通信接口装置 |
CN110989925A (zh) * | 2019-10-30 | 2020-04-10 | 烽火通信科技股份有限公司 | 一种分布式存储***的部署方法及装置 |
CN110795632B (zh) * | 2019-10-30 | 2022-10-04 | 北京达佳互联信息技术有限公司 | 一种状态查询方法、装置及电子设备 |
CN113722248B (zh) * | 2021-07-28 | 2023-08-22 | 湖南国科微电子股份有限公司 | 命令处理方法及命令处理装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536701A (zh) * | 2014-12-23 | 2015-04-22 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及*** |
CN105589661A (zh) * | 2014-11-12 | 2016-05-18 | 三星电子株式会社 | 数据存储装置、数据处理***和操作方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE112013000601T5 (de) * | 2012-01-17 | 2014-12-18 | Intel Corporation | Techniken für die Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client |
US8966164B1 (en) * | 2013-09-27 | 2015-02-24 | Avalanche Technology, Inc. | Storage processor managing NVME logically addressed solid state disk array |
US9986028B2 (en) * | 2013-07-08 | 2018-05-29 | Intel Corporation | Techniques to replicate data between storage servers |
US9110786B2 (en) * | 2013-11-07 | 2015-08-18 | Sandisk Technologies Inc. | Read operation prior to retrieval of scatter gather list |
US9304690B2 (en) * | 2014-05-07 | 2016-04-05 | HGST Netherlands B.V. | System and method for peer-to-peer PCIe storage transfers |
US9712619B2 (en) * | 2014-11-04 | 2017-07-18 | Pavilion Data Systems, Inc. | Virtual non-volatile memory express drive |
CN104407820B (zh) * | 2014-12-12 | 2016-08-17 | 华为技术有限公司 | 基于固态硬盘存储***的数据处理方法、装置以及*** |
-
2016
- 2016-06-30 CN CN202010162892.0A patent/CN111352873B/zh active Active
- 2016-06-30 CN CN201610505459.6A patent/CN107562669B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105589661A (zh) * | 2014-11-12 | 2016-05-18 | 三星电子株式会社 | 数据存储装置、数据处理***和操作方法 |
CN104536701A (zh) * | 2014-12-23 | 2015-04-22 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN111352873B (zh) | 2021-10-08 |
CN111352873A (zh) | 2020-06-30 |
CN107562669A (zh) | 2018-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107562669B (zh) | 一种NVMe协议命令处理方法、装置及*** | |
US20210216453A1 (en) | Systems and methods for input/output computing resource control | |
US9229751B2 (en) | Apparatus and method for managing virtual memory | |
CN107949837B (zh) | 用于i/o数据包压缩的寄存器文件 | |
US11928493B2 (en) | Sharing of FPGA board by multiple virtual machines | |
JP2006040285A (ja) | パーティショニングされたデバイス間の通信 | |
JP4224477B2 (ja) | パーティショニングされたデバイス間の通信 | |
US11474853B2 (en) | Storage device operation method and physical server | |
CN111600972A (zh) | 双栈地址的配置方法、服务器和可读存储介质 | |
US8417853B2 (en) | Universal serial bus host control methods and universal serial bus host controllers | |
CN112612623A (zh) | 一种共享内存管理的方法和设备 | |
CN114691037A (zh) | 卸载卡命名空间管理、输入输出请求处理***和方法 | |
CN115576716A (zh) | 一种基于多进程的内存管理方法 | |
CN115629882A (zh) | 多进程中的内存的管理方法 | |
EP3007067B1 (en) | Method of memory access, buffer scheduler and memory module | |
JP2006040286A (ja) | パーティショニングされたデバイス間の通信 | |
US11972110B2 (en) | Storage device and storage system | |
US8117626B2 (en) | Asynchronous remote procedure calling method and computer product in shared-memory multiprocessor | |
CN113032307A (zh) | 一种集成器件访问请求处理方法及相关组件 | |
JP2008097273A (ja) | ネットワークインタフェース装置、ネットワークインタフェース制御方法、情報処理装置、データ転送方法 | |
CN118035143A (zh) | 一种dma地址的分配方法、设备及存储介质 | |
CN118316948A (zh) | 数据传输方法 | |
CN117539627A (zh) | 基于SR-IOV协议的NVMe队列资源动态分配方法及寄存器 | |
CN116737469A (zh) | 一种隔离数据传输故障的方法、装置、介质以及服务器 | |
CN117435535A (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 |