数据传输方法、装置、设备及存储介质
技术领域
本申请涉及存储技术领域,特别涉及一种数据传输方法、装置、设备及存储介质。
背景技术
随着存储技术以及网络技术的发展,不同计算机设备可以通过网络互连,任一计算机设备可以向其他计算机设备的存储器传输数据,从而将需要存储的数据远程地存储在其他计算机设备的存储器中。
以两台计算机设备中用于发送待传输的数据的设备称为源设备,用于存储数据的设备称为目的设备为例,数据传输的流程可以包括以下步骤:源设备生成数据传输指令,向目的设备发送数据传输指令。当目的设备接收到源设备的数据传输指令时,目的设备通过该目的设备的存储器对数据传输指令进行处理。当目的设备对数据传输指令处理完成时,目的设备的存储器会生成中断消息,根据目的设备的处理器的消息接收地址,向该处理器发送中断消息。当处理器接收到中断消息时,处理器会生成消息发送指令,将消息发送指令入列至网络接口适配器的工作队列。处理器会对该网络接口适配器的门铃单元触发写入操作。当网络接口适配器检测到写入操作时,会从网络接口适配器的工作队列中获取指令,得到消息发送指令。网络接口适配器会根据消息发送指令,向源设备发送数据传输完成消息。当源设备接收到数据传输完成消息后,可以确定目的设备的存储器已经对数据传输指令处理完成。
在传输数据的过程中,针对源设备向目的设备发送的每个数据传输指令,每当目的设备对该数据传输指令处理完成时,目的设备的存储器都会向处理器发送一次中断消息,则目的设备的处理器需要中断当前的业务,临时执行生成消息发送指令、将消息发送指令入列至网络接口适配器的工作队列,对网络接口适配器的门铃单元触发写入操作等一系列中断处理的步骤,极大的消耗了目的设备的处理器的处理资源,增加了传输数据的时延。
发明内容
本申请实施例提供了一种数据传输方法、装置、设备及存储介质,能够解决相关技术中数据传输完成时处理器需要处理存储器触发的中断请求,而导致处理器的处理资源消耗过大的技术问题。所述技术方案如下:
第一方面,提供了一种数据传输方法,应用于第一计算机设备,所述方法包括:
当对第二计算机设备的数据传输指令处理完成时,生成中断消息;
根据网络接口适配器的消息接收地址,向所述网络接口适配器发送所述中断消息;
当所述网络接口适配器接收到所述中断消息时,从所述网络接口适配器的工作队列中获取指令,得到消息发送指令;
根据所述消息发送指令,向所述第二计算机设备发送数据传输完成消息。
本实施例提供的方法,通过将数据传输指令处理完成时的中断消息从计算机设备的处理器重定向至网络接口适配器,直接根据网络接口适配器的工作队列中的消息发送指令,向第二计算机设备发送数据传输完成消息,可以达到将存储器触发的中断消息直接转换为数据传输完成消息的效果,避免目的设备的处理器进行一系列中断处理的事务,从而避免处理器的深度参与,极大的减少了目的端的处理器的资源开销,提高了目的设备对数据传输指令处理的效率和速度。另外,通过改进软件流程,即可达到卸载目的设备的处理器的处理逻辑的效果,避免使用专用的网卡或其他芯片时造成的硬件成本,实用性强。
可选地,所述根据网络接口适配器的消息接收地址,向所述网络接口适配器发送所述中断消息,包括:
根据网络接口适配器的目标门铃单元的地址,向所述网络接口适配器的目标门铃单元发送所述中断消息;
所述从所述网络接口适配器的工作队列中获取指令,包括:
根据门铃单元与工作队列之间的对应关系,从所述目标门铃单元对应的工作队列中获取指令。
可选地,所述从所述网络接口适配器的工作队列中获取指令,得到消息发送指令,包括:
根据所述中断消息携带的指针信息,获取所述消息发送指令在所述工作队列中的位置;
从所述工作队列的所述位置,获取所述消息发送指令。
可选地,所述消息发送指令为远程直接数据读取RDMA指令,所述数据传输完成消息为RDMA消息。
可选地,所述根据所述消息发送指令,向所述第二计算机设备发送数据传输完成消息,包括下述至少一个步骤:
根据RDMA写指令,执行RDMA写操作,向所述第二计算机设备发送RDMA写消息;
根据RDMA发送指令,执行RDMA发送操作,向所述第二计算机设备发送RDMA发送消息。
可选地,所述向所述第二计算机设备发送RDMA写消息,包括:
向所述第二计算机设备的中断触发区域发送所述RDMA写消息。
可选地,所述向所述第二计算机设备的中断触发区域发送所述RDMA写消息,包括:
向所述第二计算机设备的本地中断控制器APIC区域发送所述RDMA写消息。
可选地,所述根据网络接口适配器的消息接收地址,向所述网络接口适配器发送所述中断消息之前,所述方法还包括下述至少一个步骤:
查询中断消息的目的地址信息,从所述目的地址信息得到所述网络接口适配器的消息接收地址,作为所述中断消息的目的地址;
查询中断消息的消息内容信息,从所述消息内容信息得到指针信息,作为所述中断消息的消息内容。
可选地,所述生成中断消息之前,所述方法还包括下述至少一个步骤:
向所述中断消息的目的地址信息写入所述网络接口适配器的消息接收地址;
向所述中断消息的消息内容信息写入所述指针信息。
可选地,所述生成中断消息之前,所述方法还包括:
生成所述网络接口适配器的工作队列;
将所述消息发送指令入列至所述网络接口适配器的工作队列。
可选地,所述网络接口适配器的工作队列为深度为1的循环队列。
可选地,所述成中断消息之前,所述方法还包括:
根据存储器的资源的物理地址,对所述资源进行内存注册,得到所述资源的内存注册信息,所述内存注册信息用于访问所述资源的物理地址;
向所述第二计算机设备发送所述内存注册信息。
可选地,所述资源包括门铃单元、工作队列、数据缓存区中的至少一项。
可选地,所述生成中断消息之前,所述方法还包括下述至少一个步骤:
当接收到第一RDMA消息时,根据所述第一RDMA消息携带的存储器的门铃单元的内存注册信息,向所述存储器的门铃单元写入所述第一RDMA消息携带的指针信息;
当接收到第二RDMA消息时,根据所述第二RDMA消息携带的存储器的工作队列的内存注册信息,向所述存储器的工作队列写入所述第二RDMA消息携带的所述数据传输指令;
当接收到第三RDMA消息时,根据所述第三RDMA消息携带的存储器的数据缓存区的内存注册信息,向所述存储器的数据缓存区写入所述第三RDMA消息携带的待传输的数据。
第二方面,提供了一种数据传输方法,应用于第二计算机设备,所述方法包括:
接收第一计算机设备的存储器的资源的内存注册信息,所述内存注册信息用于访问所述资源的物理地址;
对所述存储器进行本地映射,得到所述存储器在所述第二计算机设备中映射的虚拟非易失性高速传输总线NVMe设备;
根据所述虚拟NVMe设备的资源的内存注册信息,对NVMe驱动进行初始化;
通过所述NVMe驱动,根据所述资源的内存注册信息,向所述虚拟NVMe设备传输数据。
本实施例提供的方法,通过RDMA内存注册的方式,将目的设备的存储器映射为源设备本地的虚拟存储器,源设备可以直接操作目的设备的存储器,而无需经过目的设备的处理器的深度参与,从而降低目的设备的处理器的资源开销,可以提升目的设备的系统性能。进一步地,通过修改源设备的NOF驱动的处理逻辑,即可向目的设备的存储器映射的虚拟存储器传输数据,而无需修改源设备的NVMe驱动和RDMA驱动,系统兼容性较好,能够达到对上层NVMe驱动以及应用程序透明的效果。
可选地,所述资源包括所述存储器的第二门铃单元、所述存储器的工作队列、所述存储器的数据缓存区中的至少一项。
可选地,所述通过所述NVMe驱动,根据所述资源的内存注册信息,向所述虚拟NVMe设备传输数据,包括:
通过所述NVMe驱动,生成NVMe指令;
对所述NVMe指令以及所述内存注册信息进行封装,得到远程直接数据存取RDMA消息;
向所述第二计算机设备发送RDMA消息。
可选地,所述NVMe指令包括携带指针信息的第一NVMe指令,相应地,所述对所述NVMe指令以及所述内存注册信息进行封装,得到RDMA消息,包括:对所述第一NVMe指令以及所述存储器的门铃单元的内存注册信息进行封装,得到第一RDMA消息;或者,
所述NVMe指令包括用于指示数据传输的第二NVMe指令,相应地,所述对所述NVMe指令以及所述内存注册信息进行封装,得到RDMA消息,包括:对所述第二NVMe指令以及所述存储器的工作队列的内存注册信息进行封装,得到第二RDMA消息;或者,
所述NVMe指令包括携带待传输的数据的第三NVMe指令,相应地,所述对所述NVMe指令以及所述内存注册信息进行封装,得到RDMA消息,包括:对所述第三NVMe指令以及所述存储器的数据缓存区的内存注册信息进行封装,得到第三RDMA消息。
第三方面,提供了一种数据传输装置,所述装置包括:用于执行上述数据传输方法。具体地,该数据传输装置包括用于执行上述第一方面或第一方面的任一种可选方式所述的数据传输方法的功能模块。
第四方面,提供了一种数据传输装置,所述装置包括:用于执行上述数据传输方法。具体地,该数据传输装置包括用于执行上述第二方面或第二方面的任一种可选方式所述的数据传输方法的功能模块。
第五方面,提供一种计算机设备,所述计算机设备包括处理器、存储器和网络接口适配器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第一方面或第一方面的任一种可选方式所述的数据传输方法所执行的操作,网络接口适配器用于与其他设备进行通信。
第六方面,提供一种计算机设备,所述计算机设备包括处理器、存储器和网络接口适配器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第二方面或第二方面的任一种可选方式所述的数据传输方法所执行的操作,网络接口适配器用于与其他设备进行通信。
第七方面,提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第一方面或第一方面的任一种可选方式所述的数据传输方法所执行的操作。
第八方面,提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第二方面或第二方面的任一种可选方式所述的数据传输方法所执行的操作。
第九方面,提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该计算机设备能够实现上述第一方面或第一方面的任一种可选方式所述的数据传输方法所执行的操作。
第十方面,提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该计算机设备能够实现上述第二方面或第二方面的任一种可选方式所述的数据传输方法所执行的操作。
第十一方面,提供一种数据传输系统,在一种可能的实现方式中,所述系统包括:
第三方面所述的数据传输装置和第四方面所述的数据传输装置。
在另一种可能的实现方式中,所述系统包括:
第五方面所述的计算机设备和第六方面所述的计算机设备。
第十二方面,提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述第一方面或第一方面的任一种可选方式所述的数据传输方法所执行的操作。
附图说明
图1是本申请实施例提供的一种实施环境的架构图;
图2是本申请实施例提供的一种计算机设备的结构示意图;
图3是本申请实施例提供的一种数据传输方法的流程图;
图4是本申请实施例提供的一种数据传输方法的示意图;
图5是本申请实施例提供的一种数据传输方法的流程图;
图6是本申请实施例提供的一种数据传输方法的初始化过程的流程图;
图7是本申请实施例提供的一种数据传输方法的流程图;
图8是本申请实施例提供的一种数据传输装置的结构示意图;
图9是本申请实施例提供的一种数据传输装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
以下对本申请涉及的技术术语进行解释:
外设部件互连标准(peripheral component interconnect,简称:PCI)总线:是一种总线和接口标准,用于将处理器与至少一个外部设备连接。符合PCI总线标准的外部设备称为PCI设备。PCI总线上具有至少一个PCI接口,每个PCI接口的物理形态可以是一个插糟。每个PCI接口用于连接一个PCI设备。PCI总线上的各个PCI设备采用并行互联的方式连接,PCI总线上的所有PCI设备共用一个带宽。
高速串行计算机扩展总线标准(peripheral component interconnect express,简称:PCIe)总线:在PCI总线的基础上发展的一种局部总线,用于将处理器与至少一个外部设备连接。符合PCIe总线标准的外部设备称为PCIe设备。PCIe总线上具有至少一个PCIe接口,每个PCIe接口的物理形态可以是一个插糟。每个PCIe接口用于连接一个PCIe设备。PCIe总线上的各个PCIe设备采用了串行互联方式,PCIe总线上的不同PCIe设备之间可以通过点对点的形式进行数据传输。PCIe协议中通常会兼容PCI协议相关的技术以及PCI设备。
PCIe基地址寄存器(base address register,简称:BAR)空间:是PCIe协议中为PCIe设备在PCIe配置空间中分配的地址空间。
直接内存存取(direct memory access,简称:DMA)技术:内存与外部设备之间传输数据的一种技术。通过DMA技术,外部设备可以无需通过中央处理器(centralprocessing unit,简称:CPU)的参与,直接将数据写入内存。相应地,通过DMA技术,外部设备可以无需通过CPU的参与,直接从内存读取数据。在DMA技术中,外部设备中具有DMA控制器,可以通过DMA控制器来访问内存。具体来说,内存可以为外部设备分配内存缓存区,DMA控制器可以无需经过CPU的参与,直接将数据写入内存缓存区中。相应地,DMA控制器可以无需经过CPU的参与,直接从内存缓存区读取数据。
内存缓存区(英文名称:buffer):是指用于缓存数据的内存区域。计算机设备中的任意硬件和软件可以向操作系统申请内存区域,作为自身的内存缓存区,从而在该内存缓存区缓存需要的数据。
网络通信技术:是指通过网络将本地设备的数据传输给远程设备的技术。网络通信技术可以包括传输控制协议/因特网互联协议(transmission control protocol/internet protocol,简称:TCP/IP)通信技术和远程直接内存访问(remote direct memoryaccess,简称:RDMA)通信技术。
远程直接内存访问(remotedirect memory access,简称:RDMA)通信技术:一种将数据直接从一台计算机设备的内存传输至另一台计算机设备的内存的通信技术。RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。支持RDMA通信技术的网络接口适配器可以称为RDMA设备,例如可以是远程直接数据存取网络接口控制器(RDMA network interface controller,简称:RNIC)。
RDMA操作(英文名称:RDMA verb):基于RDMA协议的数据传输操作。RDMA设备可以提供至少一个动作接口,通过调用RDMA设备的动作接口,会触发RDMA设备执行RDMA操作。按照数据传输方式的不同,RDMA操作可以分为存储操作(英文名称:memory verb)和消息操作(英文名称:messaging verb)。
存储操作:是RDMA操作中的单边操作。在数据传输过程中,数据的接收设备的CPU和数据的发送设备的CPU中的任一项参与即可完成存储操作。源设备在执行存储操作时,会根据目的设备的内存区域的虚拟地址和权限信息,直接向目的设备的内存区域存取数据,而绕过目的设备的CPU。存储操作包括RDMA写操作、RDMA读操作和原子操作。
RDMA写操作:是存储操作中的数据写入操作。源设备的RNIC在执行RDMA写操作的过程中,会从源设备的内存区域读取数据,根据目的设备的内存区域的虚拟地址以及权限信息,将读取的数据写入至目的设备的内存区域。具体来说,源设备的CPU可以预先将待写入的数据存储至源设备的内存区域。源设备的CPU可以根据源设备的内存区域的虚拟地址、目的设备的内存区域的虚拟地址、目的设备的内存区域的权限信息,生成RDMA写指令。源设备会将RDMA写指令入列至RNIC的发送队列中。之后,源设备会通过门铃机制,通知RNIC执行发送队列中的指令。之后,RNIC会从发送队列中读取指令,得到RDMA写指令,根据RDMA写指令,执行RDMA写操作。其中,在源设备的RNIC执行RDMA写操作之前,目的设备的CPU可以预先将内存区域的虚拟地址以及目的设备的内存区域的权限信息发送给源设备的CPU,源设备的CPU可以接收目的设备的内存区域的虚拟地址以及目的设备的内存区域的权限信息,从而得到目的设备的内存区域的虚拟地址以及目的设备的内存区域的权限信息。
RDMA读操作:是存储操作中的数据读取操作。源设备的RNIC在执行RDMA读操作的过程中,会根据目的设备的数据缓存区的虚拟地址以及权限信息,从目的设备的数据缓存区读取数据,将读取的数据存储在源设备的数据缓存区。具体来说,源设备的CPU可以根据源设备的内存区域的虚拟地址、目的设备的内存区域的虚拟地址、目的设备的内存区域的权限信息,生成RDMA读指令。之后,源设备会将RDMA读指令入列至发送队列中。之后,源设备会通过门铃机制,通知RNIC执行发送队列中的指令。之后,RNIC会从发送队列中读取指令,得到RDMA读指令,根据RDMA写指令,执行RDMA读操作。其中,在源设备的RNIC执行RDMA读操作之前,目的设备的CPU可以预先将待读取的数据存储在数据缓存区。目的设备的CPU可以预先将内存区域的虚拟地址以及目的设备的内存区域的权限信息发送给源设备的CPU,源设备的CPU可以接收目的设备的内存区域的虚拟地址以及目的设备的内存区域的权限信息,从而得到目的设备的内存区域的虚拟地址以及目的设备的内存区域的权限信息。
RDMA协议中的队列机制:在RDMA协议中,RDMA设备通过工作队列(work queue,简称:WQ)缓存各种消息。RDMA设备的WQ包括发送队列(send queue,简称:SQ)、接收队列(receive queue,简称:RQ)以及完成队列(complete queue,简称:CQ)。一个SQ和一个RQ可以组成一个队列对。其中,WQ中的每个元素可以称为工作队列元素(work queue element,简称:WQE)。SQ中的每个WQE可以是发送指令,发送指令可以指向一个待发送的数据。RQ中的每个WQE可以是接收指令,接收指令可以指向一块用于存储数据的Buffer。
RDMA协议中的门铃机制:在RDMA协议中,主机通过RDMA设备的门铃寄存器(doorbell,简称:DB),通知RDMA设备从WQ中取指令。RDMA设备的DB可以与RDMA设备的WQ一一对应,RDMA设备的DB可以用于存储对应的WQ的尾指针。每个DB用于通知RDMA设备从DB对应的WQ中,读取并执行RDMA指令。当主机将RDMA指令入列至任一RDMA设备的任一WQ后,会向该RDMA设备的该WQ对应的DB写入数据,当RDMA设备检测到对WQ触发的写入操作时,会从WQ中读取RDMA指令。
消息操作:RDMA操作中的双边操作。在数据传输过程中,数据的接收设备的CPU和数据的发送设备的CPU均要参与以完成消息操作。消息操作包括RDMA发送操作和RDMA接收操作。消息操作可以用于传输通信连接的控制消息。
RDMA发送操作:是消息操作中的数据写入操作。源设备的RNIC在执行RDMA发送操作的过程中,会从源设备的内存区域读取数据,将读取的数据发送给目的设备。具体来说,源设备的CPU可以预先将待写入的数据存储至源设备的内存区域。源设备可以根据源设备的内存区域的虚拟地址、目的设备的内存区域的虚拟地址、目的设备的内存区域的权限信息,生成RDMA写指令。之后,源设备会将RDMA写指令入列至发送队列中。之后,源设备会通过门铃机制,通知RNIC执行发送队列中的指令。RNIC会从发送队列中读取指令,得到RDMA写指令,根据RDMA写指令,执行RDMA写操作。
NVMe协议:一种主机与NVMe设备之间的通信协议。NVMe协议中约定了主机与NVMe设备之间的各种NVMe指令以及主机与NVMe设备之间交互NVMe指令的方式。NVMe协议中约定了NVMe队列以及NVMe设备的门铃寄存器的使用规范,可以通过NVMe队列以及NVMe设备的门铃寄存器,实现主机与NVMe设备之间交互NVMe指令的过程。
NVMe协议中的队列机制:在RDMA协议中,NVMe设备通过工作队列缓存各种消息。NVMe设备的工作队列包括提交队列(submission queue,简称:SQ)以及完成队列(completion queue,简称:CQ)。一个SQ与一个CQ可以组成了一个队列对。SQ中的每个元素可以称为提交队列元素(submission queue element,简称:WQE)。SQ中的每个SQE可以是NVMe指令指令。在NVMe协议中,在NVMe协议中,主机会将NVMe指令入列至内存的SQ中,NVMe设备可以访问主机的内存,从主机的内存的SQ中读取NVMe指令,以便执行NVMe指令。CQ中的每个元素可以称为完成队列元素(submission queue element,简称:CQE)。CQ中的每个CQE可以是执行SQE完成后的指令完成状态。在NVMe协议中,当NVMe设备执行NVMe指令完成后,会将指令完成消息入列至主机的内存的CQ中,主机可以从内存的CQ中读取指令完成消息,从而确定NVMe设备已经处理NVMe指令完成。
NVMe协议中的门铃机制:在NVMe协议中,主机和NVMe设备之间可以通过门铃寄存器(doorbell,简称:DB)进行通信。DB与NVMe设备的工作队列一一对应,DB可以用于通知NVMe设备从SQ中取指令。当主机将NVMe指令入列至任一NVMe设备的任一SQ后,会向该NVMe设备的该SQ对应的DB写入数据,当NVMe设备检测到对DB触发的写入操作时,会从SQ中读取NVMe指令。
图1是本申请实施例提供的一种实施环境的架构图,该实施环境包括至少一个第一计算机设备以及至少一个第二计算机设备。该第一计算机设备可以提供为数据传输过程中的源设备,第二计算机设备可以提供为数据传输过程中的目的设备,第一计算机设备与该第二计算机设备可以通过网络连接。
可选地,该网络可以是指支持RDMA的数据传输方式的网络。例如,该网络可以包括无限带宽(Infiniband,简称:IB)网络、基于以太网的RDMA(RDMAover convergedethernet,简称:RoCE)网络、基于TCP的RDMA(internet wide-area RDMAprotocol,简称:iWARP)网络等。
可选地,第一计算机设备上可以安装用于数据传输的客户端,第二计算机设备可以提供为该客户端对应的服务器,第一计算机设备可以通过该客户端,向第二计算机设备传输数据。
可选地,第一计算机设备包括中央处理器(central processing units,简称:CPU)、动态随机存取存储器(dynamic random access memory,简称:DRAM)以及远程直接数据存取网络接口控制器(RDMA network interface controller,简称:RNIC)。第一计算机设备的CPU与第一计算机设备的DRAM连接。第一计算机设备的CPU与第一计算机设备的RNIC连接。第二计算机设备可以包括CPU、DRAM、RNIC、PCIe交换机以及至少一个非易失性高速传输总线(non-volatile memory express,简称:NVMe)固态硬盘(solid state drives,简称:SSD)。第二计算机设备的CPU与第二计算机设备的DRAM连接。第二计算机设备的CPU与第二计算机设备的RNIC连接。第二计算机设备的CPU与第二计算机设备的PCIe交换机连接。第二计算机设备的PCIe交换机与第二计算机设备的每个NVMe SSD连接。
图2是本申请实施例提供的一种计算机设备的结构示意图。该计算机设备200可以提供为本申请实施例中的第一计算机设备或第二计算机设备。该计算机设备200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器201和一个或一个以上的存储器202以及网络接口适配器203。
(1)处理器201
处理器201可以是计算机设备的中央处理器(central processing units,简称:CPU),处理器201可以加载并执行存储器202中的指令,以实现下述方法实施例提供的数据传输方法。
(2)存储器202。
存储器202是计算机设备用于存储指令、数据或位址的硬件。存储器202可以包括寄存器、内存以及外部存储器202。寄存器是处理器的组成部分,寄存器在处理器内部。内存也称主存,内存通常在处理器外部,内存与处理器连接。内存可以是动态随机存取存储器202(dynamic random access memory,简称:DRAM)。外部存储器202是计算机设备中的外围设备,也称辅助存储器或外存。外部存储器可以包括硬盘、磁盘以及光盘。
可选地,存储器202可以是支持非易失性高速传输总线(non-volatile memoryexpress,简称:NVMe)协议的存储器。存储器202可以提供为NVMe设备。例如,存储器202可以是NVMe固态硬盘(solid state drives,简称:SSD)。其中,NVMe SSD可以提供为NVMe协议中的管理子系统,NVMe SSD的处理器可以提供为NVMe协议中的管理控制器。
可选地,第一计算机设备上可以具有总线,该存储器202可以安装在总线上。该存储器202可以通过总线与第一计算机设备的处理器通信。其中,该总线可以是PCI总线或PCIe总线等。相应地,该存储器202可以是第一计算机设备中的PCI设备或PCIe设备。可选地,参见图1,第一计算机设备可以包括PCIe交换机,该PCIe交换机可以与处理器连接,该PCIe交换机可以与多个存储器连接。PCIe交换机可以用于转发处理器与存储器之间的消息,从而令处理器与存储器保持通信。
可选地,存储器202可以包括至少一种资源,可以通过该至少一种资源,对数据传输指令进行处理。其中,资源可以包括存储器202的门铃单元、存储器202的工作队列以及数据缓存区中的至少一项。每种资源的数量可以为一个或多个。
可选地,存储器202可以具有一个或多个门铃单元。存储器202的门铃单元可以通过硬件和/或软件的方式实现。可选地,存储器202的门铃单元可以是存储器202中的门铃寄存器(doorbell,简称:DB),DB可以位于存储器202的处理器中。
可选地,存储器202的门铃单元用于通知存储器202执行工作队列中的指令。当需要存储器202执行该工作队列中的指令时,可以对存储器202的门铃单元触发写入操作,当存储器202检测到该写入操作时,会从工作队列中获取指令,得到数据传输指令。存储器202的门铃单元可以和存储器202的工作队列一一对应。
可选地,存储器202的门铃单元可以用于存储该存储器202的工作队列的指针信息。其中,工作队列的指针信息可以包括存储器202的工作队列的头指针、存储器202的工作队列的尾指针中的至少一项。示例性地,假设SQ中具有3个指令,则存储器202的门铃单元可以存储3。
(3)网络接口适配器203
网络接口适配器203用于与其他设备进行通信。网络接口适配器203用于通过网络连接,接收外部设备的指令或向外部设备发送指令。网络接口适配器203可以包括网卡(英文名称:network interface card)以及网络接口板。可选地,该网络接口适配器203可以是支持RDMA功能的网络接口适配器203,该网络接口适配器203可以提供为RDMA设备。例如,网络接口适配器203可以是RNIC。可选地,第一计算机设备上可以具有总线,该网络接口适配器203可以安装在总线上。该网络接口适配器203可以通过总线与第一计算机设备的处理器通信。其中,该总线可以是PCI总线或PCIe总线等。
可选地,网络接口适配器203可以具有一个或多个门铃单元。网络接口适配器203的门铃单元可以通过硬件和/或软件的方式实现。示例性地,若网络接口适配器203的门铃单元通过硬件的方式实现,门铃单元可以是网络接口适配器203中的一个或多个寄存器。
网络接口适配器203的门铃单元用于通知网络接口适配器203执行网络接口适配器203的工作队列中的指令。网络接口适配器203的门铃单元可以和网络接口适配器203的工作队列一一对应。当需要网络接口适配器203执行任一工作队列中的指令时,可以对网络接口适配器203的门铃单元触发写入操作,当网络接口适配器203检测到该写入操作时,就会从该门铃单元对应的工作队列中获取指令。
可选地,网络接口适配器203的门铃单元可以用于存储该网络接口适配器203的工作队列的指针信息。网络接口适配器203可以从该网络接口适配器203的门铃单元中,获取指针信息。其中,该指针信息可以包括网络接口适配器203的工作队列的头指针、网络接口适配器203的工作队列的尾指针中的至少一项。可选地,网络接口适配器203的门铃单元可以用于存储网络接口适配器203的发送队列的尾指针。示例性地,假设发送队列中具有3个指令,则网络接口适配器203的门铃单元可以存储3。
可选地,网络接口适配器203可以包括至少一个门铃单元,网络接口适配器203的消息接收地址可以是该至少一个门铃单元中目标门铃单元的地址。其中,目标门铃单元是指对应的工作队列中具有消息发送指令的门铃单元。例如,假设网络接口适配器203具有5个门铃单元,预先向门铃单元1对应的工作队列a写入了RDMAsend指令,则目标门铃单元为门铃单元1,相应地,网络接口适配器203的消息接收地址是门铃单元1的地址。
当然,该计算机设备还可以具有输入输出接口等部件,以便进行输入输出,该计算机设备还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由计算机设备中的处理器执行以完成下述实施例中的数据传输方法。例如,计算机可读存储介质可以是只读存储器(read-only memory,简称:ROM)、随机存取存储器(random access memory,简称:RAM)、只读光盘(compact disc read-only memory,简称:CD-ROM)、磁带、软盘和光数据存储设备等。
图3是本申请实施例提供的一种数据传输方法的流程图,应用于第一计算机设备,该方法包括:
301、当第一计算机设备接收到第二计算机设备的数据传输指令时,第一计算机设备对数据传输指令进行处理。
(1)第一计算机设备
第一计算机设备是数据传输过程中接收数据传输指令的计算机设备。第一计算机设备可以称为目的(target)设备或接收设备。第一计算机设备可以提供为NVMe协议、网络互连NVMe(NVMe over Fabrics,简称:NOF)协议、RDMA协议、PCI协议以及PCIe协议中的主机(host)。第一计算机设备可以提供为存储服务器。第一计算机设备可以用于执行输入输出(input output,简称:IO)处理任务。第一计算机设备可以是服务器、个人电脑、笔记本电脑、终端等。第一计算机设备可以为实体设备,第一计算机设备也可以是实体设备上运行的虚拟机或容器。
(2)第二计算机设备
第二计算机设备是数据传输过程中发送数据传输指令的计算机设备。第二计算机设备可以称为发起(initiator)设备或源(source)设备。第二计算机设备可以提供为NVMe协议、NOF协议、RDMA协议、PCI协议、PCIe协议中的host(主机)。第二计算机设备可以提供为存储客户端。第二计算机设备可以是服务器、个人电脑、笔记本电脑、终端等。第二计算机设备可以为实体设备,第二计算机设备也可以是实体设备上运行的虚拟机或容器。
(3)数据传输指令
数据传输指令用于指示传输数据。数据传输指令可以是IO指令。可选地,数据传输指令可以是NVMe协议、NOF协议中的IO指令。示例性地,数据传输指令可以是NVMe write指令以及NVMe read指令。数据传输指令可以包括写(write)指令、读(read)指令、发送(send)指令、接收(receive)指令中的至少一项。
其中,写指令可以指示向第二计算机设备的存储器写入数据,以便通过第二计算机设备的存储器存储数据。读指令可以用于指示从第二计算机设备的存储器读取数据,以便通过第二计算机设备的存储器获取数据。
(4)接收数据传输指令的方式
可选地,数据传输指令可以通过RDMA的方式传输,数据传输指令可以携带在RDMA消息中。第一计算机设备可以接收第二计算机设备的RDMA消息,解析该RDMA消息,得到RDMA消息携带的数据传输指令。例如,第一计算机设备可以接收第二计算机设备的RDMAwrite消息,解析该RDMAwrite消息,得到RDMAwrite消息携带的NVMe指令。又如,第一计算机设备可以接收第二计算机设备的RDMAsend消息,解析该RDMAsend消息,得到RDMA send消息携带的NVMe指令。
(5)对数据传输指令进行处理的方式
可选地,第一计算机设备可以包括存储器,第一计算机设备可以通过存储器对数据传输指令进行处理。可选地,可以通过向存储器的至少一种资源写入RDMA消息携带的内容,控制存储器完成对数据传输指令进行处理。
向存储器的资源写入RDMA消息携带的内容的方式可以包括以下方式一至方式三中的任一项或多项。
方式一、当接收到第一RDMA消息时,根据第一RDMA消息携带的存储器的门铃单元的内存注册信息,向存储器的门铃单元写入第一RDMA消息携带的指针信息。
第一RDMA消息是指携带了第一计算机设备的存储器的门铃单元的内存注册信息的RDMA消息。第一RDMA消息用于对第一计算机设备的存储器的门铃单元触发写入操作。第一RDMA消息可以由第二计算机设备发送给第一计算机设备。该第一RDMA消息可以是第二计算机设备的单边操作触发的消息。例如,该第一RDMA消息可以是RDMA写消息或RDMA读消息。
关于方式一的具体过程,可选地,可以解析第一RDMA消息,得到第一RDMA消息携带的存储器的门铃单元的内存注册信息。可以根据内存注册信息,确定存储器的门铃单元的物理地址,向存储器的门铃单元写入第一RDMA消息携带的指针信息。
可选地,方式一可以由第一计算机设备的网络接口适配器执行。具体来说,可以由网络接口适配器接收该第一RDMA消息,由网络接口适配器根据第一RDMA消息携带的存储器的门铃单元的内存注册信息,由网络接口适配器向存储器的门铃单元写入第一RDMA消息携带的指针信息。示例性地,网络接口适配器可以根据存储器的门铃单元的虚拟地址,查询地址转换信息,得到地址转换信息中虚拟地址对应的物理地址,作为存储器的门铃单元的物理地址。可以根据权限信息以及存储器的门铃单元的物理地址,向存储器的门铃单元写入数据。其中,该地址转换信息可以存储在网络接口适配器的存储空间、内核的存储空间或应用程序的存储空间中。
方式一可以达到的效果至少可以包括:第二计算机设备可以通过发送RDMA消息,直接对第一计算机设备的存储器的门铃单元触发写入操作,避免通过第一计算机设备的处理器对存储器的门铃单元触发写入操作。如此,可以实现源设备直接敲响目的设备的存储器的门铃的效果,从而极大地降低目的设备的处理器的处理开销,加快目的设备处理IO任务的速度,提高目的设备处理IO任务的效率。尤其是,在Multi Host(大量主机)的业务场景中,大量的第二计算机设备可以同时访问第一计算机设备,要求第一计算机设备提供数据存储业务,每个第二计算机设备可以通过RDMA的数据传输方式,直接敲响第一计算机设备的存储器的门铃,从而降低第一计算机设备的处理器以及网络适配器的处理开销,避免第一计算机设备成为数据存储系统的瓶颈。
方式二、当接收到第二RDMA消息时,根据第二RDMA消息携带的存储器的工作队列的内存注册信息,向存储器的工作队列写入第二RDMA消息携带的数据传输指令。
第二RDMA消息是指携带了第二计算机设备的存储器的工作队列的内存注册信息的RDMA消息。第二RDMA消息用于向第二计算机设备的存储器的工作队列写入数据传输指令。第二RDMA消息可以由第二计算机设备发送给第二计算机设备。该第二RDMA消息可以是第二计算机设备的单边操作触发的消息。例如,该第二RDMA消息可以是RDMA写消息或RDMA读消息。
关于方式二的具体过程,可选地,可以解析第二RDMA消息,得到第二RDMA消息携带的存储器的工作队列的内存注册信息。可以根据内存注册信息,确定存储器的工作队列的物理地址,向存储器的工作队列写入第二RDMA消息携带的数据传输指令。
可选地,方式二可以由第二计算机设备的网络接口适配器执行。具体来说,可以由网络接口适配器接收该第二RDMA消息,由网络接口适配器根据第二RDMA消息携带的存储器的工作队列的内存注册信息,向存储器的工作队列写入第二RDMA消息携带的数据传输指令。示例性地,网络接口适配器可以根据工作队列的虚拟地址查询地址转换信息,得到地址转换信息中虚拟地址对应的物理地址,作为工作队列的物理地址,可以根据权限信息以及工作队列的物理地址,向工作队列占用的内存区域写入数据传输指令。
方式二可以达到的效果至少可以包括:第二计算机设备可以通过发送RDMA消息,直接向第二计算机设备的存储器的工作队列写入数据传输指令,而无需通过第二计算机设备的处理器生成数据传输指令,向存储器的工作队列写入数据传输指令。如此,可以实现源设备直接向目的设备的存储器的工作队列写指令的效果,从而极大地降低目的设备的处理器的处理开销,加快目的设备处理IO任务的速度,提高目的端处理IO任务的效率。尤其是,在MultiHost(大量主机)的业务场景中,大量的第二计算机设备可以同时访问第一计算机设备,要求第一计算机设备提供数据存储业务,每个第二计算机设备可以通过RDMA的数据传输方式,直接向第一计算机设备的存储器的工作队列写入指令,从而降低第一计算机设备的处理器以及网络适配器的处理开销,避免第一计算机设备成为数据存储系统的瓶颈。
方式三、当接收到第三RDMA消息时,根据第三RDMA消息携带的存储器的数据缓存区的内存注册信息,向存储器的数据缓存区写入第三RDMA消息携带的待传输的数据。
第三RDMA消息是指携带了第一计算机设备的存储器的数据缓存区的内存注册信息的RDMA消息。第三RDMA消息用于向第一计算机设备的存储器的数据缓存区写入待传输的数据。第三RDMA消息可以由第二计算机设备发送给第一计算机设备。第三RDMA消息可以是第二计算机设备的单边操作触发的消息。例如,该第三RDMA消息可以是RDMA写消息或RDMA读消息。
关于方式三的具体过程,可选地,可以解析第三RDMA消息,得到第三RDMA消息携带的存储器的数据缓存区的内存注册信息。可以根据内存注册信息,确定存储器的数据缓存区的物理地址,向存储器的数据缓存区写入第三RDMA消息携带的待传输的数据。
可选地,方式三可以由第一计算机设备的网络接口适配器执行。具体来说,可以由网络接口适配器接收该第三RDMA消息,由网络接口适配器根据第三RDMA消息携带的存储器的数据缓存区的内存注册信息,向存储器的数据缓存区写入第三RDMA消息携带的数据。示例性地,网络接口适配器可以根据数据缓存区的虚拟地址查询地址转换信息,得到地址转换信息中虚拟地址对应的物理地址,作为数据缓存区的物理地址,可以根据权限信息以及数据缓存区的物理地址,向数据缓存区占用的内存区域中写入数据。
方式三可以达到的效果至少可以包括:第二计算机设备可以通过发送RDMA消息,直接对第一计算机设备的存储器的数据缓存区写入待传输的数据,而无需通过第一计算机设备的处理器向存储器的数据缓存区写入待传输的数据。如此,可以实现源设备直接向目的设备的存储器写入待传输的数据的效果,从而极大地降低目的设备的处理器的处理开销,加快目的设备处理IO任务的速度,提高目的设备处理IO任务的效率。尤其是,在MultiHost(大量主机)的业务场景中,大量的第二计算机设备可以同时访问第一计算机设备,要求第一计算机设备提供数据存储业务,每个第二计算机设备可以通过RDMA的数据传输方式,直接向第一计算机设备的存储器的数据缓存区写入待传输的数据,从而降低第一计算机设备的处理器以及网络适配器的处理开销,避免第一计算机设备成为数据存储系统的瓶颈。
可选地,存储器对数据传输指令进行处理的过程可以包括以下步骤一至步骤四:
步骤一、存储器检测到对该存储器的门铃单元触发写入操作。
步骤二、存储器从存储器的工作队列读取指令,得到数据传输指令。
可选地,存储器可以从该存储器的门铃单元中,获取指针信息。存储器可以根据该指针信息,获取数据传输指令在工作队列中的位置。存储器可以从该工作队列中的位置,获取数据传输指令。
示例性地,存储器可以从该存储器的门铃单元中,获取SQ的尾指针。存储器可以根据SQ的头指针的当前位置以及获取到的SQ的尾指针,获取数据传输指令在工作队列中的位置。存储器可以从该工作队列中的位置,获取数据传输指令。
步骤三、存储器从存储器的数据缓存区读取待传输的数据。
步骤四、存储器根据数据传输指令,对数据进行处理。
存储器的工作队列用于存储指令。例如,存储器的工作队列可以存储待执行的至少一个指令。又如,存储器的工作队列可以用于存储存储器的至少一个指令完成消息。存储器的工作队列可以位于第一计算机设备的内存中。例如,存储器的工作队列可以位于第一计算机设备的DRAM中。存储器的工作队列可以是循环队列。
可选地,存储器的工作队列可以提供为NVMe队列。例如,存储器的工作队列可以提供为NVMe队列中的SQ。存储器的工作队列中的数据传输指令可以提供为NVMe协议中的SQE。
需要说明的是,可选地,第一计算机设备可以包括网络接口适配器,接收数据传输指令的步骤可以由该网络接口适配器执行。第一计算机设备可以包括存储器,对数据传输指令的步骤可以由存储器进行处理。在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则网络接口适配器为RNIC,存储器为NVMe设备。相应地,本步骤301可以是:当第一计算机设备的RNIC接收到RDMA消息时,第一计算机设备的NVMe设备对RDMA消息携带的NVMe指令进行处理。
302、当对第二计算机设备的数据传输指令处理完成时,第一计算机设备生成中断消息。
(1)中断消息
中断消息通过存储器对数据传输指令处理完成的事件触发。中断消息可以由第一计算机设备的存储器生成。例如,中断消息可以由NVMe SSD的控制器生成。中断消息可以用于通知该中断消息的目的设备该存储器已对数据传输指令处理完成。中断消息可以用于请求该中断消息的目的设备发送数据传输完成消息。
(1.1)中断消息的类型
可选地,中断消息可以是消息信号中断(message signaled interrupt,简称:MSI)中断中的消息或者MSI-X中断中的消息。中断消息可以提供为PCIe协议中的存储器写请求事务层包(transaction layer packet,简称:TLP)。当然,中断消息也可以是其他类型的中断消息。例如,中断消息可以是软件中断指令(Pin-based interrupt,简称:INTx)、系统控制中断(system control interrupt,简称:SCI)、系统管理中断(system managementinterrupt,简称:SMI)等,本实施例对终端消息的类型不做限定。
(1.2)中断消息的消息内容(英文名称:message Data)
中断消息的消息内容可以是中断消息携带的数据。例如,若中断消息为存储器写TLP,则中断消息的消息内容可以是存储器写TLP中的数据有效负载(英文名称:datapayload)。
可选地,中断消息的消息内容可以是网络接口适配器的工作队列的指针信息。由于该工作队列的指针信息能够指示消息发送指令在工作队列中的位置,则中断消息可以通过消息内容,指示消息发送指令在工作队列中的位置,因此网络接口适配器接收到中断消息时,可以根据中断消息确定消息发送指令在工作队列中的位置。
例如,中断消息的消息内容可以是网络接口适配器的工作队列的尾指针。可选地,若网络接口适配器的工作队列为深度为1的循环队列,则网络接口适配器的工作队列的尾指针可以是0,相应地,中断消息的消息内容可以是0。
(1.3)中断消息的目的地址(英文名称:message address)
中断消息的目的地址可以是网络接口适配器的消息接收地址。网络接口适配器的消息接收地址可以是网络接口适配器中任意硬件或任意软件的地址。网络接口适配器的消息接收地址用于供网络接口适配器接收消息,因此,将网络接口适配器的消息接收地址作为中断消息的目的地址,在发送中断消息时,中断消息会发送至网络接口适配器。
可选地,中断消息的目的地址可以是网络接口适配器的门铃单元的地址。因此,将网络接口适配器的门铃单元的地址作为中断消息的目的地址,在发送中断消息时,中断消息会发送至网络接口适配器的门铃单元,从而达到向网络接口适配器的门铃单元写入数据的效果。
网络接口适配器的门铃单元用于通知网络接口适配器执行网络接口适配器的工作队列中的指令。可选地,网络接口适配器的门铃单元可以用于存储该网络接口适配器的工作队列的指针信息。其中,该指针信息可以包括网络接口适配器的工作队列的头指针、网络接口适配器的工作队列的尾指针中的至少一项。
网络接口适配器的工作队列用于存储指令。网络接口适配器的工作队列可以提供为RDMA协议中的工作队列(work queue,简称:WQ),相应地,网络接口适配器的工作队列中的每条指令可以提供为RDMA协议中的工作请求(work request,简称:WR)或RDMA协议中的工作队列元素(work queue elements,简称:WQE)。
可选地,网络接口适配器的工作队列可以包括发送队列、接收队列中的至少一项。网络接口适配器的工作队列可以是队列对(queue Pair,简称:QP),网络接口适配器的工作队列中的发送队列和接收队列可以成对创建。
发送队列用于存储网络接口适配器待执行的至少一个发送指令。例如,发送队列可以提供为RDMA协议中的发送队列(send queue,简称:SQ)。发送队列的每条发送指令可以提供为RDMA协议中的发送队列元素(work queue element,简称:SQE)。发送队列中的每个发送指令可以指示待发送的消息。例如,每个发送指令可以携带指向网络接口适配器的数据缓存区中待发送的消息的指针。
接收队列用于存储网络接口适配器待执行的至少一个接收指令。例如,接收队列可以提供为RDMA协议中的接收队列(receive queue,简称:RQ)。接收队列的每条接收指令可以提供为RDMA协议中的接收队列元素(receive queue element,简称:RQE)。接收队列中的每个接收指令可以指示待接收的消息的存储位置。例如,每个接收指令可以携带指向待接收的消息在网络接口适配器的数据缓存区中的接收位置。
可选地,网络接口适配器可以包括至少一个门铃单元,网络接口适配器的消息接收地址可以是该至少一个门铃单元中目标门铃单元的地址。其中,目标门铃单元是指对应的工作队列中具有消息发送指令的门铃单元。例如,假设网络接口适配器具有5个门铃单元,预先向门铃单元1对应的工作队列a写入了RDMAsend指令,则目标门铃单元为门铃单元1,相应地,网络接口适配器的消息接收地址是门铃单元1的地址。
(2)生成中断消息的方式
生成中断消息的过程可以包括以下步骤一至步骤二:
步骤一、获取中断消息的消息内容以及中断消息的目的地址。
关于获取中断消息的消息内容的方式,可选地,可以查询中断消息的消息内容信息,从消息内容信息得到指针信息,作为中断消息的消息内容。该中断消息的消息内容信息用于指示中断消息的消息内容。该中断消息的消息内容信息可以在消息内容字段承载。该消息内容字段可以位于MSI能力信息(也称MSI Capability结构)或MSI-X能力信息(即MSI-XCapability结构)中。
关于获取中断消息的目的地址的方式,可选地,可以查询中断消息的目的地址信息,从目的地址信息得到网络接口适配器的消息接收地址,将网络接口适配器的消息接收地址作为中断消息的目的地址。该中断消息的目的地址信息用于指示中断消息的目的地址。中断消息的目的地址信息可以在消息地址(英文:message address)字段承载。该消息地址字段可以在MSI能力信息或MSI-X能力信息中。
可选地,可以查询中断消息的目的地址信息,从目的地址信息得到网络接口适配器的门铃单元的地址,将网络接口适配器的门铃单元的地址作为中断消息的目的地址。例如,从目的地址信息得到网络接口适配器的至少一个门铃单元中目标门铃单元的地址,将目标门铃单元的地址的地址作为中断消息的目的地址。
在一个示例性场景中,以存储器为NVMe SSD为例,网络接口适配器为RNIC为例。假设NVMe SSD的中断消息通过MSI-X能力信息指示,则步骤一可以包括:NVMe SSD查询MSI-X能力信息,获取MSI-X能力信息的消息内容字段承载的信息,得到RNIC的工作队列的尾指针,获取MSI-X能力信息的消息地址字段承载的信息,得到RNIC的消息接收地址。
步骤二、对中断消息的消息内容以及中断消息的目的地址进行封装,得到中断消息。
(3)针对中断消息的初始化流程
可选地,可以预先将中断消息的消息内容信息设置为网络接口适配器的工作队列的指针信息。具体来说,可以在生成中断消息之前,向中断消息的消息内容信息写入指针信息。例如,可以在数据传输的初始化阶段,向MSI Capability结构的消息内容字段写入0。
可选地,本实施例可以应用在基于NOF协议进行数据传输的场景中,可以对NOF协议中NVMe设备的原生的中断消息的消息内容进行修改,将中断消息的消息内容修改为网络接口适配器的工作队列的指针信息。
可选地,可以预先将中断消息的消息地址信息设置为网络接口适配器的消息接收地址。具体来说,可以在生成中断消息之前,向中断消息的消息地址信息写入网络接口适配器的消息接收地址。可选地,可以向中断消息的消息地址信息写入网络接口适配器的门铃单元的地址。可选地,可以确定网络接口适配器的至少一个工作队列中具有消息发送指令的工作队列,将该工作队列对应的门铃单元作为目标门铃单元,向中断消息的消息地址信息写入该目标门铃单元的地址。示例性地,可以在数据传输的初始化阶段,向MSICapability结构的消息地址字段写入网络接口适配器的目标门铃单元的消息接收地址。
可选地,本实施例可以应用在基于NOF协议进行数据传输的场景中,可以对NOF协议中NVMe设备的原生的中断消息的目的地址进行修改,将中断消息的目的地址从CPU的地址修改为网络接口适配器的消息接收地址。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则网络接口适配器为RNIC,存储器为NVMe设备。相应地,本步骤302可以是:当第一计算机设备的NVMe设备对第二计算机设备的NVMe指令处理完成时,第一计算机设备的NVMe设备生成中断消息。
303、第一计算机设备根据网络接口适配器的消息接收地址,向网络接口适配器发送中断消息。
通过将中断消息的目的地址设置为网络接口适配器的消息接收地址,向网络接口适配器的消息接收地址发送中断消息,则网络接口适配器会接收到中断消息。可选地,通过将中断消息的目的地址设置为网络接口适配器的目标门铃单元的地址,向网络接口适配器的目标门铃单元发送中断消息,则网络接口适配器的目标门铃单元会接收到中断消息,则网络接口适配器的目标门铃单元会被写入中断消息,以使网络接口适配器检测到门铃操作,进而从目标门铃单元对应的工作队列中获取指令。
本步骤可以达到的效果至少可以包括:
相关技术中,目的设备都会将处理器的消息接收地址作为中断消息的目的地址。因此,一旦存储器对数据传输指令处理完成,存储器根据该处理器的消息接收地址,会向处理器发送中断消息,则处理器会接收到中断消息,从而陷入中断处理流程,需要临时执行生成消息发送指令、将消息发送指令入列至网络接口适配器的工作队列,对网络接口适配器的门铃单元触发写入操作等一系列中断处理的步骤,极大的消耗了目的设备的处理器的处理资源,影响了目的设备的处理器的处理IO任务的效率。
而本实施例中,通过将网络接口适配器的消息接收地址作为中断消息的目的地址,可以达到对中断消息重定向以及事务转换的效果。具体来说,对于存储器产生的中断消息来说,通过将该中断消息的目的设备从处理器重定向为网络接口适配器,一方面,可以避免处理器受到中断消息的打扰,也就避免了处理器响应中断消息并执行中断处理的过程,另一方面,网络接口适配器可以根据工作队列中的消息发送指令,向第一计算机设备发送数据传输完成消息,从而达到通知存储器完成数据传输的功能。对于第二计算机设备来说,通过将处理器执行中断处理的事务,转换为网络接口适配器执行消息发送指令的事务,可以实现将处理器的处理逻辑卸载至网络接口适配器的功能,达到通过软件的方式来卸载处理器的效果。
可选地,本实施例可以应用在基于NOF协议进行数据传输的场景中,可以对NOF协议中NVMe设备的原生的中断消息的消息地址进行修改,将中断消息的消息地址从处理器的消息接收地址修改为网络接口适配器的消息接收地址。如此,通过改进NOF协议的软件流程,即可实现对中断消息进行重定向的功能,避免使用现场可编程门阵列(fieldprogrammable gatearray,简称:FPGA)或者专用网卡来卸载处理器的处理逻辑,无需增加额外的硬件,成本较低,实用性强。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则网络接口适配器为RNIC,存储器为NVMe设备。相应地,本步骤303可以是:第一计算机设备的NVMe设备根据RNIC的消息接收地址,向RNIC发送中断消息。
304、当网络接口适配器接收到中断消息时,第一计算机设备从网络接口适配器的工作队列中获取指令,得到消息发送指令。
消息发送指令用于指示向第二计算机设备发送数据传输完成消息。可选地,该消息发送指令可以是用于供网络接口适配器执行的指令。可选地,该消息发送指令可以是RDMA指令。例如,该消息发送指令可以包括RDMA发送指令以及RDMA写指令。其中,RDMA发送指令也称RDMAsend请求,RDMA写指令也称RDMAwrite请求。
可选地,本步骤304可以由第一计算机设备的网络接口适配器执行。具体来说,当网络接口适配器接收到中断消息时,网络接口适配器可以确定需要执行工作队列中的指令,则网络接口适配器从网络接口适配器的工作队列中获取指令,得到消息发送指令。例如,网络接口适配器可以从网络接口适配器的发送队列中获取指令,得到RDMA send指令。
可选地,若上述步骤303为向网络接口适配器的门铃单元发送中断消息,则网络接口适配器的门铃单元可以接收到中断消息,可以在网络接口适配器的门铃单元中存储该中断消息。当在网络接口适配器的门铃单元中存储该中断消息时,网络接口适配器会检测到对门铃单元触发了写入操作,则可以确定需要执行工作队列中的指令,从网络接口适配器的工作队列中获取指令,得到消息发送指令。可选地,网络接口适配器的门铃单元可以集成在网络接口适配器内部,当网络接口适配器的门铃单元被写入数据时,网络接口适配器即可侦测到对该门铃单元触发的写入操作。
可选地,若上述步骤303向网络接口适配器的目标门铃单元发送中断消息,则网络接口适配器的目标门铃单元可以接收到中断消息,则当网络接口适配器可以检测到目标门铃单元被触发写入操作时,可以根据门铃单元与工作队列之间的对应关系,从目标门铃单元对应的工作队列中获取指令。示例性地,假设门铃单元与工作单元之间的对应关系如下表1所示,若网络接口适配器可以检测到门铃单元1被触发写入操作时,可以根据门铃单元与工作队列之间的对应关系,从门铃单元1对应的工作队列a中获取指令。
表1
门铃单元 |
工作队列 |
门铃单元1 |
工作队列a |
门铃单元2 |
工作队列b |
门铃单元3 |
工作队列c |
可选地,从工作队列中获取消息发送指令的过程可以包括:根据中断消息携带的指针信息,获取消息发送指令在工作队列中的位置,从该工作队列的该位置,获取消息发送指令。可选地,可以从中断消息中获取工作队列的尾指针。可以根据工作队列的头指针的当前位置以及获取到的工作队列的尾指针,获取消息发送指令在工作队列中的位置。可以从该工作队列中的位置,获取消息发送指令。示例性地,若目标工作队列为深度为1的循环队列,则目标工作队列的头指针和尾指针可以是0,相应地,可以将目标工作队列的第一个位置,作为消息发送指令在目标工作队列中的位置,从目标工作队列的第一个位置获取指令,得到消息发送指令。
关于获取工作队列的指针信息的方式,可选地,可以解析中断消息,得到中断消息携带的指针信息。示例性地,可以确定中断消息的消息内容字段,将消息内容字段承载的消息内容作为指针信息。
可选地,可以在数据传输之前,生成网络接口适配器的工作队列,将消息发送指令入列至网络接口适配器的工作队列。其中,生成的网络接口适配器的工作队列可以是网络接口适配器的工作队列的发送队列。例如,可以在第一计算机设备与第二计算机设备建立RDMA连接成功时,生成网络接口适配器的工作队列,将消息发送指令入列至网络接口适配器的工作队列。
可选地,生成的网络接口适配器的工作队列可以是循环队列。循环队列可以视为一个首尾相接的圆环。当将消息发送指令入列至循环队列时,循环队列的尾指针会向头指针的方向移动。当将消息发送指令从循环队列出列时,循环队列的头指针会向尾指针的方向移动。当循环队列处于队满状态或队空状态时,循环队列的尾指针和头指针可以相等。
可选地,生成的网络接口适配器的工作队列的深度可以是1。该工作队列的深度等于工作队列中最多容纳的指令数量。将工作队列的深度设置为1时,工作队列可以仅用于容纳一个指令。那么,当将消息发送指令入列至网络接口适配器的工作队列时,网络接口适配器的工作队列即会处于队满状态。
可选地,生成的网络接口适配器的工作队列可以是深度为1的循环队列。当将消息发送指令入列至网络接口适配器的工作队列后,网络网络接口适配器的工作队列尾指针和头指针可以始终为0,并且网络网络接口适配器的工作队列会处于队满状态,可以无需写入新的指令。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则网络接口适配器为RNIC,存储器为NVMe设备。相应地,本步骤304可以是:当第一计算机设备的RNIC接收到中断消息时,RNIC从RDMA工作队列中获取指令,得到RDMA指令。
本步骤可以达到的效果至少可以包括:
一方面,通过预先生成工作队列并将消息发送指令入列至工作队列,当网络接口适配器接收到中断消息时,即可从工作队列中获取消息发送指令,而无需在存储器触发中断时,临时生成消息发送指令,也无需临时将消息发送指令入列至工作队列,从而避免处理器的中断处理过程,减少处理器的资源开销。
另一方面,通过将网络接口适配器的工作队列设置为深度为1的循环队列,将消息发送指令入列至该工作队列后,即完成了对工作队列的初始化过程。该工作队列中可以有且仅有一个工作队列元素(work queue element,简称:WQE),该WQE始终不会变化。该WQE可以是向第二计算机设备发送数据传输完成消息的消息发送指令。如此,在数据传输过程中,对于第二计算机设备的每个数据传输指令,网络接口适配器每次从工作队列中获取指令时,均可以获取到消息发送指令,从而可以始终通过该工作队列中的消息发送指令,向第一计算机设备发送数据传输完成消息。因此,无需第二计算机设备的处理器临时生成消息发送指令,也无需第二计算机设备的处理器临时将消息发送指令入列至网络接口适配器的工作队列,可以降低处理器的资源开销。
另一方面,由于网络接口适配器的工作队列越深,网络接口适配器的工作队列要占用的内存区域越大,通过将网络接口适配器的工作队列的深度设置为1,在保证网络接口适配器的工作队列可以容纳消息发送指令的基础上,可以节约网络接口适配器的工作队列占用的内存空间。
另一方面,通过将网络接口适配器的工作队列的深度设置为1,只需将一个消息发送指令入列至网络接口适配器的工作队列,即可令网络网络接口适配器的工作队列处于队满状态,而无需向网络网络接口适配器的工作队列覆盖写入新的指令,从而降低处理器的资源开销。
305、第一计算机设备根据消息发送指令,向第二计算机设备发送数据传输完成消息。
数据传输完成消息用于指示第一计算机设备的存储器已经对数据传输指令处理完成。可选地,数据传输完成消息的内容可以为预设内容。该预设内容可以由第一计算机设备和第二计算机设备预先约定。例如,该预设内容可以是“IO done”。
可选地,可以通过该第一计算机设备的网络接口适配器,向第二计算机设备发送数据传输完成消息。例如,可以由该网络接口适配器执行该消息发送指令,根据该消息发送指令生成数据传输完成消息,由该网络接口适配器向第二计算机设备发送数据传输完成消息。
可选地,若该消息发送指令可以为RDMA指令,相应地,该数据传输完成消息可以为RDMA消息。例如,若消息发送指令为RDMA写指令,相应地,该数据传输完成消息可以为RDMA写消息。又如,若消息发送指令可以为RDMA发送指令,相应地,该数据传输完成消息可以为RDMA发送消息。
可选地,发送数据传输完成消息的方式可以包括以下方式一至方式二中的一项或多项的组合:
方式一、根据RDMA写指令,执行RDMA写操作,向第二计算机设备发送RDMA写消息。
可选地,可以根据RDMA写指令,从第一计算机设备的内存空间读取RDMA写消息的内容,对RDMA写消息的内容、第二计算机设备的虚拟内存地址以及该虚拟内存地址的权限信息进行封装,得到RDMA写消息,向第二计算机设备的虚拟内存地址对应的内存空间写入RDMA写消息。
可选地,可以向第二计算机设备的中断触发区域发送RDMA写消息。该中断触发区域用于供第二计算机设备接收中断请求,若向该第二计算机设备的中断触发区域发送RDMA写消息,则第二计算机设备会触发系统中断,使得第二计算机设备可以确定接收到了第一计算机设备的数据传输完成消息。
示例性地,该中断触发区域可以为第二计算机设备的本地高级可编程中断控制器(advanced programmable interrupt controller,简称:APIC)区域。该本地APIC与第二计算机设备的处理器连接。该本地APIC可以用于接收第二计算机设备中任一设备的消息,将该消息作为中断消息,发送给第二计算机设备的处理器。则当向第二计算机设备的本地APIC区域发送RDMA写消息时,第二计算机设备的本地APIC会接收到RDMA写消息,向第二计算机设备的处理器发送RDMA写消息,从而触发第二计算机设备的系统中断。
向第二计算机设备的中断触发区域发送RDMA写消息的效果至少可以包括:当第一计算机设备发送RDMA写消息时,第二计算机设备会产生系统中断。如此,第二计算机设备能够快速地确定已经接收到了数据传输完成消息,而无需执行RDMA接收操作,从而避免第二计算机设备的处理器对接收队列进行轮询时造成的资源开销,从而提高了第二计算机设备的系统性能。
方式二、根据RDMA发送指令,执行RDMA发送操作,向第二计算机设备发送RDMA发送消息。
可选地,可以根据RDMA发送指令,从第一计算机设备的内存空间读取RDMA发送消息的内容,对RDMA发送消息的内容进行封装,得到RDMA发送消息,向第二计算机设备发送该RDMA发送消息。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则网络接口适配器为RNIC,存储器为NVMe设备。相应地,本步骤305可以是:第一计算机设备的RNIC根据RDMA指令,向第二计算机设备发送RDMA消息。
示例性地,请参见图4。当第二计算机设备的NVMe SSD触发MSI-X中断时,NVMe SSD的MSI-X中断消息可以重定向至第二计算机设备的RNIC的门铃寄存器,则RNIC会执行发送队列中的RDMA发送指令,向第一计算机设备的RNIC的接收队列发送RDMA发送消息。
综上所述,本实施例阐述了第一计算机设备对第二计算机设备的一个数据传输指令进行处理的过程。可选地,当第一计算机设备与第二计算机设备建立连接后,第二计算机设备可以多次向第一计算机设备发送数据传输指令,对于第二计算机设备的每个数据传输指令,第一计算机设备均可以通过执行上述步骤301至步骤305,对第二计算机设备的数据传输指令进行处理。如此,可以将每次对数据传输指令处理完成后生成的中断消息均重定向至网络接口适配器,从而将每次对数据传输指令处理完成后的中断事务均转换为发送数据传输完成消息的事务,达到在数据传输过程中卸载第一计算机设备的处理器的处理逻辑的效果,极大地降低第一计算机设备的处理器的处理开销。尤其是,可以通过将网络接口适配器的工作队列设置为深度为1的循环队列,每次对数据传输指令处理完成后,网络接口适配器均可以按照该工作队列中唯一的消息发送指令发送数据传输完成消息,避免了当对某一个数据传输指令处理完成时,对下一个数据传输指令处理时,要重新生成消息发送指令并重新向工作队列写入数据传输指令的过程,从而极大地提高了数据传输过程的效率。
本实施例提供的方法,通过将数据传输指令处理完成时的中断消息从计算机设备的处理器重定向至网络接口适配器,直接根据网络接口适配器的工作队列中的消息发送指令,向第二计算机设备发送数据传输完成消息,可以达到将存储器触发的中断消息直接转换为数据传输完成消息的效果,避免目的设备的处理器进行一系列中断处理的事务,从而避免处理器的深度参与,极大的减少了目的端的处理器的资源开销,提高了目的设备对数据传输指令处理的效率和速度。另外,通过改进软件流程,即可达到卸载目的设备的处理器的处理逻辑的效果,避免使用专用的网卡或其他芯片时造成的硬件成本,实用性强。
图5是本申请实施例提供的一种数据传输方法的流程图,该方法的交互主体包括第一计算机设备以及第二计算机设备,该方法包括:
501、第一计算机设备根据存储器的资源的物理地址,对资源进行内存注册,得到资源的内存注册信息。
(1)存储器的资源
存储器的资源用于对存储器的数据传输过程进行控制。示例性地,资源可以包括存储器的门铃单元、存储器的工作队列、存储器的数据缓存区中的至少一项。可选地,资源的数量可以包括一个或多个。
(2)资源的物理地址
资源的物理地址用于访问资源。资源的物理地址可以是第二计算机设备的地址空间中的地址。
存储器的门铃单元的物理地址用于访问存储器的门铃单元。例如,存储器的门铃单元的物理地址可以是存储器中门铃寄存器的物理地址,门铃寄存器的物理地址指向存储器中的门铃寄存器。可选地,存储器的门铃单元的物理地址可以是门铃单元在总线域中的地址。例如,存储器的门铃单元的物理地址可以是门铃单元在PCIe域或者PCI域中的地址。可选地,存储器的门铃单元的物理地址可以是门铃单元在PCIe BAR空间中的地址。例如,存储器的门铃单元的物理地址可以是门铃单元在PCIe BAR空间中映射的寄存器的地址。
存储器的工作队列的物理地址用于访问存储器的工作队列。可选地,存储器的工作队列的物理地址可以指向第二计算机设备的内存空间。例如,存储器的工作队列的物理地址可以指向第二计算机设备的动态随机存取存储器(dynamic random access memory,简称:DRAM)中的空间。
存储器的数据缓存区的物理地址用于访问数据缓存区。可选地,存储器的数据缓存区的物理地址指向第二计算机设备的内存空间。例如,存储器的数据缓存区的物理地址可以指向第二计算机设备的DRAM中的空间。
(3)对资源进行内存注册的方式
可选地,内存注册的步骤可以包括:向操作系统申请内存,在操作系统中对申请的内存区域进行注册,生成该注册的内存区域的内存注册信息,向网络接口适配器写入内存注册信息。其中,内存区域(memory region,简称:MR)是指第二计算机设备的内存中的区域。例如,内存区域可以是DRAM中的一块区域。
可选地,对资源进行内存注册的步骤可以通过处理器的NOF驱动实现。具体来说,可以在处理器运行NOF驱动的过程中,由NOF驱动将NVMe SSD的资源注册到RNIC。
(4)资源的内存注册信息
可选地,内存注册信息可以包括内存区域的虚拟地址以及内存区域的权限信息中的至少一项。内存区域的虚拟地址(virtual address)用于访问内存区域。内存区域的虚拟地址可以是内存区域的物理地址映射的逻辑地址。内存区域的虚拟地址能够通过地址转换信息,转换为内存区域的物理地址。
内存区域的权限信息(key)用于对访问内存区域的操作进行鉴权。具体来说,若任意对象通过内存区域的虚拟地址和权限信息请求访问该内存区域,则可以允许该对象的访问操作。若任意对象未通过内存区域的权限信息请求访问该内存区域,则可以拒绝该对象的访问操作。
(5)对资源进行内存注册的效果
对于任一资源来说,当对该资源进行内存注册后,即可使用资源的内存注册信息,对资源进行访问和控制。因此,当第一计算机设备向第二计算机设备发送存储器的资源的内存注册信息后,第二计算机设备能够根据资源的内存注册信息,对第一计算机设备的存储器的资源进行访问和控制,从而实现远程的访问和控制存储器的功能。并且,对资源进行内存注册后,即可使用注册的内存区域进行RDMA操作。例如,可以在该注册的内存区域中分配至少一个数据缓存区,将该注册的内存区域中的数据缓存区映射为RDMA操作所使用的发送队列或者接收队列。其中,该注册的内存区域能够锁定在内存中,避免内存区域中的数据被应用程序修改。并且,注册的内存缓存区的虚拟地址和物理地址之间的对应关系可以保持稳定,避免操作系统对内存缓存区触发页出(page out)操作。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则存储器为NVMe设备,NVMe设备可以通过NOF驱动以及NVMe驱动控制。相应地,本步骤305可以是:第一计算机设备的NOF驱动根据NVMe设备的资源的物理地址,对NVMe设备进行内存注册,得到NVMe设备的内存注册信息。
502、第一计算机设备向第二计算机设备发送存储器的资源的内存注册信息。
503、第二计算机设备接收第一计算机设备的存储器的资源的内存注册信息。
可选地,第二计算机设备可以向第一计算机设备发送内存注册信息请求,该内存注册信息请求用于请求第一计算机设备的存储器的资源的内存注册信息。第一计算机设备接收到内存注册信息请求后,可以向第二计算机设备发送存储器的资源的内存注册信息,则第二计算机设备接收第一计算机设备的存储器的资源的内存注册信息。
可选地,第一计算机设备可以和第二计算机设备建立RDMA连接,第一计算机设备可以通过该RDMA连接向第二计算机设备发送内存注册信息。其中,该RDMA连接可以是基于网络接口适配器的工作队列的点对点连接。具体来讲,该RDMA连接可以看做一条数据传输隧道,该数据传输隧道的两端分别是第一计算机设备的网络接口适配器的工作队列与第二计算机设备的网络接口适配器的工作队列。
可选地,通过RDMA连接向第二计算机设备发送内存注册信息的过程具体可以包括:第一计算机设备可以对第一计算机设备的NVMe驱动和第一计算机设备的RDMA驱动进行初始化。之后,第一计算机设备的NOF驱动可以执行上述步骤501。第二计算机设备可以对第二计算机设备的RDMA驱动进行初始化。第二计算机设备的NOF驱动可以向第一计算机设备发送RDMA连接建立请求。第一计算机设备接收到RDMA连接建立请求后,可以和第二计算机设备建立RDMA连接。第二计算机设备可以通过RDMA连接,向第一计算机设备发送内存注册信息请求。第一计算机设备通过RDMA连接,接收到内存注册信息请求后,可以向第二计算机设备发送存储器的资源的内存注册信息。则第二计算机设备通过RDMA连接,可以接收第一计算机设备的存储器的资源的内存注册信息。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则存储器为NVMe设备。相应地,步骤502可以是:第一计算机设备的RNIC根据RDMA指令,向第二计算机设备发送RDMA消息,该RDMA消息携带NVMe设备的资源的内存注册信息。相应地,步骤503可以是:第二计算机设备的RNIC接收RDMA消息,第二计算机设备的NOF驱动解析RDMA消息,得到RDMA消息携带的NVMe设备的资源的内存注册信息。
504、第二计算机设备对第一计算机设备的存储器进行本地映射,得到存储器在第二计算机设备中映射的虚拟NVMe设备。
可以通过对第一计算机设备的存储器进行本地映射,将第一计算机设备的存储器映射为第二计算机设备本地的虚拟NVMe设备。示例性地,请参见图4,第一计算机设备的存储器可以是图4中的NVMe SSD,该NVMe SSD的资源包括第一计算机设备的DRAM中的SQ、CQ和数据缓存区,该NVMe SSD的资源还包括NVMe SSD中的门铃寄存器。第二计算机设备通过对第一计算机设备的NVMe SSD进行本地映射,可以得到映射的虚拟NVMe SSD。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则存储器为NVMe设备。相应地,本步骤504可以是:第二计算机设备的NOF驱动对第一计算机设备的NVMe设备进行本地映射,得到第一计算机设备的NVMe设备在第二计算机设备中映射的虚拟NVMe设备。
505、第二计算机设备根据虚拟NVMe设备的资源的内存注册信息,对NVMe驱动进行初始化。
可选地,NVMe驱动可以提供初始化接口,可以根据虚拟NVMe设备的资源的内存注册信息,调用NVMe驱动的初始化接口,对NVMe驱动进行初始化操作。
可选地,在初始化过程中,可以根据虚拟NVMe设备的资源的内存注册信息,对NVMe设备的处理器进行配置。例如,可以在NVMe设备的处理器中配置虚拟NVMe设备的门铃单元的内存注册信息、虚拟NVMe设备的工作队列的内存注册信息、虚拟NVMe设备的数据缓存区的内存注册信息。则初始化结束后,NVMe设备的处理器会存储虚拟NVMe设备的资源的内存注册信息。
在一个示例性场景中,本申请可以应用于基于NOF协议进行数据传输,则存储器为NVMe设备。相应地,本步骤504可以是:第二计算机设备的NOF驱动根据虚拟NVMe设备的资源的内存注册信息,对NVMe驱动进行初始化。
本步骤达到的效果至少可以包括:
通过RDMA内存注册的方式,对第一计算机设备的存储器进行本地映射,并对NVMe驱动进行初始化,NVMe驱动会将第一计算机设备的存储器感知为第二计算机设备本地的NVMe设备,根据虚拟NVMe设备的资源的内存注册信息,NVMe驱动只需按照对本地的NVMe设备进行操作的逻辑,即可对该虚拟NVMe设备进行控制。进一步地,对于逻辑上在NVMe驱动上层的应用程序来说,应用程序也会将第一计算机设备的存储器感知为第二计算机设备本地的NVMe设备,应用程序只需按照对本地的NVMe设备进行操作的逻辑,即可对该虚拟NVMe设备进行控制,从而实现对NVMe驱动以及应用程序透明的效果。
506、第二计算机设备通过NVMe驱动,根据虚拟NVMe设备的资源的内存注册信息,向该虚拟NVMe设备传输数据。
可选地,本步骤506可以包括以下步骤一至步骤二:
步骤一、通过NVMe驱动,生成NVMe指令。
步骤一可以包括以下方式一至方式三中的任一项或多项的组合:
方式一、通过NVMe驱动,生成携带虚拟NVMe设备的工作队列的指针信息的第一NVMe指令。
该第一NVMe指令用于指示对虚拟NVMe设备的门铃单元触发写入操作。该第一NVMe指令携带虚拟NVMe设备的工作队列的指针信息。该虚拟NVMe设备的工作队列的指针信息可以为待向虚拟NVMe设备的门铃单元写入的数据。例如,该虚拟NVMe设备的工作队列的指针信息可以为虚拟NVMe设备的提交队列的尾指针。
方式二、通过NVMe驱动,生成指示数据传输的第二NVMe指令。
该第二NVMe指令用于指示虚拟NVMe设备进行数据传输。例如,该第二NVMe指令可以用于指示向虚拟NVMe设备写入数据。又如,该第二NVMe指令可以用于指示从虚拟NVMe设备读取数据。示例性地,该第二NVMe指令可以包括NVMe写指令、NVMe读指令中的至少一项。
方式三、通过NVMe驱动,生成携带待传输的数据的第三NVMe指令。
步骤二、对NVMe指令以及存储器的资源的内存注册信息进行封装,得到RDMA消息。
可选地,步骤二可以由NOF驱动执行。
可选地,与上述步骤一中的方式一至方式三对应,步骤二可以包括以下方式A至方式C中的任一项或多项的组合:
方式A、对第一NVMe指令以及存储器的门铃单元的内存注册信息进行封装,得到第一RDMA消息。
方式A与上述步骤中的方式一对应。由于在初始化时对存储器的门铃单元的内存注册信息进行了预先配置,则可以读取预先配置的存储器的门铃单元的内存注册信息,从而对第一NVMe指令以及存储器的门铃单元的内存注册信息进行封装,得到第一RDMA消息。第一RDMA消息可以用于触发上述图3实施例中步骤301中的方式一。
方式B、对第二NVMe指令以及存储器的工作队列的内存注册信息进行封装,得到第二RDMA消息。
方式B与上述步骤中的方式二对应。由于在初始化时对存储器的工作队列的内存注册信息进行了预先配置,则可以读取预先配置的存储器的工作队列的内存注册信息,从而对第二NVMe指令以及存储器的工作队列的内存注册信息进行封装,得到第二RDMA消息。第二RDMA消息可以用于触发上述图3实施例中步骤301中的方式二。
方式C、对第三NVMe指令以及存储器的数据缓存区的内存注册信息进行封装,得到第三RDMA消息。
方式C与上述步骤中的方式三对应。由于在初始化时对存储器的数据缓存区的内存注册信息进行了预先配置,则可以读取预先配置的存储器的数据缓存区的内存注册信息,从而对第三NVMe指令以及存储器的数据缓存区的内存注册信息进行封装,得到第三RDMA消息。第三RDMA消息可以用于触发上述图3实施例中步骤301中的方式三。
示例性地,请参见图4,第二计算机设备通过对第一计算机设备的NVMe SSD进行本地映射,可以得到映射的虚拟NVMe SSD。对于第二计算机设备的应用程序(application,简称:APP)和NVMe驱动来说,应用程序和NVMe驱动按照对本地NVMe SSD的操作逻辑,即可对该虚拟NVMe SSD进行操作。而对于第二计算机设备的NOF驱动和RDMA驱动来说,NOF驱动和RDMA驱动可以识别出该NVMe SSD是从Target端映射到本端的虚拟NVMeSSD,则可以将应用程序和NVMe驱动的数据传输指令,通过RDMA的数据传输方式传输给第一计算机设备的NVMeSSD,从而对Target端的NVMe SSD进行数据传输。
本实施例提供的方法,通过RDMA内存注册的方式,将目的设备的存储器映射为源设备本地的虚拟存储器,源设备可以直接操作目的设备的存储器,而无需经过目的设备的处理器的深度参与,从而降低目的设备的处理器的资源开销,可以提升目的设备的系统性能。进一步地,通过修改源设备的NOF驱动的处理逻辑,即可向目的设备的存储器映射的虚拟存储器传输数据,而无需修改源设备的NVMe驱动和RDMA驱动,系统兼容性较好,能够达到对上层NVMe驱动以及应用程序透明的效果。
在一种可能的实现中,上述实施例中的方法流程可以通过计算机设备中的NOF驱动、NVMe驱动、RDMA驱动以及RNIC进行交互以实现。可选地,NVMe驱动可以是标准的NVMe驱动,RDMA驱动可以是标准的RDMA驱动,RNIC可以是标准的RNIC,通过改进NOF驱动的处理逻辑,即可执行以实现上述方法实施例。
示例性地,以上述实施例中的第一计算机设备称为目的设备,第二计算机设备称为源设备,存储器为NVMe SSD、网络接口适配器为RNIC为例,以下通过图6实施例,对通过计算机设备中的NOF驱动、NVMe驱动、RDMA驱动以及RNIC进行交互,来实现上述数据传输方法的初始化过程进行描述。通过图7实施例,对通过计算机设备中的NOF驱动、NVMe驱动、RDMA驱动以及RNIC进行交互,来实现上述数据传输方法的过程进行描述。
图6是本申请实施例提供的一种数据传输方法的初始化过程的流程图,该方法包括以下步骤:
步骤一、目的设备的CPU对NVMe驱动进行初始化。
步骤二、目的设备的CPU对RDMA驱动进行初始化。
步骤三、源设备的CPU对RDMA驱动进行初始化。
步骤四、目的设备的NOF驱动将NVMe SSD的资源注册到目的设备的RNIC。
其中,NVMe SSD的资源包括NVMe SSD的SQ、NVMe SSD的CQ、NVMe SSD的数据缓存区、NVMe SSD的门铃寄存器。NVMe SSD的门铃寄存器可以是NVMe SSD映射到PCIe BAR空间的寄存器。
步骤五、源设备的NOF驱动发起RDMA连接,连接成功后,可以和目的设备通过RDMA连接进行通信。
其中,在发起RDMA连接时,源设备和目的设备可以创建第一组RDMA队列。
步骤六、源设备的NOF驱动发送消息给目的设备,获取目的设备的NVMe SSD的内存注册信息,获取成功之后,源设备的NOF驱动对目的设备的NVMe SSD进行本地映射,并对源设备的NVMe驱动进行初始化。这样对于源设备的NVMe驱动来说,对目的设备的NVMeSSD触发的操作就变成了本地操作。
步骤七、目的设备创建第二组RDMA队列,并设置发送队列是一个深度为1的循环队列,唯一的WQE内容初始化为向源设备发送一个RDMA Send请求,RDMA Send请求的内容可以由源设备和目的设备预先约定。
步骤八、目的设备NOF驱动把NVMe SSD的MSI-X中断的目的地址修改为第二组RDMA队列中发送队列对应的门铃单元的地址。
步骤九、源设备创建第二组RDMA队列,然后源设备发起第二路RDMA连接,连接成功之后,目的设备就可以把目的设备的NVMe MSI-X中断自动转换成RDMASend消息来通知源设备。
图7是本申请实施例提供的一种数据传输方法的流程图,该方法包括以下步骤:
步骤一、源设备的应用程序生成NVMe写命令。
步骤二、源设备的应用程序向NVMe驱动发送NVMe写命令。
步骤三、当源设备的NVMe驱动接收到应用程序的NVMe写命令时,将NVMe写命令透传给NOF驱动。
步骤四、当NOF驱动接收到NVMe驱动的NVMe写命令时,执行RDMA单边写操作,将SQE以及数据传输至目的设备,并敲响目的设备的NVMe SSD的门铃。
步骤五、当目的设备的NVMe SSD接收到NVMe写命令时,目的设备的NVMe SSD对NVMe写命令进行处理。
步骤六、当目的设备的NVMe SSD对NVMe写命令处理完成后,目的设备的NVMe SSD向完成队列写入命令处理结果,并产生MSI-X中断。
因为MSI-X中断的目的地址是第二路RDMA连接的发送队列的门铃单元的地址,因此会进入步骤七。
步骤七、目的设备的RNIC执行第二组RDMA队列中发送队列的WQE,则发送RDMASend消息。
步骤八、源设备接收到RDMA Send消息,执行RDMA读操作,从接收队列中读取CQE,对CQE解析后,向应用程序返回命令处理结果。
上述实施例以执行NVMe写命令的流程为例进行描述,执行NVMe读命令的流程为例与该流程同理。
图8是本申请实施例提供的一种数据传输装置的结构示意图,如图8所示,应用于第一计算机设备,该装置包括:
生成模块801,用于执行上述步骤302;
发送模块802,用于执行上述步骤303;
获取模块803,用于执行上述步骤304;
发送模块802,还用于执行上述步骤305。
可选地,发送模块802,用于向网络接口适配器的目标门铃单元发送中断消息;
获取模块803,用于从目标门铃单元对应的工作队列中获取指令。
可选地,获取模块803,用于:根据中断消息携带的指针信息,获取消息发送指令在工作队列中的位置;从工作队列的位置,获取消息发送指令。
可选地,消息发送指令为RDMA指令,数据传输完成消息为RDMA消息。
可选地,发送模块802,用于执行上述步骤305中的方式一至方式二中的一项或多项的组合。
可选地,装置还包括查询模块,查询模块用于执行上述步骤302中的步骤一。
可选地,装置还包括写入模块,写入模块用于执行下述至少一个步骤:
向中断消息的目的地址信息写入网络接口适配器的消息接收地址;
向中断消息的消息内容信息写入指针信息。
可选地,生成模块801,用于生成网络接口适配器的工作队列;
将消息发送指令入列至网络接口适配器的工作队列。
可选地,网络接口适配器的工作队列为深度为1的循环队列。
可选地,装置还包括内存注册模块,内存注册模块,用于执行上述步骤501;
发送模块802,还用于向第二计算机设备发送内存注册信息。
可选地,资源包括门铃单元、工作队列、数据缓存区中的至少一项。
可选地,装置还包括写入模块,写入模块用于执行上述步骤301中的方式一至方式三中的一项或多项的组合。
需要说明的是:上述实施例提供的数据传输装置在传输数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将第一计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是本申请实施例提供的一种数据传输装置的结构示意图,如图9所示,应用于第二计算机设备,该装置包括:
接收模块901,用于执行上述步骤503;
本地映射模块902,用于执行上述步骤504;
初始化模块903,用于执行上述步骤505;
数据传输模块904,用于执行上述步骤506。
可选地,该资源包括该存储器的第二门铃单元、该存储器的工作队列、该存储器的数据缓存区中的至少一项。
可选地,该数据传输模块904,包括:
生成子模块,用于执行上述步骤506中的步骤一;
封装子模块,用于执行上述步骤506中的步骤二;
发送子模块,用于执行上述步骤506中的步骤三。
可选地,该NVMe指令包括携带指针信息的第一NVMe指令,相应地,该封装子模块,用于执行上述步骤506中的方式A;或者,
该NVMe指令包括用于指示数据传输的第二NVMe指令,相应地,该封装子模块,用于执行上述步骤506中的方式B;或者,
该NVMe指令包括携带待传输的数据的第三NVMe指令,相应地,该封装子模块,用于执行上述步骤506中的方式C。
需要说明的是:上述实施例提供的数据传输装置在传输数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将第二计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该能够实现上述实施例中第一计算机设备所执行的操作。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该计算机设备能够实现上述实施例中第二计算机设备所执行的操作。
在一个示例性实施例中,本申请还提供了一种数据传输系统,在一种可能的实现方式中,该系统包括上述图8实施例中的数据传输装置和上述图9实施例中的数据传输装置。在另一种可能的实现方式中,该系统包括执行上述数据传输方法的第一计算机设备和第二计算机设备。
在一个示例性实施例中,本申请还提供了一种芯片,该芯片包括处理器和/或程序指令,当该芯片运行时,实现上述实施例中第一计算机设备所执行的操作。
在一个示例性实施例中,本申请还提供了一种芯片,该芯片包括处理器和/或程序指令,当该芯片运行时,实现上述实施例中第二计算机设备所执行的操作。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital videodisc,DVD)、或者半导体介质(例如固态硬盘)等。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请中术语“多个”的含义是指两个或两个以上,例如,多个数据包是指两个或两个以上的数据包。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,本领域技术人员可以理解,“第一”“第二”等字样不对数量和执行顺序进行限定。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。