虚拟机迁移方法及装置与流程

文档序号:17639883发布日期:2019-05-11 00:36阅读:512来源:国知局
虚拟机迁移方法及装置与流程

本公开涉及云计算技术领域,具体而言,涉及一种虚拟机迁移方法及装置。



背景技术:

sr-iov(single-rooti/ovirtualization,单根i/o虚拟化)技术允许在虚拟机之间高效共享pcie(peripheralcomponentinterconnectexpress,快速外围部件互联总线)设备,从而直接让vm(virtualmachine,虚拟机)使用宿主机的设备,通过硬件获得较高的i/o性能。

sr-iovnic(networkinterfacecard,网络接口卡)一般定义了一个pf(physicalfunction,物理功能)和若干个vf(virtualfunction,虚拟功能),pf和vf可作为单独的网卡使用,vf一般通过pcie透传技术将硬件透传到虚拟机中,这样在虚拟机中可以直接访问vf的硬件寄存器。然而,由于sr-iovvf网卡是pcie的物理网卡功能,如果该sr-iovvf网卡一直位于虚拟客户机,会使虚拟客户机无法进行动态迁移。



技术实现要素:

为了克服现有技术中的上述不足,本公开的目的在于提供一种虚拟机迁移方法及装置,以解决或者改善上述问题。

为了实现上述目的,本公开实施例采用的技术方案如下:

第一方面,本公开提供一种虚拟机迁移方法,应用于与第二宿主机通信连接的第一宿主机,所述第一宿主机和所述第二宿主机包括单根i/o虚拟化网络接口卡sr-iovnic,所述sr-iovnic包括硬件虚拟化驱动网卡和半虚拟化驱动网卡,所述方法包括:

在接收到虚拟机迁移指令后,将待迁移的第一虚拟机的配置信息发送给所述第二宿主机,以使所述第二宿主机根据所述配置信息创建第二虚拟机,并为所述第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动;

在所述第二虚拟机完成配置时,将所述第一虚拟机的当前运行状态切换到迁移状态,其中,在所述迁移状态下,所述第一虚拟机运行半虚拟化网卡驱动以通过所述半虚拟化网卡驱动的组合收发队列与所述sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互;

将所述第一虚拟机的内存信息发送到所述第二宿主机,以使所述第二宿主机将所述第一虚拟机的内存信息同步到所述第二虚拟机中。

第二方面,本公开实施例还提供一种虚拟机迁移方法,应用于接收第一宿主机所迁移的第一虚拟机的第二宿主机,所述第一宿主机和所述第二宿主机包括单根i/o虚拟化网络接口卡sr-iovnic,所述sr-iovnic包括硬件虚拟化驱动网卡和半虚拟化驱动网卡,所述方法包括:

接收所述第一宿主机根据虚拟机迁移指令后发送的待迁移的第一虚拟机的配置信息;

根据所述配置信息创建第二虚拟机,并为所述第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动,以使所述第一宿主机在所述第二虚拟机完成配置时,将所述第一虚拟机的当前运行状态切换到迁移状态,其中,在所述迁移状态下,所述第一虚拟机通过运行半虚拟化网卡驱动以通过所述半虚拟化网卡驱动的组合收发队列与所述sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互;

接收所述第一宿主机发送的所述第一虚拟机的内存信息,并将所述第一虚拟机的内存信息同步到所述第二虚拟机中。

第三方面,本公开实施例还提供一种虚拟机迁移方法,应用于相互之间通信连接的第一宿主机和第二宿主机,所述第一宿主机和所述第二宿主机包括单根i/o虚拟化网络接口卡sr-iovnic,所述sr-iovnic包括硬件虚拟化驱动网卡和半虚拟化驱动网卡,所述方法包括:

所述第一宿主机在接收到虚拟机迁移指令后,将待迁移的第一虚拟机的配置信息发送给所述第二宿主机;

所述第二宿主机根据所述配置信息创建第二虚拟机,并为所述第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动;

在所述第二虚拟机完成配置时,所述第一宿主机将所述第一虚拟机的当前运行状态切换到迁移状态,并在所述迁移状态下将所述第一虚拟机的内存信息发送到所述第二宿主机,其中,在所述迁移状态下,所述第一虚拟机通过运行半虚拟化网卡驱动以通过所述半虚拟化网卡驱动的组合收发队列与所述sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互;

所述第二宿主机将所述第一虚拟机的内存信息同步到所述第二虚拟机中。

第四方面,本公开实施例还提供一种虚拟机迁移装置,应用于与第二宿主机通信连接的第一宿主机,所述第一宿主机和所述第二宿主机包括单根i/o虚拟化网络接口卡sr-iovnic,所述sr-iovnic包括硬件虚拟化驱动网卡和半虚拟化驱动网卡,所述装置包括:

配置信息发送模块,用于在接收到虚拟机迁移指令后,将待迁移的第一虚拟机的配置信息发送给所述第二宿主机,以使所述第二宿主机根据所述配置信息创建第二虚拟机,并为所述第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动;

第一切换模块,用于在所述第二虚拟机完成配置时,将所述第一虚拟机的当前运行状态切换到迁移状态,其中,在所述迁移状态下,所述第一虚拟机通过运行半虚拟化网卡驱动以通过所述半虚拟化网卡驱动的组合收发队列与所述sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互;

内存信息发送模块,用于将所述第一虚拟机的内存信息发送到所述第二宿主机,以使所述第二宿主机将所述第一虚拟机的内存信息同步到所述第二虚拟机中。

第五方面,本公开实施例还提供一种虚拟机迁移装置,应用于接收第一宿主机所迁移的第一虚拟机的第二宿主机,所述第一宿主机和所述第二宿主机包括单根i/o虚拟化网络接口卡sr-iovnic,所述sr-iovnic包括硬件虚拟化驱动网卡和半虚拟化驱动网卡,所述装置包括:

配置信息接收模块,用于接收所述第一宿主机根据虚拟机迁移指令后发送的待迁移的第一虚拟机的配置信息;

创建模块,用于根据所述配置信息创建第二虚拟机,并为所述第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动,以使所述第一宿主机在所述第二虚拟机完成配置时,将所述第一虚拟机的当前运行状态切换到迁移状态,其中,在所述迁移状态下,所述第一虚拟机通过运行半虚拟化网卡驱动以通过所述半虚拟化网卡驱动的组合收发队列与所述sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互;

内存信息接收模块,用于接收所述第一宿主机发送的所述第一虚拟机的内存信息,并将所述第一虚拟机的内存信息同步到所述第二虚拟机中。

第六方面,本公开实施例还提供一种服务器,所述服务器包括:

存储介质;

处理器;以及

上述的虚拟机迁移装置,所述虚拟机迁移装置存储于所述存储介质中并包括由所述处理器执行的计算机可执行指令。

第七方面,本公开实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序被执行时实现上述的虚拟机迁移方法。

相对于现有技术而言,本公开具有以下有益效果:

本公开提供的虚拟机迁移方法及装置,通过在第一宿主机的硬件虚拟化网卡驱动和半虚拟化网卡驱动中配置组合收发队列,当第一宿主机切换到迁移状态时,将第一虚拟机的内存信息同步到第二虚拟机中,在整个迁移过程中第一虚拟机通过半虚拟化网卡驱动的组合收发队列与sr-iov网卡的半虚拟化驱动网卡进行i/o数据的交互。由此,本公开无需采用绑定软件即可在驱动侧自动化完成迁移状态的切换,有利于后续运维,同时不管是在迁移状态下还是在非迁移状态下都能够保持较高的转发性能。

为使本公开实施例的上述目的、特征和优点能更明显易懂,下面将结合实施例,并配合所附附图,作详细说明。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。

图1为一种常见的虚拟机迁移方法的应用场景示意图;

图2为另一种常见的虚拟机迁移方法的应用场景示意图;

图3为本公开实施例提供的虚拟机迁移方法的应用场景示意图;

图4为本公开实施例提供的虚拟机迁移方法的一种流程示意图;

图5为本公开实施例提供的虚拟机迁移方法的另一种流程示意图

图6为本公开实施例提供的第一虚拟机迁移装置的一种功能模块图;

图7为本公开实施例提供的第一虚拟机迁移装置的另一种功能模块图;

图8为本公开实施例提供的第二虚拟机迁移装置的功能模块图;

图9为本公开实施例提供的第二虚拟机迁移装置的另一种功能模块图;

图10为本公开实施例提供的用于实现上述虚拟机迁移方法的一种服务器的结构框图。

具体实施方式

下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

为了更好地理解本公开的技术方案,下面首先对本公开中的宿主机进行详细说明。

宿主机上安装有sr-iovnic,且运行虚拟化软件层hypervisor。hypervisor也可称为虚拟机监控器(virtualmachinemonitor,vmm),例如,hypervisor可以是vmwareesxi、kvm(kernel-basedvirtualmachine,基于内核的虚拟机)等。另外,宿主机还可以包括:多个vm。

sr-iovnic可以理解为采用了sr-iov技术的网络接口卡。sr-iov技术是一种不需要虚拟化软件模拟就可以共享i/o(input/output,输入/输出)设备的i/o端口的物理功能的方法,通过该技术可以创造一系列i/o设备物理端口的vf。其中,每个vf都可以和与其对应的一个vm进行直通操作,因此可以实现接近本机的性能。总的来说,sr-iov实现了将pcie功能分配到多个虚拟接口以在虚拟化环境中共享一个pci设备的资源,以使网络传输可以绕过hypervisor而直接分配到vm,这样就降低了hypervisor中的i/o性能开销。如此,sr-iov能够为每个vm提供独立内存空间、中断和dma(directmemoryaccess,直接内存存取)流。sr-iov引入了两个新的功能类型:

物理功能(physicalfunction,pf):支持sr-iov扩展功能的pcie功能,被用于配置和管理sr-iov功能特性;以及

虚拟功能(virtualfunctions,vf):精简的pcie功能,包括数据迁移必需的资源,以及经过谨慎精简的配置资源集。

由此,sr-iovnic中可以包括:一个pf和多个vf。

另外,在sr-iovnic中还集成有一个l2vswitch(虚拟交换机),该l2vswitch具备基本的二层交换功能。vf与该l2vswitch直连,vf相当于该l2vswitch上的端口。

hypervisor中可以包括:vswitch和pci管理器,另外,hypervisor上安装有sr-iovnic的驱动程序,称为pf驱动。其中,pci管理器用于对sr-iovnic中的pci总线进行配置和管理。

vm是指通过软件模拟+硬件辅助虚拟化的具有完整硬件系统功能且运行在一个完全隔离环境中的完整计算机系统。通过vm软件,可以在一台宿主机上模拟出另一台或多台虚拟的计算机。其中,vm可运行在hypervisor上。每一个vm会将sr-iovnic中的vf网卡识别为普通的pcie设备,因此,可以通过在每一个vm上安装vf驱动从而与sr-iovnic上对应的vf网卡连接,从而旁路了hypervisor中的vswitch。也即,vm会将数据直接发送给sr-iovnic上对应的vf网卡,而不会发送给hypervisor中的vswitch,从而绕过了hypervisor的参与。

在上述描述的基础上,vm接收数据包的过程为:当数据包发送到sr-iovnic时,会被发送到l2vswitch进行分类和交换,根据该数据包的目的地址确定对应的vf网卡,从而将该数据包转发到确定的vf网卡,vf网卡发起dma操作将该数据包传递给与该vf网卡连接的vm。vm发送数据包的过程为:vm将数据包发送给sr-iovnic对应的vf网卡,从而通过该vf网卡将数据包进行发送。

如前述背景技术获知的技术问题,本公开发明人经过研究发现目前用于解决上述技术问题的技术方案包括以下两种:

第一种方案:请参阅图1所示的应用场景,在该应用场景中,第一宿主机100和第二宿主机200均包括sr-iovnic,sr-iovnic运行有sr-iovvf网卡和sr-iovpf网卡,第一虚拟机配置在第一宿主机100中,第二虚拟机配置在第二宿主机200中,第一虚拟机配置有virtio-net驱动和sr-iovvf驱动。在实施时,第一虚拟机可以通过绑定软件配置主备模式,例如在主用模式下绑定sr-iovvf网卡的信息(例如mac地址、ip地址等),在备用模式下绑定sr-iovpf网卡的信息(例如mac地址、ip地址等)。如此,当第一虚拟机正常运行时,绑定的是sr-iovvf网卡的信息,则通过sr-iovvf驱动与sr-iovvf网卡完成i/o数据交互。当第一虚拟机需要迁移到第二宿主机200中时,绑定的是sr-iovpf网卡的信息,则通过virtio-net驱动与sr-iovpf网卡完成i/o数据交互。

然而,发明人在研究过程中发现上述方案存在以下问题:

第一,sr-iovnic的sr-iovpf网卡只有在第一虚拟机的迁移过程中才会发挥作用,占用了物理功能资源。

第二,在第一虚拟机的迁移过程中,通过virtio-net驱动与sr-iovpf网卡进行i/o数据交互,收发性能低,导致断流时间长。

第三,采用绑定软件的方式,对于不同的操作系统,命令、工具不同,难以进行标准化操作,不利于后续运维。

第二种方案:请参阅图2所示的应用场景,在该应用场景中,第一宿主机100和第二宿主机200均包括sr-iovnic,sr-iovnic运行有vhost-user网卡,第一虚拟机配置在第一宿主机100中,第二虚拟机配置在第二宿主机200中,第一虚拟机配置有virtio-net驱动。

上述方案中,第一虚拟机可以通过virtio-net驱动与sr-iovnic的vhost-user网卡进行i/o数据的交互,可以实现从第一虚拟机到第一宿主机100上数据包的零拷贝,相对于virtio-net驱动与sr-iovpf网卡进行i/o数据交互的方式,提升了i/o性能,此外,该方案不涉及到sr-iovvf,可以支持第一虚拟机的热迁移。

然而,发明人在研究过程中发现,尽管上述方案支持热迁移,但是通常来说,热迁移次数以及持续时间与正常状态相比,占比很少,而在普通状态时,采用上述方案实现的i/o性能相对于采用sr-iovvf驱动与sr-iovvf网卡完成i/o数据交互的方式仍然较低。例如,在正常状态时,采用上述方案进行i/o数据交互时会牺牲掉一部分性能用作程序处理,所以i/o性能仍低于sr-iovvf方式。也就是说,上述方案是通过牺牲了一部分正常状态下的i/o性能来使第一宿主机100支持热迁移。

基于上述技术问题的发现,本公开发明人提出下述技术方案以解决或者改善上述问题。详细地,通过在第一宿主机100的硬件虚拟化网卡驱动和半虚拟化网卡驱动中配置组合收发队列,当第一宿主机100切换到迁移状态时,将第一虚拟机的内存信息同步到第二虚拟机中,在整个迁移过程中第一虚拟机通过半虚拟化网卡驱动的组合收发队列与sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互。由此,本公开无需采用绑定软件即可在驱动侧自动化完成迁移状态的切换,有利于后续运维,同时不管是在迁移状态下还是在非迁移状态下都能够保持较高的转发性能。

需要注意的是,以上现有技术中的方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开实施例针对上述问题所提出的解决方案,都应该是发明人对本公开做出的贡献。

本公开实施例提供的虚拟机迁移方法的应用场景请参阅图3,在该应用场景中,第一宿主机100和第二宿主机200均包括sr-iovnic,sr-iovnic包括硬件虚拟化驱动网卡和半虚拟化驱动网卡,第一虚拟机配置在第一宿主机100中,第一虚拟机配置有硬件虚拟化网卡驱动和半虚拟化网卡驱动。

在本公开实施例中,硬件虚拟化驱动网卡可以是sr-iovvf网卡,半虚拟化驱动网卡可以是vhost-user网卡,硬件虚拟化网卡驱动可以是sr-iovvf驱动,半虚拟化网卡驱动可以是virtio-net驱动。

其中,硬件虚拟化网卡驱动和半虚拟化网卡驱动中配置有组合收发队列,该组合收发队列可以由硬件虚拟化网卡驱动的vf队列和半虚拟化网卡驱动的虚拟输入输出环virtio-ring统一抽象得到,使得该组合收发队列可以同时具有vf队列和virtio-ring的功能。

作为一种实施方式,所述组合收发队列可以通过以下方式生成:首先,获取硬件虚拟化网卡驱动的虚拟功能vf队列的队列参数(例如sr-iovvf驱动的硬件虚拟化驱动参数)和半虚拟化网卡驱动的虚拟i/o环virtio-ring中每条i/o内存块的地址,并根据所述vf队列的队列参数和所述virtio-ring中每条i/o内存块的地址生成所述vf队列和virtio-ring的队列并集,并将所述队列并集作为所述组合收发队列。由此,在从硬件虚拟化网卡驱动切换到半虚拟化网卡驱动,或者从半虚拟化网卡驱动切换到硬件虚拟化网卡驱动时,由于组合收发队列可以同时表示virtio-ring和vf队列,因此无需卸载原有驱动即可完成平滑切换。其中,virtio-ring和vf队列可以用于为第一虚拟机和sr-iov网卡双方的通信提供通信通道。

下面结合图3所示的应用场景对图4所示的虚拟机迁移方法进行详细说明,该虚拟机迁移方法由图3中所示的第一宿主机100执行。应当理解,在其它实施例中,本实施例的虚拟机迁移方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。该虚拟机迁移方法的详细步骤介绍如下。

步骤s110,在接收到虚拟机迁移指令后,发送待迁移的第一虚拟机的配置信息。

本实施例中,第一宿主机100可以在接收到虚拟机迁移指令后,从虚拟机迁移指令中获得第一宿主机100中待迁移的第一虚拟机的虚拟机信息以及该第一虚拟机需要迁移到的第二宿主机200的主机信息。其中,虚拟机信息可以包括第一虚拟机的虚拟机名称或者虚拟机地址(例如ip地址、mac地址),主机信息可以包括第二宿主机200的地址信息(例如ip地址、mac地址)。

接着,第一宿主机100可以根据虚拟机信息获得第一虚拟机的配置信息,该配置信息可以包括第一虚拟机的网络配置信息,例如可以包括硬件虚拟化网卡驱动和半虚拟化网卡驱动的配置信息。

最后,第一宿主机100可以根据主机信息将配置信息发送给第二宿主机200。例如,第一宿主机100可以根据主机信息查找第二宿主机200的通信端口,并根据查找到的通信端口将配置信息发送给第二宿主机200。

之后,第二宿主机200可以根据配置信息创建第二虚拟机,并为第二虚拟机配置与第一虚拟机相同的硬件虚拟化网卡驱动和半虚拟化网卡驱动,在配置完成后向第一宿主机100发送第一反馈信息。

步骤s120,将第一虚拟机的当前运行状态切换到迁移状态。

本实施例中,第一宿主机100在接收到第一反馈信息后即确定第二宿主机200已经完成第二虚拟机的配置,接下来则判断第一虚拟机的当前运行状态是否为非迁移状态(hard状态)。

其中,第一虚拟机在hard状态下,运行硬件虚拟化网卡驱动以通过硬件虚拟化网卡驱动的组合收发队列与sr-iovnic的硬件虚拟化驱动网卡进行i/o数据的交互。例如,第一虚拟机可以运行sr-iovvf驱动并通过sr-iovvf驱动中的组合收发队列与sr-iovnic的sr-iovvf网卡进行i/o数据的交互。以发送数据包为例,第一虚拟机将待发送的数据包写入sr-iovvf驱动的组合收发队列中,通过组合收发队列中的vf队列将数据包发送至sr-iovnic的sr-iovvf网卡中,sr-iovvf网卡将数据包发送给目的端。

如果判定第一虚拟机的当前运行状态为hard状态,则将第一虚拟机的当前运行状态切换到临时迁移状态preparesoft状态,并在preparesoft状态下,从第一虚拟机当前运行的硬件虚拟化网卡驱动的组合收发队列中获取正在进行i/o数据交互的vf队列数量。如果vf队列数量为0,则将当前运行状态从preparesoft状态切换到迁移状态(soft状态)。如此,在切换到迁移状态之前,会等待vf队列完成所有数据包的传输,避免切换过程中丢失数据包。

在此之前,第一虚拟机在soft状态下,运行半虚拟化网卡驱动以通过半虚拟化网卡驱动的组合收发队列与sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互。例如,第一虚拟机可以运行virtio-net驱动并通过virtio-net驱动的组合收发队列与sr-iovnic的vhost-user驱动网卡进行i/o数据的交互。以发送数据包为例,第一虚拟机可以将待发送的数据包写入virtio-net驱动的组合收发队列中,通过组合收发队列中的virtio-ring将数据包发送至sr-iovnic的vhost-user驱动网卡中,vhost-user驱动网卡将数据包发送给目的端。

步骤s130,发送第一虚拟机的内存信息至第二宿主机200。

本实施例中,第二宿主机200在接收到第一虚拟机的内存信息后,将第一虚拟机的内存信息同步到第二虚拟机中。

基于上述设计,在迁移状态下,可以通过virtio-net驱动与sr-iovnic的vhost-user网卡进行i/o数据的交互,可以实现从第一虚拟机到第一宿主机100上数据包的零拷贝,相对于virtio-net驱动与sr-iovpf网卡进行i/o数据交互的方式,提升了i/o性能。在非迁移状态下,可以通过sr-iovvf驱动与sr-iovvf网卡完成i/o数据交互,相对于通过virtio-net驱动与sr-iovnic的vhost-user网卡进行i/o数据的交互的方式,也提升了i/o性能。由此,本实施例相较于现有技术而言,不管是在迁移状态下还是在非迁移状态下都能够保持较高的转发性能。此外,在迁移过程中,本实施例无需使用到sr-iovpf网卡,也无需采用绑定软件即可在驱动侧自动化完成迁移状态的切换,有利于后续运维。

请进一步参阅图5,在第一虚拟机的内存信息同步至第二虚拟机之后,第二宿主机200向第一宿主机100发送第二反馈信息,在此基础上,虚拟机迁移方法还可以包括如下步骤:

步骤s140,暂停运行第一虚拟机,发送第三反馈信息至第二宿主机200。

本实施例中,第一宿主机100在接收到第二反馈信息后,即确定第二宿主机200已经将第一虚拟机的内存信息同步至第二虚拟机中,接下来则暂停运行第一虚拟机,并发送第三反馈信息至第二宿主机200。

第二宿主机200在接收到第三反馈信息后,即确定第一虚拟机已经暂停运行,接下来则开启第二虚拟机,并将第二虚拟机的当前运行状态切换到非迁移状态(hard状态)。详细地,第二虚拟机在hard状态下,运行硬件虚拟化网卡驱动以根据硬件虚拟化网卡驱动的组合收发队列与sr-iovnic的硬件虚拟化驱动网卡进行i/o数据的交互。

作为一种实施方式,第二宿主机200将第二虚拟机的当前运行状态切换到非迁移状态的具体实现方式可以为:判断当前运行状态是否为soft状态,如果当前运行状态为soft状态,则将当前运行状态切换到临时非迁移状态(preparehard状态),在preparehard状态下,从第二虚拟机当前运行的半虚拟化网卡驱动的组合收发队列中获取正在进行i/o数据交互的虚拟i/o环virtio-ring数量,如果virtio-ring数量为0,则将当前运行状态从临时非迁移状态切换到非迁移状态。

如此,在切换到非迁移状态之前,会等待virtio-ring完成所有数据包的传输,避免切换过程中丢失数据包。

进一步地,仍旧参阅图4,示出了本公开实施例提供的另一种虚拟机迁移方法的流程示意图。与上面实施例不同的是,本实施例提供的虚拟机迁移方法由第二宿主机200执行,可以理解的是,接下来要描述的虚拟机迁移方法中涉及的步骤在上面实施例中已经描述过,具体各个步骤的详尽内容可参照上面的实施例描述,下面仅对第二宿主机200执行步骤进行简要说明。

步骤s210,根据配置信息创建第二虚拟机,并为第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动。

本实施例中,第二宿主机200在接收到第一宿主机100根据虚拟机迁移指令后发送的待迁移的第一虚拟机的配置信息后,根据配置信息创建第二虚拟机,并为第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动。

第二宿主机200在第二虚拟机完成配置时,向第一宿主机100发送第一反馈信息,第一宿主机100将第一虚拟机的当前运行状态切换到迁移状态,其中,在迁移状态下,第一虚拟机通过运行半虚拟化网卡驱动以通过半虚拟化网卡驱动的组合收发队列与sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互。

接着,第一宿主机100将第一虚拟机的内存信息发送给第二宿主机200。

步骤s220,将第一虚拟机的内存信息同步到第二虚拟机中。

进一步地,请参阅图5,在第一虚拟机的内存信息同步至第二虚拟机之后,第二宿主机200向第一宿主机100发送第二反馈信息,第一宿主机100在接收到第二反馈信息后,即确定第二宿主机200已经将第一虚拟机的内存信息同步至第二虚拟机中,接下来则暂停运行第一虚拟机,并发送第三反馈信息至第二宿主机200。

步骤s230,开启第二虚拟机,并将第二虚拟机的当前运行状态切换到非迁移状态。

第二宿主机200在接收到第三反馈信息后,即确定第一虚拟机已经暂停运行,接下来则开启第二虚拟机,并将第二虚拟机的当前运行状态切换到非迁移状态(hard状态)。详细地,第二虚拟机在hard状态下,运行硬件虚拟化网卡驱动以根据硬件虚拟化网卡驱动的组合收发队列与sr-iovnic的硬件虚拟化驱动网卡进行i/o数据的交互。

进一步地,仍旧参阅图4,示出了另一种虚拟机迁移方法的流程示意图。与上面实施例不同的是,本实施例提供的虚拟机迁移方法由相互之间通信连接的第一宿主机100和第二宿主机200执行,可以理解的是,接下来要描述的虚拟机迁移方法中涉及的步骤在上面实施例中已经描述过,具体各个步骤的详尽内容可参照上面的实施例描述。

步骤s110,第一宿主机100在接收到虚拟机迁移指令后,将待迁移的第一虚拟机的配置信息发送给第二宿主机200。

步骤s210,第二宿主机200根据配置信息创建第二虚拟机,并为第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动。

在第二虚拟机完成配置时,第二宿主机200向第一宿主机100发送第一反馈信息,第一宿主机100在接收到第一反馈信息后,执行:

步骤s120,第一宿主机100将第一虚拟机的当前运行状态切换到迁移状态,并在迁移状态下执行:

步骤s130,将第一虚拟机的内存信息发送到第二宿主机200。

其中,在迁移状态下,第一虚拟机通过运行半虚拟化网卡驱动以通过半虚拟化网卡驱动的组合收发队列与sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互。

步骤s220,第二宿主机200将第一虚拟机的内存信息同步到第二虚拟机中。

进一步地,请参阅图6,本公开实施例还提供一种第一虚拟机迁移装置300,该第一虚拟机迁移装置300实现的功能可以对应上述第一宿主机100执行的虚拟机迁移方法的步骤。该第一虚拟机迁移装置300可以理解为上述第一宿主机100,或第一宿主机100的处理器,也可以理解为独立于上述第一宿主机或处理器之外的在第一宿主机100控制下实现本公开功能的组件。如图6所示,第一虚拟机迁移装置300可以包括配置信息发送模块310、第一切换模块320以及内存信息发送模块330,接下来对第一虚拟机迁移装置300的各功能模块进行详细阐述。

配置信息发送模块310,可以用于在接收到虚拟机迁移指令后,将待迁移的第一虚拟机的配置信息发送给第二宿主机200,以使第二宿主机200根据配置信息创建第二虚拟机,并为第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动。可以理解,该配置信息发送模块310可以用于执行上述步骤s110,关于该配置信息发送模块310的详细实现方式可以参照上述对步骤s110有关的内容。

第一切换模块320,可以用于在第二虚拟机完成配置时,将第一虚拟机的当前运行状态切换到迁移状态,其中,在迁移状态下,第一虚拟机通过运行半虚拟化网卡驱动以通过半虚拟化网卡驱动的组合收发队列与sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互。可以理解,该第一切换模块320可以用于执行上述步骤s120,关于该第一切换模块320的详细实现方式可以参照上述对步骤s120有关的内容。

内存信息发送模块330,可以用于将第一虚拟机的内存信息发送到第二宿主机200,以使第二宿主机200将第一虚拟机的内存信息同步到第二虚拟机中。可以理解,该内存信息发送模块330可以用于执行上述步骤s130,关于该内存信息发送模块330的详细实现方式可以参照上述对步骤s130有关的内容。

在一种可能的实施方式中,配置信息发送模块310,具体可以通过以下方式将待迁移的第一虚拟机的配置信息发送给第二宿主机200的:

从虚拟机迁移指令中获得第一宿主机100中待迁移的第一虚拟机的虚拟机信息以及该第一虚拟机需要迁移到的第二宿主机200的主机信息,根据虚拟机信息获得第一虚拟机的配置信息,根据主机信息将配置信息发送给第二宿主机200。

在一种可能的实施方式中,请参阅图7,第一虚拟机迁移装置300还可以包括暂停模块340。

暂停模块340,可以用于在第一虚拟机的内存信息同步至第二虚拟机之后,暂停运行第一虚拟机,以使在第一虚拟机暂停运行时,第二宿主机200开启第二虚拟机,并将第二虚拟机的当前运行状态切换到非迁移状态,其中,在非迁移状态下,第二虚拟机运行硬件虚拟化网卡驱动以通过硬件虚拟化网卡驱动的组合收发队列与sr-iovnic的硬件虚拟化驱动网卡进行i/o数据的交互。可以理解,该暂停模块340可以用于执行上述步骤s140,关于该暂停模块340的详细实现方式可以参照上述对步骤s140有关的内容。

在一种可能的实施方式中,第一切换模块320具体可以通过以下方式将第一虚拟机的当前运行状态切换到迁移状态:

判断第一虚拟机的当前运行状态是否为非迁移状态;

如果当前运行状态为非迁移状态,则将当前运行状态切换到临时迁移状态;

在临时迁移状态下,从第一虚拟机当前运行的硬件虚拟化网卡驱动中的半虚拟化网卡驱动的组合收发队列中获取正在进行i/o数据交互的虚拟功能vf队列数量;

如果vf队列数量为0,则将当前运行状态从临时迁移状态切换到迁移状态。

进一步地,请参阅图8,本公开实施例还提供一种第二虚拟机迁移装置400,该第二虚拟机迁移装置400实现的功能可以对应上述第二宿主机200执行的虚拟机迁移方法的步骤。该第二虚拟机迁移装置400可以理解为上述第二宿主机200,或第二宿主机200的处理器,也可以理解为独立于上述第二宿主机200或处理器之外的在第二宿主机200控制下实现本公开功能的组件。如图8所示,第二虚拟机迁移装置400可以包括配置信息接收模块410、创建模块420以及内存信息接收模块430,接下来对第二虚拟机迁移装置400的各功能模块进行详细阐述。

配置信息接收模块410,可以用于接收第一宿主机100根据虚拟机迁移指令后发送的待迁移的第一虚拟机的配置信息。可以理解,该配置信息接收模块410可以用于执行上述步骤s210,关于该配置信息接收模块410的详细实现方式可以参照上述对步骤s210有关的内容。

创建模块420,可以用于根据配置信息创建第二虚拟机,并为第二虚拟机配置硬件虚拟化网卡驱动和半虚拟化网卡驱动,以使在第二虚拟机完成配置时,第一宿主机100将第一虚拟机的当前运行状态切换到迁移状态,其中,在迁移状态下,第一虚拟机通过运行半虚拟化网卡驱动以通过半虚拟化网卡驱动的组合收发队列与sr-iovnic的半虚拟化驱动网卡进行i/o数据的交互。可以理解,该创建模块420可以用于执行上述步骤s210,关于该创建模块420的详细实现方式可以参照上述对步骤s210有关的内容。

内存信息接收模块430,可以用于接收第一宿主机100发送的第一虚拟机的内存信息,并将第一虚拟机的内存信息同步到第二虚拟机中。可以理解,该内存信息接收模块430可以用于执行上述步骤s220,关于该内存信息接收模块430的详细实现方式可以参照上述对步骤s220有关的内容。

在一种可能的实施方式中,请参阅图9,第二虚拟机迁移装置400还可以包括第二切换模块440。

第二切换模块440可以用于在第一虚拟机暂停运行时,开启第二虚拟机,并将第二虚拟机的当前运行状态切换到非迁移状态,其中,在非迁移状态下,第二虚拟机运行硬件虚拟化网卡驱动以通过硬件虚拟化网卡驱动的组合收发队列与sr-iovnic的硬件虚拟化驱动网卡进行i/o数据的交互。可以理解,该第二切换模块440可以用于执行上述步骤s230,关于该第二切换模块440的详细实现方式可以参照上述对步骤s230有关的内容。

在一种可能的实施方式中,第二切换模块440具体可以通过以下方式将第二虚拟机的当前运行状态切换到非迁移状态:

判断当前运行状态是否为迁移状态;

如果当前运行状态为迁移状态,则将当前运行状态切换到临时非迁移状态;

在临时非迁移状态下,从第二虚拟机当前运行的半虚拟化网卡驱动的组合收发队列中获取正在进行i/o数据交互的虚拟i/o环virtio-ring数量;

如果virtio-ring数量为0,则将当前运行状态从临时非迁移状态切换到非迁移状态。

进一步地,请参阅图10,本公开实施例还提供了一种用于实现上述虚拟机迁移方法的服务器500,本实施例中,所述服务器500可以由总线510作一般性的总线体系结构来实现。根据服务器500的具体应用和整体设计约束条件,总线510可以包括任意数量的互连总线和桥接。总线510将各种电路连接在一起,这些电路包括处理器520、存储介质530和总线接口540。可选地,服务器500可以使用总线接口540将网络适配器550等经由总线510连接。网络适配器550可用于实现服务器500中物理层的信号处理功能,并通过天线实现射频信号的发送和接收。用户接口560可以连接外部设备,例如:键盘、显示器、鼠标或者操纵杆等。总线510还可以连接各种其它电路,如定时源、外围设备、电压调节器或者功率管理电路等,这些电路是本领域所熟知的,因此不再详述。

可以替换的,服务器500也可配置成通用处理系统,例如通称为芯片,该通用处理系统包括:提供处理功能的一个或多个微处理器,以及提供存储介质530的至少一部分的外部存储器,所有这些都通过外部总线体系结构与其它支持电路连接在一起。

可替换的,服务器500可以使用下述来实现:具有处理器520、总线接口540、用户接口560的asic(专用集成电路);以及集成在单个芯片中的存储介质530的至少一部分,或者,服务器500可以使用下述来实现:一个或多个fpga(现场可编程门阵列)、pld(可编程逻辑器件)、控制器、状态机、门逻辑、分立硬件部件、任何其它适合的电路、或者能够执行本公开通篇所描述的各种功能的电路的任意组合。

其中,处理器520负责管理总线510和一般处理(包括执行存储在存储介质530上的软件)。处理器520可以使用一个或多个通用处理器和/或专用处理器来实现。处理器520的例子包括微处理器、微控制器、dsp处理器和能够执行软件的其它电路。应当将软件广义地解释为表示指令、数据或其任意组合,而不论是将其称作为软件、固件、中间件、微代码、硬件描述语言还是其它。

在图10中存储介质530被示为与处理器520分离,然而,本领域技术人员很容易明白,存储介质530或其任意部分可位于服务器500之外。举例来说,存储介质530可以包括传输线、用数据调制的载波波形、和/或与无线节点分离开的计算机制品,这些介质均可以由处理器520通过总线接口540来访问。可替换地,存储介质530或其任意部分可以集成到处理器520中,例如,可以是高速缓存和/或通用寄存器。

所述处理器520可用于执行本公开中的虚拟机迁移方法。

进一步地,本公开实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的虚拟机迁移方法。

在本公开所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本公开各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

可以替换的,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其它可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的电子设备、服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,术语"包括"、"包含"或者其任何其它变体意在涵盖非排它性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对于本领域技术人员而言,显然本公开不限于上述示范性实施例的细节,而且在不背离本公开的精神或基本特征的情况下,能够以其它的具体形式实现本公开。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本公开的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本公开内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1