发明内容
本发明实施例提供数据传输方法及计算节点和通信系统,以在虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据。
本发明实施例第一方面提供一种数据传输方法,可包括:
源计算节点中的处理器向所述源计算节点上部署的宿主机Host中的后端实例BE发送所述源计算节点上部署的虚拟机之中的前端实例FE待向所述BE发送的第一远程直接内存读取RDMA数据发送请求,其中,所述第一RDMA数据发送请求携带目的计算节点对应的通信地址,源虚拟机物理内存地址和目的虚拟机内存地址,所述后端实例为与所述源计算节点中的N个RDMA网卡对应的后端实例,所述前端实例为与所述源计算节点中的所述N个RDMA网卡对应的前端实例,所述N为正整数;
在所述BE接收到所述第一RDMA数据发送请求后,所述处理器基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于所述第一RDMA数据发送请求中的所述源虚拟机物理内存地址所对应的第一主机物理内存地址;向所述N个RDMA网卡中的第一RDMA网卡发送所述BE待向所述第一RDMA网卡发送的第二RDMA数据发送请求,以便于所述第一RDMA网卡在接收到所述第二RDMA数据发送请求之后,从所述第一主机物理内存地址所对应的内存空间读取待发送的数据,若确定所述源计算节点和所述目的计算节点为不同的计算节点,则基于所述目的计算节点对应的通信地址,向所述目的计算节点发送包含所述数据和所述目的虚拟机内存地址的数据包,其中,所述第二RDMA数据发送请求携带所述第一主机物理内存地址、所述目的虚拟机内存地址和所述目的计算节点对应的通信地址。
结合第一方面,在第一种可能的实施方式中,
所述方法还包括:
所述处理器将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的队列;其中,所述基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于所述第一RDMA数据发送请求中的所述源虚拟机物理内存地址所对应的第一主机物理内存地址,包括:当轮到所述第一RDMA数据发送请求从所述队列出队,所述处理器从所述队列中读取出所述第一RDMA数据发送请求,从所述第一RDMA数据发送请求中获得所述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址所对应的第一主机物理内存地址。
结合第一方面的第一种可能的实施方式,在第一方面的第二种可能的实施方式中,
所述将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的队列包括:将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将所述BE接收到的所述第一RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级;或者,将所述BE接收到的所述第一RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第一RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级。
结合第一方面,在第一方面的第三种可能的实施方式中,
所述方法还包括:所述处理器将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的队列;
其中,所述向所述N个RDMA网卡中的第一RDMA网卡发送,所述BE待向所述第一RDMA网卡发送的第二RDMA数据发送请求,包括:当轮到所述第二RDMA数据发送请求从所述队列出队,所述处理器从所述队列中读取出所述第二RDMA数据发送请求,向所述N个RDMA网卡中的第一RDMA网卡发送读取出的所述第二RDMA数据发送请求。
结合第一方面的第三种可能的实施方式,在第一方面的第四种可能的实施方式中,
所述将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的队列,包括:将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级;或者,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第二RDMA数据发送请求对应的优先级,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,
所述N大于1,所述第一RDMA网卡为所述N个RDMA网卡中的任意一个RDMA网卡,或所述目的计算节点对应的通信地址属于所述第一RDMA网卡的工作网段,或者,所述第一RDMA网卡与所述第二RDMA数据发送请求对应的业务优先级匹配,或者所述第一主机物理内存地址所对应的内存空间属于注册到所述第一RDMA网卡的内存空间范围。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式,在第一方面的第六种可能的实施方式中,所述方法还包括:
所述第一RDMA网卡若确定所述源计算节点和所述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到所述目的虚拟机内存地址对应的第二主机物理内存地址,向所述第二主机物理内存地址对应的内存空间写入所述数据。
本发明实施例第二方面提供一种数据传输方法,包括:
源计算节点上部署的宿主机Host中的后端实例BE,接收所述源计算节点上部署的虚拟机之中的前端实例FE发送的第一远程直接内存读取RDMA数据发送请求,其中,所述第一RDMA数据发送请求携带目的计算节点对应的通信地址,源虚拟机物理内存地址和目的虚拟机内存地址,所述后端实例为与所述源计算节点中的N个RDMA网卡对应的后端实例,所述前端实例为与所述源计算节点中的所述N个RDMA网卡对应的前端实例,所述N为正整数;
所述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到所述源虚拟机物理内存地址对应的第一主机物理内存地址;向所述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,所述第二RDMA数据发送请求携带所述第一主机物理内存地址、所述目的虚拟机内存地址和所述目的计算节点对应的通信地址;
所述第一RDMA网卡接收到所述第二RDMA数据发送请求之后,从所述第一主机物理内存地址对应的内存空间读取待发送的数据,若确定所述源计算节点和所述目的计算节点为不同的计算节点,则基于所述目的计算节点对应的通信地址,向所述目的计算节点发送包含所述数据和所述目的虚拟机内存地址的数据包。
结合第二方面,在第二方面的第一种可能的实施方式中,所述方法还包括:
所述BE将所述第一RDMA数据发送请求写入所述BE所管理的队列;
其中,所述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到所述源虚拟机物理内存地址对应的第一主机物理内存地址,包括:
当轮到所述第一RDMA数据发送请求从所述队列出队,所述BE从所述队列中读取出所述第一RDMA数据发送请求,从所述第一RDMA数据发送请求中获得所述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址对应的第一主机物理内存地址。
结合第二方面的第一种可能的实施方式,在第二方面的第二种可能的实施方式中,
所述将所述第一RDMA数据发送请求写入所述BE所管理的队列包括:将所述第一RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述第一RDMA数据发送请求写入所述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将所述第一RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级;或者,将所述第一RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第一RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级。
结合第二方面,在第二方面的第三种可能的实施方式中,
所述方法还包括:
所述BE将所述第二RDMA数据发送请求写入所述BE所管理的队列;
其中,所述向所述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,包括:
当轮到所述第二RDMA数据发送请求从所述队列出队,所述BE从所述队列中读取出所述第二RDMA数据发送请求,向所述N个RDMA网卡中的第一RDMA网卡发送读取出的所述第二RDMA数据发送请求。
结合第二方面的第三种可能的实施方式,在第二方面的第四种可能的实施方式中,
所述将所述第二RDMA数据发送请求写入所述BE所管理的队列包括:将所述第二RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述第二RDMA数据发送请求写入所述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将所述第二RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级;或者,将所述第二RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第二RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式,在第二方面的第五种可能的实施方式中,
所述N大于1,所述第一RDMA网卡为所述N个RDMA网卡中的任意一个RDMA网卡,或所述目的计算节点对应的通信地址属于所述第一RDMA网卡的工作网段,或者,所述第一RDMA网卡与所述第二RDMA数据发送请求对应的业务优先级匹配,或者所述第一主机物理内存地址所对应的内存空间属于注册到所述第一RDMA网卡的内存空间范围。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式,在第二方面的第六种可能的实施方式中,所述方法还包括:
所述第一RDMA网卡若确定所述源计算节点和所述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到所述目的虚拟机内存地址对应的第二主机物理内存地址,向所述第二主机物理内存地址对应的内存空间写入所述数据。
本发明实施例第三方面提供一种数据传输方法,可包括:
向源计算节点上部署的宿主机Host中的后端实例BE发送所述源计算节点上部署的虚拟机之中的前端实例FE待向所述BE发送的第一远程直接内存读取RDMA数据发送请求,其中,所述第一RDMA数据发送请求携带目的计算节点对应的通信地址,源虚拟机物理内存地址和目的虚拟机内存地址,所述后端实例为与所述源计算节点中的N个RDMA网卡对应的后端实例,所述前端实例为与所述源计算节点中的所述N个RDMA网卡对应的前端实例,其中,所述N为正整数;
在所述BE接收到所述第一RDMA数据发送请求后,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于所述第一RDMA数据发送请求中的所述源虚拟机物理内存地址所对应的第一主机物理内存地址;向所述N个RDMA网卡中的第一RDMA网卡发送所述BE待向所述第一RDMA网卡发送的第二RDMA数据发送请求,以便于所述第一RDMA网卡在接收到所述第二RDMA数据发送请求之后,从所述第一主机物理内存地址所对应的内存空间读取待发送的数据,若确定所述源计算节点和所述目的计算节点为不同的计算节点,则基于所述目的计算节点对应的通信地址,向所述目的计算节点发送包含所述数据和所述目的虚拟机内存地址的数据包,其中,所述第二RDMA数据发送请求携带所述第一主机物理内存地址、所述目的虚拟机内存地址和所述目的计算节点对应的通信地址。
结合第三方面,在第一种可能的实施方式中,
所述方法还包括:
将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的队列;其中,所述基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于所述第一RDMA数据发送请求中的所述源虚拟机物理内存地址所对应的第一主机物理内存地址,包括:当轮到所述第一RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第一RDMA数据发送请求,从所述第一RDMA数据发送请求中获得所述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址所对应的第一主机物理内存地址。
结合第三方面的第一种可能的实施方式,在第三方面的第二种可能的实施方式中,
所述将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的队列包括:将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将所述BE接收到的所述第一RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级;或者,将所述BE接收到的所述第一RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第一RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级。
结合第三方面,在第三方面的第三种可能的实施方式中,
所述方法还包括:将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的队列;
其中,所述向所述N个RDMA网卡中的第一RDMA网卡发送,所述BE待向所述第一RDMA网卡发送的第二RDMA数据发送请求,包括:当轮到所述第二RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第二RDMA数据发送请求,向所述N个RDMA网卡中的第一RDMA网卡发送读取出的所述第二RDMA数据发送请求。
结合第三方面的第三种可能的实施方式,在第三方面的第四种可能的实施方式中,
所述将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的队列,包括:将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级;或者,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第二RDMA数据发送请求对应的优先级,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级。
结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式,在第三方面的第五种可能的实施方式中,
所述N大于1,所述第一RDMA网卡为所述N个RDMA网卡中的任意一个RDMA网卡,或所述目的计算节点对应的通信地址属于所述第一RDMA网卡的工作网段,或者,所述第一RDMA网卡与所述第二RDMA数据发送请求对应的业务优先级匹配,或者所述第一主机物理内存地址所对应的内存空间属于注册到所述第一RDMA网卡的内存空间范围。
结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式,在第三方面的第六种可能的实施方式中,所述方法还包括:
所述第一RDMA网卡若确定所述源计算节点和所述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到所述目的虚拟机内存地址对应的第二主机物理内存地址,向所述第二主机物理内存地址对应的内存空间写入所述数据。
本发明第四方面提供一种计算节点,可包括:硬件层、运行在所述硬件层之上的宿主机Host、以及运行在所述Host之上的m1个虚拟机,
其中,所述硬件层包括N个远程直接内存读取RDMA网卡,所述宿主机中部署有与所述N个RDMA网卡对应的后端实例BE,所述m1虚拟机中的第一虚拟机中部署有与所述N个RDMA网卡对应的前端实例FE,所述N和所述m1为正整数;
所述FE,用于向所述BE发送第一RDMA数据发送请求,所述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址和目的计算节点对应的通信地址;
所述BE,用于接收来自所述FE的所述第一RDMA数据发送请求;基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址对应的第一主机物理内存地址;向所述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,其中,所述第二RDMA数据发送请求携带所述第一主机物理内存地址、所述目的虚拟机内存地址和所述目的计算节点对应的通信地址;
所述第一RDMA网卡用于接收到所述第二RDMA数据发送请求之后,从所述第一主机物理内存地址对应的内存空间读取待发送的数据,若确定所述计算节点和所述目的计算节点为不同的计算节点,基于所述目的计算节点对应的通信地址,向所述目的计算节点发送包含所述数据和所述目的虚拟机内存地址的数据包。
结合第四方面,在第四方面的第一种可能的实施方式中,
所述第一RDMA网卡还用于:若确定所述源计算节点和所述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到所述目的虚拟机内存地址对应的第二主机物理内存地址,向所述第二主机物理内存地址对应的内存空间写入所述数据
结合第四方面或者第四方面的第一种可能的实施方式,在第四方面的第二种可能的实施方式中,所述BE还用于,将所述第一RDMA数据发送请求写入所述BE所管理的队列;
其中,在基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到所述源虚拟机物理内存地址对应的第一主机物理内存地址的方面,所述BE具体用于,当轮到所述第一RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第一RDMA数据发送请求,从所述第一RDMA数据发送请求中获得所述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址对应的第一主机物理内存地址。
结合第四方面的第二种可能的实施方式,在第四方面的第三种可能的实施方式中,在所述将所述第一RDMA数据发送请求写入所述BE所管理的队列的方面,所述BE具体用于,将所述第一RDMA数据发送请求写入所述BE所管理的,且与所述第一虚拟机对应的队列;或将所述第一RDMA数据发送请求写入所述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将所述第一RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级;或者,将所述第一RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第一RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级。
结合第四方面或者第四方面的第一种可能的实施方式,在第四方面的第四种可能的实施方式中,所述BE还用于,将所述第二RDMA数据发送请求写入所述BE所管理的队列;
其中,在所述向所述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求的方面,所述BE具体用于,当轮到所述第二RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第二RDMA数据发送请求,向所述N个RDMA网卡中的第一RDMA网卡发送读取出的所述第二RDMA数据发送请求。
结合第四方面的第四种可能的实施方式,在第四方面的第五种可能的实施方式中,在所述将所述第二RDMA数据发送请求写入所述BE所管理的队列的方面,所述BE具体用于将所述第二RDMA数据发送请求写入所述BE所管理的,且与所述第一虚拟机对应的队列;或将所述第二RDMA数据发送请求写入所述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将所述第二RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级;或者,将所述第二RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第二RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级。
结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式,在第四方面的第六种可能的实施方式中,
所述N大于1,所述第一RDMA网卡为所述N个RDMA网卡中的任意一个RDMA网卡,或所述目的计算节点对应的通信地址属于所述第一RDMA网卡的工作网段,或者,所述第一RDMA网卡与所述第二RDMA数据发送请求对应的业务优先级匹配,或者所述第一主机物理内存地址所对应的内存空间属于注册到所述第一RDMA网卡的内存空间范围。
本发明实施例第五方面提供一种通信系统,包括:
源计算节点和目的计算节点;
其中,所述源计算节点包括:第一硬件层、运行在所述第一硬件层之上的第一宿主机Host、以及运行在所述第一Host之上的m1个虚拟机,其中,所述第一硬件层包括N个远程直接内存读取RDMA网卡,所述第一宿主机中部署有与所述N个RDMA网卡对应的第一后端实例BE,其中,所述m1个虚拟机中的第一虚拟机中部署有与所述N个RDMA网卡对应的第一前端实例FE,所述m1和N为正整数;
所述目的计算节点包括:第二硬件层、运行在所述第二硬件层之上的第二Host、以及运行在所述第二Host之上的m2个虚拟机;其中,所述第二硬件层包括第二网卡,所述m2和N为正整数;
所述第一FE,用于向所述第一BE发送第一RDMA数据发送请求,所述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址和目的计算节点对应的通信地址;
所述第一BE,用于接收来自所述第一FE的所述第一RDMA数据发送请求;基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址对应的第一主机物理内存地址;向所述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,其中,所述第二RDMA数据发送请求携带所述第一主机物理内存地址、所述目的虚拟机内存地址和所述目的计算节点对应的通信地址;
所述第一RDMA网卡用于接收到所述第二RDMA数据发送请求之后,从所述第一主机物理内存地址对应的内存空间读取待发送的数据,基于所述目的计算节点对应的通信地址,向所述目的计算节点发送包含所述数据和所述目的虚拟机内存地址的数据包;
所述第二网卡用于接收所述数据包,映射得到所述数据包包含的所述目的虚拟机内存地址所对应的所述第二主机物理内存地址,向所述第二主机物理内存地址对应的内存空间写入所述数据包中包含的所述数据。
结合第五方面,在第五方面的第一种可能的实施方式中,
所述第二硬件层包括N2个RDMA网卡,所述第二宿主机中部署有与所述N2个RDMA网卡对应的第二BE,所述m2个虚拟机中的第二虚拟机中部署有与所述N个RDMA网卡对应的第二FE,其中,所述第二网卡为所述N2个RDMA网卡中的一个,所述N2为正整数;
所述第二BE用于将所述目的虚拟机内存地址通知所述第二FE。
结合第五方面或第五方面的第一种可能的实施方式,在第五方面的第二种可能的实施方式中,所述第一BE还用于将所述第一RDMA数据发送请求写入所述第一BE所管理的队列;
在所述基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到所述源虚拟机物理内存地址对应的第一主机物理内存地址的方面,所述第一BE具体用于,当轮到所述第一RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第一RDMA数据发送请求,从所述第一RDMA数据发送请求中获得所述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述源虚拟机物理内存地址对应的第一主机物理内存地址。
结合第五方面的第二种可能的实施方式,在第五方面的第三种可能的实施方式中,
在所述将所述第一RDMA数据发送请求写入所述第一BE所管理的队列的方面,所述第一BE具体用于,将所述第一RDMA数据发送请求写入所述第一BE所管理的且与所述第一虚拟机对应的队列;或将所述第一RDMA数据发送请求写入所述第一BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将所述第一RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级;或者,将所述第一RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第一RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级。
结合第五方面或者第五方面的第一种可能的实施方式,在第五方面的第四种可能的实施方式中,所述BE还用于,将所述第二RDMA数据发送请求写入所述BE所管理的队列;
其中,在所述向所述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求的方面,所述BE具体用于,当轮到所述第二RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第二RDMA数据发送请求,向所述N个RDMA网卡中的第一RDMA网卡发送读取出的所述第二RDMA数据发送请求。
结合第五方面的第四种可能的实施方式,在第五方面的第五种可能的实施方式中,在所述将所述第二RDMA数据发送请求写入所述BE所管理的队列的方面,所述BE具体用于将所述第二RDMA数据发送请求写入所述BE所管理的,且与所述第一虚拟机对应的队列;或将所述第二RDMA数据发送请求写入所述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将所述第二RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级;或者,将所述第二RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第二RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级。
结合第五方面或第五方面的第一种可能的实施方式或第五方面的第二种可能的实施方式或第五方面的第四种可能的实施方式或第五方面的第四种可能的实施方式或第五方面的第五种可能的实施方式,在第五方面的第六种可能的实施方式中,
所述N大于1,所述第一RDMA网卡为所述N个RDMA网卡中的任意一个RDMA网卡,或所述目的计算节点对应的通信地址属于所述第一RDMA网卡的工作网段,或者,所述第一RDMA网卡与所述第二RDMA数据发送请求对应的业务优先级匹配,或者所述第一主机物理内存地址所对应的内存空间属于注册到所述第一RDMA网卡的内存空间范围。
本发明实施例第六方面提供一种计算节点,包括:
至少一个处理器、至少一个网络接口、存储器和至少一个通信总线,所述通信总线用于实现所述至少一个处理器、所述至少一个网络接口和存储器之间的连接通信,所述至少一个网络接口包括N个RDMA网卡;
其中,通过调用所述存储器存储的程序或指令,所述处理器可用于,向所述计算节点上部署的宿主机Host中的后端实例BE发送所述计算节点上部署的虚拟机之中的前端实例FE待向所述BE发送的第一远程直接内存读取RDMA数据发送请求,其中,所述第一RDMA数据发送请求携带目的计算节点对应的通信地址,虚拟机物理内存地址和目的虚拟机内存地址,所述后端实例为与所述计算节点中的N个RDMA网卡对应的后端实例,所述前端实例为与所述计算节点中的所述N个RDMA网卡对应的前端实例,所述N为正整数;
在所述BE接收到所述第一RDMA数据发送请求后,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于所述第一RDMA数据发送请求中的所述虚拟机物理内存地址所对应的第一主机物理内存地址;向所述N个RDMA网卡中的第一RDMA网卡发送所述BE待向所述第一RDMA网卡发送的第二RDMA数据发送请求;
其中,所述第一RDMA网卡用于,在接收到所述第二RDMA数据发送请求之后,从所述第一主机物理内存地址所对应的内存空间读取待发送的数据,若确定所述计算节点和所述目的计算节点为不同的计算节点,则基于所述目的计算节点对应的通信地址,向所述目的计算节点发送包含所述数据和所述目的虚拟机内存地址的数据包,其中,所述第二RDMA数据发送请求携带所述第一主机物理内存地址、所述目的虚拟机内存地址和所述目的计算节点对应的通信地址。
结合第六方面,在第一种可能的实施方式中,
所述处理器还用于,将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的队列;其中,在所述基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于所述第一RDMA数据发送请求中的所述虚拟机物理内存地址所对应的第一主机物理内存地址的方面,所述处理器具体用于,当轮到所述第一RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第一RDMA数据发送请求,从所述第一RDMA数据发送请求中获得所述虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到所述虚拟机物理内存地址所对应的第一主机物理内存地址。
结合第六方面的第一种可能的实施方式,在第六方面的第二种可能的实施方式中,
在所述将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的队列的方面,所述处理器具体用于:将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述BE接收到的所述第一RDMA数据发送请求写入所述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将所述BE接收到的所述第一RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级;或者,将所述BE接收到的所述第一RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第一RDMA数据发送请求对应的优先级,所述第五RDMA数据发送请求对应的优先级低于所述第一RDMA数据发送请求对应的优先级。
结合第六方面,在第六方面的第三种可能的实施方式中,
所述处理器还用于,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的队列;
其中,在所述向所述N个RDMA网卡中的第一RDMA网卡发送,所述BE待向所述第一RDMA网卡发送的第二RDMA数据发送请求的方面,所述处理器具体用于,当轮到所述第二RDMA数据发送请求从所述队列出队,从所述队列中读取出所述第二RDMA数据发送请求,向所述N个RDMA网卡中的第一RDMA网卡发送读取出的所述第二RDMA数据发送请求。
结合第六方面的第三种可能的实施方式,在第六方面的第四种可能的实施方式中,在所述将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的队列的方面,所述处理器具体用于:将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的,且与所述虚拟机对应的队列;或将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入所述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入所述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级;或者,将所述BE待向所述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入所述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,所述第四RDMA数据发送请求对应的优先级高于或者等于所述第二RDMA数据发送请求对应的优先级,其中,所述第五RDMA数据发送请求对应的优先级低于所述第二RDMA数据发送请求对应的优先级。
结合第六方面或第六方面的第一种可能的实施方式或第六方面的第二种可能的实施方式或第六方面的第三种可能的实施方式或第六方面的第四种可能的实施方式,在第六方面的第五种可能的实施方式中,
所述N大于1,所述第一RDMA网卡为所述N个RDMA网卡中的任意一个RDMA网卡,或所述目的计算节点对应的通信地址属于所述第一RDMA网卡的工作网段,或者,所述第一RDMA网卡与所述第二RDMA数据发送请求对应的业务优先级匹配,或者所述第一主机物理内存地址所对应的内存空间属于注册到所述第一RDMA网卡的内存空间范围。
结合第六方面或第六方面的第一种可能的实施方式或第六方面的第二种可能的实施方式或第六方面的第三种可能的实施方式或第六方面的第四种可能的实施方式或第六方面的第五种可能的实施方式,在第六方面的第六种可能的实施方式中,所述方法还包括:
所述第一RDMA网卡还用于,若确定所述计算节点和所述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到所述目的虚拟机内存地址对应的第二主机物理内存地址,向所述第二主机物理内存地址对应的内存空间写入所述数据。
可以看出,本发明实施例的技术方案中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。且由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
具体实施方式
本发明实施例提供数据传输方法及计算节点和通信系统,以在虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
为了方便理解本发明实施例,首先在此介绍本发明实施例描述中会引入的几个要素;
虚拟机VM:
通过虚拟机软件可以在一台物理计算机上模拟出一台或者多台虚拟的计算机,而这些虚拟机就像真正的计算机那样进行工作,虚拟机上可以安装操作系统和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
硬件层:
虚拟化环境运行的硬件平台。其中,硬件层可包括多种硬件,例如某计算节点的硬件层可包括CPU和内存,还可以包括网卡、存储器等等高速/低速输入/输出(I/O,Input/Output)设备及具有特定处理功能的其它设备。
宿主机(Host):
作为管理层,用以完成硬件资源的管理、分配;为虚拟机呈现虚拟硬件平台;实现虚拟机的调度和隔离。其中,Host可能是虚拟机监控器(VMM);此外,有时VMM和1个特权虚拟机配合,两者结合组成Host。其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟CPU、内存、虚拟磁盘、虚拟网卡等等。其中,该虚拟磁盘可对应Host的一个文件或者一个逻辑块设备。虚拟机则运行在Host为其准备的虚拟硬件平台上,Host上运行一个或多个虚拟机。
参见图2,图2是本发明实施例提出的一种计算节点的虚拟化体系架构的示意图,该体系架构主要包括三个层次:硬件层、Host和虚拟机(VM)。硬件层包括网卡。Host中部署有与网卡对应的后端实例(BE,Back-End),VM中具有网卡对应的前端实例(FE,Front-End);其中,VM中的BE可以看成是网卡的前端驱动,Host中的FE可以看成是网卡的后端驱动。其中,硬件层中同种类型的多个网卡可对应同一个BE和FE,而硬件层中不同类型的网卡通常对应不同的BE和FE。图2中以网卡为RDMA网卡为例。
本发明数据传输方法的一个实施例,一种数据传输方法可以包括:源计算节点上部署的Host中的后端实例BE,接收上述源计算节点上部署的虚拟机之中的前端实例FE发送的第一远程直接内存读取RDMA数据发送请求,上述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址和目的计算节点对应的通信地址,其中,上述BE为与上述源计算节点中的N个RDMA网卡对应的后端实例,上述FE为与上述源计算节点中的上述N个RDMA网卡对应的前端实例,其中,上述N为正整数。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址;向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址;上述第一RDMA网卡接收到上述第二RDMA数据发送请求之后,从上述第一主机物理内存地址对应的内存空间读取待发送的数据,上述第一RDMA网卡若确定上述源计算节点和上述目的计算节点为不同的计算节点,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。
请参见图3-a,图3-a为本发明的一个实施例所提供的一种数据传输方法的流程示意图。如图3-a所示,本发明的一个实施例提供的一种数据传输方法可包括以下内容:
301、源计算节点上部署的Host中的BE,接收上述源计算节点上部署的虚拟机之中的FE发送的第一远程直接内存读取数据发送请求。
其中,上述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址(其中,该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址)和目的计算节点对应的通信地址。上述后端实例为与上述源计算节点中的N个RDMA网卡对应的后端实例。上述前端实例为与上述源计算节点中的上述N个RDMA网卡对应的前端实例,其中,上述N为正整数。
其中,本发明各实施例中的RDMA网卡为具有RDMA功能的网卡,RDMA网卡实际的产品名称可能存在多种多样的,例如具有RDMA功能的InfiniBand网卡和RoCE网卡都可称之为RDMA网卡。
其中,本发明各实施例中提及的计算节点可以是个人电脑、服务器、移动终端、平板电脑、交换机、路由器或者是可以进行数据包收发的其它类型的计算节点。
在本发明一些实施例中,上述FE例如可以在接收到部署于上述虚拟机中的用户态应用发送的第三RDMA数据发送请求之后,向上述BE发送上述第一RDMA数据发送请求。其中,第三RDMA数据发送请求可携带源虚拟机虚拟内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址,上述源虚拟机物理内存地址和上述源虚拟机虚拟内存地址之间具有映射关系。
302、上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到上述源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,主机物理内存地址亦可称之为实际物理地址。
303、上述BE向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求。
其中,上述第二RDMA数据发送请求中可以携带上述目的计算节点对应的通信地址、上述第一主机物理内存地址和上述目的虚拟机内存地址。例如可将第一RDMA数据发送请求中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址以得到第二RDMA数据发送请求。
304、第一RDMA网卡接收到上述第二RDMA数据发送请求之后,从上述第一主机物理内存地址对应的内存空间读取待发送的数据,若确定上述源计算节点和上述目的计算节点为不同的计算节点(其中,例如可基于上述目的计算节点对应的通信地址,来确定上述源计算节点和上述目的计算节点是否为同一计算节点),基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。
相应的,上述目的计算节点中的第二网卡可接收上述数据包,并基于虚拟机内存地址和主机物理内存地址的映射关系,得到上述数据包包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据。由上可见,上述方案在虚拟化架构下基于第一RDMA网卡可实现不同计算节点上的虚拟机之间传递数据。
此外,上述第一RDMA网卡若确定上述源计算节点和上述目的计算节点为同一计算节点,则上述第一RDMA网卡可基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述目的虚拟机内存地址对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据。
在本发明一些实施例中,上述BE还可引入队列来对接收到的RDMA数据发送请求进行缓冲管理。例如上述BE可将上述第一RDMA数据发送请求写入上述BE所管理的队列。其中,上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到上述源虚拟机物理内存地址对应的第一主机物理内存地址可包括:当轮到上述第一RDMA数据发送请求从上述队列出队,上述BE从上述队列中读取出上述第一RDMA数据发送请求,从上述第一RDMA数据发送请求中获得上述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址。
在本发明的一些实施例中,上述将上述第一RDMA数据发送请求写入上述BE所管理的队列可以包括:将上述第一RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列(即不同虚拟机可对应不同队列,或者不同队列可对应不同的虚拟机);或者,将上述第一RDMA数据发送请求写入上述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列(即不同优先级可对应不同队列,或不同队列对应不同优先级,对应优先级越高的队列中的元素越优先出队)。或者,可将上述第一RDMA数据发送请求插入上述BE所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或者,可将上述第一RDMA数据发送请求插入上述BE所管理队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(其中统一队列中越靠前的RDMA数据发送请求越先出队),其中,第四RDMA数据发送请求对应的优先级高于或者等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求的优先级。
在本发明的另一些实施例中,上述BE还可以将上述第二RDMA数据发送请求写入上述BE所管理的队列。其中,上述向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,可包括:当轮到上述第二RDMA数据发送请求从上述队列出队,上述BE从上述队列中读取出上述第二RDMA数据发送请求,向上述N个RDMA网卡中的第一RDMA网卡发送读取出的上述第二RDMA数据发送请求。
在本发明另一些实施例中,上述将上述第二RDMA数据发送请求写入上述BE所管理的队列,可包括:将上述第二RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列;或将上述第二RDMA数据发送请求写入上述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列。或者可将上述第一RDMA数据发送请求插入上述BE所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列之中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或可将上述第一RDMA数据发送请求插入上述BE所管理的统一队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(统一队列中越靠前的RDMA数据发送请求越先出队),其中第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。
可以理解的是,不同优先级的队列可以具有不同的出队优先级,例如优先级越高的队列中元素的出队优先级越高,而优先级越低的队列中元素的出队优先级越低,这样就利于利用不同优先级的队列,来尽量保证高优先级业务的服务质量。
在本发明一些实施例中,上述N可大于1,上述第一RDMA网卡为上述N个RDMA网卡中的任意一个RDMA网卡,或上述目的计算节点对应的通信地址属于上述第一RDMA网卡的工作网段,或上述第一RDMA网卡与上述第二RDMA数据发送请求对应的业务优先级匹配,或者,上述第一主机物理内存地址所对应的内存空间属于注册到上述第一RDMA网卡的内存空间范围(其中,注册到上述第一RDMA网卡的内存空间范围是第一RDMA网卡可以远程直接内存读取的内存空间,读取过程可无需CPU参与)。
在本发明一些实施例中,用户态应用可发起将某内存空间范围注册到某个RDMA网卡的内存空间注册流程。用户态应用也可发起注销被注册到某RDMA网卡的内存空间范围的流程。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE可利用与不同优先级对应的队列来对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
本发明数据传输方法的一个实施例,一种数据传输方法可以包括:源计算节点中的处理器向上述源计算节点上部署的宿主机Host中的后端实例BE发送,上述源计算节点上部署的虚拟机之中的前端实例FE待向上述BE发送的第一远程直接内存读取RDMA数据发送请求,其中,上述第一RDMA数据发送请求携带目的计算节点对应的通信地址,源虚拟机物理内存地址和目的虚拟机内存地址,上述后端实例为与上述源计算节点中的N个RDMA网卡对应的后端实例,上述前端实例为与上述源计算节点中的上述N个RDMA网卡对应的前端实例,其中,上述N为正整数;在上述BE接收到上述第一RDMA数据发送请求后,上述处理器基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于上述第一RDMA数据发送请求中的上述源虚拟机物理内存地址所对应的第一主机物理内存地址;上述处理器向上述N个RDMA网卡中的第一RDMA网卡发送,上述BE待向上述第一RDMA网卡发送的第二RDMA数据发送请求,以便于上述第一RDMA网卡在接收到上述第二RDMA数据发送请求之后,从上述第一主机物理内存地址所对应的内存空间读取待发送的数据,若确定上述源计算节点和上述目的计算节点为不同的计算节点,则基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包,其中,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址。
请参见图3-b,图3-b为本发明的另一个实施例所提供的另一种数据传输方法的流程示意图。如图3-b所示,本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
S301、源计算节点中的处理器向上述源计算节点上部署的宿主机Host中的BE发送,上述源计算节点上部署的虚拟机之中的FE待向上述BE发送的第一远程直接内存读取RDMA数据发送请求。
其中,上述第一RDMA数据发送请求可以携带有目的计算节点对应的通信地址,源虚拟机物理内存地址和目的虚拟机内存地址。上述BE为与上述源计算节点中的N个RDMA网卡对应的后端实例,上述FE为与上述源计算节点中的上述N个RDMA网卡对应的前端实例,上述N为正整数。
S302、上述处理器在上述BE接收到上述第一RDMA数据发送请求后,上述处理器基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于上述第一RDMA数据发送请求中的上述源虚拟机物理内存地址所对应的第一主机物理内存地址。
S303、上述处理器向上述N个RDMA网卡中的第一RDMA网卡发送,上述BE待向上述第一RDMA网卡发送的第二RDMA数据发送请求,以便于上述第一RDMA网卡在接收到上述第二RDMA数据发送请求之后,从上述第一主机物理内存地址所对应的内存空间读取待发送的数据,若确定上述源计算节点和上述目的计算节点为不同的计算节点,则上述第一RDMA网卡基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。其中,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址。
相应的,上述目的计算节点中的第二网卡可接收上述数据包,并基于虚拟机内存地址和主机物理内存地址的映射关系,得到上述数据包包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据。由上可见,上述方案在虚拟化架构下基于第一RDMA网卡可实现不同计算节点上的虚拟机之间传递数据。
此外,上述第一RDMA网卡若确定上述源计算节点和上述目的计算节点为同一计算节点,则上述第一RDMA网卡可基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述目的虚拟机内存地址对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据。
在本发明的一些实施例中,上述方法还可进一步包括:
上述处理器将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的队列。
其中,上述处理器基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于上述第一RDMA数据发送请求中的上述源虚拟机物理内存地址所对应的第一主机物理内存地址,包括:当轮到上述第一RDMA数据发送请求从上述队列出队,上述处理器从上述队列中读取出上述第一RDMA数据发送请求,从第一RDMA数据发送请求中获得上述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址所对应的第一主机物理内存地址。
在本发明的一些实施例中,上述将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的队列包括:将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列;或将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将上述BE接收到的上述第一RDMA数据发送请求插入上述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,上述第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求对应的优先级;或者,将上述BE接收到的上述第一RDMA数据发送请求插入上述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,上述第四RDMA数据发送请求对应的优先级高于或者等于上述第一RDMA数据发送请求对应的优先级,上述第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求对应的优先级。
在本发明的另一些实施例中,上述方法还可包括:上述处理器将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的队列;
其中,上述向上述N个RDMA网卡中的第一RDMA网卡发送,上述BE待向上述第一RDMA网卡发送的第二RDMA数据发送请求,包括:当轮到上述第二RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第二RDMA数据发送请求,向上述N个RDMA网卡中的第一RDMA网卡发送读取出的上述第二RDMA数据发送请求。
在本发明的一些实施例中,上述将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的队列,包括:将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列;或将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入上述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,上述第五RDMA数据发送请求对应的优先级低于上述第二RDMA数据发送请求对应的优先级;或者,将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入上述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,上述第四RDMA数据发送请求对应的优先级高于或者等于上述第二RDMA数据发送请求对应的优先级,其中,上述第五RDMA数据发送请求对应的优先级低于上述第二RDMA数据发送请求对应的优先级。
在本发明的一些实施例中,上述N大于1,上述第一RDMA网卡为上述N个RDMA网卡中的任意一个RDMA网卡,或上述目的计算节点对应的通信地址属于上述第一RDMA网卡的工作网段,或者,上述第一RDMA网卡与上述第二RDMA数据发送请求对应的业务优先级匹配,或者上述第一主机物理内存地址所对应的内存空间属于注册到上述第一RDMA网卡的内存空间范围。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。且在处理器协助下,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则可直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,在处理器协助下,Host中的BE可利用与不同优先级对应的队列来对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
为便于更好的理解和实施本发明实施例的上述方案,下面通过一些具体例子进行举例说明。
参见图4-a和图4-b,其中,图4-a为本发明的另一个实施例提供的另一种数据传输方法的流程示意图。图4-b为本发明实施例提供的一种可用于实施如图4-a所示数据传输方法的通信系统架构的示意图。当然Host和虚拟机亦可具有区别于图4-b举例的其它内部逻辑架构。本实施例中主要以在图4-b所示架构下实施数据传输方法为例进行描述。
其中,源计算节点和目的计算节点不同。
如图4-a所示,本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
401、若部署于源计算节点中的第一虚拟机之中用户态应用APP1需发送数据D1,用户态应用APP1向第一虚拟机的FE(该FE为与RDMA网卡对应的FE)发送RDMA数据发送请求q1。其中,上述RDMA数据发送请求q1可携带源虚拟机虚拟内存地址、目的虚拟机内存地址(该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址等)和目的计算节点对应的通信地址等。其中,上述源虚拟机虚拟内存地址为待发送的数据D1对应的虚拟机虚拟内存地址。
其中,RDMA数据发送请求q1还携带优先级标识。
402、上述FE接收到RDMA数据发送请求q1后,基于虚拟机物理内存地址和虚拟机虚拟内存地址之间的映射关系得到与上述源虚拟机虚拟内存地址对应的源虚拟机物理内存地址。
上述FE将RDMA数据发送请求q1中携带的上述源虚拟机虚拟内存地址替换为上述源虚拟机物理内存地址以得到RDMA数据发送请求q2。FE向部署于源计算节点中的Host中的BE(该BE为与RDMA网卡对应的BE)发送RDMA数据发送请求q2。
403、部署于Host中的上述BE接收RDMA数据发送请求q2。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述RDMA数据发送请求q2携带的源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,部署于Host中的上述BE可将上述RDMA数据发送请求q2中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址,以得到RDMA数据发送请求q3。
上述BE将RDMA数据发送请求q3写入上述BE管理的统一队列中。
在本发明的一些实施例中,上述BE将RDMA数据发送请求q3插入上述BE所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列之中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于RDMA数据发送请求q3的优先级。或者,上述BE也可将上述第一RDMA数据发送请求,插入到上述BE管理的统一队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。
404,当轮到RDMA数据发送请求q3从统一队列之中出对时,上述BE从统一队列中读取出RDMA数据发送请求q3,通过RDMA网卡原生驱动向第一RDMA网卡发送RDMA数据发送请求q3。
405、第一RDMA网卡接收到RDMA数据发送请求q3之后,从上述RDMA数据发送请求q3携带的上述第一主机物理内存地址对应的内存空间,读取待发送的数据D1,若确定源计算节点和目的计算节点为不同计算节点,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据D1和上述目的虚拟机内存地址的数据包Pd1。
406、上述目的计算节点中的第二RDMA网卡可接收上述数据包Pd1。
其中,第二RDMA网卡基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述数据包Pd1包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址。向上述第二主机物理内存地址对应的内存空间写入上述数据包Pd1中包含的上述数据D1。第二RDMA网卡通过其网卡原生驱动,向部署于目的计算节点中的Host中的BE(其中,该BE为RDMA网卡对应的BE)发送数据接收完成通知,其中,数据接收完成通知中携带上述数据包Pd1中包含的上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(通过该地址指示可以确定该目的虚拟机内存地址)。
407、目的计算节点中的Host中的BE根据上述目的虚拟机内存地址(不同虚拟机对应使用不同的虚拟机内存地址范围),向部署于目的计算节点中的第二虚拟机中的FE(RDMA网卡对应的FE)发送上述数据接收完成通知。
408、第二虚拟机中的上述FE可向第二虚拟机中的用户态应用APP2发送数据接收完成通知,以通知第二虚拟机中的用户态应用APP2从上述目的虚拟机内存地址获取上述数据D1。
在本发明的其它一些实施例中,第二虚拟机中的FE亦可不通知用户态应用APP2获取数据D1,由用户态应用APP2监测特定内存空间(该特定内存空间包括目的虚拟机内存地址对对应的内存空间)是否有新接收数据写入,当检测到特定内存空间中写入了新接收到的数据D1之后,用户态应用APP2再从上述目的虚拟机内存地址获取上述数据D1。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE通过统一队列,基于RDMA数据发送请求的优先级对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
参见图5和图4-b,其中,图5为本发明的另一个实施例提供的另一种数据传输方法的流程示意图。图4-b为本发明实施例提供的一种可用于实施如图5所示数据传输方法的通信系统架构的示意图。当然Host和虚拟机亦可具有区别于图4-b举例的其它内部逻辑架构。本实施例中主要以在图4-b所示架构下实施数据传输方法为例进行描述。
其中,源计算节点和目的计算节点不同。
如图5所示,本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
501、若部署于源计算节点中的第一虚拟机之中用户态应用APP1需发送数据D1,用户态应用APP1向第一虚拟机的FE(该FE为与RDMA网卡对应的FE)发送RDMA数据发送请求q1。其中,上述RDMA数据发送请求q1可携带源虚拟机虚拟内存地址、目的虚拟机内存地址(该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址等)和目的计算节点对应的通信地址等。其中,上述源虚拟机虚拟内存地址为待发送的数据D1对应的虚拟机虚拟内存地址。
其中,RDMA数据发送请求q1还携带优先级标识。
502、上述FE接收到RDMA数据发送请求q1后,基于虚拟机物理内存地址和虚拟机虚拟内存地址之间的映射关系得到与上述源虚拟机虚拟内存地址对应的源虚拟机物理内存地址。
上述FE将RDMA数据发送请求q1中携带的上述源虚拟机虚拟内存地址替换为上述源虚拟机物理内存地址以得到RDMA数据发送请求q2。FE向部署于源计算节点中的Host中的BE(该BE为与RDMA网卡对应的BE)发送RDMA数据发送请求q2。
503、部署于Host中的BE接收RDMA数据发送请求q2。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述RDMA数据发送请求q2携带的源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,部署于Host中的上述BE可将上述RDMA数据发送请求q2中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址,以得到RDMA数据发送请求q3。
上述BE基于RDMA数据发送请求q3中携带的优先级标识,将RDMA数据发送请求q3写入与上述优先级标识所表示优先级对应的队列中。
在本发明的一些实施例中,即不同优先级可对应不同队列,或不同队列对应不同优先级,对应优先级越高的队列中的元素越优先出队。例如假设有五个优先级,则可对应有五个队列,每个队列对应一个优先级,当然也可以至少3个队列,其中,队列1对应优先级1和优先级2,队列2对应优先级3,队列3对应优先级4和优先级5。队列1中元素的出队优先级高于队列2,而队列2中元素的出队优先级高于队列3。以此类推。
504,上述BE可基于出队优先级轮流的从各队列中读取出RDMA数据发送请求。当轮到RDMA数据发送请求q3从队列之中出对时,上述BE从队列中读取出RDMA数据发送请求q3,通过RDMA网卡原生驱动向第一RDMA网卡发送RDMA数据发送请求q3。
505、第一RDMA网卡接收到RDMA数据发送请求q3之后,从上述RDMA数据发送请求q3携带的上述第一主机物理内存地址对应的内存空间,读取待发送的数据D1,若确定源计算节点和目的计算节点为不同计算节点,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据D1和上述目的虚拟机内存地址的数据包。
506、上述目的计算节点中的第二RDMA网卡可接收上述数据包Pd1。
其中,第二RDMA网卡基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述数据包Pd1包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址。向上述第二主机物理内存地址对应的内存空间写入上述数据包Pd1中包含的上述数据D1。第二RDMA网卡通过其网卡原生驱动,向部署于目的计算节点中的Host中的BE(其中,该BE为RDMA网卡对应的BE)发送数据接收完成通知,其中,数据接收完成通知中携带上述数据包Pd1中包含的上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(其中,通过该地址指示可以确定该目的虚拟机内存地址)。
507、目的计算节点中的Host中的BE根据上述目的虚拟机内存地址(不同虚拟机对应使用不同的虚拟机内存地址范围),向部署于目的计算节点中的第二虚拟机中的FE(RDMA网卡对应的FE)发送上述数据接收完成通知。
508、第二虚拟机中的上述FE可向第二虚拟机中的用户态应用APP2发送数据接收完成通知,以通知第二虚拟机中的用户态应用APP2从上述目的虚拟机内存地址获取上述数据D1。
在本发明的其它一些实施例中,第二虚拟机中的FE亦可不通知用户态应用APP2获取数据D1,由用户态应用APP2监测特定内存空间(该特定内存空间包括目的虚拟机内存地址对对应的内存空间)是否有新接收数据写入,当检测到特定内存空间中写入了新接收到的数据D1之后,用户态应用APP2再从上述目的虚拟机内存地址获取上述数据D1。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE通过对应不同优先级的队列,基于RDMA数据发送请求的优先级对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
S501、若部署于源计算节点中的第一虚拟机之中用户态应用APP1需发送数据D1,用户态应用APP1向第一虚拟机的FE(该FE为与RDMA网卡对应的FE)发送RDMA数据发送请求q1。其中,上述RDMA数据发送请求q1可携带源虚拟机虚拟内存地址、目的虚拟机内存地址(该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址等)和目的计算节点对应的通信地址等。其中,上述源虚拟机虚拟内存地址为待发送的数据D1对应的虚拟机虚拟内存地址。
S502、上述FE接收到RDMA数据发送请求q1后,基于虚拟机物理内存地址和虚拟机虚拟内存地址之间的映射关系得到与上述源虚拟机虚拟内存地址对应的源虚拟机物理内存地址。
上述FE将RDMA数据发送请求q1中携带的上述源虚拟机虚拟内存地址替换为上述源虚拟机物理内存地址以得到RDMA数据发送请求q2。FE向部署于源计算节点中的Host中的BE(该BE为与RDMA网卡对应的BE)发送RDMA数据发送请求q2。
S503、部署于Host中的BE接收RDMA数据发送请求q2。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述RDMA数据发送请求q2携带的源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,部署于Host中的上述BE可将上述RDMA数据发送请求q2中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址,以得到RDMA数据发送请求q3。
上述BE将RDMA数据发送请求q3写入队列中。
其中,队列之中的各个RDMA数据发送请求q3优先级相同,或者也可认为各个RDMA数据发送请求均无优先级。
S504,当轮到RDMA数据发送请求q3从队列之中出对时,上述BE从队列中读取出RDMA数据发送请求q3,通过RDMA网卡原生驱动向第一RDMA网卡发送RDMA数据发送请求q3。
S505、第一RDMA网卡接收到RDMA数据发送请求q3之后,从上述RDMA数据发送请求q3携带的上述第一主机物理内存地址对应的内存空间,读取待发送的数据D1,若确定源计算节点和目的计算节点为不同计算节点,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据D1和上述目的虚拟机内存地址的数据包。
S506、上述目的计算节点中的第二RDMA网卡可接收上述数据包Pd1。
其中,第二RDMA网卡基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述数据包Pd1包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址。向上述第二主机物理内存地址对应的内存空间写入上述数据包Pd1中包含的上述数据D1。第二RDMA网卡通过其网卡原生驱动,向部署于目的计算节点中的Host中的BE(其中,该BE为RDMA网卡对应的BE)发送数据接收完成通知,其中,数据接收完成通知中携带上述数据包Pd1中包含的上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(其中,通过该地址指示可以确定该目的虚拟机内存地址)。
S507、目的计算节点中的Host中的BE根据上述目的虚拟机内存地址(不同虚拟机对应使用不同的虚拟机内存地址范围),向部署于目的计算节点中的第二虚拟机中的FE(RDMA网卡对应的FE)发送上述数据接收完成通知。
S508、第二虚拟机中的上述FE可向第二虚拟机中的用户态应用APP2发送数据接收完成通知,以通知第二虚拟机中的用户态应用APP2从上述目的虚拟机内存地址获取上述数据D1。
在本发明的其它一些实施例中,第二虚拟机中的FE亦可不通知用户态应用APP2获取数据D1,由用户态应用APP2监测特定内存空间(该特定内存空间包括目的虚拟机内存地址对对应的内存空间)是否有新接收数据写入,当检测到特定内存空间中写入了新接收到的数据D1之后,用户态应用APP2再从上述目的虚拟机内存地址获取上述数据D1。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
参见图6-a和图6-b,其中,图6-a为本发明的另一个实施例提供的另一种数据传输方法的流程示意图。图6-b为本发明实施例提供的一种可用于实施如图6-a所示数据传输方法的计算节点的架构示意图。当然Host和虚拟机亦可具有区别于图6-b举例的其它内部逻辑架构。本实施例中主要以在图6-b所示架构下实施数据传输方法为例进行描述。
其中,源计算节点和目的计算节点相同。
如图6-a所示,本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
601、若部署于源计算节点中的第一虚拟机之中用户态应用APP1需发送数据D2,用户态应用APP1向第一虚拟机的FE(该FE为与RDMA网卡对应的FE)发送RDMA数据发送请求q1。其中,上述RDMA数据发送请求q1可携带源虚拟机虚拟内存地址、目的虚拟机内存地址(该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址等)和目的计算节点对应的通信地址等。其中,上述源虚拟机虚拟内存地址为待发送的数据D2对应的虚拟机虚拟内存地址。
其中,RDMA数据发送请求q1还携带优先级标识。
602、上述FE接收到RDMA数据发送请求q1后,基于虚拟机物理内存地址和虚拟机虚拟内存地址之间的映射关系得到与上述源虚拟机虚拟内存地址对应的源虚拟机物理内存地址。
上述FE将RDMA数据发送请求q1中携带的上述源虚拟机虚拟内存地址替换为上述源虚拟机物理内存地址以得到RDMA数据发送请求q2。FE向部署于源计算节点中的Host中的BE(该BE为与RDMA网卡对应的BE)发送RDMA数据发送请求q2。
603、部署于Host中的BE接收RDMA数据发送请求q2。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述RDMA数据发送请求q2携带的源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,部署于Host中的上述BE可将上述RDMA数据发送请求q2中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址,以得到RDMA数据发送请求q3。
上述BE将RDMA数据发送请求q3写入上述BE管理的统一队列中。
在本发明的一些实施例中,上述BE将RDMA数据发送请求q3插入上述BE所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列之中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于RDMA数据发送请求q3的优先级。或者,上述BE也可将上述第一RDMA数据发送请求,插入到上述BE管理的统一队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。
604,当轮到RDMA数据发送请求q3从统一队列之中出对时,上述BE从统一队列中读取出RDMA数据发送请求q3,通过RDMA网卡原生驱动向第一RDMA网卡发送RDMA数据发送请求q3。
605、第一RDMA网卡接收到RDMA数据发送请求q3之后,发现目的计算节点的通信地址和源计算节点的通信地址相同,因此确定是源计算节点上的不同虚拟机之间传递数据。
其中,第一RDMA网卡基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述数据包包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址。
第一RDMA网卡从上述RDMA数据发送请求q3携带的上述第一主机物理内存地址对应的内存空间,读取待发送的数据D2,向上述第二主机物理内存地址对应的内存空间写入上述数据D2。
606、第一RDMA网卡向上述的BE发送数据接收完成通知,其中数据接收完成通知中携带上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(其中,通过该地址指示可以确定该目的虚拟机内存地址)。
607、上述BE根据上述目的虚拟机内存地址(不同虚拟机对应使用不同的虚拟机内存地址范围),向部署于计算节点中的第三虚拟机中的FE(RDMA网卡对应的FE)发送上述数据接收完成通知。
608、第三虚拟机中的上述FE可进一步向第三虚拟机中的用户态应用APP3发送上述数据接收完成通知,以通知第三虚拟机中的用户态应用APP3从上述目的虚拟机内存地址获取上述数据D2。
在本发明的其它一些实施例中,第三虚拟机中的FE亦可不通知用户态应用APP3获取数据D2,由用户态应用APP3监测特定内存空间(该特定内存空间包括目的虚拟机内存地址对对应的内存空间)是否有新接收数据写入,当检测到特定内存空间中写入了新接收到的数据D2之后,用户态应用APP2再从上述目的虚拟机内存地址获取上述数据D2。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,向本计算节点上的第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据D2。即提出了虚拟化架构下基于RDMA技术实现同一计算节点上的不同虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据进行DMA内存拷贝,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的本计算节点上的不同虚拟机的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE通过统一队列,基于RDMA数据发送请求的优先级对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
参见图7和图6-b,其中,图7为本发明的另一个实施例提供的另一种数据传输方法的流程示意图。图6-b为本发明实施例提供的一种可用于实施如图7所示数据传输方法的计算节点的架构示意图。当然Host和虚拟机亦可具有区别于图6-b举例的其它内部逻辑架构。本实施例中主要以在图6-b所示架构下实施数据传输方法为例进行描述。
其中,源计算节点和目的计算节点相同。
如图7所示,本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
701、若部署于源计算节点中的第一虚拟机之中用户态应用APP1需发送数据D2,用户态应用APP1向第一虚拟机的FE(该FE为与RDMA网卡对应的FE)发送RDMA数据发送请求q1。其中,上述RDMA数据发送请求q1可携带源虚拟机虚拟内存地址、目的虚拟机内存地址(该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址等)和目的计算节点对应的通信地址等。其中,上述源虚拟机虚拟内存地址为待发送的数据D2对应的虚拟机虚拟内存地址。
其中,RDMA数据发送请求q1还携带优先级标识。
702、上述FE接收到RDMA数据发送请求q1后,基于虚拟机物理内存地址和虚拟机虚拟内存地址之间的映射关系得到与上述源虚拟机虚拟内存地址对应的源虚拟机物理内存地址。
上述FE将RDMA数据发送请求q1中携带的上述源虚拟机虚拟内存地址替换为上述源虚拟机物理内存地址以得到RDMA数据发送请求q2。FE向部署于源计算节点中的Host中的BE(该BE为与RDMA网卡对应的BE)发送RDMA数据发送请求q2。
703、部署于Host中的BE接收RDMA数据发送请求q2。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述RDMA数据发送请求q2携带的源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,部署于Host中的上述BE可将上述RDMA数据发送请求q2中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址,以得到RDMA数据发送请求q3。
上述BE基于RDMA数据发送请求q3中携带的优先级标识,将RDMA数据发送请求q3写入与上述优先级标识所表示优先级对应的队列中。
在本发明的一些实施例中,即不同优先级可对应不同队列,或不同队列对应不同优先级,对应优先级越高的队列中的元素越优先出队。例如假设有五个优先级,则可对应有五个队列,每个队列对应一个优先级,当然也可以至少3个队列,其中,队列1对应优先级1和优先级2,队列2对应优先级3,队列3对应优先级4和优先级5。队列1中元素的出队优先级高于队列2,而队列2中元素的出队优先级高于队列3。以此类推。
704,上述BE可基于出队优先级轮流的从各队列中读取出RDMA数据发送请求。当轮到RDMA数据发送请求q3从队列之中出对时,上述BE从队列中读取出RDMA数据发送请求q3,通过RDMA网卡原生驱动向第一RDMA网卡发送RDMA数据发送请求q3。
705、第一RDMA网卡接收到RDMA数据发送请求q3之后,发现目的计算节点的通信地址和本计算节点的通信地址相同,因此确定是本计算节点上的不同虚拟机之间传递数据。
其中,第一RDMA网卡基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述数据包包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址。
第一RDMA网卡从上述RDMA数据发送请求q3携带的上述第一主机物理内存地址对应的内存空间,读取待发送的数据D2,向上述第二主机物理内存地址对应的内存空间写入上述数据D2。
706、第一RDMA网卡向上述的BE发送数据接收完成通知,其中数据接收完成通知中携带上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(其中,通过该地址指示可以确定该目的虚拟机内存地址)。
707、上述BE根据上述目的虚拟机内存地址(不同虚拟机对应使用不同的虚拟机内存地址范围),向部署于计算节点中的第三虚拟机中的FE(RDMA网卡对应的FE)发送上述数据接收完成通知。
708、第三虚拟机中的上述FE可进一步向第三虚拟机中的用户态应用APP3发送上述数据接收完成通知,以通知第三虚拟机中的用户态应用APP3从上述目的虚拟机内存地址获取上述数据D2。
在本发明的其它一些实施例中,第三虚拟机中的FE亦可不通知用户态应用APP3获取数据D2,由用户态应用APP3监测特定内存空间(该特定内存空间包括目的虚拟机内存地址对对应的内存空间)是否有新接收数据写入,当检测到特定内存空间中写入了新接收到的数据D2之后,用户态应用APP2再从上述目的虚拟机内存地址获取上述数据D2。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,向本计算节点上的第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据D2。即提出了虚拟化架构下基于RDMA技术实现同一计算节点上的不同虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据进行DMA内存拷贝,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的本计算节点上的不同虚拟机的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE通过对应不同优先级的队列,基于RDMA数据发送请求的优先级对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
本发明的另一个实施例提供的另一种数据传输方法可包括以下内容:
S701、若部署于源计算节点中的第一虚拟机之中用户态应用APP1需发送数据D2,用户态应用APP1向第一虚拟机的FE(该FE为与RDMA网卡对应的FE)发送RDMA数据发送请求q1。其中,上述RDMA数据发送请求q1可携带源虚拟机虚拟内存地址、目的虚拟机内存地址(该目的虚拟机内存地址可以是目的虚拟机虚拟内存地址或目的虚拟机物理内存地址等)和目的计算节点对应的通信地址等。其中,上述源虚拟机虚拟内存地址为待发送的数据D2对应的虚拟机虚拟内存地址。
S702、上述FE接收到RDMA数据发送请求q1后,基于虚拟机物理内存地址和虚拟机虚拟内存地址之间的映射关系得到与上述源虚拟机虚拟内存地址对应的源虚拟机物理内存地址。
上述FE将RDMA数据发送请求q1中携带的上述源虚拟机虚拟内存地址替换为上述源虚拟机物理内存地址以得到RDMA数据发送请求q2。FE向部署于源计算节点中的Host中的BE(该BE为与RDMA网卡对应的BE)发送RDMA数据发送请求q2。
S703、部署于Host中的BE接收RDMA数据发送请求q2。上述BE基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述RDMA数据发送请求q2携带的源虚拟机物理内存地址对应的第一主机物理内存地址。
其中,部署于Host中的上述BE可将上述RDMA数据发送请求q2中携带的源虚拟机物理内存地址替换为上述第一主机物理内存地址,以得到RDMA数据发送请求q3。
上述BE将RDMA数据发送请求q3写入上述BE管理的队列中。
S704,当轮到RDMA数据发送请求q3从队列之中出对时,上述BE从队列中读取出RDMA数据发送请求q3,通过RDMA网卡原生驱动向第一RDMA网卡发送RDMA数据发送请求q3。
S705、第一RDMA网卡接收到RDMA数据发送请求q3之后,发现目的计算节点的通信地址和本计算节点的通信地址相同,因此确定是本计算节点上的不同虚拟机之间传递数据。
其中,第一RDMA网卡基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述数据包包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址。
第一RDMA网卡从上述RDMA数据发送请求q3携带的上述第一主机物理内存地址对应的内存空间,读取待发送的数据D2,向上述第二主机物理内存地址对应的内存空间写入上述数据D2。
S706、第一RDMA网卡向上述的BE发送数据接收完成通知,其中数据接收完成通知中携带上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(其中,通过该地址指示可以确定该目的虚拟机内存地址)。
S707、上述BE根据上述目的虚拟机内存地址(不同虚拟机对应使用不同的虚拟机内存地址范围),向部署于计算节点中的第三虚拟机中的FE(RDMA网卡对应的FE)发送上述数据接收完成通知。
S708、第三虚拟机中的上述FE可进一步向第三虚拟机中的用户态应用APP3发送上述数据接收完成通知,以通知第三虚拟机中的用户态应用APP3从上述目的虚拟机内存地址获取上述数据D2。
在本发明的其它一些实施例中,第三虚拟机中的FE亦可不通知用户态应用APP3获取数据D2,由用户态应用APP3监测特定内存空间(该特定内存空间包括目的虚拟机内存地址对对应的内存空间)是否有新接收数据写入,当检测到特定内存空间中写入了新接收到的数据D2之后,用户态应用APP2再从上述目的虚拟机内存地址获取上述数据D2。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,向本计算节点上的第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据D2。即提出了虚拟化架构下基于RDMA技术实现同一计算节点上的不同虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据进行DMA内存拷贝,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的本计算节点上的不同虚拟机的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
为便于更好的实施本发明实施的上方案,下面还提供用于实施上述方案的相关装置。
参见图8,本发明实施例提供的一种计算节点800,可包括:
硬件层810、运行在上述硬件层810之上的宿主机820、以及运行在上述宿主机820之上的m1个虚拟机。
其中,上述硬件层810包括N个远程直接内存读取RDMA网卡811,上述宿主机中部署有与上述N个RDMA网卡对应的后端实例821,上述m1虚拟机中的第一虚拟机830中部署有与上述N个RDMA网卡对应的前端实例831,上述N和上述m1为正整数。
上述前端实例831,用于向上述后端实例821发送第一RDMA数据发送请求,上述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址和目的计算节点对应的通信地址。
上述后端实例821,用于接收来自上述前端实例831的上述第一RDMA数据发送请求;基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址;向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,其中,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址。
第一RDMA网卡811,用于接收到上述第二RDMA数据发送请求后,从上述第一主机物理内存地址对应的内存空间读取待发送的第一数据,若确定计算节点800和目的计算节点为不同计算节点,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述第一数据和上述目的虚拟机内存地址的数据包。
在本发明的一些实施例中,上述后端实例821还可用于,将上述第一RDMA数据发送请求写入上述后端实例821所管理的队列。
其中,在基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到上述源虚拟机物理内存地址对应的第一主机物理内存地址的方面,上述后端实例821具体用于,当轮到上述第一RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第一RDMA数据发送请求,从上述第一RDMA数据发送请求中获得上述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址。
在本发明的一些实施例中,在上述将上述第一RDMA数据发送请求写入上述后端实例821所管理的队列的方面,上述后端实例821具体用于,将上述第一RDMA数据发送请求写入上述后端实例821所管理的,且与上述第一虚拟机对应的队列;或者,将上述第一RDMA数据发送请求写入上述后端实例821所管理的,且与第一RDMA数据发送请求的优先级对应的队列。或者可将上述第一RDMA数据发送请求插入上述后端实例821所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列之中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或可将上述第一RDMA数据发送请求插入上述后端实例821所管理的统一队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(统一队列中越靠前的RDMA数据发送请求越先出队),其中第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。
在本发明的一些实施例中,上述后端实例821还用于,将上述第二RDMA数据发送请求写入上述后端实例821所管理的队列。
其中,在上述向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求的方面,上述后端实例821具体用于,当轮到上述第二RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第二RDMA数据发送请求,向上述N个RDMA网卡中的第一RDMA网卡发送读取出的上述第二RDMA数据发送请求。
在本发明的一些实施例中,在上述将上述第二RDMA数据发送请求写入上述后端实例821所管理的队列的方面,上述后端实例821具体用于将上述第二RDMA数据发送请求写入上述后端实例821所管理的,且与上述第一虚拟机对应的队列;或者,将上述第二RDMA数据发送请求写入上述后端实例821所管理的,且与第二RDMA数据发送请求的优先级对应的队列。或者,可将上述第一RDMA数据发送请求插入上述BE所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或者可将上述第一RDMA数据发送请求插入上述BE所管理队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(其中统一队列中越靠前的RDMA数据发送请求越先出队),其中,第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求的优先级。
在本发明的一些实施例中,上述N大于1,上述第一RDMA网卡为上述N个RDMA网卡中的任意一个RDMA网卡,或上述目的计算节点对应的通信地址属于上述第一RDMA网卡的工作网段,或者,上述第一RDMA网卡与上述第二RDMA数据发送请求对应的业务优先级匹配,或者上述第一主机物理内存地址所对应的内存空间属于注册到上述第一RDMA网卡的内存空间范围。
此外,第一RDMA网卡811还可用于,若确定计算节点800和上述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述目的虚拟机内存地址对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据。
可以理解的是,本实施例中的计算节点800各个模块的功能可根据上述方法实施例介绍的方法具体实现,其具体实现过程可以参见上述实施例中的相关描述,在此不再赘述。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE可利用与不同优先级对应的队列来对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
图9描述了本发明实施例提供的一种计算节点900的结构,该计算节点900包括:至少一个处理器901,例如CPU,至少一个网络接口904或者其他用户接口903,存储器905,至少一个通信总线902。通信总线902用于实现这些组件之间的连接通信。该计算节点900可选的包含用户接口903,包括显示器,键盘或者点击设备(例如,鼠标,轨迹球(trackball),触感板或者触感显示屏)。存储器905例如可能包含高速RAM存储器,当然也可能还包括:非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器905可选的可以包含至少一个处于远离前述处理器901的存储装置。其中,网络接口904包括N个RDMA网卡等。
在本发明一些的实施方式中,存储器905存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:宿主机9051和m1个虚拟机9052。其中,上述宿主机9051中部署有与上述N个RDMA网卡对应的后端实例,上述m1虚拟机中的第一虚拟机中部署有与上述N个RDMA网卡对应的前端实例,上述N和上述m1为正整数。
其中,受处理器901的调用,宿主机9051可具有如上述实施例所描述宿主机的部分或全部功能,受处理器901的调用,虚拟机9052可以具有如上述实施例所描述虚拟机的部分或全部功能。
其中,在本发明的实施例中,受处理器901的调用,上述前端实例,用于向上述后端实例发送第一RDMA数据发送请求,上述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址和目的计算节点对应的通信地址;
受处理器901的调用,上述后端实例,用于接收来自上述前端实例的上述第一RDMA数据发送请求;基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址;向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,其中,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址;
受处理器901的调用,第一RDMA网卡用于接收到上述第二RDMA数据发送请求后,从上述第一主机物理内存地址对应的内存空间读取待发送的第一数据,若确定计算节点900和上述目的计算节点为不同计算节点,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述第一数据和上述目的虚拟机内存地址的数据包。
此外,受处理器901的调用,第一RDMA网卡811还可用于,若确定计算节点900和上述目的计算节点为同一计算节点,基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述目的虚拟机内存地址对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据。
在本发明的一些实施例中,受处理器901的调用,上述后端实例还可用于将上述第一RDMA数据发送请求写入上述后端实例所管理的队列;
其中,在基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到上述源虚拟机物理内存地址对应的第一主机物理内存地址的方面,受处理器901的调用,上述后端实例具体用于,当轮到上述第一RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第一RDMA数据发送请求,从上述第一RDMA数据发送请求中获得上述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址。
在本发明的一些实施例中,在上述将上述第一RDMA数据发送请求写入上述后端实例所管理的队列的方面,受处理器901的调用,上述后端实例具体用于,将上述第一RDMA数据发送请求写入上述后端实例所管理的,且与上述第一虚拟机对应的队列;或者,将上述第一RDMA数据发送请求写入上述后端实例所管理的,且与第一RDMA数据发送请求的优先级对应的队列;或者可将上述第一RDMA数据发送请求插入上述后端实例所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列之中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或可将上述第一RDMA数据发送请求插入上述后端实例所管理的统一队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(统一队列中越靠前的RDMA数据发送请求越先出队),其中第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。
在本发明的一些实施例中,受处理器901的调用,上述后端实例还用于将上述第二RDMA数据发送请求写入上述后端实例所管理的队列。
其中,在上述向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求的方面,受处理器901的调用,上述后端实例具体用于,当轮到上述第二RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第二RDMA数据发送请求,向上述N个RDMA网卡中的第一RDMA网卡发送读取出的上述第二RDMA数据发送请求。
在本发明的一些实施例中,在上述将上述第二RDMA数据发送请求写入上述后端实例所管理的队列的方面,受处理器901的调用,上述后端实例具体用于将上述第二RDMA数据发送请求写入上述后端实例所管理的,且与上述第一虚拟机对应的队列;或者,将上述第二RDMA数据发送请求写入上述后端实例所管理的,且与第二RDMA数据发送请求的优先级对应的队列。或者,可将上述第一RDMA数据发送请求插入上述BE所管理的统一队列中的第五RDMA数据发送请求之前(统一队列中越靠前的RDMA数据发送请求越先出队),其中上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或者可将上述第一RDMA数据发送请求插入上述BE所管理队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(其中统一队列中越靠前的RDMA数据发送请求越先出队),其中,第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求的优先级。
在本发明的一些实施例中,上述N大于1,上述第一RDMA网卡为上述N个RDMA网卡中的任意一个RDMA网卡,或上述目的计算节点对应的通信地址属于上述第一RDMA网卡的工作网段,或者,上述第一RDMA网卡与上述第二RDMA数据发送请求对应的业务优先级匹配,或者上述第一主机物理内存地址所对应的内存空间属于注册到上述第一RDMA网卡的内存空间范围。
可以理解的是,本实施例中的计算节点900各个模块的功能可根据上述方法实施例介绍的方法具体实现,其具体实现过程可以参见上述实施例中的相关描述,在此不再赘述。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE可利用与不同优先级对应的队列来对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
参见图10、本发明实施例还提供一种通信系统,包括:
源计算节点1100和目的计算节点1200。
其中,上述源计算节点110包括:第一硬件层1110、运行在上述第一硬件层1110之上的第一宿主机1120、以及运行在上述第一Host1120之上的m1个虚拟机,上述第一硬件层1110包括N个远程直接内存读取RDMA网卡1111,上述第一宿主机1120中部署有与上述N个RDMA网卡1111对应的第一后端实例1121,其中,上述m1个虚拟机中的第一虚拟机1130中部署有与上述N个RDMA网卡1111对应的第一前端实例1131,上述m1和N为正整数。
其中,上述目的计算节点1200包括:第二硬件层1210、运行在上述第二硬件层1210之上的第二Host1220、以及运行在上述第二Host1220之上的m2个虚拟机1230;其中,上述第二硬件层1210包括第二网卡1211,上述m2和N为正整数。
上述第一前端实例1131,用于向上述第一后端实例1121发送第一RDMA数据发送请求,上述第一RDMA数据发送请求携带源虚拟机物理内存地址、目的虚拟机内存地址和目的计算节点对应的通信地址。
上述第一后端实例1121,用于接收来自上述第一前端实例1131的上述第一RDMA数据发送请求;基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址;向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址。
其中,上述第一RDMA网卡1111用于,接收到上述第二RDMA数据发送请求后,从上述第一主机物理内存地址对应的内存空间读取待发送的数据,基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。
在本发明的一些实施例中,上述N大于1,上述第一RDMA网卡为上述N个RDMA网卡中的任意一个RDMA网卡,或上述目的计算节点对应的通信地址属于上述第一RDMA网卡的工作网段,或者,上述第一RDMA网卡与上述第二RDMA数据发送请求对应的业务优先级匹配,或者上述第一主机物理内存地址所对应的内存空间属于注册到上述第一RDMA网卡的内存空间范围。
上述第二网卡1211用于接收上述数据包,映射得到上述数据包包含的上述目的虚拟机内存地址所对应的上述第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据。
在本发明一些实施例中,上述第二硬件层1210包括N2个RDMA网卡,上述第二宿主机1220中部署有与上述N2个RDMA网卡对应的第二BE1221,上述m2个虚拟机中的第二虚拟机1230中部署有与上述N个RDMA网卡对应的第二FE1231,其中,上述第二网卡1211为上述N2个RDMA网卡中的一个,上述N2为正整数。
上述第二BE1221用于将目的虚拟机内存地址通知上述第二FE1231。
例如,上述第二BE1221可向第二FE1231发送数据接收完成通知,其中数据接收完成通知中携带上述数据包中包含的上述目的虚拟机内存地址或与该目的虚拟机内存地址对应的地址指示(其中,通过该地址指示可以确定该目的虚拟机内存地址)。
在本发明一些实施例中,上述第一后端实例1121还用于将上述第一RDMA数据发送请求写入上述第一后端实例1121所管理的队列。
在上述基于虚拟机物理内存地址和主机物理内存地址之间的映射关系得到上述源虚拟机物理内存地址对应的第一主机物理内存地址的方面,上述第一后端实例1121具体用于,当轮到上述第一RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第一RDMA数据发送请求,从上述第一RDMA数据发送请求中获得上述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址对应的第一主机物理内存地址。
在本发明一些实施例中,在上述将上述第一RDMA数据发送请求写入上述第一后端实例1121所管理的队列的方面,上述第一后端实例1121具体用于,将上述第一RDMA数据发送请求写入上述第一后端实例1121所管理的且与上述第一虚拟机对应的队列;或将上述第一RDMA数据发送请求写入上述第一后端实例1121所管理的,且与第一RDMA数据发送请求的优先级对应的队列;或者可将上述第一RDMA数据发送请求插入上述后端实例所管理的统一队列中的第五RDMA数据发送请求之前(其中,统一队列之中越靠前的RDMA数据发送请求越先出队),其中,上述第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。或可将上述第一RDMA数据发送请求插入上述后端实例所管理的统一队列中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间(统一队列中越靠前的RDMA数据发送请求越先出队),其中第四RDMA数据发送请求对应的优先级高于或等于第一RDMA数据发送请求的优先级,而第五RDMA数据发送请求对应的优先级低于第一RDMA数据发送请求的优先级。
在本发明另一些实施例中,上述第一后端实例1121还用于将上述第二RDMA数据发送请求写入上述BE所管理的队列;
其中,在向上述N个RDMA网卡中的第一RDMA网卡发送第二RDMA数据发送请求的方面,第一后端实例1121具体用于,当轮到上述第二RDMA数据发送请求从上述队列出队,上述BE从上述队列中读取出上述第二RDMA数据发送请求,向上述N个RDMA网卡中的第一RDMA网卡发送读取出的上述第二RDMA数据发送请求。
在本发明一些实施例中,在上述将上述第二RDMA数据发送请求写入上述BE所管理的队列的方面,第一后端实例1121具体用于,将上述第二RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列;或将上述第二RDMA数据发送请求写入上述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列。
可以理解的是,本实施例中的通信系统中各个计算节点的功能可根据上述方法实施例介绍的方法具体实现,其具体实现过程可以参见上述实施例中的相关描述,在此不再赘述。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。并且,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,Host中的BE可利用与不同优先级对应的队列来对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
图11描述了本发明实施例提供的一种计算节点1300的结构,该计算节点1300包括:至少一个处理器1301,例如CPU,至少一个网络接口1304或者其他用户接口1303,存储器1305,至少一个通信总线1302。通信总线1302用于实现这些组件之间的连接通信。该计算节点1300可选的包含用户接口1303,包括显示器,键盘或者点击设备(例如,鼠标,轨迹球(trackball),触感板或者触感显示屏)。存储器1305例如可能包含高速RAM存储器,当然也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1305可选的可以包含至少一个处于远离前述处理器1301的存储装置。其中,网络接口1304包括N个RDMA网卡等。
在本发明一些的实施方式中,存储器1305存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:宿主机13051和m1个虚拟机13052。其中,上述宿主机13051中部署有与上述N个RDMA网卡对应的后端实例,上述m1虚拟机中的第一虚拟机中部署有与上述N个RDMA网卡对应的前端实例,上述N和上述m1为正整数。
其中,受处理器1301的调用,宿主机13051可具有如上述实施例所描述宿主机的部分或全部功能,受处理器1301的调用,虚拟机13052可以具有如上述实施例所描述虚拟机的部分或全部功能。
其中,在本发明实施例中,通过调用存储器1305存储的程序或指令,处理器1301可用于,向源计算节点上部署的宿主机Host中的后端实例BE发送,上述源计算节点上部署的虚拟机之中的前端实例FE待向上述BE发送的第一远程直接内存读取RDMA数据发送请求,上述第一RDMA数据发送请求携带目的计算节点对应的通信地址,源虚拟机物理内存地址和目的虚拟机内存地址,上述后端实例为与上述源计算节点中的N个RDMA网卡对应的后端实例,上述前端实例为与上述源计算节点中的上述N个RDMA网卡对应的前端实例,上述N为正整数;在上述BE接收到上述第一RDMA数据发送请求后,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于上述第一RDMA数据发送请求中的上述源虚拟机物理内存地址所对应的第一主机物理内存地址;向上述N个RDMA网卡中的第一RDMA网卡发送,上述BE待向上述第一RDMA网卡发送的第二RDMA数据发送请求,以便于上述第一RDMA网卡在接收到上述第二RDMA数据发送请求之后,从上述第一主机物理内存地址所对应的内存空间读取待发送的数据,若确定上述源计算节点和上述目的计算节点为不同的计算节点,则基于上述目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包,其中,上述第二RDMA数据发送请求携带上述第一主机物理内存地址、上述目的虚拟机内存地址和上述目的计算节点对应的通信地址。
相应的,上述目的计算节点中的第二网卡可接收上述数据包,并基于虚拟机内存地址和主机物理内存地址的映射关系,得到上述数据包包含的上述目的虚拟机内存地址所对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据包中包含的上述数据。由上可见,上述方案在虚拟化架构下基于第一RDMA网卡可实现不同计算节点上的虚拟机之间传递数据。
此外,上述第一RDMA网卡还可进一步用于,若确定上述源计算节点和上述目的计算节点为同一计算节点,则上述第一RDMA网卡可基于虚拟机内存地址和主机物理内存地址之间的映射关系,得到上述目的虚拟机内存地址对应的第二主机物理内存地址,向上述第二主机物理内存地址对应的内存空间写入上述数据。
在本发明的一些实施例中,上述处理器1301还可用于,将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的队列。
其中,在基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到携带于上述第一RDMA数据发送请求中的上述源虚拟机物理内存地址所对应的第一主机物理内存地址的方面,上述处理器1301具体用于,当轮到上述第一RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第一RDMA数据发送请求,从第一RDMA数据发送请求中获得上述源虚拟机物理内存地址,基于虚拟机物理内存地址和主机物理内存地址之间的映射关系,得到上述源虚拟机物理内存地址所对应的第一主机物理内存地址。
在本发明的一些实施例中,在上述将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的队列的方面,上述处理器1301具体用于,将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列;或将上述BE接收到的上述第一RDMA数据发送请求写入上述BE所管理的,且与第一RDMA数据发送请求的优先级对应的队列,或者,将上述BE接收到的上述第一RDMA数据发送请求插入上述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,上述第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求对应的优先级;或者,将上述BE接收到的上述第一RDMA数据发送请求插入上述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,上述第四RDMA数据发送请求对应的优先级高于或者等于上述第一RDMA数据发送请求对应的优先级,上述第五RDMA数据发送请求对应的优先级低于上述第一RDMA数据发送请求对应的优先级。
在本发明的另一些实施例中,上述处理器1301还可用于,将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的队列。
其中,在上述向上述N个RDMA网卡中的第一RDMA网卡发送,上述BE待向上述第一RDMA网卡发送的第二RDMA数据发送请求的方面,上述处理器1301具体用于,当轮到上述第二RDMA数据发送请求从上述队列出队,从上述队列中读取出上述第二RDMA数据发送请求,向上述N个RDMA网卡中的第一RDMA网卡发送读取出的上述第二RDMA数据发送请求。
在本发明的一些实施例中,在上述将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的队列的方面,上述处理器1301可具体用于,将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的,且与上述虚拟机对应的队列;或将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求写入上述BE所管理的,且与第二RDMA数据发送请求的优先级对应的队列,或者,将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入上述BE所管理的队列之中的第五RDMA数据发送请求之前,其中,上述第五RDMA数据发送请求对应的优先级低于上述第二RDMA数据发送请求对应的优先级;或者,将上述BE待向上述N个RDMA网卡中的第一RDMA网卡发送的第二RDMA数据发送请求插入上述BE所管理的队列之中处于相邻位置的第四RDMA数据发送请求和第五RDMA数据发送请求之间,其中,上述第四RDMA数据发送请求对应的优先级高于或者等于上述第二RDMA数据发送请求对应的优先级,其中,上述第五RDMA数据发送请求对应的优先级低于上述第二RDMA数据发送请求对应的优先级。
在本发明的一些实施例中,上述N大于1,上述第一RDMA网卡为上述N个RDMA网卡中的任意一个RDMA网卡,或上述目的计算节点对应的通信地址属于上述第一RDMA网卡的工作网段,或者,上述第一RDMA网卡与上述第二RDMA数据发送请求对应的业务优先级匹配,或者上述第一主机物理内存地址所对应的内存空间属于注册到上述第一RDMA网卡的内存空间范围。
可以看出,本实施例的技术方案之中,在具有虚拟化架构的计算节点中引入RDMA网卡,其中,RDMA网卡对应的FE部署于虚拟机之中,该FE通过部署于Host中的对应BE来传递RDMA数据发送请求,而上述FE和BE之间却不直接传递待发送数据,RDMA网卡接收到RDMA数据发送请求后,基于该RDMA数据发送请求携带的主机物理内存地址,从该主机物理内存地址对应的内存空间读取待发送的数据,基于RDMA数据发送请求携带的目的计算节点对应的通信地址,向上述目的计算节点发送包含上述数据和上述目的虚拟机内存地址的数据包。即提出了虚拟化架构下基于RDMA技术实现不同计算节点上的虚拟机之间传递数据的机制。且在处理器协助下,由于FE通过BE向RDMA网卡传递的是RDMA数据发送请求,FE并不直接向RDMA网卡传递待发送数据,RDMA网卡则可直接从相应主机物理内存地址读取出待发送数据来向目的计算节点发送,这就使得数据发送对缓存占用相对少、待发送数据的读取对CPU占用相对少,有利于较大幅度的提升虚拟架构下的数据发送性能,有利于使虚拟机使用RDMA技术获得近似物理机的高网络性能。
进一步的,在处理器协助下,Host中的BE可利用与不同优先级对应的队列来对RDMA数据发送请求进行缓冲管理,这就可有利于一定程度上实现基于RDMA数据发送请求的优先级来进行相应转发调度,进而有利于尽量保证虚拟机中用户态应用的高优先级业务的服务质量。RDMA数据发送请求无需通过虚拟机内的RDMA协议栈即可直接下发到Host。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的数据传输方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以处于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备或者与内存连接的处理器等)执行本发明各个实施例上述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上上述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。