虚拟机创建方法、迁移方法及计算机可读介质与流程

文档序号:29035500发布日期:2022-02-25 18:22阅读:90来源:国知局
虚拟机创建方法、迁移方法及计算机可读介质与流程

1.本发明涉及虚拟机迁移技术领域,尤其涉及一种虚拟机创建方法、迁移方法及计算机可读介质。


背景技术:

2.对云平台中已创建的虚拟机执行热迁移是指将虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。热迁移在双击容错、数据库备份、环境重现、计算机共享等场景中具有重要作用。热迁移通常在两个物理机之间执行迁移(即p2p,physical-to-physical),并保证虚拟机在启动状态中执行迁移操作,并在热迁移执行完毕后改变虚拟机的计算资源及存储数据。
3.参图1所示,物理机1(即源端)与物理机2(即目标端)之间执行虚拟机热迁移操作时,可首先在目标端创建待迁移的虚拟机vm2,并在虚拟机迁移阶段中将源端中已经部署及运行的虚拟机vm1所包含的虚拟机数据在虚拟机迁移系统(例如hypervisor)的控制下,将vm1中的虚拟机数据在线迁移至目标端的虚拟机vm2中,以实现热迁移操作;同时,在热迁移操作结束后,虚拟机vm1停止运行,虚拟机vm2正式运行。前述虚拟机数据是被执行迁移的虚拟机所包含的如下数据:虚拟机的内存数据、虚拟机描述信息(包括虚拟机的配置和设备信息)、虚拟机的状态数据。
4.通常的,虚拟机的实现方式包括基于栈的虚拟机(例如jvm、cpython及.net clr)和基于寄存器的虚拟机(例如dalvik以及lua5.0)。基于栈的虚拟机的操作数栈布局在内存,其虽然可以无视具体的物理架构,特别是寄存器。但基于栈的虚拟机的任何操作都要通过操作数栈(operand stack)结构,因此,基于栈的虚拟机运行速度慢,且不适用于基于arm架构的开源系统。基于寄存器的虚拟机中没有操作数栈的概念,但是有很多虚拟寄存器,一般情况下这些寄存器(操作数)都是别名,需要执行引擎对这些寄存器(操作数)的解析,找出操作数的具体位置,然后取出操作数进行运算。当前栈帧中一块连续的内存区域。这些数据在运算的时候,直接送入物理cpu进行计算,无需再传送到操作数栈上然后再进行运算。基于寄存器的虚拟机能提供更强大的指令集。基于寄存器的虚拟机需要用寄存器来保存中间结果、变量等。虽然基于寄存器的虚拟机的代码尺寸小于基于寄存器的虚拟机,但在实际部署及运行环境中,基于寄存器的虚拟机的性能明显优于基于栈的虚拟机,且寄存器式虚拟机更能更好地优化指令。
5.然而,在异构化场景中不同制造商对同架构的物理硬件,由于不同制造商对同一种硬件的指令规范(spec)会进行单独定义,从而导致同一架构但不同制造商所定义的某些可选的寄存器的含义是存在区别的。因此,当业务、应用、功能模块或者云平台部署至虚拟机后,如果部署(或者创建)虚拟机的物理机由于硬件架构存在同架构(例如均为x86架构)但制造商不同(例如amd与intel)所导致的异构化场景中,存在寻址失败的隐患,从而存在对虚拟机执行热迁移的效果不佳的技术问题,并进而存在因虚拟机的热迁移失败所导致的
业务中断的问题。因此,对异构化场景中硬件架构所具有的不同寄存器进行模拟仿真就显得尤为重要,尤其是亟待对被调用的异构化场景中物理硬件所支持指令集所部署的多个寄存器的自定义所导致的异构化场景中的虚拟机热迁移失败的问题予以提出相应的解决方案。
6.有鉴于此,有必要对现有技术中的对于硬件异构化场景中的虚拟机的迁移方法予以改进,以解决上述问题。


技术实现要素:

7.本发明的目的在于揭示一种虚拟机创建方法、迁移方法及计算机可读介质,用以实现在同架构不同制造商提供的异构化硬件所构建的物理机之间对虚拟机执行创建操作及热迁移操作,提高虚拟机热迁移的成功率,并有效地防止虚拟机执行热迁移所导致的失败概率,并降低对异构制造商的异构化硬件进行模拟的计算开销,提高模拟效率,以确保业务的连续性与稳定性。
8.为实现上述目的之一,本发明首先披露了一种虚拟机创建方法,包括:
9.获取虚拟机创建请求;
10.提取源端及目标端分别配置的物理硬件所包含的寄存器列表;
11.确定源端及目标端分别配置的物理硬件所包含的寄存器列表中所包含的相同寄存器;
12.提取并保存源端与目标端所具有的相同寄存器所形成的寄存器值交集;
13.将所述寄存器值交集写入虚拟硬件的模拟寄存器,通过虚拟化硬件加速模块调用所述寄存器值交集,以在源端和/或目标端中创建虚拟机。
14.作为本发明的进一步改进,寄存器值交集由源端与目标端所分别具有的寄存器值通过二进制与操作确定。
15.作为本发明的进一步改进,所述寄存器值由物理硬件所包含的自定义寄存器、页表寄存器、控制寄存器、状态寄存器、内存访问寄存器或者cache寄存器中的一种或者任意几种寄存器值描述,其中,所述物理硬件包括物理cpu或者物理gpu。
16.作为本发明的进一步改进,所述寄存器值还包括表征同时支持源端与目标端所适配的加速指令的位。
17.基于相同发明思想,本发明还披露了一种虚拟机的迁移方法,用于对虚拟机在源端与目标端之间执行迁移,所述迁移方法包括:
18.提取源端及目标端分别配置的物理硬件所包含的寄存器列表;
19.确定源端及目标端分别配置的物理硬件所包含的寄存器列表中所包含的相同寄存器;
20.提取并保存源端与目标端所具有的相同寄存器所形成的寄存器值交集;
21.将所述寄存器值交集写入虚拟硬件的模拟寄存器,通过虚拟化硬件加速模块调用所述寄存器值交集;
22.在目标端中创建与源端中被执行迁移的虚拟机相同的待迁移虚拟机,将寄存器值交集写入目标端的虚拟硬件的模拟寄存器,通过虚拟机迁移系统将源端中被执行迁移的虚拟机数据迁移并加载至目标端中已经被创建的待迁移虚拟机后,关闭源端中被执行迁移的
虚拟机。
23.作为本发明的进一步改进,所述提取源端及目标端分别配置的物理硬件所包含的寄存器列表的操作由纳管源端与目标端的hypervisor执行,所述hypervisor包括hyper-v、xen、linux os或者exsi。
24.作为本发明的进一步改进,所述寄存器值交集由源端与目标端所分别具有的寄存器值通过所述hypervisor执行二进制与操作确定。
25.作为本发明的进一步改进,所述寄存器值由物理硬件所包含的自定义寄存器、页表寄存器、控制寄存器、状态寄存器、内存访问寄存器或者cache寄存器中的一种或者任意几种寄存器值描述,其中,所述物理硬件包括物理cpu或者物理gpu。
26.作为本发明的进一步改进,所述寄存器值还包括表征同时支持源端与目标端所适配的加速指令的位。
27.最后,基于相同发明思想,本发明还披露了一种计算机可读介质,所述计算机可读介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行如上述任一项发明创造所述的虚拟机的迁移方法中的步骤。
28.与现有技术相比,本发明的有益效果是:
29.在本技术中,将寄存器值交集写入虚拟硬件的模拟寄存器,通过虚拟化硬件加速模块调用所述寄存器值交集,从而使得在源端及目标端中所创建的虚拟机具有热迁移功能,尤其是在需要对虚拟机执行热迁移时,能够忽略异构化场景中不同制造商对同架构的硬件基于寄存器定义的差异,从而实现高效且可靠的虚拟机热迁移操作,确保了业务的连续性与稳定性。
附图说明
30.图1为现有技术中在两个物理机之间执行虚拟机热迁移的示意图;
31.图2为使用本发明一种虚拟机的迁移方法在具有异构化硬件的两个物理机之间执行虚拟机热迁移的示意图;
32.图3为物理机1与物理机2被hypervisor纳管的示例图;
33.图4为本发明一种虚拟机创建方法的流程图;
34.图5为本发明一种虚拟机的迁移方法的流程图;
35.图6为物理机1与物理机2中的异构化物理cpu场景中提取并保存源端与目标端所具有的相同寄存器所形成的寄存器值交集实例图;
36.图7为本发明一种计算机可读介质的拓扑图。
具体实施方式
37.下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。
38.实施例一:
39.参图1至图4及图6所示出的本发明一种虚拟机创建方法的具体实施方式。参图4所示,本实施例所揭示的一种虚拟机创建方法,包括以下步骤s11~步骤s15。
40.本实施例所揭示的虚拟机创建方法旨在于多个物理机(或者物理服务器)中创建可被后续执行热迁移操作的虚拟机(vm),且通过本实施例所创建的虚拟机可部署于多个逻辑上隔离的物理机中。虚拟机在被创建后通过虚拟机监视器(hypervisor)所管理,虚拟机的创建过程可采用现有技术予以实现,在此不再赘述。通常的,虚拟机创建请求可由用户(或者管理员)在客户端(或者后台)调用nova-api发起,并逐步加载支持虚拟机所需要的网络资源、存储资源、内存等,并通过hypervisor维护多个高效的、隔离的程序环境,该环境支持用户直接去访问真实硬件,即物理机所包含的一种或者几种物理硬件。在虚拟机创建前阶段、虚拟机创建阶段、虚拟机运行阶段及后续的虚拟机迁移阶段中,各个物理机所创建或者部署的虚拟机均被hypervisor所纳管。本实施例所揭示的虚拟机方法重点对在源端和/或目标端中基于两个或者多个物理机所具有的相同寄存器所形成的寄存器值交集所对应的寄存器创建虚拟机,以在后续的虚拟机迁移过程中可以忽略异构化场景中不同制造商对同架构的硬件(例如均基于x86架构但分别amd与intel制造的物理cpu,或者基于arm架构但分别为飞腾公司制造的飞腾200型物理cpu与华为公司制造的鲲鹏920型物理cpu)基于寄存器定义的差异,以满足后续的热迁移需求,以满足同架构但制造厂商不同(以下简称“异构化场景”)之间的虚拟机热迁移场景需求。
41.在该虚拟机创建方法中,首先执行步骤s11、获取虚拟机创建请求。虚拟机创建操作由纳管源端与目标端的hypervisor执行,hypervisor包括hyper-v(适用于windows操作系统)、xen(适用于linux操作系统)、linux os(适用于linux操作系统)或者exsi(适用于vmware)。源端与目标端是相对概念。参图2中,如果将虚拟机vm从物理机1迁移至物理机2中并启动虚拟机vm2,则物理机1是源端,物理机2是目标端。通常的,在一个服务器集群的各个物理机所定义的多个节点中创建的虚拟机可在各个物理机之间执行热迁移,且热迁移过程中不会被用户所感知,以确保业务不发生中断。
42.步骤s12、提取源端及目标端分别配置的物理硬件所包含的寄存器列表。具体的,提取源端及目标端分别配置的物理硬件所包含的寄存器列表的操作由纳管源端与目标端的hypervisor执行,hypervisor包括hyper-v、xen、linux os或者exsi。寄存器列表由源端及目标端中的物理硬件所固有的多个寄存器单独组成。通常的,在异构化场景中,源端及目标端虽然属于同架构的物理硬件(例如均为armv8架构的物理cpu),但由于不同制造商对该架构的物理cpu所包含的寄存器的寄存器描述(register descriptions)存在较大区别,从而导致即使为相同架构的物理硬件在创建虚拟机并在后续对虚拟机执行热迁移过程中,由于寄存器描述(register descriptions)的差异,导致热迁移失败或者对物理硬件所支持的加速指令集(例如aes、sse、mmx、avx等加速指令)执行指令编译需要予以复杂的修改,且会对虚拟化平台、虚拟机、虚拟化软件及应用造成一定的代码入侵。由于执行热迁移操作需要确保源端与目标端所支持的物理硬件所支持的加速指令集是相同时,才能确保热迁移的成功率。因此,需要在异构化场景中统一源端及目标端分别配置的物理硬件所包含的寄存器列表中所包含的相同寄存器,以防止对虚拟机执行热迁移出现失败,并由此执行下述步骤s13。在本实施例中,物理硬件包括物理cpu或者物理gpu,或者同时包含物理硬件包括物理cpu与物理gpu,甚至还可为包含物理cpu和/或物理gpu的物理服务器。
43.步骤s13、确定源端及目标端分别配置的物理硬件所包含的寄存器列表中所包含的相同寄存器。基于源端与目标端中的基于armv8架构的物理cpu对同一个寄存器的寄存器
描述可能存在的相同与差异的特性,通过纳管源端与目标端的hypervisor确定并获取包含相同寄存器的寄存器列表。参图3与图6所示,图6中部署于物理机1(例如源端)cpu_a包含了n个寄存器(即寄存器_1~寄存器_n),图6中部署于物理机2(例如源端)cpu_b包含了n个寄存器(即寄存器_1~寄存器_n),cpu_a与cpu_b均为物理cpu且是本实施例中物理硬件的一种下位概念。类似于物理cpu,物理gpu的寄存器也是访问速度最快的空间,因此,在虚拟化及虚拟机热迁移场景中,确定两个物理机中所包含的物理gpu所包含的具有相同寄存器值的描述的相同寄存器就显得尤其重要。无论是物理cpu还是物理gpu,寄存器值均是内核函数,并会将内核函数分配到指定的寄存器中,并与线程(thread)绑定后执行数据运算、数据写入、存储指令等操作。
44.步骤s14、提取并保存源端与目标端所具有的相同寄存器所形成的寄存器值交集。具体的,寄存器值交集由源端与目标端所分别具有的寄存器值通过二进制与操作确定。参图6所示,本实施例揭示了一种典型的通过二进制与操作确定源端与目标端所具有的相同寄存器所形成的寄存器值交集的实例。
45.参图6所示,同架构的cpu_a与cpu_b包含相同的寄存器,即寄存器_1,cpu_a中的寄存器_1的寄存器值为0x00000000701f6622,cpu_b中的寄存器_1的寄存器值为0x00000000481fd010,符号“&”是二进制与操作的运算符,以通过二进制与操作计算出最终能够通过cpu_a与cpu_b(均为物理cpu)通过虚拟化技术所形成的虚拟化cpu,即vcpu_c(虚拟cpu),比在后续中通过虚拟cpu创建虚拟机,并将虚拟cpu作为一种资源分配给虚拟机。结合图2所示,为便于在服务器集群(server cluster)中提高虚拟机创建效率并间接地提高后续对虚拟机所执行的热迁移效率及可靠性,以及支持高并发性的需要,还可将寄存器值交集旁路保存至存储装置。该存储装置即可为物理硬件自带的存储装置,例如物理gpu自带的高速缓存,gpu的本地内存(local memory),gpu中能够被block所访问的共享缓存(shared memory),cpu自带的缓存,通过dma控制器与物理cpu直连并内置于dam控制器中的存储器,从而基于核心共享系统数据总线,执行直接存储器数据传输,甚至,还可为通过系统总线被挂载的存储装置(例如磁盘)或者分布式缓存或者数据库。
46.步骤s15、将寄存器值交集写入虚拟硬件的模拟寄存器,通过虚拟化硬件加速模块调用寄存器值交集,以在源端和/或目标端中创建虚拟机。具体的,在本实施例中,寄存器值由物理硬件所包含的自定义寄存器、页表寄存器、控制寄存器、状态寄存器、内存访问寄存器或者cache寄存器中的一种或者任意几种寄存器值描述。寄存器值还包括表征同时支持源端与目标端所适配的加速指令的位。若物理硬件是物理cpu,则虚拟硬件则是vcpu,虚拟硬件的模拟寄存器是支持vcpu的模拟寄存器。物理cpu中的诸如aes、crc32、sha1、sha2等加速指令可通过表征同时支持源端与目标端所适配的加速指令的位(即表征加速指令的位)予以一一对应。例如,加速指令aes是否支持在armv8架构中是id_aa64isar0_el1寄存器的4~7位表征的,4~7位值为0b0001表示支持该加速指令,4~7位值为0b0000表明不支持该加速指令。由此通过引入表征同时支持源端与目标端所适配的加速指令的位,进一步满足了源端与目标端共同支持的加速指令的种类,从而进一步提高了虚拟机执行热迁移过程的成功率及迁移效率。
47.同时,前述自定义寄存器是指各个制造商上对同一个寄存器所填入的函数,本发明旨在确保虚拟硬件经过修改后能够具备同时支持异构化环境中的虚拟机在被创建后,能
够被执行热迁移操作。具体的,如果作为源端的物理硬件的制造商配置飞腾200的虚拟化硬件加速模块(例如qemu-kvm)创建虚拟机a1,并指定vcpu型号为c;作为目标端的物理硬件制造商配置鲲鹏920的虚拟化硬件加速模块(例如qemu-kvm)创建虚拟机b1,此时通过虚拟化硬件加速模块调用该寄存器值交集,以在目标端中创建虚拟机b1,并由此在目标端中创建的虚拟机具有同种寄存器,且寄存器值均相同的vcpu,即型号为c的vcpu。此时,目标端中物理cpu虚拟化形成vcpu已经包含了相同寄存器值的虚拟机b1,由此满足后续的对源端与目标端对虚拟机a1与虚拟机b1执行热迁移的需求。至此,在虚拟机创建阶段中完成了在源端的物理机1中创建虚拟机vm1,并进入虚拟机运行阶段。在目标端中创建虚拟机同理所述。
48.实施例二:
49.基于实施例一所揭示的一种虚拟机的迁移方法的技术方案,实施例还揭示了一种对虚拟机在在具有异构化硬件的两个物理机(即图2中的物理机1与物理机2)之间执行虚拟机热迁移操作的一种虚拟机的迁移方法的具体实施方式。
50.结合图1至图3、图5及图6所示,在本实施例中,一种虚拟机的迁移方法,用于对虚拟机在源端与目标端之间执行迁移,迁移方法包括以下步骤s21~步骤s25。基于实施例一所揭示的虚拟机创建方法已经创建出了虚拟机vm1,本实施例旨在实现对物理机1中的虚拟机vm1通过热迁移以迁移至物理机2并以虚拟机vm2的形式启动。在本实施例中,图2中虚拟机vm1\vm2被理解为执行热迁移操作前后所对应的虚拟机。
51.步骤s21、提取源端及目标端分别配置的物理硬件所包含的寄存器列表。
52.步骤s22、确定源端及目标端分别配置的物理硬件所包含的寄存器列表中所包含的相同寄存器。具体的,提取源端及目标端分别配置的物理硬件所包含的寄存器列表的操作由纳管源端与目标端的hypervisor执行,hypervisor包括hyper-v、xen、linux os或者exsi。
53.步骤s23、提取并保存源端与目标端所具有的相同寄存器所形成的寄存器值交集。寄存器值交集由源端与目标端所分别具有的寄存器值通过hypervisor执行二进制与操作确定。申请人指出本实施例中的步骤s21~步骤s23的具体实现过程可参比实施例一中的步骤s12~步骤s14所示,在此不再赘述。
54.步骤s24、将寄存器值交集写入虚拟硬件的模拟寄存器,通过虚拟化硬件加速模块(例如qemu-kvm)调用寄存器值交集。前述寄存器值交集写入虚拟硬件的模拟寄存器也通过hypervisor执行。
55.申请人以armv8架构的物理cpu包含的aidr寄存器为例,并示出如下代码,以示出读写虚拟机并模拟aidr寄存器的值,具体如下:
[0056][0057]
由此,在对源端(例如物理机1)已经创建的虚拟机vm1以及目标端(即物理机2)适配虚拟机vm1的寄存器值进行预定义,以满足虚拟机vm1被热迁移至目标端后避免修改异构化场景中aidr寄存器的值,从而使得源端中的虚拟机vm1被执行热迁移至目标端后,不需要执行指令修改,从而确保了热迁移的成功率。因为,在异构化场景中只有对源端与目标端所含的相同寄存器且具有相同的寄存器值才能被已经创建并运行的虚拟机vm所识别,并在被迁移至目标端后被虚拟机vm2所直接调用。此外,将寄存器值交集写入虚拟硬件的模拟寄存器的操作均在虚拟机vm1被执行热迁移操作执行前已经被预定义,从而提高了异构化场景中各个物理机之间互备性与高可用性,并且对目标端不造成代码入侵,确保了云平台的稳定性。
[0058]
步骤s25、在目标端中创建与源端中被执行迁移的虚拟机相同的待迁移虚拟机,将寄存器值交集写入目标端的虚拟硬件的模拟寄存器,通过虚拟机迁移系统将源端中被执行迁移的虚拟机数据迁移并加载至目标端中已经被创建的待迁移虚拟机后,关闭源端中被执行迁移的虚拟机。寄存器值由物理硬件所包含的自定义寄存器、页表寄存器、控制寄存器、状态寄存器、内存访问寄存器或者cache寄存器中的一种或者任意几种寄存器值描述,其中,物理硬件包括物理cpu或者物理gpu。寄存器值还包括表征同时支持源端与目标端所适配的加速指令的位。
[0059]
重新参图2所示,在虚拟机运行阶段中,直接在目标端中创建待迁移的虚拟机vm2,并写入vcpu的模拟寄存器。当hypervisor对虚拟机vm1执行热迁移时,不停止源端中的虚拟机vm1,并直接在目标端中根据已经写入目标端的虚拟硬件的模拟寄存器(例如前述vcpu的模拟寄存器)。然后,为虚拟机vm2配置存储资源、网络资源、计算资源、修改共享目录的权限、修改libvirtd的配置文件、用户名及密码等资源后启动虚拟机vm2。然后,将虚拟机vm1中的数据在物理机1所占用的内存直接拷贝至物理机2的内存中。最后,在虚拟机vm2被拉起并启动后,将源端中的虚拟机vm1停止运行,从而完成整个对源端的虚拟机vm1的热迁移操作。本实施例所揭示的虚拟机的迁移方法可实现异构化场景对虚拟机执行热迁移操作,并确保虚拟机对外提供的业务不发生中断,确保了云平台的高可用性与业务的连续性。
[0060]
实施例三:
[0061]
参图7所示,本实施例揭示了一种计算机可读介质900的一种具体实施方式。计算
机可读介质900中存储有计算机程序指令901,计算机程序指令901被一处理器902读取并运行时,执行如实施例一所述的虚拟机的迁移方法中的步骤。本实施例中的虚拟机的迁移方法与实施例二中具有相同部分的技术方案,请参实施例二所述,在此不再赘述。
[0062]
本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
[0063]
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
[0064]
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1