
1.本发明涉及虚拟机技术领域,具体涉及虚拟机的数据迁移方法、装置、电子设备及存储介质。
背景技术:2.在虚拟化领域,随着使用需求增多,客户机变得越来越大,即单个虚拟机的虚拟处理器(vcpu)和随机访问存储器(ram)越来越多,同时还需要客户机正常运行不间断,因此,虚拟机动态迁移技术作为一种重要的运维和管理手段被越来越广泛地应用。
3.动态迁移就是在客户机仍在运行的情况下,将一个客户虚拟机从一个宿主机迁移到另一个宿主机上,在此期间虚拟机维持正常工作,用户不会意识到迁移动作的发生。在线迁移会涉及到很多变量:虚拟机内存脏页产生、网络带宽、网络延迟和存储可用性等。
4.在动态迁移时,如果脏页的产生速率过快,甚至超过迁移网络的带宽,动态迁移将会一直处于进行中而无法完成。在不改变当前系统资源的情况下,现有技术中在动态迁移时会降低虚拟机中所有vcpu的运行速度,从而减少脏页的产生,直到最终完成动态迁移。由于对虚拟机中的所有vcpu进行限速,导致虚拟机上的所有业务几乎都无法使用,且可能在此情况下也难以完成动态迁移。
技术实现要素:5.有鉴于此,本发明实施例提供了虚拟机的数据迁移方法、装置、电子设备及存储介质,以解决虚拟机动态迁移时迁移成功率不高以及虚拟机上业务可用性不高的问题。
6.根据第一方面,本发明实施例提供了一种虚拟机的数据迁移方法,所述方法包括:
7.获取目标业务,并将所述目标业务与指定虚拟处理器绑定,所述指定虚拟处理器在虚拟机中;
8.响应于数据迁移指令,控制虚拟机进行数据迁移;
9.在所述虚拟机进行数据迁移时,对所述指定虚拟处理器的运行速度进行限制,当所述运行速度到达预设速度,将第一步长调整为第二步长,所述预设速度是基于第一步长对所述运行速度进行限制得到的,所述第二步长小于所述第一步长;
10.基于所述第二步长对所述运行速度进行限制,以完成所述数据迁移。
11.本发明实施例提供的虚拟机的数据迁移方法,将目标业务与指定虚拟处理器进行绑定,在数据迁移需要进行限速时,只对指定虚拟处理器的运行速度进行限制,且当虚拟处理器的运行速度到达预设速度时,可以将第一步长调整为第二步长,第二步长小于第一步长,且无需对虚拟机中的所有虚拟处理器进行限速,提高了限速的精度,并提升了虚拟机进行数据迁移的成功率。
12.结合第一方面,在一种实施方式中,所述获取目标业务,并将所述目标业务与指定虚拟处理器绑定,包括:
13.获取虚拟机上的业务的内存使用量,并判断所述业务的内存使用量是否超过指定
内存阈值;
14.当所述内存使用量超过所述指定内存阈值,确定所述业务为目标业务,将所述目标业务与指定虚拟处理器绑定。
15.结合第一方面,在一种实施方式中,所述将所述目标业务与指定虚拟处理器绑定,包括:
16.当所述目标业务启动时,响应于对所述业务的绑定指令,将所述目标业务与所述指定虚拟处理器绑定。
17.结合第一方面,在一种实施方式中,所述将所述目标业务与指定虚拟处理器绑定,包括:
18.当所述目标业务启动后,响应于对所述业务的进程查询指令,确定所述业务对应的进程;
19.响应于对所述进程的绑定指令,将所述进程与所述指定虚拟处理器绑定。
20.结合第一方面,在一种实施方式中,所述对所述指定虚拟处理器的运行速度进行限制,当所述运行速度到达预设速度,将第一步长调整为第二步长,包括:
21.获取所述虚拟机在数据迁移过程中的脏页数量,并根据所述脏页数量判断是否需要限制所述虚拟机的运行速度;
22.当需要限制所述虚拟机的运行速度,响应于速度限制指令,基于第一步长对所述指定虚拟处理器的运行速度进行限制;
23.当所述指定虚拟处理器的运行速度到达预设速度,将所述第一步长调整为所述第二步长,所述第二步长小于所述第一步长。
24.结合第一方面,在一种实施方式中,所述获取所述虚拟机在数据迁移过程中的脏页数量,并根据所述脏页数量判断是否需要限制所述虚拟机的运行速度,包括:
25.获取所述虚拟机在数据迁移过程中的脏页数量以及已迁移的数据量,将所述脏页数量与所述已迁移的数据量进行比较,得到比较结果;
26.根据所述比较结果判断是否需要限制所述虚拟机的运行速度。
27.结合第一方面,在一种实施方式中,所述基于所述第二步长对所述运行速度进行限制,以完成所述数据迁移,包括:
28.当所述指定虚拟处理器的运行速度到达预设速度,基于所述第二步长对所述运行速度进行限制;
29.基于所述限制后的运行速度进行数据迁移,并获取待迁移数据量;
30.将所述待迁移数据量与数据迁移阈值进行比较,当所述待迁移数据量小于所述数据迁移阈值,停止对所述运行速度的限制,以完成所述数据迁移。
31.根据第二方面,本发明实施例提供了一种虚拟机的数据迁移装置,包括:
32.业务绑定模块,用于获取目标业务,并将所述目标业务与指定虚拟处理器绑定,所述指定虚拟处理器在虚拟机中;
33.数据迁移模块,用于响应于数据迁移指令,控制虚拟机进行数据迁移;
34.第一限速模块,用于在所述虚拟机进行数据迁移时,对所述指定虚拟处理器的运行速度进行限制,当所述运行速度到达预设速度,将第一步长调整为第二步长,所述预设速度是基于第一步长对所述运行速度进行限制得到的,所述第二步长小于所述第一步长;
35.第二限速模块,用于基于所述第二步长对所述运行速度进行限制,以完成所述数据迁移。
36.根据第三方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的虚拟机的数据迁移方法。
37.根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的虚拟机的数据迁移方法。
附图说明
38.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1是根据本发明实施例的虚拟机的数据迁移方法的流程图;
40.图2是根据本发明实施例的绑定目标业务的流程图;
41.图3是根据本发明实施例的步长调整方法的流程图;
42.图4是根据本发明实施例的限速方法的流程图;
43.图5是根据本发明实施例的数据迁移的流程图;
44.图6是根据本发明实施例的限速判断流程图;
45.图7是根据本发明实施例的虚拟机的数据迁移装置的结构框图;
46.图8是本发明实施例提供的电子设备的硬件结构示意图;
47.图9是根据本发明实施例的fio 4k随机读写测试结果图;
48.图10是根据本发明实施例的ping测试结果图;
49.图11是根据本发明实施例的迁移结果检查图;
50.图12是根据本发明实施例的unixbench测试结果图;
51.图13是fio 4k随机读写测试结果图;
52.图14是ping测试结果图;
53.图15是迁移结果检查图;
54.图16是unixbench测试结果图。
具体实施方式
55.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
56.根据本发明实施例,提供了一种虚拟机的数据迁移方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,
虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
57.在本实施例中提供了一种虚拟机的数据迁移方法,可用于如手机、平板电脑、电脑等终端,图1是根据本发明实施例的虚拟机的数据迁移方法的流程图,如图1所示,该流程包括如下步骤:
58.s11,获取目标业务,并将目标业务与指定虚拟处理器绑定。
59.虚拟机中可以存在多个虚拟处理器,不同的虚拟处理器可以执行不同的业务。将在执行过程中占用较大内存的内存密集型业务作为目标业务,例如通过linux中的命令判断业务的内存是否最多或者内存占用超过设定阈值,业务的内存占用量越大,产生的脏页越多。指定虚拟处理器在虚拟机中,指定虚拟处理器可以是编号为设定编号的虚拟处理器,指定方式不作限制。将目标业务绑定到指定虚拟处理器集合中,例如将目标业务与编号为偶数的虚拟处理器绑定。也就是说,若虚拟机上存在写内存很频繁的业务,那么这些业务就在指定虚拟处理器集合中的某个处理器上运行。
60.s12,响应于数据迁移指令,控制虚拟机进行数据迁移。
61.虚拟机的动态迁移包括两个阶段,初始化阶段和迁移阶段,在初始化阶段,对虚拟机动态迁移过程中要使用的对象和状态进行初始化,随后开始迁移阶段,数据迁移指令可以是执行动态迁移函数。在每轮迁移开始会统计待迁移数据量,待迁移数据量即剩余数据量,若剩余数据量小于设定的数据量,那么可以准备暂停虚拟机不再产生脏页,将剩余数据发送到目的端,即可完成数据迁移。若剩余数据量不小于设定的数据量,说明即使暂停虚拟机也无法在规定时间内将剩余数据迁移到目的端,则需要启动下一轮的迁移。
62.在统计剩余数据量时,需要从内核kvm(kernel-based virtual machine,基于内核的虚拟机)中获取上一轮数据迁移结束到本轮数据迁移结束期间产生的所有内存脏页,检查脏页数量是否大于设定阈值,设定阈值可以是本轮已迁移数据量的50%,具体占比以及设定阈值的大小不做限定。该过程即检查迁移是否收敛,也就是能否按照当前虚拟机的运行速度完成数据的迁移,若不能则开启下一轮的数据迁移过程,在每一轮数据迁移结束后会获取该过程中产生的所有脏页数量,并判断迁移是否收敛。可以设定若连续两轮都不收敛,则说明需要对脏页数量进行限制,否则无法完成数据迁移,也可以依据具体情况设定需要限制脏页数量的条件,在此不做限定。
63.s13,在虚拟机进行数据迁移时,对指定虚拟处理器的运行速度进行限制,当运行速度到达预设速度,将第一步长调整为第二步长。
64.基于s12,当需要对脏页数量进行限制,则需要通过限制虚拟机的运行速度进行限制,从而使之产生更少的脏页。在虚拟机执行的业务中,内存使用很少的业务不会产生大量脏页,由于已将内存密集型业务作为目标业务与指定虚拟处理器进行绑定,在限制虚拟机的运行速度时,具体可以对指定虚拟处理器进行速度的限制,即精准限制对脏页产生贡献较大的虚拟处理器上,而占用内存较少的业务所在虚拟处理器的速度无需受限。
65.在限速时,基于第一步长对指定虚拟处理器的运行速度进行限制,并进行数据迁移,当迁移未完成进入下一轮迁移并对虚拟处理器的运行速度进行限制时,基于上一轮的运行速度和第一步长进行限速,直至运行速度变为预设速度,即预设速度是基于第一步长对运行速度进行限制得到的,为了提高限速的精度,可以将第一步长调整为第二步长,且可
以设置第二步长小于第一步长。
66.s14,基于第二步长对运行速度进行限制,以完成数据迁移。
67.以将目标业务与编号为偶数的虚拟处理器绑定为例,在进行限速时,可以仅对编号为偶数的虚拟处理器进行限速,若编号为奇数则跳过不作限制。若在第一次对指定虚拟处理器进行限速时,虚拟处理器的运行速度为100kb/s,第一步长为10%,初始限速20%,那么运行速度变为80kb/s,在第二轮限速时,运行速度变为70kb/s,即限速30%。设定预设速度为运行速度100kb/s的1%,即限速99%,当运行速度变为预设速度时,设定第二步长为0.1%,直至限速99.5%。
68.在每一轮限速后,可以对待迁移的数据量进行判断,若待迁移数据量小于设定的数据量,则无需进行新一轮的数据迁移,在本轮即可完成数据迁移。
69.本发明实施例提供的虚拟机的数据迁移方法,将目标业务与指定虚拟处理器进行绑定,在数据迁移需要进行限速时,只对指定虚拟处理器的运行速度进行限制,且当虚拟处理器的运行速度到达预设速度时,可以将第一步长调整为第二步长,第二步长小于第一步长,且无需对虚拟机中的所有虚拟处理器进行限速,提高限速的精度从而降低迁移过程中对虚拟机内业务的整体影响,并提升了虚拟机进行数据迁移的成功率。
70.在本实施例中提供了绑定目标业务的方法,对应于图1中的s11,图2是根据本发明实施例的绑定目标业务的流程图,如图2所示,包括如下步骤:
71.s21,获取虚拟机上的业务的内存使用量,并判断业务的内存使用量是否超过指定内存阈值。
72.s22,当内存使用量超过指定内存阈值,确定业务为目标业务,将目标业务与指定虚拟处理器绑定。
73.在虚拟机上部署业务时,可以通过编写脚本调用工具,例如linux中的ps(process status)命令,根据算法判断业务是否为目标业务。具体地,可以通过获取虚拟机中各业务的内存使用量,将内存使用量与预先设定的指定内存阈值进行比较,当内存使用量超过指定内存阈值,则将该业务归为目标业务。也可以是将所有业务中占用内存最大的业务作为目标业务。目标业务的设定是为了筛选出占用内存,目标业务作为内存密集型业务,在工作时会产生较多脏页,而内存使用很少的业务,即使写内存较频繁,也不会产生太多内存脏页。
74.将目标业务绑定到指定虚拟处理器集合中,指定虚拟处理器可依据具体情况进行设定,例如可以设定编号为偶数的虚拟处理器为指定虚拟处理器。相当于是,如何虚拟机上存在写内存很频繁的应用,那么就一定在这些被绑定的指定虚拟处理器上,这样在进行限速时,可精准限制对内存脏页产生贡献大的虚拟处理器上,还可以将占用内存较小、产生较少内存的业务调度到未被限速的虚拟处理器上,因此工作进程不会受到影响,降低了虚拟机在动态迁移并对虚拟处理器降速时对虚拟机中业务的影响。
75.在一种实施方式中,将目标业务与指定虚拟处理器绑定,包括:当目标业务启动时,响应于对业务的绑定指令,将目标业务与指定虚拟处理器绑定。
76.对目标业务与指定虚拟处理器进行绑定的方法可以为:在目标业务启动时将其与指定虚拟处理器绑定,例如可以通过“taskset-c0./hello”将名为“hello”的目标业务绑定到编号为“0”的虚拟处理器上。
77.在一种实施方式中,将目标业务与指定虚拟处理器绑定,包括:当目标业务启动后,响应于对业务的进程查询指令,确定业务对应的进程;响应于对进程的绑定指令,将进程与指定虚拟处理器绑定。
78.对目标业务与指定虚拟处理器进行绑定的方法还可以为:在目标业务启动后动态绑定虚拟处理器,进程查询指令可以是linux中的内核命令,通过进程查询指令查询目标业务对应的进程,然后通过绑定指令对目标业务的进程与指定虚拟处理器中的指定内核进行绑定。具体地,可以通过内核命令ps查询目标业务对应的进程,然后通过taskset命令对进程进行处理器亲和性绑定,例如“taskset-p3 pid”表示将进程pid绑定到指定虚拟处理器中的第3个内核上。
79.在本实施例中提供了步长调整方法,对应于图1中的s13,图3是根据本发明实施例的流程图,如图3所示,包括如下步骤:
80.s31,获取虚拟机在数据迁移过程中的脏页数量,并根据脏页数量判断是否需要限制虚拟机的运行速度。
81.具体地,包括:
82.(1)获取虚拟机在数据迁移过程中的脏页数量以及已迁移的数据量,将脏页数量与已迁移的数据量进行比较,得到比较结果。
83.(2)根据比较结果判断是否需要限制虚拟机的运行速度。
84.在进行数据迁移时,需要根据待迁移的数据量是否超过设定的数据量来判断能否在规定时间内完成数据迁移,若不能,则需要启动下一轮的数据迁移。在统计待迁移数据量时,需要从内核kvm(kernel-based virtual machine,基于内核的虚拟机)中获取上一轮数据迁移结束到本轮数据迁移结束期间产生的所有内存脏页,检查脏页数量是否大于设定阈值,设定阈值可以是本轮已迁移数据量的50%,具体占比以及设定阈值的大小不做限定。该过程即检查迁移是否收敛,也就是能否按照当前虚拟机的运行速度完成数据的迁移,若不能则开启下一轮的数据迁移过程,在每一轮数据迁移结束后会获取该过程中产生的所有脏页数量,并判断迁移是否收敛。可以设定若连续两轮都不收敛,则说明需要对脏页数量进行限制,否则无法完成数据迁移,也可以依据具体情况设定需要限制脏页数量的条件,在此不做限定。
85.s32,当需要限制虚拟机的运行速度,响应于速度限制指令,基于第一步长对指定虚拟处理器的运行速度进行限制。
86.当脏页产生量达到设定条件,即会触发速度限制指令,基于设置的对指定虚拟处理器限速条件,对指定虚拟处理器的运行速度进行限制。
87.例如:以将目标业务与编号为偶数的虚拟处理器绑定为例,在进行限速时,可以仅对编号为偶数的虚拟处理器进行限速。可以设定脏页产生量大于本轮已迁移数据量的50%,且连续两轮数据迁移中都大于本轮已迁移数据量的50%的情况下需要进行限制虚拟机的运行速度。当达到该限速条件时,对虚拟处理器的运行速度进行限制,具体地,可以设定初始限速20%,第一步长设置为10%,当虚拟处理器的运行速度为100kb/s,经过限速运行速度变为80kb/s,在第二轮限速时,运行速度变为70kb/s,即限速30%。
88.s33,当指定虚拟处理器的运行速度到达预设速度,将第一步长调整为第二步长。
89.设定预设速度为运行速度100kb/s的1%,此时限速99%,当运行速度变为预设速
度时,设定第二步长为0.1%,直至限速99.5%。第二步长小于第一步长,具体第一步长和第二步长的数值设定可以依据具体情况进行调整。
90.每一次限速后,按照限速后的运行速度继续进行数据迁移,若待迁移数据量超过设定的数据量,则进行下一轮的数据迁移,在下一轮限速中增大限速,直至在调整为第二步长且限速达到99.5%。这样做的目的是为了提高限速的精度,使得那些在限速到99%时仍迁移不完的场景能迁移成功,提高迁移的成功率。
91.在一种实施方式中,如图4所示,图1中的s14包括以下步骤:
92.s41,当指定虚拟处理器的运行速度到达预设速度,基于第二步长对运行速度进行限制。
93.具体请参见s33,在此不再赘述。
94.s42,基于限制后的运行速度进行数据迁移,并获取待迁移数据量。
95.每一次限速后,按照限速后的运行速度继续进行数据迁移,并在每一轮数据迁移开始前获取待迁移的数据量。
96.s43,将待迁移数据量与数据迁移阈值进行比较,当待迁移数据量小于数据迁移阈值,停止对运行速度的限制,以完成数据迁移。
97.数据迁移阈值即设定数据量,将待迁移数据量与数据迁移阈值进行比较,若待迁移数据量小于数据迁移阈值,则表示可以在本轮完成数据迁移,无需再进行限速操作。若待迁移数据量不小于数据迁移阈值,则需要开启新一轮的数据迁移。
98.本技术提供的虚拟机数据迁移方法,只对指定虚拟处理器进行速度限制,即对产生大量脏页的虚拟处理器限速,而不是虚拟机中的所有虚拟处理器,可以避免产生脏页很少、写内存速率很低的业务在数据迁移时被无差别限速。因此,在为了保证数据迁移成功而对虚拟机进行限速时,只限制了部分虚拟处理器,产生脏页很少、写内存速率很低的业务可以被调度到未被限速的虚拟处理器上,保证了虚拟机中的部分业务是可以正常运行的,提升了在数据迁移时虚拟机中操作系统应用以及部分业务的可用性,避免出现因降速导致虚拟机在迁移时短暂不可用的情形。而在限速到预设速度仍无法完成数据迁移时,可以通过调整步长的方式提高限速,进一步提升了数据迁移的成功率。
99.在一种具体实施方式中,本技术提供的虚拟机的数据迁移方法可以用在qemu-kvm虚拟机动态迁移中的auto converge功能。auto converge的工作流程如图5所示,在迁移过程(migration_thread)中包括setup(初始化)阶段和迁移迭代阶段。在setup阶段主要完成一些准备动作初始化迁移过程中要使用的对象和状态。在迁移迭代阶段主要完成数据迁移,执行迁移迭代循环函数(migration_iteration_runloop),计算虚拟机当前迁移状态(qeum_savevm_state_pending),例如计算剩余需要传输的内存数据量,即待迁移数据量,计算虚拟内存迁移状态(ram_save_pending),在获取待迁移数据量时,需要从内核kvm同步内存脏页,并判断是否开启auto converge功能,若未开启,则根据判断剩下的数据量是否小于门限来确定是否需要开启新一轮的数据迁移或是可以在本轮完成数据迁移。若开启了auto converge功能,则对脏页数量进行判断,若在两轮数据迁移过程中脏页数量大于已迁移的数据量的50%,则需要对虚拟机进行限速。
100.请参见图6,图6为限速判断流程图,经过同步内存脏页位图(migration_bitmap_sync)、全局内存同步脏页(memory_global_dirty_log_sync,即从内核kvm同步内存脏页)
以及ram内存脏页同步(ramblock_sync_dirty_bitmap)等步骤,判断两次同步内存脏页的间隔是否大于1秒,若为否,则无需限速,若是,则通过migration_trigger_throttle函数判断是否需要触发限速,判断脏页产生量是否超过当前门限两次,若为否,则无需限速,若为是,则进行虚拟机的数据迁移限速(mig_throttle_guest_down),设置处理器(cpu)的限速百分比(cpu_throttle_set)以及设置限速时间(throttle_timer)10毫秒后超时。当处理器限速超时执行函数(cpu_throttle_timer_tick),遍历所有的虚拟处理器分别其异步限速任务(cpu_throttle_thread),预先将目标业务与编号为偶数的虚拟处理器进行了绑定,因此在这里在遍历所有虚拟处理器后,判断当前虚拟处理器的编号是否为偶数,若不是偶数,则无需进行限速,若是偶数,则通过睡眠或linux指令halt让出处理器减少虚拟机中的虚拟处理器的执行,从而达到限速的目的。如图5所示,设定初始限速为20%,第一步长为10%,当达到限速99%后,调整为第二步长0.1%,直到最大限速99.5%。本实施例中,无需修改libvirt(虚拟化管理软件)和内核代码,仅需修改qemu少量代码以及在部署客户业务时修改内存密集型业务的启动参数加入绑核参数即可。
101.将基于本技术实施例提供的虚拟机的数据迁移方法优化前后的虚拟机动态迁移的效果进行对比,通过测试迁移过程中对业务的影响大小和数据迁移的成功率验证本技术方法的可行性以及优化效果,具体如下:
102.验证环境:物理机cpu32核192g内存;测试虚拟机32核32g内存;操作系统均为centos 7.6。
103.测试前准备:内存加压,压力程序stress在部署启动的时候已经被绑定在序号为偶数的核上,该程序将通过16个cpu每秒总共写16g的内存,迁移时限定迁移网速为千兆网卡速率,构造迁移带宽有限的场景。
104.基于本技术方案的迁移过程测试流程:
105.(1)在虚拟机内部通过tmux(terminal multiplexer,终端复用器)启动unixbench测试。
106.(2)在宿主机上ping虚拟机ip测试ping包延时。
107.(3)开始动态迁移虚拟机。
108.(4)查询虚拟机迁移进度,当限速达到99.5%,开始fio随机读写测试并获取结果,开始获取这一段时间里面ping测试结果。fio 4k随机读写测试结果如图9所示,ping测试结果如图10所示。
109.(5)检查动态迁移是否完成,以及迁移总耗时,如图11所示,迁移成功,用时约55分钟。
110.(6)在虚拟机内部获取到unixbench的测试结果,如图12所示。
111.未基于本技术方案的迁移过程测试流程:
112.(1)在虚拟机内部通过tmux启动unixbench测试。
113.(2)在宿主机上ping虚拟机ip测试ping包延时。
114.(3)开始动态迁移虚拟机。
115.(4)查询虚拟机迁移进度,当限速达到99%,开始fio随机读写测试并获取结果,开始获取这一段时间里面ping测试结果。fio 4k随机读写测试结果如图13所示,ping测试结果如图14所示。
116.(5)检查动态迁移是否完成,以及迁移总耗时,如图15所示,迁移12小时后已限速到99%,总共运行了258轮,迁移还未收敛,继续迁移中。
117.(6)在虚拟机内部获取到unixbench的测试结果,如图16所示。
118.本技术方案与未基于本技术方案的迁移过程测试对比结果如下:
[0119][0120]
从测试对比结果可以看出,本技术方案在虚拟机数据迁移过程中业务的可用性以及迁移成功率都有显著提高。在本实施例中还提供了一种虚拟机的数据迁移装置,该装置用于实现上述实施例及实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0121]
本实施例提供一种虚拟机的数据迁移装置,如图7所示,包括:
[0122]
业务绑定模块,用于获取目标业务,并将目标业务与指定虚拟处理器绑定,指定虚拟处理器在虚拟机中;
[0123]
数据迁移模块,用于响应于数据迁移指令,控制虚拟机进行数据迁移;
[0124]
第一限速模块,用于在虚拟机进行数据迁移时,对指定虚拟处理器的运行速度进行限制,当运行速度到达预设速度,将第一步长调整为第二步长,预设速度是基于第一步长对运行速度进行限制得到的,第二步长小于第一步长;
[0125]
第二限速模块,用于基于第二步长对运行速度进行限制,以完成数据迁移。
[0126]
在一种实施方式中,业务绑定模块还包括:
[0127]
业务获取子单元,用于获取虚拟机上的业务的内存使用量,并判断业务的内存使用量是否超过指定内存阈值;
[0128]
业务绑定子单元,用于当内存使用量超过指定内存阈值,确定业务为目标业务,将目标业务与指定虚拟处理器绑定。
[0129]
在一种实施方式中,业务绑定子单元还用于当目标业务启动时,响应于对业务的绑定指令,将目标业务与指定虚拟处理器绑定。
[0130]
在一种实施方式中,业务绑定子单元还用于当目标业务启动后,响应于对业务的进程查询指令,确定业务对应的进程;响应于对进程的绑定指令,将进程与指定虚拟处理器绑定。
[0131]
在一种实施方式中,第一限速模块包括:
[0132]
限速判断子单元,用于获取虚拟机在数据迁移过程中的脏页数量,并根据脏页数量判断是否需要限制虚拟机的运行速度;
[0133]
第一限速子单元,用于当需要限制虚拟机的运行速度,响应于速度限制指令,基于第一步长对指定虚拟处理器的运行速度进行限制;
[0134]
步长调整子单元,用于当指定虚拟处理器的运行速度到达预设速度,将第一步长调整为第二步长,第二步长小于所述第一步长。
[0135]
在一种实施方式中,限速判断子单元还用于:
[0136]
获取虚拟机在数据迁移过程中的脏页数量以及已迁移的数据量,将脏页数量与已迁移的数据量进行比较,得到比较结果;
[0137]
根据比较结果判断是否需要限制虚拟机的运行速度。
[0138]
在一种实施方式中,第二限速模块包括:
[0139]
第二限速子单元,用于当指定虚拟处理器的运行速度到达预设速度,基于第二步长对运行速度进行限制;
[0140]
数据迁移子单元,用于基于限制后的运行速度进行数据迁移,并获取待迁移数据量;
[0141]
比较子单元,用于将待迁移数据量与数据迁移阈值进行比较,当待迁移数据量小于数据迁移阈值,停止对运行速度的限制,以完成数据迁移。
[0142]
本实施例中的虚拟机的数据迁移装置是以功能单元的形式来呈现,这里的单元是指asic电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
[0143]
上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
[0144]
本发明实施例还提供一种电子设备,具有上述图7所示的虚拟机的数据迁移装置。
[0145]
请参阅图8,图8是本发明可选实施例提供的一种电子设备的结构示意图,如图8所示,该电子设备可以包括:至少一个处理器601,例如cpu(central processing unit,中央处理器),至少一个通信接口603,存储器604,至少一个通信总线602。其中,通信总线602用于实现这些组件之间的连接通信。其中,通信接口603可以包括显示屏(display)、键盘(keyboard),可选通信接口603还可以包括标准的有线接口、无线接口。存储器604可以是高速ram存储器(random access memory,易挥发性随机存取存储器),也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器604可选的还可以是至少一个位于远离前述处理器601的存储装置。其中处理器601可以结合图7所描述的装置,存储器604中存储应用程序,且处理器601调用存储器604中存储的程序代码,以用于执行上述任一方法步骤。
[0146]
其中,通信总线602可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。通信总线602可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0147]
其中,存储器604可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:ram);存储器也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:hdd)或固态硬盘(英文:solid-state drive,缩写:ssd);存储器604还可以包括上述种类的存储器的组合。
[0148]
其中,处理器601可以是中央处理器(英文:central processing unit,缩写:cpu),网络处理器(英文:network processor,缩写:np)或者cpu和np的组合。
[0149]
其中,处理器601还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,缩写:asic),可编程逻辑器件(英文:
programmable logic device,缩写:pld)或其组合。上述pld可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:cpld),现场可编程逻辑门阵列(英文:field-programmable gate array,缩写:fpga),通用阵列逻辑(英文:generic array logic,缩写:gal)或其任意组合。
[0150]
可选地,存储器604还用于存储程序指令。处理器601可以调用程序指令,实现如本技术实施例中所示的虚拟机的数据迁移方法。
[0151]
本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的虚拟机的数据迁移方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
[0152]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。