掌桥专利:专业的专利平台
掌桥专利
首页

一种虚拟机间通信方法、装置、物理主机及介质

文献发布时间:2023-06-19 11:16:08


一种虚拟机间通信方法、装置、物理主机及介质

技术领域

本申请涉及通信技术领域,特别涉及一种虚拟机间通信方法、装置、物理主机、介质。

背景技术

随着硬件性能的提升,物理主机的计算能力得到大幅提升。但是,由于操作系统对资源的使用不均,使得硬件性能得不到充分使用,导致计算资源严重浪费。在此情况下,虚拟化技术应运而生,虚拟化技术使得同一物理主机上可以同时运行多个相互独立的虚拟机,各虚拟机拥有完整的硬件设备,包括BIOS(Basic Input Output System,基本输入输出系统)、CPU、内存、磁盘、网卡等。云计算以虚拟化技术为核心,为用户提供弹性资源,极大地提高了物理主机的资源利用率,降低了用户成本。在当前的云计算平台中,每个虚拟机一般只配备了一个网卡,用于用户进行网络通信。然而,现实中很多场景需要不同物理主机之上的虚拟机之间进行数据传输,而且需要保证虚拟机上的用户业务不被影响。例如,服务提供商的管理平台需要对客户的业务虚拟机进行管理操作,甚至需要将一些工具传输到虚拟机内部,如VMtools(Virtual Machine Tools,虚拟机工具)、安全工具。

为了实现上述示例中的需求,在当前的KVM(Kernel-based Virtual Machine,开源虚拟机)平台中,不同物理主机上虚拟机之间的通信方式有两种:其一是基于串口的数据通信,基于串口的数据通信需要在通信双方的虚拟机中直接指定对方的物理主机IP(Internet Protocol,网际互连协议)地址,一旦虚拟机迁移需要直接修改与其通信的各个虚拟机中配置的物理主机IP地址,所以针对规模大、灵活性强、动态自动化配置的云计算平台适应性差。其二是基于网络的数据通信,基于网络的数据通信需要为每个虚拟机配置专用网卡和预留IP段,管理复杂,需要用户的参与,使用不灵活。

发明内容

有鉴于此,本申请的目的在于提供一种虚拟机通信方法、装置、设备、介质,能够适应大规模、灵活性强、动态自动化配置的云计算平台,适应性强,且不需要预留IP地址段,使用灵活。其具体方案如下:

第一方面,本申请公开了一种虚拟机间通信方法,应用于运行有第一虚拟机的第一物理主机,包括:

在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包;

基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址;

基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。

可选地,所述基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,包括:

基于所述第二物理主机的IP地址将所述待传输原数据包封装成待传输网络数据包;

将所述待传输网络数据包发送到所述第二物理主机,其中,所述待传输网络数据包用于解析后传输到所述第二虚拟机标识对应的第二虚拟机中,所述第二虚拟机运行在所述第二物理主机上。

可选地,所述在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包之前,还包括:

在所述第一物理主机上创建所述第一虚拟机时,从本地的预设共享内存体中确定出所述目标共享内存,并将所述目标共享内存分配给所述第一虚拟机;

为所述第一虚拟机分配事件通知文件,并将所述第一虚拟机的第一虚拟机标识、所述目标共享内存的内存使用信息以及所述事件通知文件的文件标识存储到预设的内存使用信息表中。

可选地,所述从本地的预设共享内存体中确定出所述目标共享内存的过程中,还包括:

在所述预设共享内存体的剩余内存空间小于所述第一虚拟机所需的内存大小时,动态扩展所述预设共享内存体。

可选地,所述将所述第一虚拟机的第一虚拟机标识、所述目标共享内存的内存使用信息以及所述事件通知文件的文件标识存储到预设的内存使用信息表中之后,还包括:

将所述目标共享内存的内存使用信息以及所述事件通知文件发送到所述第一虚拟机对应的PCIe设备中。

可选地,所述在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包之前,还包括:

接收所述第一虚拟机所属的云平台管理系统发送的虚拟机标识和所述虚拟机标识对应的物理主机IP地址;

基于所述虚拟机标识和所述虚拟机标识对应的物理主机IP地址构建所述虚拟机标识与服务器IP对照表。

可选地,所述基于所述虚拟机标识和所述虚拟机标识对应的物理主机IP地址构建所述虚拟机标识与服务器IP对照表之后,还包括:

创建所述虚拟机标识与服务器IP对照表对应的局部缓存表;

将所述虚拟机标识与服务器IP对照表中在过去预设时长内使用次数超过预设次数的表项存储到所述局部缓存表中。

可选地,所述基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机之后,还包括:

接收所述第二物理主机发送的确认网络数据包,其中,所述确认网络数据包为所述第二物理主机基于确认原数据包中的第一虚拟机标识对所述确认原数据包进行封装得到,所述确认原数据包用于确认所述第二虚拟机是否接收到所述待传输原数据包;

对所述确认网络数据包进行解析,得到所述确认原数据包;

基于所述确认原数据包中的所述第一虚拟机标识将所述确认原数据包传输至所述第一虚拟机中。

可选地,还包括:

接收除所述第一物理主机之外的其他物理主机发送的待处理网络数据包;

对所述待处理网络数据包进行解析,得到所述待处理网络数据包对应的待处理原数据包;

根据所述待处理原数据包中的目的虚拟机标识将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中;

对所述目的虚拟机插入对应的目的虚拟中断,其中,所述目的虚拟中断用于触发所述目的虚拟机对应的目的设备驱动接收所述待处理原数据包。

可选地,所述根据所述待处理原数据包中的目的虚拟机标识将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中,包括:

根据所述待处理原数据包中的目的虚拟机标识确定出所述目的虚拟机标识对应的共享内存;

将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中的写环形缓冲队列中。

第二方面,本申请公开了一种虚拟机间通信装置,应用于运行有第一虚拟机的第一物理主机,包括:

数据读取模块,用于在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包;

IP地址确定模块,用于基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址;

数据包发送模块,用于基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。

第三方面,本申请公开了一种物理主机,包括:

存储器和处理器;

其中,所述存储器,用于存储计算机程序;

所述处理器,用于执行所述计算机程序,以实现前述公开的虚拟机间通信方法。

第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的虚拟机间通信方法。

可见,本申请在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包,然后基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址,接着便可以基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。由此可见,本申请中在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,便可以从第一虚拟机对应的共享内存中读取出所述待传输原数据包,并基于所述待传输原数据包中的第一虚拟机标识以及预设的虚拟机标识与服务器IP地址对照表确定出接收方的第二物理主机的PI地址,基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机上,所述第二物理主机便可以将所述待传输原数据包传输到所述第二虚拟机标识对应第二虚拟机中,这样不需要在虚拟机中直接配置通信双方的物理主机IP地址,只需要维护预设的虚拟机标识和服务器IP地址对照表,即可根据虚拟标识以及虚拟机标识和服务器IP地址对照表找到通信接收方的物理主机IP地址,能够适应大规模、灵活性强、动态自动化配置的云计算平台,适应性强,且虚拟机带有对应的虚拟机标识,虚拟机标识通过虚拟机标识和服务器IP地址对照表对应到物理主机IP地址,不需要预留IP地址段,虚拟机迁移、关闭或开启时,只需要维护虚拟机标识和服务器IP地址对照表,使用灵活。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请公开的一种虚拟机间通信方法流程图;

图2为本申请公开的一种具体的虚拟机间通信方法部分流程图;

图3为本申请公开的一种具体的虚拟机间通信方法部分流程图;

图4为本申请公开的一种具体的虚拟机间通信方法部分流程图;

图5为本申请公开的一种具体的虚拟机间通信方法流程图;

图6为本申请公开的一种虚拟机间通信装置结构示意图;

图7为本申请公开的云虚拟化平台中跨物理机的虚拟机进程间高速通信方法架构图;

图8为本申请公开的共享内存管理示意图;

图9为本申请公开的PCIe设备初始化示意图;

图10为本申请公开的一种物理主机结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参见图1所示,本申请实施例公开了一种虚拟机间通信方法,应用于运行有第一虚拟机的第一物理主机,该方法包括:

步骤S11:在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包。

在具体的实施过程中在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe(peripheral component interconnect express,高速外设部件互连标准)设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包,其中,所述待传输原数据包为所述第一虚拟机通过虚拟套接字与所述PCIe设备建立连接后写到所述PCIe设备中的PCIe内存的数据包,所述PCIe内存为所述目标共享内存在所述PCIe设备中的映射。

也即所述第一物理主机上的第一虚拟机需要向所述第一物理主机之外的第二物理主机上的第二虚拟机传输数据时,所述第一虚拟机先通过虚拟套接字(vsocket)与所述第一虚拟机对应的PCIe设备建立连接,将待传输原数据包写入到所述PCIe设备中的PCIe内存,并通过所述第一虚拟机对应的设备驱动对所述PCIe设备中的I/O(Input/Output,输入/输出)通知寄存器进行写操作,此时便可以由所述第一物理主机从所述第一虚拟机对应的目标共享内存中读取所述待传输原数据包,所述PCIe内存为所述目标共享内存在所述PCIe设备中的映射。其中,vsocket为虚拟套接字,一个匿名文件句柄,提供给应用程序使用。

这样需要发送数据的虚拟机只需要将待传输原数据包写入到对应的PCIe设备中的PCIe内存中,物理主机便可以从映射到PCIe内存的共享内存中读取待传输原数据包,由此虚拟机和物理主机之间通过共享内存实现了零拷贝的数据传输,提高了数据传输效率。

当云平台创建虚拟机时,云平台管理系统为其分配唯一标识(virtual machineidentity,VMID,虚拟机标识),此标识伴随着虚拟机的整个生命周期,只有在虚拟机销毁时才被回收。物理主机的IP地址是固定的,物理主机之间以网络通信实现信息同步。

为让用户层应用程序使用所述设备驱动,设备驱动将所述PCIe设备封装成一个字符设备,并提供vsocket实现多进程并发读写数据。所述设备驱动还提供了一套内核态接口,可供内核模块直接调用。

具体的,所述第一虚拟机内部的应用程序通过PCIe设备上的寄存器可获取自身的第一虚拟机标识VMID),通过程序参数可以设定通信对端的第二虚拟机标识VMID。通过所述第一虚拟机标识VMID、发送方端口以及所述第二虚拟机标识VMID和接收方端口创建vsocket,并将待传输原数据包直接写入到所述第一虚拟机对应的PCIe设备的PCIe内存中。如此设计,虚拟套接字仅与发送方虚拟机标识、发送方端口、接收方虚拟机标识以及接收方端口相关,应用程序一旦启动,则不会因虚拟机的迁移而变动。

当所述第一虚拟机将所述待传输原数据包写到所述PCIe内存中时,所述第一虚拟机对应的设备驱动触发中断请求,对所述PCIe设备中的I/O通知寄存器进行写操作,此时触发所述第一物理主机从所述第一虚拟机对应的目标共享内存中读取所述待传输原数据包。由于所述PCIe设备中的PCIe内存为所述第一虚拟机对应的目标共享内存在所述PCIe设备中的映射,所以所述第一物理主机可以直接从所述目标共享内存中读取所述待传输原数据包,通过共享内存实现了所述第一虚拟机和所述第一物理主机之间的零拷贝数据传输,提高了数据传输效率。

在所述目标共享内存中包括一个读环形队列、一个写环形队列。每个环形队列有front和end两个指针。发送方操作end,接收方操作front,如此读写环形队列以无锁的方式实现,读写速度比有锁机制更高效。

步骤S12:基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址。

可以理解的是,读取出所述待传输原数据包之后,还需要基于所述待传输原数据包中的第二虚拟机标识以及所述预设的虚拟机标识与服务器IP地址对照表确定出接收方的第二物理主机的IP地址,所述第二虚拟机标识对应的第二虚拟机为所述第二物理主机上运行的接收方虚拟机。

具体的,读取出所述待传输原数据包之后,对所述待传输原数据包进行解析,根据所述待传输原数据包的包头中的第二虚拟机标识,搜索预设的虚拟机标识与服务器IP地址对照表获取到所述第二虚拟机标识对应的接收方的第二物理主机的IP地址。

在实际应用中,在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包之前,还包括:接收所述第一虚拟机所属的云平台管理系统发送的虚拟机标识和所述虚拟机标识对应的物理主机IP地址;基于所述虚拟机标识和所述虚拟机标识对应的物理主机IP地址构建所述虚拟机标识与服务器IP对照表。

也即,所述第一虚拟机所属的云平台管理系统会将整个云平台中的各个虚拟机标识以及各个虚拟机标识对应的宿主机的物理主机IP地址发送到所述云平台上的各个物理主机上,所述第一物理主机便需要获取所述云平台管理系统发送的虚拟机标识和所述虚拟机标识对应的物理主机IP地址,并基于所述虚拟机标识和所述虚拟机标识对应的物理主机IP地址构建所述虚拟机标识与服务器IP对照表。

实际应用中,需要在所述云平台管理系统中,在云平台的虚拟化系统中进行扩展,使其能够动态的截获虚拟机的启动、迁移和关闭等操作,这样每当有新的虚拟机被创建时,将此VMID以及此虚拟机所在物理主机的IP地址同步到云平台的每台物理主机上,以便更新虚拟机标识与服务器IP对照表。当虚拟机发生迁移时,同样会通知所有物理主机,让其更新虚拟机标识与服务器IP对照表,以保证信息的时效性。

在构建所述虚拟机标识与服务器IP对照表之后,还可以创建所述虚拟机标识与服务器IP对照表对应的局部缓存表;将所述虚拟机标识与服务器IP对照表中在过去预设时长内使用次数超过预设次数的表项存储到所述局部缓存表中。

也即,可以对所述虚拟机标识与服务器IP对照表创建局部缓存表,将所述虚拟机标识与服务器IP对照表中在过去预设时长内使用次数超过预设次数的表项存储到所述局部缓存表中。这样可以将所述虚拟机标识与服务器IP对照表中经常使用的表项存储到所述局部缓存表中,能够实现快速查询,有利于提高数据传输效率。

步骤S13:基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。

得到所述第二物理主机的IP地址之后,还需要基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,所述第二物理主机在接收到所述待传输原数据包之后,会将所述待传输原数据包传输到所述第二虚拟机标识对应的第二虚拟机中。

其中,基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,具体可以包括:基于所述第二物理主机的IP地址将所述待传输原数据包封装成待传输网络数据包;将所述待传输网络数据包发送到所述第二物理主机,其中,所述待传输网络数据包用于解析后传输到所述第二虚拟机标识对应的第二虚拟机中,所述第二虚拟机运行在所述第二物理主机上。

也即,先基于所述第二物理主机的IP地址将所述待传输原数据包封装成待传输网络数据包,然后将所述待传输网络数据包发送到所述第二物理主机,所述第二物理主机接收到所述待传输网络数据包之后,对所述待传输网路数据包进行解析,得到所述待传输原数据包,根据所述待传输原数据包中的所述第二虚拟机标识将所述待传输原数据包传输至所述第二虚拟机中。

可见,本申请在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包,然后基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址,接着便可以基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。由此可见,本申请中在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,便可以从第一虚拟机对应的共享内存中读取出所述待传输原数据包,并基于所述待传输原数据包中的第一虚拟机标识以及预设的虚拟机标识与服务器IP地址对照表确定出接收方的第二物理主机的PI地址,基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机上,所述第二物理主机便可以将所述待传输原数据包传输到所述第二虚拟机标识对应第二虚拟机中,这样不需要在虚拟机中直接配置通信双方的物理主机IP地址,只需要维护预设的虚拟机标识和服务器IP地址对照表,即可根据虚拟标识以及虚拟机标识和服务器IP地址对照表找到通信接收方的物理主机IP地址,能够适应大规模、灵活性强、动态自动化配置的云计算平台,适应性强,且虚拟机带有对应的虚拟机标识,虚拟机标识通过虚拟机标识和服务器IP地址对照表对应到物理主机IP地址,不需要预留IP地址段,虚拟机迁移、关闭或开启时,只需要维护虚拟机标识和服务器IP地址对照表,使用灵活。

参见图2所示,在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包之前,还包括:

步骤S21:在所述第一物理主机上创建所述第一虚拟机时,从本地的预设共享内存体中确定出所述目标共享内存,并将所述目标共享内存分配给所述第一虚拟机。

在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包之前,会在所述第一物理主机上创建所述第一虚拟机,并进行相关的配置,以便所述第一虚拟机和所述第一物理主机更够实现前述的虚拟机通信方法。

具体的,需要在所述第一物理主机上创建所述第一虚拟机时,从本地的预设共享内存体中确定出所述目标共享内存,并将所述目标共享内存分配给所述第一虚拟机。

在从本地的预设共享内存体中确定出所述目标共享内存的过程中,还包括:在所述预设共享内存体的剩余内存空间小于所述第一虚拟机所需的内存大小时,动态扩展所述预设共享内存体。也即,当所述预设共享内存体中的剩余内存空间不足时,可以动态地扩大预设共享内存体的内存大小,以便后续启动的虚拟机有足够的资源创建与所述第一物理主机之间基于共享内存的通道。

在所述第一物理主机上创建所述第一虚拟机时,所述第一物理主机还会接受所述云平台管理系统发送的所述第一虚拟机标识以及所述第一物理主机的IP地址,并将所述一虚拟机标识以及所述第一物理主机的IP地址更新到所述虚拟机标识与服务器IP对照表中。

步骤S22:为所述第一虚拟机分配事件通知文件,并将所述第一虚拟机的第一虚拟机标识、所述目标共享内存的内存使用信息以及所述事件通知文件的文件标识存储到预设的内存使用信息表中,其中,所述内存使用信息包括所述目标共享内存的起始地址和内存大小,所述内存使用信息表用于在所述第一虚拟机关闭时或从所述第一物理主机上迁移时进行资源回收。

此外,还需要为所述第一虚拟机分配事件通知文件(eventfd),并将所述第一虚拟机的第一虚拟机标识、所述目标共享内存的内存使用信息以及所述事件通知文件的文件标识存储到预设的内存使用信息表中。其中,所述内存使用信息包括所述目标共享内存的起始地址和内存大小。所述内存使用信息表用于在所述第一虚拟机关闭或者从所述第一物理主机上迁移到其他物理主机上时,进行共享内存的资源回收。

步骤S23:将所述目标共享内存的内存使用信息以及所述事件通知文件发送到所述第一虚拟机对应的PCIe设备中,其中,所述内存使用信息用于将所述目标共享内存映射到所述PCIe设备中的PCIe内存,所述事件通知文件用于为所述第一虚拟机注册虚拟中断。

还需要将所述目标共享内存的内存使用信息以及所述事件通知文件发送到所述第一虚拟机对应的PCIe设备中,其中,所述内存使用信息用于将所述目标共享内存映射到所述PCIe设备中的PCIe内存,所述事件通知文件用于为所述第一虚拟机注册虚拟中断。

所述第一虚拟机启动时会指定一个Unix socket文件,与所述第一物理主机中负责所述目标共享内存分配的部分建立连接,并传递数据。连接建立后,将所述目标共享内存的内存使用信息、所述事件通知文件等信息发送给所述PCIe设备中。所述PCIe设备根据所述目标共享内存的内存使用信息将所述目标共享内存映射给所述PCIe内存,并将所述事件通知文件eventfd注册为第一虚拟机的虚拟中断,用于虚拟机信息同步。还可以将所述虚拟中断和所述第一虚拟机标识存储到事件信息表中,以便根据事件信息表向虚拟机注入相应的虚拟中断,可触发虚拟机内部驱动程序接收数据包。

在实际应用中,所述PCIe设备中以寄存器的方式为第一虚拟机内部提供PCIe设备的配置信息和参数信息,比如所述目标共享内存的内存大小、所述第一虚拟机的第一虚拟机标识、INTx中断、中断数量和类型等。所述PCIe设备提供的信息一部分被所述设备驱动初始化时使用,一部分用于上层应用程序连接建立时使用,比如所述第一虚拟机标识等。

为了实现用户层的高效通信,利用UIO(Userspace I/O,运行在用户空间的I/O技术)框架构建所述设备驱动,其中,所述设备驱动包括用户态驱动和内核态驱动,所述用户态驱动封装用户层对所述设备驱动的使用,所述内核态驱动负责所述设备驱动的注册和中断处理。也即,可采用UIO框架实现所述设备驱动,所述设备驱动以分离的方式实现:用户态和内核态。内核态驱动负责所述设备驱动的注册以及中断处理。用户态驱动封装对所述设备驱动的使用。

参见图3所示,基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机之后,还包括:

步骤S31:接收所述第二物理主机发送的确认网络数据包,其中,所述确认网络数据包为所述第二物理主机基于确认原数据包中的第一虚拟机标识对所述确认原数据包进行封装得到,所述确认原数据包用于确认所述第二虚拟机是否接收到所述待传输原数据包。

步骤S32:对所述确认网络数据包进行解析,得到所述确认原数据包。

步骤S33:基于所述确认原数据包中的所述第一虚拟机标识将所述确认原数据包传输至所述第一虚拟机中。

在所述第一物理主机将所述待传输网络数据包发送给所述第二物理主机后,所述第二物理主机上的第二虚拟机还会向所述第一物理主机上的所述第一虚拟机返回确认原数据包,用于确定所述第二虚拟机是否接收到所述待传输原数据包。

具体的,就是所述第二虚拟机将确认原数据包写入到所述第二虚拟机对应的PCIe设备的PCIe内存中,所述第二物理主机对所述确认原数据包进行解析,得到所述确认原数据包的包头中的第一虚拟机标识,基于所述第一虚拟机标识和所述第二物理主机上预设的虚拟机标识与服务器IP对照表找到所述第一虚拟机标识对应的所述第一物理主机的IP地址,利用所述第一物理主机的IP地址将所述确认原数据包封装成确认网络数据包,并通过网络将所述确认网络数据包发送给所述第一物理主机,所述第一物理主机需要接收所述确认网络数据包。

接收到所述确认网络数据包后,对所述确认网络数据包进行解析,得到所述确认原数据包,然后基于所述确认原数据包的包头中的所述第一虚拟机标识将所述确认原数据包发送到所述第一虚拟机中,以便所述第一虚拟机确定所述第二虚拟机是否接收到所述待传输原数据包。如果未接收到所述待传输原数据包,需要再次向所述第二虚拟机发送所述待传输原数据包。

参见图4所示,所述虚拟机间通信方法,还包括:

步骤S41:接收除所述第一物理主机之外的其他物理主机发送的待处理网络数据包。

步骤S42:对所述待处理网络数据包进行解析,得到所述待处理网络数据包对应的待处理原数据包。

步骤S43:根据所述待处理原数据包中的目的虚拟机标识将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中。

步骤S44:对所述目的虚拟机插入对应的目的虚拟中断,其中,所述目的虚拟中断用于触发所述目的虚拟机对应的目的设备驱动接收所述待处理原数据包。

所述第一物理主机还需要接收除了自身之外的其他物理主机发送的待处理网络数据包,接收到所述待处理网络数据包之后,对所述待处理网络数据包进行解析,得到待处理原数据包,并根据所述待处理原数据包中的目的虚拟机标识将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中,然后对所述目标虚拟机插入对应的目的虚拟中断,其中,所述目的虚拟中断用于触发所述目的虚拟机对应的目的设备驱动接收所述待处理原数据包。

具体的,得到所述待处理原数据包之后,根据所述待处理原数据包中的目的虚拟机标识确定出所述目的虚拟机标识对应的共享内存;将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中的写环形缓冲队列中。根据所述待处理原数据包中的目的虚拟机标识以及所述内存使用信息表确定出所述目的虚拟机标识对应的目的虚拟机对应的共享内存,并将所述待处理原数据包写入到所述目的虚拟机对应的共享内存的写环形队列中,然后基于所述事件信息表确定出所述目的虚拟机对应的虚拟中断,并为所述目的虚拟机插入所述目的虚拟机对应的虚拟中断,触发所述目的虚拟机对应的设备驱动接收所述待处理原数据包,其中,所述待处理原数据包从所述写环形队列中读出来之后,可以先缓存到所述目的虚拟机的对应的虚拟套接字对应的接收缓存队列中,以便所述写环形队列还可以接收所述目的虚拟机中的其他虚拟套接字对应的待处理原数据包。

参见图5所示,为虚拟机间通信流程图。虚拟机发送方APP(Application,应用程序)调用lib库创建包括所述虚拟机发送方APP所处的虚拟机标识、端口、虚拟机接收方APP所处的虚拟机标识、端口的虚拟套接字vsocket,虚拟机发送方APP通过虚拟套接字vsocket链接写入待传输原数据包,物理主机A的数据包转发模块获取所述虚拟机接收方APP所处的虚拟机标识,查询虚拟机标识与服务器IP对照表得到接收方的物理主机B的IP地址,将封装成待传输网络数据包并发送所述待传输网络数据包到物理主机B的数据转发模块,所述物理主机B的数据转发模块解析所述待传输网络数据包的包头,获取到虚拟机接收方APP所处的虚拟机标识,查询所述事件信息表得到所述虚拟机接收方APP所处的虚拟机标识对应的虚拟中断ioeventfd,将解析得到的待传输原数据包写到所述虚拟机接收方APP所处的虚拟机标识对应的共享内存中的写环形队列中,触发所述虚拟机接收方APP所处的虚拟机标识对应的虚拟中断ioeventfd,所述虚拟机接收方APP所处的虚拟机处理中断,从所述写环形队列中读取所述待传输原数据包,所述虚拟机接收方APP所处的虚拟机进行连接确认,并发送确认原数据包,所述确认原数据包的发送过程与所述物理主机A的转发模块发送所述待传输原数据包的处理过程相同,所以在此不再进行赘述。再次之后,所述虚拟机发送方APP再向所述虚拟机接收方APP发送数据时,不需要再建立虚拟套接字连接,所述虚拟机接收方APP处理所述写环形队列中的数据包时,可以将不能及时处理的原数据包丢弃,并要求所述虚拟机发送方APP重传。

参见图6所示,本申请实施例公开了一种虚拟机间通信装置,应用于运行有第一虚拟机的第一物理主机,包括:

数据读取模块11,用于在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包;

IP地址确定模块12,用于基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址;

数据包发送模块13,用于基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。

可见,本申请在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,读取所述第一虚拟机对应的目标共享内存中的待传输原数据包,然后基于所述待传输原数据包中的第二虚拟机标识以及预设的虚拟机标识与服务器IP对照表确定出接收方的第二物理主机的IP地址,接着便可以基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机,其中,所述待传输原数据包用于传输到所述第二虚拟机标识对应的第二虚拟机中。由此可见,本申请中在监测到所述第一虚拟机对应的设备驱动对所述第一虚拟机对应的PCIe设备中的I/O通知寄存器进行写操作时,便可以从第一虚拟机对应的共享内存中读取出所述待传输原数据包,并基于所述待传输原数据包中的第一虚拟机标识以及预设的虚拟机标识与服务器IP地址对照表确定出接收方的第二物理主机的PI地址,基于所述第二物理主机的IP地址将所述待传输原数据包发送到所述第二物理主机上,所述第二物理主机便可以将所述待传输原数据包传输到所述第二虚拟机标识对应第二虚拟机中,这样不需要在虚拟机中直接配置通信双方的物理主机IP地址,只需要维护预设的虚拟机标识和服务器IP地址对照表,即可根据虚拟标识以及虚拟机标识和服务器IP地址对照表找到通信接收方的物理主机IP地址,能够适应大规模、灵活性强、动态自动化配置的云计算平台,适应性强,且虚拟机带有对应的虚拟机标识,虚拟机标识通过虚拟机标识和服务器IP地址对照表对应到物理主机IP地址,不需要预留IP地址段,虚拟机迁移、关闭或开启时,只需要维护虚拟机标识和服务器IP地址对照表,使用灵活。

在一些具体的实施例中,所述数据包发送模块13,用于:

基于所述第二物理主机的IP地址将所述待传输原数据包封装成待传输网络数据包;

将所述待传输网络数据包发送到所述第二物理主机,其中,所述待传输网络数据包用于解析后传输到所述第二虚拟机标识对应的第二虚拟机中,所述第二虚拟机运行在所述第二物理主机上。

在一些具体的实施例中,所述虚拟机通信装置,还包括:

通道资源管理模块,用于在所述第一物理主机上创建所述第一虚拟机时,从本地的预设共享内存体中确定出所述目标共享内存,并将所述目标共享内存分配给所述第一虚拟机;为所述第一虚拟机分配事件通知文件,并将所述第一虚拟机的第一虚拟机标识、所述目标共享内存的内存使用信息以及所述事件通知文件的文件标识存储到预设的内存使用信息表中。

在一些具体的实施例中,所述通道资源管理模块,用于:

在所述预设共享内存体的剩余内存空间小于所述第一虚拟机所需的内存大小时,动态扩展所述预设共享内存体。

在一些具体的实施例中,所述通道资源管理模块,用于:

将所述目标共享内存的内存使用信息以及所述事件通知文件发送到所述第一虚拟机对应的PCIe设备中。

在一些具体的实施例中,所述虚拟机通信装置,还包括:

IP地址接收模块,用于接收所述第一虚拟机所属的云平台管理系统发送的虚拟机标识和所述虚拟机标识对应的物理主机IP地址;

对照表创建模块,用于基于所述虚拟机标识和所述虚拟机标识对应的物理主机IP地址构建所述虚拟机标识与服务器IP对照表。

在一些具体的实施例中,所述对照表创建模块,用于:

创建所述虚拟机标识与服务器IP对照表对应的局部缓存表;

将所述虚拟机标识与服务器IP对照表中在过去预设时长内使用次数超过预设次数的表项存储到所述局部缓存表中。

在一些具体的实施例中,所述虚拟机通信装置,还包括:

数据包接收模块,用于接收所述第二物理主机发送的确认网络数据包,其中,所述确认网络数据包为所述第二物理主机基于确认原数据包中的第一虚拟机标识对所述确认原数据包进行封装得到,所述确认原数据包用于确认所述第二虚拟机是否接收到所述待传输原数据包;对所述确认网络数据包进行解析,得到所述确认原数据包;基于所述确认原数据包中的所述第一虚拟机标识将所述确认原数据包传输至所述第一虚拟机中。

在一些具体的实施例中,所述数据包接收模块,还用于:

接收除所述第一物理主机之外的其他物理主机发送的待处理网络数据包;

对所述待处理网络数据包进行解析,得到所述待处理网络数据包对应的待处理原数据包;

根据所述待处理原数据包中的目的虚拟机标识将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中;

对所述目的虚拟机插入对应的目的虚拟中断,其中,所述目的虚拟中断用于触发所述目的虚拟机对应的目的设备驱动接收所述待处理原数据包。

在一些具体的实施例中,所述数据包接收模块,用于:

根据所述待处理原数据包中的目的虚拟机标识确定出所述目的虚拟机标识对应的共享内存;

将所述待处理原数据包存储到所述目的虚拟机标识对应的共享内存中的写环形缓冲队列中。

参见7所述,为云虚拟化平台中跨物理机的虚拟机进程间高速通信方法架构图。前述的第一物理主机包括图中的宿主机操作系统(Host OS)和物理机器。图7中的数据包转发模块对应的上述的虚拟机间通信装置中的数据读取模块11、IP地址确定模块12、数据包发送模块13、IP地址接收模块、对照表创建模块、数据包接收模块。图中的通道资源管理也即上述的虚拟机间通信装置中的通道资源管理模块。客户虚拟机(Guest VM)运行于Qemu上,包括客户操作系统和其上的APP。图中的PCIe设备模拟和资源映射,也即,前述的PCIe设备。图中的KVM扩展用于扩展虚拟机的启动、迁移和关闭等操作。云平台管理系统中的虚拟机管理用于云平台中的虚拟机进行管理,为虚拟机分配虚拟机标识,将虚拟机标识与对应的物理主机的IP地址发送到云平台中的各个物理主机上。

参见8所示,为共享内存管理示意图。图7中的通道管理模块包括共享内存体管理模块和内存使用信息表,所述通道管理模块根据KVM扩展的虚拟机更新操作更新内存使用信息表。所述通道管理模块将预设共享内存体中的共享内存分配给对应的虚拟机,并在虚拟机关闭时回收对应的共享内存,各个虚拟机对应的共享内存又被映射到PCIe设备的内存资源中的PCIe内存上。

参见图9所示,PCIe设备初始化示意图。物理主机的宿主机操作系统(Host OS)中维护事件信息表,事件信息表中包括各个虚拟机的虚拟机标识(VMID)以及对应的虚拟中断(ioeventfd)。以及虚拟机环形队列结构体列表,包括各个虚拟机对应的写环形队列信息结构体(W-Rque信息结构体)和读环形队列信息结构体(R-Rque信息结构体)。PCIe设备中包括寄存器和虚拟中断(ioeventfd)注册模块,以及设备的内存资源,用于映射对应的共享内存,虚拟机对应的设备驱动中包括中断申请和注册模块,写环形队列信息结构体(W-Rque信息结构体)和读环形队列信息结构体(R-Rque信息结构体)用于管理对应的写环形队列和读环形队列。

参见图10所示,为本申请实施例提供的一种物理主机20的结构示意图,该物理主机20可以实现前述实施例中公开的虚拟机通信方法步骤。

通常,本实施例中的物理主机20包括:处理器21和存储器22。

其中,处理器21可以包括一个或多个处理核心,比如四核心处理器、八核心处理器等。处理器21可以采用DSP(digital signal processing,数字信号处理)、FPGA(field-programmable gate array,现场可编程们阵列)、PLA(programmable logic array,可编程逻辑阵列)中的至少一种硬件来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以集成有GPU(graphics processing unit,图像处理器),GPU用于负责显示屏所需要显示的图像的渲染和绘制。一些实施例中,处理器21可以包括AI(artificialintelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器22可以包括一个或多个计算机可读存储介质,计算机可读存储介质可以是非暂态的。存储器22还可以包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器22至少用于存储以下计算机程序221,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例中公开的虚拟机间通信方法步骤。

在一些实施例中,物理主机20还可包括有显示屏23、输入输出接口24、通信接口25、传感器26、电源27以及通信总线28。

本技术领域人员可以理解,图10中示出的结构并不构成对物理主机20的限定,可以包括比图示更多或更少的组件。

进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述任一实施例中公开的虚拟机间通信方法。

其中,关于上述虚拟机间通信方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

最后,还需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得一系列包含其他要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的一种虚拟机间通信方法、装置、物理主机、介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

相关技术
  • 一种虚拟机间通信方法、装置、物理主机及介质
  • 一种微内核虚拟机间的通信方法、装置、设备及存储介质
技术分类

06120112860006