基于QEMU-KVM的VM迁移仿真系统*
2023-01-06刘丰年
刘丰年
(1.河南科技大学应用工程学院 三门峡 472000)(2.三门峡职业技术学院 三门峡 472000)
1 引言
近年来,云计算技术[1~4]的高速发展为人们带来了巨大的便利。其中,由于能够构建更为快速的内存数据库以及进行更为高效实时的大数据分析,具有大量内存的虚拟机(Virtual Machine,VM)技术更是在云计算框架中获得了广泛的应用。然而,当需要进行较大内存VM资源迁移时,往往需要事先找到具有足够可用内存的目标主机。此外,由于具有大内存量的主机价格高昂,私有云无法承担这笔费用,即便在公共云中,总是保留许多大型主机用以对数据中心(Data Center,DC)进行大规模维护也不经济。
目前,几类主流的VM迁移算法包括:
1)早期的纯粹VM迁移算法[5~6]:该类算法出现较早,几乎不涉及人工智能的相关算法,且通常以能源节约为主要指标;
2)涉及人工智能思想的VM迁移算法:引入粒子群算法[7~8]、蚁群算法、贪心算法[9~10]、遗传算法[11]等进行VM资源的分配与迁移,该类算法相对第1)类算法性能上有了很大的提升;
3)依托Cloudsim平台[12]进行的VM迁移算法:该类算法将VM迁移过程划分为物理主机状态检测、VM选择以及VM放置三个阶段,综合考虑了VM迁移过程中涉及的多个因素,综合衡量VM迁移环境,并对VM选择与VM放置过程进行优化,最终得出VM迁移方案。
除了将VM进行整体迁移外,还有一些学者提出对VM进行拆分迁移[13],即将一个大内存VM划分为若干个小规模的VM片段,并将其传输到多个较小的主机,即一个主主机与一个或多个子主机。该类思想将VM中诸如CPU等核心状态信息传输到主主机,并将未来可能访问的VM资源传输到主主机,而将其余的内存传输到子主机。完成拆分迁移后,VM资源可以在主主机和子主机间执行远程分页实现跨主机运行。然而,如果采用传统的迁移机制对VM资源进行迁移,即使仅维护部分主机也需要将整个VM进行迁移。不仅如此,频繁的远程分页也会导致迁移性能的大幅降低。为此,本文设计了一种基于当下流行的Quick Emulator[14]和Kernel Virtual Machine[15](QEMU-KVM)技术的VM迁移仿真系统。该系统涉及replace,merge和divide三种迁移过程。其中,replace迁移负责将主主机或子主机中的VM资源片段传输到一台新主机,并仅替换运行拆分内存VM主机中的一台主机;merge迁移负责将VM主机中的VM片段合并迁移并传输到一台主机,从而完成VM资源的整合,有效避免了之后的远程分页操作;divide迁移是在当目标主机内存空间有限且需要进行replace迁移时,先将VM片段进行划分为若干子片段,再执行replace迁移操作。仿真实验表明,相比传统迁移方式,本文设计的系统具有更低的迁移时间开销。
2 VM资源迁移
VM资源迁移是指在不停止VM运行的前提下将正在一台主机上运行的VM资源迁移到另一台主机,采用VM迁移技术可以在不中断服务的情况下对运行VM资源的主机进行维护。此外,还可以通过对VM资源进行拆解实现负载均衡,也可以将VM资源进行整合实现节能。具体的VM资源迁移过程如下:首先,在目标主机上创建新VM;其次,将目标VM的内存传输到新VM,并重新传输在VM迁移期间更新的内存;再次,传输剩余的更新内存和诸如CPU信息的核心状态;最后,在目标主机上运行新VM。需要注意的是目标主机的可用内存资源应大于要迁移的VM内存大小。图1给出了VM资源迁移示意图,其中,首先将VM内存划分为若干个VM片段;然后,将源主机的核心状态信息以及若干个内存片段M1,M2,…,Mn传输到若干主机,其中保存有核心状态信息的主机为主主机,而包含有部分VM片段信息的主机称为子主机。显然,VM资源的内存采用了分布式存储方式,当主主机需要子主机中的内存片段时,主主机和子主机之间将通过执行远程分页来加以实现。当VM核心需要存在于子主机中的内存时,该内存将从子主机分页到主主机,而在交换过程中,最不可能访问的内存将从主主机置换到子主机。由于可能访问的内存在迁移时已经提前传输到主主机,从而有效降低了远程分页的频率。
图1 VM资源迁移示意图
需要说明的是,当工作集小于主主机中的内存量时,VM性能等价于执行资源迁移前的性能;当工作集大于主主机中的内存量时,则会不可避免地发生频繁的远程分页,导致执行性能的下降。此外,当需要维护某台主机时,始终必须事先将该台主机上的VM资源迁移到其他主机,相应地又衍生出两种情况,若被迁移的主机能够完全容纳迁移进入的资源量,则必须暂时作为普通VM资源运行从而避免远程分页;若被迁移的主机无法完全容纳迁移进入的资源量,则还需要再次对资源进行划分和迁移。然而,传统迁移方式通常采用片段内存资源的整体迁移,且当需要维护部分主机时,其他主机中的VM片段也必须传输到目标主机,这种机制效率低下,严重制约了VM资源的性能提升。不仅如此,传统迁移方式还会导致许多从子主机到主主机的page in操作,主主机的性能大幅降低。
3 本文系统
3.1 系统框架
为了在一定程度上缓解当前VM资源迁移中面临的突出问题,本文基于当下流行的QEMU-KVM技术,设计了一种基于QEMU-KVM的VM迁移仿真系统。其中,主主机需要维护四张表,包括分页表、子主机表、分页标记表、位置信息表。分页表管理从页帧号到主机标识符的映射,子主机表管理从主主机标识符到子主机网络信息及IP地址信息的映射;分页标记表用于记录当前是否发生了page in或page out远程分页操作,若发生page in或page out则进行标识,并对其他page in或page out请求“上锁”;位置信息表用于记录从页帧号到指向页中包含的内存数据的指针的映射。不同于主主机的是,子主机仅需要维护三张表即分页表、远程分页标记表和位置信息表。本文设计的基于QEMU-KVM的VM迁移仿真系统架构如图2所示。
不同于传统的VM资源迁移方式,本文设计的系统将源主机中运行的VM片段的一部分或全部迁移到目标主机,具体包括replace,merge和divide三种迁移过程。
3.2 replace迁移
replace是一种部分迁移过程,具体包含主主机replace和子主机replace两种情况。主主机replace迁移过程是指将自身包含的核心状态信息和VM片段传输给目标主机,该主机将成为目标主主机,不同于传统迁移方式,源子主机的VM片段不进行迁移。因此,迁移完毕后,目标主主机将与源子主机进行远程分页;子主机replace迁移过程是指将自身包含的VM片段传输给目标主机,该目标主机将成为目标子主机,不同于传统迁移方式,源主主机包含的核心状态信息和VM片段并不进行迁移。因此,迁移完毕后,源主主机将与目标子主机进行远程分页。显然,当仅需要对部分主机进行维护时,只需要将对应主机的资源进行迁移即可,而其他相关主机则无需进行资源迁移,大大提升了迁移效率。需要说明的是:
1)在源主主机replace迁移期间,若源主主机发生了page in操作,且page in操作获取的内存片段尚未传输或更新后尚未传输,为了保证内存的一致性,本文设计的系统会将该内存片段传输到目标主主机;若源主主机发生了page out操作,且该内存片段已被传输到目标主主机,则本文设计的系统将目标主主机中的对应内存片段置为无效。具体操作为:在源主主机上,采用QEMU-KVM技术先行将源主主机中的内存片段传输到目标主机,并在其中的位置信息表中进行记录,而对于源子主机中的内存片段,仅将所在网络信息及IP地址发送给目标主机。若源主主机在replace迁移中发生了page in或page out操作,则采用QEMU-KVM选择是否进行重传并更新目标主机的位置信息表。待源主主机完成远程分页操作后,再将核心状态信息传输给目标主机,并将该目标主机作为目标主主机。此后,迁移之后,源子主机将会与目标主主机之间执行远程分页。
2)在源子主机replace迁移期间,本文设计的系统也将执行与源主主机replace迁移相似的操作。然而,不同于源主主机replace迁移,源子主机replace迁移不会将VM核心状态信息传输到目标主机。采用QEMU-KVM技术将该源子主机中存在的内存片段传输到目标子主机,并在位置信息表进行记录。若在源子主机在replace迁移中发生了page in或page out操作,则采用与源主主机replace迁移相似的操作,源主主机更新子主机网络信息及IP地址信息,并建立源主主机与目标子主机之间的远程分页信息。
3.3 merge迁移
merge迁移过程负责将多个不同主机上的VM片段进行传输与整合,并置于一台主机中,具体包含两种情况。当对源主主机和源子主机进行merge迁移时,源主主机中的核心状态信息和VM片段以及源子主机中的VM片段均被传输到一台新的目标主主机或一台源主机。当仅针对源子主机进行merge迁移时,源子主机中的VM片段将被传输到一台新的目标子主机或一台源子主机。显然,由于对原有的VM资源信息进行了有效合并,存放这些资源的主机数量将会减少,相应的远程分页开销也会随之降低。本文设计的系统支持多个主机内存片段的并行传输,并将整个VM内存最终保持到一台目标主机上。本质上,merge迁移可看作源主主机的replace迁移与所有源子主机的replace迁移的并行传输。本文设计的系统通过在目标主机上使用多块网卡,并为每块网卡创建一个路由表,并根据分配给网卡的网络信息及IP地址信息添加路由表规则,采用QEMU-KVM技术将源主主机和源子主机中的核心状态信息和内存片段传输到目标主机,并在其中的位置信息表中进行记录,从而实现从源主主机和源子主机的内存片段并行传输。
3.4 divide迁移
divide迁移过程负责将一台主机中的VM片段进行进一步划分,生成尺寸更小的VM子片段。具体包括两种情况。当对源主主机进行divide迁移时,源主主机中的VM片段被分解为若干个子片段,其中一个VM子片段和核心状态信息仍保存在源主主机,而其他VM子片段将会被迁移至新主机;或者将VM子片段和核心状态信息迁移至新主机,此时该源主主机将不再是主主机。当对源子主机进行divide迁移时,所有VM子片段会迁移至新主机或源子主机中仅保留一个子片段。显然,当在进行replace迁移时,若目标主机内存空间有限,则可以采取divide机制先进行VM片段划分,再执行迁移操作。
4 实验结果与分析
为了验证本文所设计的VM迁移仿真系统的有效性,本节进行了一系列性能仿真实验。有两点需要说明:1)为了便于比较,本节中涉及的传统迁移方法为经典的一对一迁移模式;2)由于divide迁移本质上仍属于replace迁移,因此在本节的仿真实验中不再进行额外讨论。本文涉及到的仿真实验的运行环境为Ubuntu 16.04和QEMU-KVM 2.4,选用的主主机配置为Intel Xeon E5-2678 v3CPU和64GB内存。此外,还选用了四台子主机,其中两台子主机的配置为Intel Core i7-10700CPU和64GB内存,另两台子主机的配置为Intel Xeon E5-2678 v2CPU和32GB内存。本文实验构建一个具有一块虚拟CPU和内存量在4GB-24GB区间范围内变化的VM,并将VM内存进行平均划分到2~5台主机。
4.1 replace迁移实验
为了验证本文系统的replace迁移性能,本节首先对主主机的迁移时间和replace迁移中的停机时间进行测量。跨多主机的主主机replace迁移时间结果图如图3所示。与传统迁移方式相比,本文系统对于跨2~5台主机的VM迁移时间分别减少至前者的约50%,33%,25%以及20%。出现这种结果的原因在于本节对VM中的内存资源进行了平均划分,且迁移时间大致与传输的内存量成正比。因此,随着传输内存量的不断变大,所需要消耗的时间也随之出现增加。子主机replace迁移时间结果图如图4所示。不难发现,子主机replace迁移时间与主主机的情况是类似的。
图3 主主机replace迁移时间
图4 子主机replace迁移时间
4.2 merge迁移实验
与replace迁移仿真实验类似,本节针对merge迁移性能的主机迁移时间也进行了测量。图5给出了merge迁移时间结果图。显然,与传统迁移方式相比,本文系统对于跨2~5台主机的VM迁移时间分别减少至前者的约50%,33%,25%以及20%,但同replace迁移相比,merge迁移所消耗的时间有所提升,这是因为merge迁移机制相比前者更为复杂。
图5 merge迁移时间
综上所述,本文设计的基于QEMU-KVM的VM迁移仿真系统相比传统迁移模式具有较为显著的优势,预期在云计算框架中将具有较好的应用前景。
5 结语
本文基于当下流行的QEMU和KVM技术,设计了一种基于QEMU-KVM的VM迁移仿真系统,该系统在主主机中维护了包括分页表、子主机表、分页标记表、位置信息表在内的四张表,且在子主机中维护了包括分页表、分页标记表、位置信息表在内的三张表,并对replace迁移、merge迁移以及divide迁移三种迁移方式进行了详细设计。仿真实验结果表明,本文设计的VM迁移仿真系统相比传统的VM资源迁移模式具有更低的时间开销,能够有效降低主主机与子主机间的page in/page out远程分页开销,预期将有较好的应用前景。如何进一步提升迁移效率将成为课题组下一步工作的核心内容。