CN106919531B - 基于非易失性存储总线协议的交互方法及设备 - Google Patents
基于非易失性存储总线协议的交互方法及设备 Download PDFInfo
- Publication number
- CN106919531B CN106919531B CN201510997669.7A CN201510997669A CN106919531B CN 106919531 B CN106919531 B CN 106919531B CN 201510997669 A CN201510997669 A CN 201510997669A CN 106919531 B CN106919531 B CN 106919531B
- Authority
- CN
- China
- Prior art keywords
- host
- controller
- remote command
- remote
- port
- 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/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4265—Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus
- G06F13/4269—Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus using a handshaking protocol, e.g. Centronics connection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0024—Peripheral component interconnect [PCI]
Abstract
本发明实施例提供了一种基于NVMe协议的交互方法和装置,该交互方法包括:控制器通过第一端口从第一主机的IO队列的SQ中获取第一远端命令;控制器解析第一远端命令,根据解析结果确定第一远端命令由第二主机执行;控制器通过第二端口将第一远端命令写入第二主机中的远端IO队列的SQ中;控制器通知第二主机执行第一远端命令。本发明实施例中,控制器将从第一主机的IO队列的SQ中获取的第一远端命令写入第二主机的远端IO队列的SQ中,能够基于NVMe协议实现第一主机与第二主机之间的命令交互。同时,由于NVMe协议具有高并发度、低时延的特性,因而能够解决NTB技术导致的传输时延的问题。
Description
技术领域
本发明涉及计算机领域,尤其涉及基于非易失性存储总线协议的交互方法及设备。
背景技术
当前存储服务器基本都是双控、四控架构,为了数据可靠性保证,存储数据都会在双控间进行数据镜像、元数据管理和指纹管理。这就决定了在双控/四控之间存在大量的命令与数据传输。
当前的双控间数据、命令传输的技术是通过与中央处理器(Central ProcessingUnit,简称CPU)相连的高速外围组件互连(Peripheral Component Interface Express,简称PCIe)交换(Switch)的非透明桥(none transparent bridge,简称NTB)接口技术实现。
NTB接口技术存在如下问题:当前PCIe Switch的直接内存访问(Direct MemoryAccess,简称DMA)通道设计为4,所以NTB接口间通讯的最大并发数只能为4,在高并发场景下,NTB接口的传输时延会显著变差。
随着新的存储介质,如高性能固态硬盘(Solid State Drives,简称SSD),的逐步普及,使后续产品具有的较高每秒进行读写操作的次数(Input/Output Operations PerSecond,简称IOPS)、低时延的特点越来越成为产品的决定性竞争力,所以NTB接口技术导致的传输时延的局限性会愈来愈大。
发明内容
本发明实施例提供了一种基于NVMe协议的交互方法,能够解决双控存储服务器中NTB接口技术导致的传输时延的问题。
第一方面,提供了一种基于非易失性存储总线NVMe协议的交互方法,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:所述控制器通过所述第一端口从所述第一主机的输入输出IO队列的提交队列SQ中获取第一远端命令;所述控制器解析所述第一远端命令,根据解析结果确定所述第一远端命令由所述第二主机执行;所述控制器通过所述第二端口将所述第一远端命令写入所述第二主机中的远端IO队列的SQ中;所述控制器通知所述第二主机执行所述第一远端命令。
本发明中,控制器将从第一主机的IO队列的SQ中获取的第一远端命令写入第二主机的远端IO队列的SQ中,能够基于NVMe协议实现第一主机与第二主机之间的命令交互。同时,由于NVMe协议具有高并发度、低时延的特性,因而能够解决双控存储服务器中NTB技术导致的传输时延问题。
可选地,所述第一远端命令为Remote_CMD命令。其中,Remote_CMD命令包括需要由远端主机(即第二主机)执行的命令。例如,Remote_CMD包括但不限于Remote_Read命令、Remote_Write命令和查询命令。
结合第一方面,在第一方面的第一种可能的实现方式中,所述控制器解析所述第一远端命令,根据解析结果确定所述第一远端命令由所述第二主机执行包括:所述控制器解析所述第一远端命令,确定所述第一远端命令的类型;所述控制器根据所述第一远端命令的类型确定所述第一远端命令由所述第二主机执行。
例如,所述第一远端命令的类型指示由所述第一主机的远端主机执行所述第一远端命令。当控制器仅与第一主机和第二主机相连时,控制器能够确定由第二主机执行。
可选地,所述第一远端命令还可以携带标识信息,所述标识信息用于指示执行所述第一远端命令的远端主机。所述控制器解析所述第一远端命令还可以得到所述标识信息。当控制器与两个以上主机相连时,对于一个主机而言,存在多个远端主机,此时控制器根据解析远端命令得到的标识信息即可确定执行该远端命令的目的远端主机。例如,所述标识信息指示执行所述第一远端命令的设备为第二主机,所述控制器根据所述第一远端命令的类型和所述标识信息即可确定所述第一远端命令由所述第二主机执行。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,还包括:所述控制器通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;所述控制器解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第二主机中的数据写入所述第一主机中;所述控制器通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;所述控制器通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;所述控制器通知所述第二主机处理所述第二响应。
可选地,所述第一远端命令为Remote_Read命令,所述第二远端命令为Remote_DMA命令。
可选地,所述第二远端命令包括所述数据的在所述第二主机中的源地址和在所述第一主机中的目标地址。
本发明中,控制器根据从第二主机的IO队列的SQ中获取的远端命令,将第二主机中的数据写入第一主机中,能够基于NVMe协议实现第一主机与第二主机之间的数据交互。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,还包括:所述控制器通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;所述控制器解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第一主机中的数据写入所述第二主机中;所述控制器通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;所述控制器通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;所述控制器通知所述第二主机处理所述第二响应。
可选地,所述第一远端命令为Remote_Write命令,所述第二远端命令为Remote_DMA命令。
可选地,所述第二远端命令包括所述数据的在所述第一主机中的源地址和在所述第二主机中的目标地址。
本发明中,控制器根据从第二主机的IO队列的SQ中获取的远端命令,将第一主机中的数据写入第二主机中,能够基于NVMe协议实现第一主机与第二主机之间的数据交互。
结合第一方面或第一方面的上述任一种可能的实现方式,在第一方面的第四种可能的实现方式中,还包括:所述控制器通过所述第二端口从所述第二主机的远端IO队列的CQ中获取第一远端响应,所述第一响应远端用于指示所述第二主机执行所述第一命令的操作结果;所述控制器通过所述第一端口将所述第一远端响应写入所述第一主机中的IO队列的CQ中;所述控制器通知所述第一主机处理所述第一远端响应。
第二方面,提供了一种基于非易失性存储总线NVMe协议的交互方法,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:所述第二主机从远端输入输出IO队列的提交队列SQ中获取由控制器写入的第一远端命令;所述第二主机解析所述第一远端命令,并执行所述第一远端命令对应的操作;所述第二主机将第一远端响应写入远端IO队列的完成队列CQ中,所述第一远端响应用于指示所述第二主机执行所述远端命令的操作结果;所述第二主机通知所述控制器处理所述第一远端响应,以便所述控制器将所述远端命令写入所述第一主机的IO队列的CQ中。
本发明中,第二主机从远端IO队列的SQ中获取由控制器写入的远端命令,并执行该远端命令对应的操作,然后将用于指示第二主机执行该远端命令的操作结果的远端响应写入远端IO队列的CQ中,并通知控制器处理该远端响应,使控制器将该远端响应写入第一主机的IO队列的CQ中,能够基于NVMe协议实现第一主机与第二主机之间的命令交互。同时,由于NVMe协议具有高并发度、低时延的特性,因而能够解决双控存储服务器中NTB接口技术导致的传输时延的问题。
结合第二方面,在第二方面的第一种可能的实现方式中,所述第二主机解析所述第一远端命令,并执行所述第一远端命令对应的操作,包括:所述第二主机解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第二主机中的数据写入所述第一主机中;所述第二主机根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第二主机中的数据写入所述第一主机中;所述第二主机将所述第二远端命令写入IO的SQ中;所述第二主机通知所述控制器执行所述第二远端命令;所述第二主机从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
可选地,所述第一远端命令为Remote_Read命令,所述第二远端命令为Remote_DMA命令。
结合第二方面,在第二方面的第二种可能的实现方式中,所述第二主机解析所述第一远端命令,并执行所述第一远端命令对应的操作,包括:所述第二主机解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第一主机中的数据写入所述第二主机中;所述第二主机根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第一主机中的数据写入所述第二主机中;所述第二主机将所述第二远端命令写入IO的SQ中;所述第二主机通知所述控制器执行所述第二远端命令;所述第二主机从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
可选地,所述第一远端命令为Remote_Write命令,所述第二远端命令为Remote_DMA命令。
第三方面,提供了一种基于非易失性存储总线NVMe协议的交互方法,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:所述控制器通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;所述控制器解析所述远端命令,根据解析结果确定所述远端命令指示将所述第二主机中的数据写入所述第一主机中;所述控制器通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;所述控制器通过所述第一端口将响应写入所述第一主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;所述控制器通知所述第二主机处理所述响应。
可选地,所述第一远端命令为Remote_Read命令,所述第二远端命令为Remote_DMA命令。
控制器根据从第二主机的IO队列的SQ中获取的远端命令,将第二主机中的数据写入第一主机中,能够基于NVMe协议实现第一主机与第二主机之间的数据交互。
第四方面,提供了一种基于非易失性存储总线NVMe协议的交互方法,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:所述控制器通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;所述控制器解析所述远端命令,根据解析结果确定所述远端命令指示将所述第一主机中的数据写入所述第二主机中;所述控制器通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;所述控制器通过所述第一端口将响应写入所述第一主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;所述控制器通知所述第一主机处理所述响应。
可选地,所述第一远端命令为Remote_Write命令,所述第二远端命令为Remote_DMA命令。
本发明中,控制器根据从第二主机的IO队列的SQ中获取的远端命令,将第一主机中的数据写入第二主机中,能够基于NVMe协议实现第一主机与第二主机之间的数据交互。
第五方面,提供了一种基于非易失性存储总线NVMe协议的交互方法,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:所述第一主机生成远端命令,所述远端命令用于指示由所述第二主机执行的操作;所述第一主机将所述远端命令写入输入输出IO队列的提交队列SQ中;所述第一主机通知所述控制器处理所述SQ中的所述远端命令,以便所述控制器通过所述第二端口将所述远端命令写入所述第二主机的远端IO队列的SQ中;所述第一主机从IO队列的完成队列CQ中获取由所述控制器写入的远端响应,所述远端响应用于指示所述第二主机执行所述远端命令的操作结果。
可选地,所述远端命令为Remote_CMD命令。其中,Remote_CMD包括但不限于Remote_Read命令、Remote_Write命令和查询命令。
第六方面,提供了一种基于非易失性存储总线NVMe协议的交互方法,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:所述第一主机生成远端命令,所述远端命令用于指示所述控制器对所述第二主机进行读数据或写数据的操作;所述第一主机将所述远端命令写入输入输出IO队列的提交队列SQ中;所述第一主机通知所述控制器处理所述远端命令;所述第一主机从IO队列的完成队列CQ中获取由所述控制器写入的远端响应,所述远端响应用于指示所述控制器执行所述远端命令的操作结果。
可选地,所述远端命令为Remote_DMA命令。
第七方面,提供了一种控制器,用于执行第一方面或第一方面的上述任一种可能的实现方式所述的交互方法。具体地,所述控制器包括:
第一端口,用于与第一主机相连;
第二端口,用于与第二主机相连;
处理单元,用于:通过所述第一端口从所述第一主机的输入输出IO队列的提交队列SQ中获取第一远端命令;解析所述第一远端命令,根据解析结果确定所述第一远端命令由所述第二主机执行;通过所述第二端口将所述第一远端命令写入所述第二主机中的远端IO队列的SQ中;
通知单元,用于通知所述第二主机执行所述第一远端命令。
结合第七方面,在第七方面的第一种可能的实现方式中,所述处理器具体用于:解析所述第一远端命令,确定所述第一远端命令的类型;根据所述远端命令的类型确定所述第一远端命令由所述第二主机执行。
结合第七方面或第七方面的第一种可能的实现方式,在第七方面的第二种可能的实现方式中,
所述处理单元还用于:通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第二主机中的数据写入所述第一主机中;通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;
所述通知单元还用于通知所述第二主机处理所述第二响应。
结合第七方面或第七方面的第一种可能的实现方式,在第七方面的第三种可能的实现方式中,
所述处理单元还用于:通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第一主机中的数据写入所述第二主机中;通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;
所述通知单元还用于通知所述第二主机处理所述第二响应。
结合第七方面或第七方面的上述任一种可能的实现方式,在第七方面的第四种可能的实现方式中,
所述处理单元还用于:通过所述第二端口从所述第二主机的远端IO队列的CQ中获取第一远端响应,所述第一响应远端用于指示所述第二主机执行所述第一命令的操作结果;通过所述第一端口将所述第一远端响应写入所述第一主机中的IO队列的CQ中;
所述通知单元还用于通知所述第一主机处理所述第一远端响应。
第八方面,提供了一种主机,用于执行第二方面或第二方面的上述任一种可能的实现方式所述的交互方法。具体地,所述主机包括:
处理单元,用于:从远端输入输出IO队列的提交队列SQ中获取由控制器写入的第一远端命令;解析所述第一远端命令,并执行所述第一远端命令对应的操作;将第一远端响应写入远端IO队列的完成队列CQ中,所述第一远端响应用于指示所述第二主机执行所述远端命令的操作结果;
通知单元,用于通知所述控制器处理所述第一远端响应,以便所述控制器将所述远端命令写入所述第一主机的IO队列的CQ中。
结合第八方面,在第八方面的第一种可能的实现方式中,所述处理单元具体用于:解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第二主机中的数据写入所述第一主机中;根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第二主机中的数据写入所述第一主机中;将所述第二远端命令写入IO的SQ中;
所述通知单元还用于通知所述控制器执行所述第二远端命令;
所述处理单元还用于从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
结合第八方面,在第八方面的第二种可能的实现方式中,所述处理单元具体用于:解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第一主机中的数据写入所述第二主机中;根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第一主机中的数据写入所述第二主机中;将所述第二远端命令写入IO的SQ中;
所述通知单元还用于通知所述控制器执行所述第二远端命令;
所述处理单元还用于从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
第九方面,提供了一种控制器,用于执行第三方面所述的交互方法。具体地,所述控制器包括:
第一端口,用于与第一主机相连;
第二端口,用于与第二主机相连;
处理单元,用于:通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;解析所述远端命令,根据解析结果确定所述远端命令指示将所述第二主机中的数据写入所述第一主机中;通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;通过所述第一端口将响应写入所述第一主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;
通知单元,用于通知所述第二主机处理所述响应。
第十方面,提供了一种控制器,用于执行第四方面所述的交互方法。具体地,所述控制器包括:
第一端口,用于与第一主机相连;
第二端口,用于与第二主机相连;
处理单元,用于:通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;所述控制器解析所述远端命令,根据解析结果确定所述远端命令指示将所述第一主机中的数据写入所述第二主机中;所述控制器通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;所述控制器通过所述第一端口将响应写入所述第一主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;
通知单元,用于通知所述第一主机处理所述响应。
第十一方面,提供了一种控制器,包括处理器、存储器、总线系统和网络接口,所述处理器、存储器和网络接口通过所述总线系统相连,所述网络接口用于与主机通信,所述存储器用于存储指令,所述处理器用于执行该存储器存储的指令,使得所述控制器执行第一方面或第一方面的上述任一种可能的实现方式所述的交互方法。
第十二方面,提供了一种主机,包括处理器、存储器、总线系统和网络接口,所述处理器、存储器和网络接口通过所述总线系统相连,所述网络接口用于与所述控制器通信,所述存储器用于存储指令,所述处理器用于执行该存储器存储的指令,使得所述主机执行第二方面或第二方面的上述任一种可能的实现方式所述的交互方法。
第十三方面,提供了一种控制器,包括处理器、存储器、总线系统和网络接口,所述处理器、存储器和网络接口通过所述总线系统相连,所述网络接口用于与主机通信,所述存储器用于存储指令,所述处理器用于执行该存储器存储的指令,使得所述控制器执行第三方面、第三方面的上述任一种可能的实现方式所述的交互方法、第四方面或第四方面的上述任一种可能的实现方式所述的交互方法。
第十四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有程序,运行所述程序使得控制器执行第一方面或第一方面的上述任一种可能的实现方式所述的交互方法。
第十五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有程序,运行所述程序使得主机执行第二方面或第二方面的上述任一种可能的实现方式所述的交互方法。
第十六方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有程序,运行所述程序使得控制器执行第三方面、第三方面的上述任一种可能的实现方式所述的交互方法、第四方面或第四方面的上述任一种可能的实现方式所述的交互方法。
附图说明
图1是本发明实施例的应用场景示意图;
图2是根据本发明一个实施例的示意性流程图;
图3是根据本发明另一实施例的示意性流程图;
图4是根据本发明一个实施例的控制器的示意性框图;
图5是根据本发明另一实施例的控制器的示意性框图;
图6是根据本发明一个实施例的主机的示意性框图;
图7是根据本发明另一实施例的主机的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
现有非易失性存储总线(Non-Volatile Memory express,简称NVMe)协议定义了两种队列:输入输出(Input Output,简称IO)队列与管理队列。其中IO队列包括提交队列(Submission Queue,简称SQ)和完成队列(Completion Queue,简称CQ),管理队列包括管理提交队列(Admin Submission Queue,简称ASQ)和管理完成队列(Admin CompletionQueue,简称ACQ)。管理队列即ID为0的SQ和CQ。管理提交队列和相应的管理完成队列用于提交管理类命令并且接收哪些管理命令的完成。
NVMe基于一种SQ和CQ配对机制。命令由Host提交到SQ。控制器将完成信息提交到CQ。一个CQ可能对应一个或多个SQ。SQ和CQ存储于主机的内存中。SQ和CQ是NVMe中非常重要的两种队列,SQ存放了Host下发的指令,CQ存放了控制器处理完成命令之后的结果。Host和控制器都要通过这两个队列才能和对方进行交互,可以说SQ和CQ是Host与控制器之间沟通的桥梁。
然而,现有NVMe协议具有两个局限性:1)、仅能实现Host与控制器间的命令交互,而无法实现Host与Host间的命令交互;2)、NVMe命令只能由Host发送、由控制器执行,而无法实现由控制器发起命令,由Host执行的操作。
NVMe协议具有的高并发度、低时延的特性可以解决NTB技术导致的传输时延的问题。
另外由于NTB的接口带宽固定,在高业务量场景下,NTB的接口带宽很容易成为系统瓶颈。
虽然双端口NVMe控制器的接口带宽固定,但在本发明实施例中,可以通过N个双端口NVMe控制器横向扩展(scale-out)来提高整体的传输带宽。
因此,本发明实施例通过改进现有NVMe协议,实现在主机与主机之间的命令与数据传输,不仅能够解决NTB技术导致的传输时延问题,还能够解决传输带宽的局限性问题。
图1是本发明实施例的应用场景示意图,图1中NMVe控制器可以为PCIe SSD、基于NVME协议的Cache设备等。应理解,图1仅以一个双端口NVMe连接在PCIe Switch上为例进行描述,但是本发明对此并不限定。通过增加连接在PCIe Switch上的双端口NVMe控制器的数量,能够提高整体的传输带宽。例如,可以将至少24个双端口NVMe控制器连接在PICeSwitch上。
还应理解,图1仅以具有两个端口的NMVe控制器为例进行描述。但本发明实施例对此并不限定,例如NVMe控制器可以具有其他数量(例如四个)的端口数,其中每个端口分别于一个主机相连。
如图1所示,两个主机分别通过PCIe交换芯片与NVMe控制器相连,PCIe交换芯片可以用于扩展主机的接口。两个主机也可以直接与NVMe控制器的端口相连,本发明实施例对此并不限定。
为了实现图1中A主机和B主机之间的命令和数据交互,本发明实施例在现有NVMe协议的基础上做了如下改进:1)新定义了一类命令队列,该新定义的命令队列可以称为远端IO队列(即Remote IO队列),图1用RCMD-Q表示远端IO队列,该远端IO队列可以包括SQ和CQ;2)新定义了远端命令,该远端命令包括Remote_CMD命令和Remote_DMA命令,该远端命令满足NVMe协议命令格式、字段定义,在命令操作码(operation code,简称opcode)定义中增加该远端命令,确保Host、NVMe控制器可以通过该远端命令的opcode识别出需要执行的具体操作,例如下表1所示,可以在当前NVMe协议中Vendor Specific字段中定义远端命令;3)NVMe控制器具有端口间的命令、数据转发功能。
本发明实施例中,Remote_DMA命令可以用于指示NVMe控制器执行涉及读写数据的操作。Remote_CMD命令包括需要由远端主机执行的一类远端命令,该类命令需要由控制器进行转发,而不需要控制器执行处理。用户可以自定义Remote_CMD命令中包括的具体命令。例如,Remote_CMD命令包括但不限于Remote_Write命令、Remote_Read命令和查询命令。其中,Remote_Write命令用于指示将数据写入远端主机,Remote_Read命令用于指示从远端主机中读取数据,查询命令用于指示远端主机执行查询操作。
Remote IO队列的地址空间可以由主机分配,并通过NVMe驱动通知NVMe控制器。Remote IO队列中SQ和Q的定义可以由用户开发的NVMe驱动自定义分配。例如SQ0、CQ0为管理队列;SQ1~SQ31、CQ1~CQ31为IO队列;SQ32~SQ63、CQ32~CQ63为Remote IO队列。
Remote IO队列中的SQ由NVMe控制器通过PCIe的直接写内存访问(Write DirectMemory Access,简称Write DMA)操作完成,NVMe控制器将远端命令写入远端IO队列的SQ中后,通过MSI-X中断,通知Host相应的SQ中的相应位置已写入新的命令,Host根据MSI-X中断读取SQ中的命令;并根据命令内容进行相应的操作。
图2是根据本发明一个实施例的基于NVMe协议的交互方法200的示意性流程图。如图2所示,交互方法包括如下内容。
201、第一主机在将Remote_CMD命令写入IO队列的SQ中,Remote_CMD命令用于指示由第二主机执行的操作。
202、第一主机通过门铃方式通知控制器有待处理的命令。
具体地,第一主机向控制器发送门铃尾指针的值,控制器通过监测门铃寄存器指针地址,判断IO队列的SQ中有待处理的命令。
203、控制器通过第一端口从第一主机的IO队列的SQ中获取Remote_CMD。
具体地,控制器可以通过PCIe的读内存(Memory read)操作读取SQ中的命令。
204、控制器解析Remote_CMD命令,确定由第二主机执行。
例如,控制器解析该Remote_CMD命令得知该Remote_CMD命令的类型,则控制器确定由第二主机执行该Remote_CMD命令。
例如,控制器确定该命令的类型指示由远端主机执行该Remote_CMD命令。当控制器仅与第一主机和第二主机相连时,控制器即可确定由第二主机执行该Remote_CMD命令。
可选地,该Remote_CMD命令还可以携带标识信息,该标识信息用于指示执行该Remote_CMD命令的主机为第二主机。
205、控制器通过第二端口将Remote_CMD命令写入第二主机中的远端IO队列的SQ中。
206、控制器通过门铃方式通知第二主机远端IO队列的SQ中有待处理的命令。
具体地,控制器向第二主机发送远端IO队列的SQ门铃尾指针的值,第二主机通过监测门铃寄存器指针地址,判断远端IO队列的SQ中有待处理的命令。
207、第二主机从远端IO队列的SQ中获取由控制器写入的Remote_CMD。
208、第二主机解析Remote_CMD命令,并执行Remote_CMD命令对应的操作,将远端响应写入远端IO队列的CQ中,远端响应用于指示第二主机执行Remote_CMD命令的操作结果。
209、第二主机通过门铃方式通知控制器第二主机的远端IO队列的CQ中有待处理的远端响应。
具体地,第二主机向控制器发送门铃尾指针的值,控制器通过监测门铃寄存器指针地址,判断远端IO队列的CQ中有待处理的远端响应。
210、控制器通过第二端口从第二主机的远端IO队列的CQ中获取该远端响应。
211、控制器通过第一端口将该远端响应写入第一主机中的IO队列的CQ中。
经过以上步骤,即可完成第一主机与第二主机之间的命令交互。
图3是根据本发明另一实施例的基于NVMe协议的交互方法300的示意性流程图。如图3所示,交互方法包括如下内容。
需要说明的是,步骤301~307的内容与交互方法200中步骤201~207的内容相同,为描述简洁,在此不再赘述。其中,Remote_CMD命令为Remote_Read命令。
308、第二主机解析Remote_Read命令,确定Remote_Read命令用于指示将第二主机中的数据写入至第一主机中,即从第二主机中读取数据,第二主机根据Remote_Read命令对应的操作生成Remote_DMA命令。
具体地,Remote_CMD中包括数据的源地址和目标地址,第二主机获取Remote_CMD中待转发数据的源地址和目标地址,重新封装生成Remote_DMA命令。
309、第二主机将Remote_DMA命令写入IO队列的SQ中。
310、第二主机通过门铃方式通知控制器第二主机的IO队列的SQ中有待处理的命令。
311、控制器通过第二端口从第二主机的IO队列的SQ中获取Remote_DMA。
312、控制器解析Remote_DMA命令,根据Remote_DMA命令从第二主机中读取该数据,然后将该数据写入第一主机中,完成Remote_DMA对应的操作。
具体地,控制器根据数据的源地址通过第一端口从第二主机的内存中读取该数据,然后根据目标地址将该待数据写入第一主机中的内存中,完成Remote_DMA对应的操作。
313、控制器将响应写入第二主机的IO队列的CQ中,该响应用于指示控制器执行Remote_DMA命令的操作结果。
314、控制器通过门铃方式通知第二主机IO队列的CQ中有待处理的响应。
315、第二主机从IO队列的CQ中获取响应,在远端IO队列的CQ中写入远端响应。
步骤316~318的内容与交互方法200中步骤209~211的内容相同,为描述简洁,在此不再赘述。
应注意,本发明实施例中仅以第一主机从第二主机中读取数据的过程为例进行描述。可选地,Remote_CMD命令还可以为Remote_Write命令。相应地,在步骤308中,Remote_Read命令用于指示将第一主机中的数据写入至第二主机,即在第二主机中写入数据,第二主机根据Remote_Write命令对应的操作生成Remote_DMA命令;在步骤312中:控制器解析Remote_DMA命令,根据Remote_DMA命令从第一主机中读取该数据,然后将该数据写入第二主机中,完成Remote_DMA对应的操作。
本发明实施例中,首先由控制器将第一主机写入IO队列的SQ中的Remote_Read/Remote_Write命令转发至第二主机,然后由第二主机根据Remote_Read/Remote_Write命令对应的操作生成Remote_DMA命令写入IO队列的SQ中并通知控制器,由控制器根据该Remote_DMA命令执行相应的的操作。这样能够在对第二主机读或写数据之前,得到第二主机的允许。
需要说明的是,如果第二主机预先设置为允许进行数据读写操作,则第一主机还可以直接在IO队列的SQ中写入Remote_DMA命令,控制器获取该Remote_DMA命令后可以直接对第二主机执行相应的操作。
例如,第一主机生成Remote_DMA命令,该Remote_DMA命令用于指示控制器对第二主机进行读数据或写数据的操作,将该Remote_DMA命令写入IO队列的SQ中并通过门铃方式通知控制器;控制器从IO队列的SQ中获取该Remote_DMA命令,解析后执行相应的操作。
图4是根据本发明实施例的控制器400的示意性框图。如图4所示,控制器400包括第一端口401、第二端口402、处理单元403和通知单元404。
第一端口401用于与第一主机相连。
第二端口402用于与第二主机相连。
处理单元403用于:通过第一端口从第一主机的输入输出IO队列的提交队列SQ中获取第一远端命令;解析第一远端命令,根据解析结果确定第一远端命令由第二主机执行;通过第二端口将第一远端命令写入第二主机中的远端IO队列的SQ中。
通知单元404用于通知第二主机执行第一远端命令。
本发明实施例中,控制器将从第一主机的IO队列的SQ中获取的第一远端命令写入第二主机的远端IO队列的SQ中,能够基于NVMe协议实现第一主机与第二主机之间的命令交互。同时,由于NVMe协议具有高并发度、低时延的特性,因而能够解决双控存储服务器中NTB技术导致的传输时延和传输带宽的问题。
可选地,处理单元403具体用于:解析第一远端命令,确定第一远端命令的类型;根据远端命令的类型确定第一远端命令由第二主机执行。
可选地,处理单元403还用于:通过第二端口从第二主机的IO队列的SQ中获取第二远端命令,第二远端命令是第二主机根据第一远端命令对应的操作生成的;解析第二远端命令,根据解析结果确定第二远端命令指示将第二主机中的数据写入第一主机中;通过第二端口从第二主机中获取数据,并通过第一端口将数据写入第一主机中;通过第二端口将第二响应写入第二主机的IO队列的完成队列CQ中,第二响应用于指示控制器执行第二远端命令的操作结果;通知单元404还用于通知第二主机处理第二响应。
可选地,处理单元403还用:通过第二端口从第二主机的IO队列的SQ中获取第二远端命令,第二远端命令是第二主机根据第一远端命令对应的操作生成的;解析第二远端命令,根据解析结果确定第二远端命令指示将第一主机中的数据写入第二主机中;通过第一端口从第一主机中获取数据,并通过第二端口将数据写入第二主机中;通过第二端口将第二响应写入第二主机的IO队列的完成队列CQ中,第二响应用于指示控制器执行第二远端命令的操作结果;通知单元404还用于通知第二主机处理第二响应。
可选地,处理单元403还用于:通过第二端口从第二主机的远端IO队列的CQ中获取第一远端响应,第一响应远端用于指示第二主机执行第一命令的操作结果;通过第一端口将第一远端响应写入第一主机中的IO队列的CQ中;通知单元还用于通知第一主机处理第一远端响应。
应注意,本发明实施例中,第一端口401和第二端口402可以由网络接口实现,处理单元403和通知单元404可以由处理器实现。如图5所示,控制器500可以包括处理器501、存储器502、总线系统503和网络接口504。
其中,存储器502可以用于存储数据,还可以用于存储处理器501执行的代码等。
控制器500中的各个组件通过总线系统503相连,其中总线系统503除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。
图4所示的控制器400和图5所示的控制器500能够实现前述方法实施例中由控制器实现的各个过程,为避免重复,在此不再赘述。
应注意,本发明上述方法实施例可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本发明实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,简称ROM)、可编程只读存储器(Programmable ROM,简称PROM)、可擦除可编程只读存储器(Erasable PROM,简称EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,简称EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random AccessMemory,简称RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,简称SRAM)、动态随机存取存储器(DynamicRAM,简称DRAM)、同步动态随机存取存储器(Synchronous DRAM,简称SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,简称DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,简称ESDRAM)、同步连接动态随机存取存储器(SynchlinkDRAM,简称SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,简称DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
图6所示为根据本发明实施例的主机600的示意性框图。如图6所示,主机600包括处理单元601和通知单元602。
处理单元601用于:从远端输入输出IO队列的提交队列SQ中获取由控制器写入的第一远端命令;解析第一远端命令,并执行第一远端命令对应的操作;将第一远端响应写入远端IO队列的完成队列CQ中,第一远端响应用于指示第二主机执行远端命令的操作结果。
通知单元602用于通知控制器处理第一远端响应,以便控制器将远端命令写入第一主机的IO队列的CQ中。
本发明中,第二主机从远端IO队列的SQ中获取由控制器写入的远端命令,并执行该远端命令对应的操作,然后将用于指示第二主机执行该远端命令的操作结果的远端响应写入远端IO队列的CQ中,并通知控制器处理该远端响应,使控制器将该远端响应写入第一主机的IO队列的CQ中,能够基于NVMe协议实现第一主机与第二主机之间的命令交互。同时,由于NVMe协议具有高并发度、低时延的特性,因而能够解决双控存储服务器中NTB技术导致的传输时延和传输带宽的问题。
可选地,处理单元601具体用于:解析第一远端命令,根据解析结果确定第一远端命令对应的操作为将第二主机中的数据写入第一主机中;根据第一远端命令对应的操作生成第二远端命令,第二远端命令用于指示控制器将第二主机中的数据写入第一主机中;将第二远端命令写入IO的SQ中。相应地,通知单元502还用于通知控制器执行第二远端命令;处理单元501还用于从IO的CQ中获取由控制器写入的第二响应,第二响应用于指示控制器执行第二远端命令的操作结果。
可选地,处理单元601具体用于:解析第一远端命令,根据解析结果确定第一远端命令对应的操作为将第一主机中的数据写入第二主机中;根据第一远端命令对应的操作生成第二远端命令,第二远端命令用于指示控制器将第一主机中的数据写入第二主机中;将第二远端命令写入IO的SQ中。相应地,通知单元502还用于通知控制器执行第二远端命令;处理单元501还用于从IO的CQ中获取由控制器写入的第二响应,第二响应用于指示控制器执行第二远端命令的操作结果。
应注意,本发明实施例中,处理单元601和通知单元602可以由处理器实现。如图7所示,控制器700可以包括处理器701、存储器702、总线系统703和网络接口704。
其中,存储器702可以用于存储数据、IO队列、远端IO队列,还可以用于存储处理器701执行的代码等。
主机700中的各个组件通过总线系统703相连,其中总线系统703除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。
图6所示的主机600和图7所示的主机700能够实现前述方法实施例中由主机实现的各个过程,为避免重复,在此不再赘述。
应注意,本发明上述方法实施例可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本发明实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是ROM、PROM、EPROM、EEPROM或闪存。易失性存储器可以是RAM,其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如SRAM、DRAM、SDRAM、DDR SDRAM、ESDRAM、SLDRAM和DR RAM。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (20)
1.一种基于非易失性存储总线NVMe协议的交互方法,其特征在于,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:
所述控制器通过所述第一端口从所述第一主机的输入输出IO队列的提交队列SQ中获取第一远端命令;
所述控制器解析所述第一远端命令,根据解析结果确定所述第一远端命令由所述第二主机执行;
所述控制器通过所述第二端口将所述第一远端命令写入所述第二主机中的远端IO队列的SQ中;
所述控制器通知所述第二主机执行所述第一远端命令。
2.根据权利要求1所述的交互方法,其特征在于,所述控制器解析所述第一远端命令,根据解析结果确定所述第一远端命令由所述第二主机执行包括:
所述控制器解析所述第一远端命令,确定所述第一远端命令的类型;
所述控制器根据所述第一远端命令的类型确定所述第一远端命令由所述第二主机执行。
3.根据权利要求1或2所述的交互方法,其特征在于,还包括:
所述控制器通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;
所述控制器解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第二主机中的数据写入所述第一主机中;
所述控制器通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;
所述控制器通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;
所述控制器通知所述第二主机处理所述第二响应。
4.根据权利要求1或2所述的交互方法,其特征在于,还包括:
所述控制器通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;
所述控制器解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第一主机中的数据写入所述第二主机中;
所述控制器通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;
所述控制器通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;
所述控制器通知所述第二主机处理所述第二响应。
5.根据权利要求1或2所述的交互方法,其特征在于,还包括:
所述控制器通过所述第二端口从所述第二主机的远端IO队列的CQ中获取第一远端响应,所述第一远端响应用于指示所述第二主机执行所述第一远端命令的操作结果;
所述控制器通过所述第一端口将所述第一远端响应写入所述第一主机中的IO队列的CQ中;
所述控制器通知所述第一主机处理所述第一远端响应。
6.一种基于非易失性存储总线NVMe协议的交互方法,其特征在于,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:
所述第二主机从远端输入输出IO队列的提交队列SQ中获取由控制器写入的第一远端命令;
所述第二主机解析所述第一远端命令,并执行所述第一远端命令对应的操作;
所述第二主机将第一远端响应写入远端IO队列的完成队列CQ中,所述第一远端响应用于指示所述第二主机执行所述第一远端命令的操作结果;
所述第二主机通知所述控制器处理所述第一远端响应,以便所述控制器将所述第一远端响应写入所述第一主机的IO队列的CQ中。
7.根据权利要求6所述的交互方法,其特征在于,所述第二主机解析所述第一远端命令,并执行所述第一远端命令对应的操作,包括:
所述第二主机解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第二主机中的数据写入所述第一主机中;
所述第二主机根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第二主机中的数据写入所述第一主机中;
所述第二主机将所述第二远端命令写入IO的SQ中;
所述第二主机通知所述控制器执行所述第二远端命令;
所述第二主机从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
8.根据权利要求6所述的交互方法,其特征在于,所述第二主机解析所述第一远端命令,并执行所述第一远端命令对应的操作,包括:
所述第二主机解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第一主机中的数据写入所述第二主机中;
所述第二主机根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第一主机中的数据写入所述第二主机中;
所述第二主机将所述第二远端命令写入IO的SQ中;
所述第二主机通知所述控制器执行所述第二远端命令;
所述第二主机从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
9.一种基于非易失性存储总线NVMe协议的交互方法,其特征在于,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:
所述控制器通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;
所述控制器解析所述远端命令,根据解析结果确定所述远端命令指示将所述第二主机中的数据写入所述第一主机中;
所述控制器通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;
所述控制器通过所述第二端口将响应写入所述第二主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;
所述控制器通知所述第二主机处理所述响应。
10.一种基于非易失性存储总线NVMe协议的交互方法,其特征在于,第一主机与控制器的第一端口相连,第二主机与所述控制器的第二端口相连,所述交互方法包括:
所述控制器通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;
所述控制器解析所述远端命令,根据解析结果确定所述远端命令指示将所述第一主机中的数据写入所述第二主机中;
所述控制器通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;
所述控制器通过所述第一端口将响应写入所述第一主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;
所述控制器通知所述第一主机处理所述响应。
11.一种控制器,其特征在于,包括:
第一端口,用于与第一主机相连;
第二端口,用于与第二主机相连;
处理单元,用于:通过所述第一端口从所述第一主机的输入输出IO队列的提交队列SQ中获取第一远端命令;解析所述第一远端命令,根据解析结果确定所述第一远端命令由所述第二主机执行;通过所述第二端口将所述第一远端命令写入所述第二主机中的远端IO队列的SQ中;
通知单元,用于通知所述第二主机执行所述第一远端命令。
12.根据权利要求11所述的控制器,其特征在于,所述处理单元具体用于:
解析所述第一远端命令,确定所述第一远端命令的类型;
根据所述远端命令的类型确定所述第一远端命令由所述第二主机执行。
13.根据权利要求11或12所述的控制器,其特征在于,所述处理单元还用于:
通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;
解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第二主机中的数据写入所述第一主机中;
通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;
通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;
所述通知单元还用于通知所述第二主机处理所述第二响应。
14.根据权利要求11或12所述的控制器,其特征在于,所述处理单元还用于:
通过所述第二端口从所述第二主机的IO队列的SQ中获取第二远端命令,所述第二远端命令是所述第二主机根据所述第一远端命令对应的操作生成的;
解析所述第二远端命令,根据解析结果确定所述第二远端命令指示将所述第一主机中的数据写入所述第二主机中;
通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;
通过所述第二端口将第二响应写入所述第二主机的IO队列的完成队列CQ中,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果;
所述通知单元还用于通知所述第二主机处理所述第二响应。
15.根据权利要求11或12所述的控制器,其特征在于,所述处理单元还用于:
通过所述第二端口从所述第二主机的远端IO队列的CQ中获取第一远端响应,所述第一远端响应用于指示所述第二主机执行所述第一远端命令的操作结果;
通过所述第一端口将所述第一远端响应写入所述第一主机中的IO队列的CQ中;
所述通知单元还用于通知所述第一主机处理所述第一远端响应。
16.一种主机,其特征在于,包括:
处理单元,用于:从远端输入输出IO队列的提交队列SQ中获取由控制器写入的第一远端命令;解析所述第一远端命令,并执行所述第一远端命令对应的操作;将第一远端响应写入远端IO队列的完成队列CQ中,所述第一远端响应用于指示所述主机执行所述第一远端命令的操作结果;
通知单元,用于通知所述控制器处理所述第一远端响应,以便所述控制器将所述第一远端响应写入第一主机的IO队列的CQ中。
17.根据权利要求16所述的主机,其特征在于,所述处理单元具体用于:
解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述主机中的数据写入所述第一主机中;
根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述主机中的数据写入所述第一主机中;
将所述第二远端命令写入IO的SQ中;
所述通知单元还用于通知所述控制器执行所述第二远端命令;
所述处理单元还用于从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
18.根据权利要求16所述的主机,其特征在于,所述处理单元具体用于:
解析所述第一远端命令,根据解析结果确定所述第一远端命令对应的操作为将所述第一主机中的数据写入所述主机中;
根据所述第一远端命令对应的操作生成第二远端命令,所述第二远端命令用于指示所述控制器将所述第一主机中的数据写入所述主机中;
将所述第二远端命令写入IO的SQ中;
所述通知单元还用于通知所述控制器执行所述第二远端命令;
所述处理单元还用于从IO的CQ中获取由所述控制器写入的第二响应,所述第二响应用于指示所述控制器执行所述第二远端命令的操作结果。
19.一种控制器,其特征在于,包括:
第一端口,用于与第一主机相连;
第二端口,用于与第二主机相连;
处理单元,用于:通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;解析所述远端命令,根据解析结果确定所述远端命令指示将所述第二主机中的数据写入所述第一主机中;通过所述第二端口从所述第二主机中获取所述数据,并通过所述第一端口将所述数据写入所述第一主机中;通过所述第二端口将响应写入所述第二主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;
通知单元,用于通知所述第二主机处理所述响应。
20.一种控制器,其特征在于,包括:
第一端口,用于与第一主机相连;
第二端口,用于与第二主机相连;
处理单元,用于:通过所述第一端口从所述第一主机的IO队列的SQ中获取远端命令;所述控制器解析所述远端命令,根据解析结果确定所述远端命令指示将所述第一主机中的数据写入所述第二主机中;所述控制器通过所述第一端口从所述第一主机中获取所述数据,并通过所述第二端口将所述数据写入所述第二主机中;所述控制器通过所述第一端口将响应写入所述第一主机的IO队列的完成队列CQ中,所述响应用于指示所述控制器执行所述远端命令的操作结果;
通知单元,用于通知所述第一主机处理所述响应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510997669.7A CN106919531B (zh) | 2015-12-25 | 2015-12-25 | 基于非易失性存储总线协议的交互方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510997669.7A CN106919531B (zh) | 2015-12-25 | 2015-12-25 | 基于非易失性存储总线协议的交互方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106919531A CN106919531A (zh) | 2017-07-04 |
CN106919531B true CN106919531B (zh) | 2020-02-21 |
Family
ID=59455160
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510997669.7A Active CN106919531B (zh) | 2015-12-25 | 2015-12-25 | 基于非易失性存储总线协议的交互方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106919531B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107817953B (zh) * | 2017-11-20 | 2020-07-28 | 杭州宏杉科技股份有限公司 | 一种双控存储设备访问硬盘的方法及装置 |
KR102493964B1 (ko) * | 2017-12-18 | 2023-02-01 | 삼성전자주식회사 | 스토리지 컨트롤러, 그것을 포함하는 스토리지 장치, 및 스토리지 컨트롤러의 동작 방법 |
WO2020000483A1 (zh) | 2018-06-30 | 2020-01-02 | 华为技术有限公司 | 数据处理的方法和存储系统 |
CN110399329B (zh) * | 2019-07-12 | 2022-06-07 | 苏州浪潮智能科技有限公司 | 一种rdma的数据处理方法及相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788970A (zh) * | 2009-01-24 | 2010-07-28 | 群联电子股份有限公司 | 数据串传送方法、系统及其控制器 |
CN102314218A (zh) * | 2010-07-01 | 2012-01-11 | 李峰 | 一种智能化的手机上的人机交互方法和系统 |
CN103970688A (zh) * | 2013-02-04 | 2014-08-06 | Lsi公司 | 缩短数据存储系统中写入等待时间的方法和系统 |
WO2014158166A1 (en) * | 2013-03-28 | 2014-10-02 | Hewlett-Packard Development Company | Address range transfer from first node to second node |
CN104126181A (zh) * | 2011-12-30 | 2014-10-29 | 英特尔公司 | 作为随机存取存储器的非易失性半导体存储装置的系统存取的薄变换 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9767058B2 (en) * | 2011-11-17 | 2017-09-19 | Futurewei Technologies, Inc. | Method and apparatus for scalable low latency solid state drive interface |
-
2015
- 2015-12-25 CN CN201510997669.7A patent/CN106919531B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788970A (zh) * | 2009-01-24 | 2010-07-28 | 群联电子股份有限公司 | 数据串传送方法、系统及其控制器 |
CN102314218A (zh) * | 2010-07-01 | 2012-01-11 | 李峰 | 一种智能化的手机上的人机交互方法和系统 |
CN104126181A (zh) * | 2011-12-30 | 2014-10-29 | 英特尔公司 | 作为随机存取存储器的非易失性半导体存储装置的系统存取的薄变换 |
CN103970688A (zh) * | 2013-02-04 | 2014-08-06 | Lsi公司 | 缩短数据存储系统中写入等待时间的方法和系统 |
WO2014158166A1 (en) * | 2013-03-28 | 2014-10-02 | Hewlett-Packard Development Company | Address range transfer from first node to second node |
Non-Patent Citations (1)
Title |
---|
"新型非易失存储I/O栈综述";陈祥 等;《计算机研究与发展》;20141231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN106919531A (zh) | 2017-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11138143B2 (en) | Techniques for command validation for access to a storage device by a remote client | |
US10956336B2 (en) | Efficient silent data transmission between computer servers | |
US9998558B2 (en) | Method to implement RDMA NVME device | |
US9557922B2 (en) | System and method for peer-to-peer PCIe storage transfers | |
US9696942B2 (en) | Accessing remote storage devices using a local bus protocol | |
US20190163364A1 (en) | System and method for tcp offload for nvme over tcp-ip | |
CN114443529B (zh) | 内存直接访问架构、系统、方法、电子设备和介质 | |
US20150261434A1 (en) | Storage system and server | |
CN106919531B (zh) | 基于非易失性存储总线协议的交互方法及设备 | |
EP3660686B1 (en) | Method and device for transmitting data processing request | |
US10275175B2 (en) | System and method to provide file system functionality over a PCIe interface | |
US10078568B1 (en) | Debugging a computing device | |
US11372782B2 (en) | Computing system for reducing latency between serially connected electronic devices | |
US11199992B2 (en) | Automatic host buffer pointer pattern detection | |
CN116204456A (zh) | 数据访问方法及计算设备 | |
US11669487B2 (en) | Secondary device detection using a synchronous interface | |
US10097658B2 (en) | Traffic control of packet transfer | |
US10817446B1 (en) | Optimized multiport NVMe controller for multipath input/output applications | |
CN113196225A (zh) | 开放信道矢量命令执行 | |
US11775451B2 (en) | Computing system for reducing latency between serially connected electronic devices | |
US20190155774A1 (en) | Data transmission apparatus and data transmission method | |
JP5917325B2 (ja) | ブリッジ回路 | |
JP2021047863A (ja) | ストレージ装置及びメッセージトンネリングのためのシステム並びにその方法 | |
JP2013196439A (ja) | 情報処理システム及び情報処理方法 |
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 |