廖国龙,王晋明(四川大学计算机学院,成都610000)
虚拟机动态迁移技术及优化研究
廖国龙,王晋明
(四川大学计算机学院,成都610000)
近年来,为了满足用户多变而复杂的服务需求,云计算作为一种更加灵活的、高扩展性的计算模式得到了广泛的应用。云计算旨在让用户通过互联网就可以得到快速、安全、真实的计算服务。目前,云计算平台都采用虚拟化技术来整合硬件资源,降低计算机硬件体系结构和软件系统服务之间的耦合度,解决计算环境对硬件平台的依赖,更加高效地利用硬件资源,提供灵活多变的使用环境。而其中虚拟机的迁移在平台的负载均衡、高可用、资源管理方面都起着至关重要的作用。
虚拟机迁移是把虚拟机从一台物理机器迁移到另一台物理机器上,并在目的物理机恢复虚拟机的运行,分为静态迁移和动态迁移两种[1]。静态迁移要求在迁移的过程中暂停虚拟机的服务,主要面对没有实时性要求的应用,实现难度不大。动态迁移能够在迁移时为用户提供不间断的服务,具有更广阔的应用场景。本文将阐述动态迁移技术的实现及相关优化策略。
虚拟机的动态迁移需要在不干涉虚拟机上服务运行的基础上,把虚拟机在内存状态、存储信息、网络连接状态等方面的数据迁移到目的节点,并保证迁移前后充分的一致性。通常把动态迁移分成三个部分:网络迁移、存储迁移、内存迁移。
目前,绝大部分动态迁移都是指局域网里的虚拟机迁移,而局域网内部实质上是通过MAC地址来标记机器的。所以,网络迁移常见的方法是通过局域网内部的ARP重定向,把待迁移虚拟机的IP地址绑定到目的机器上来实现[2]。而存储迁移的通常解决方案是把虚拟机的存储挂到独立的共享存储系统中。例如,OpenStack平台通过把虚拟机的存储外挂到NFS共享存储,livemigration的过程中就只需要迁移内存和网络状态就可以了。
而内存迁移部分需要考虑到虚拟机上应用的状态、平台的带宽分配和CPU负荷对其他服务的影响等因素,涉及的数据量偏大,同时还要保证内存一致性的原则,最为复杂。所以如何提高内存迁移的效率是影响动态迁移性能的最重要因素。
一般来说,内存迁移分为三个阶段[3]:
(1)push阶段:拷贝源虚拟机的内存页面到目的虚拟机,在此过程中源虚拟机运行服务不中断;
(2)stop-and-copy阶段:挂起源虚拟机,启动目的虚拟机,并由目的虚拟机提供对外服务;
(3)pull阶段:目的虚拟机运行服务的过程中,如果出现内存页面与源虚拟机不一致的情况,发出页面请求,获取正确内存页面。
针对内存迁移的三个阶段的不同特性,能否做出的相应优化优化,是衡量一个内存迁移算法优劣的基本思路。例如,在stop-and-copy阶段会进行停机拷贝,因而让虚拟机产生一个宕机时间,在这个时间段内,虚拟机和I/O设备之间处于断开状态,势必会造成虚拟机服务质量下降。故而宕机时间就成为衡量迁移性能的重要指标之一。此外,内存迁移时占用的网络带宽和对系统CPU的占有率也是影响动态迁移的重要因素。
目前主流的内存迁移解决方案有4种:预拷贝方法(pre-copy)、后拷贝方法(post-copy)、混合拷贝方法和日志回放方法。
预拷贝算法是当前主流的内存动态迁移算法,它在push阶段先拷贝源虚拟机所有的内存页面到目的虚拟机保存,并记录在这个过程中产生变化的内存页面(脏页面),然后仅拷贝脏页面到目的虚拟机,并记录新的脏页面表,通过这样迭代拷贝的方式逐步更新目的虚拟机的内存状态,即第n轮迭代中只拷贝第n-1次迭代后发生变化的内存页面[4]。当脏页面的数量小于预定值时,就进入stop-and-copy阶段,然后启动目的虚拟机。预拷贝算法在push阶段的迭代使得脏页面足够小,使得stop-and-copy时停机时间极短,对虚拟机的应用服务影响非常小。
然而,虚拟机的动态迁移要求运行在虚拟机上的服务持续运行,这就导致虚拟机内存的任何页面都有成为脏页面的可能。特别是对于运行I/O频繁服务的虚拟机,脏页面的反复重传会很大的增加迭代拷贝次数和降低平台网络的吞吐量。当出现虚拟机脏页面的产生速率大于迭代页面的拷贝速率的情况下,理论上就会进行无限迭代的过程。同时,push阶段迭代拷贝过程中,大量的数据传输导致较高的网络开销,降低了虚拟机的网络服务性能。
针对这个问题,通常有两种解决方案:
(1)增加迭代退出条件。当迭代次数达到设定的上限值时,提前进入stop-and-copy阶段。但这样会极大地增加停机时间,使虚拟机上运行的服务产生中断;
(2)通过硬件控制等方法限定进程对内存的写次数。通过限定内存写次数,极大地降低了脏页面的产生率,降低迭代拷贝次数。但这样会对虚拟机上运行的原生服务产生影响,降低本身的服务性能。
2.1基于分层拷贝的优化方法
分层拷贝算法是在脏页面预测算法的基础上的优化。脏页面预测算法是一种基于内存局部性原理的附带简单的预测功能的预拷贝算法,其在源虚拟机中维护了两张脏页面位图previous_dirty和present_dirty,分别记录在上一次迭代和本次迭代过程中发生变化的内存页面。每轮迭代结束后,下次迭代拷贝哪些脏页面由对应的previous_dirty和present_dirty比特位共同决定。它的判定规则如下:
(1)当previous_dirty和present_dirty都为0时,表示内存页在最近两次迭代中都没有被修改,不属于脏页面,不需要拷贝到目的虚拟机;
(2)当previous_dirty=1且present_dirty=0时,表示内存页在前一次迭代中被修改而此次迭代没有变化,表示该内存页已经修改结束,将在下次迭代中拷贝,并令previous_dirty清零;
(3)当previous_dirty=0且present_dirty=1时,表示内存页只在此次迭代中被修改,那么下次迭代时可能继续被修改,因此不会立即拷贝,并在下次迭代前令previous_dirty为1且present_dirty为0;
(4)当previous_dirty和present_dirty都为1时,表示内存页在最近两次迭代中都被修改,属于频繁修改的脏页面,将于最后一次迭代时拷贝。
脏页面预测算法的缺点在于只把最近两次迭代作为预测依据,当内存访问出现类似乒乓模型(即内存页面每隔1个迭代写入一次)时,并不能改善脏页面反复迭代拷贝的情况。
分层拷贝算法相对应脏预测算法增加了算法对于内存的检测时间,更加全面的检测一段时间内的内存状态,并在这基础上平衡掉某些页面在一小段时间内的异常活跃所带来的判定误差,记录内存页近段时间被访问的频率,分成不同的层次,并在push阶段中一直维护,被修改的内存页向高层次移动,长时间未被修改的内存页向低层次移动,而在迭代时,按从低到高的层次拷贝。通过这种方式降低内存页面重复拷贝率,减少迭代时间,提高迁移性能。
2.2基于内存压缩的优化方法
内存压缩算法在虚拟机的系统层次中逻辑加入了内存压缩层[5]。把在push过程中标记为即将迭代的内存页都先放入内存压缩层,用压缩算法压缩成更小的块封装起来,迁移到目的虚拟机的压缩层,再解压并调入内存使用。迁移过程中压缩技术的引入可以有效地提高迁移性能和缓解对网络带宽的负载。一方面,压缩要拷贝传输的内存页,相当于变相地增加了源虚拟机和目的虚拟机之间的网络带宽,提高内存页的传输速率;另一方面,由于待传输的数据量减小,降低了平台网络流量,减少拥塞发生的频率。
该算法的缺点是内存页压缩时对CPU等物理资源的额外开销会对虚拟机服务性能产生影响,因此选择一个适合高效的压缩算法至关重要。在MECOM算法中,通过识别内存页面的类型,针对不同的内存页面采用不同的压缩方法,进一步提高了迁移性能。
2.3基于带宽分配的优化方法
目前主流平台在内存迁移过程中,都采取的是默认带宽分配的方法。默认带宽分配方法采用的策略是:在push阶段的每次迭代拷贝的过程中,先把待传输的内存页面放入系统内部缓存,待缓存容量充满后,传输到机器物理网卡,由物理网卡选择发送时机。在实际使用过程中,遇到物理带宽占有率高的情况时,会导致大量需要传输的内存页面在物理网卡处拥塞,降低整个平台的网络性能,从而影响虚拟机服务的稳定性。
基于带宽分配的优化方法会在整个迁移的过程中检测平台的网络状态。在push阶段,记录每轮迭代将要传输的内存页,在根据实时的网络状态,按需分配网络带宽给传输服务,以降低对虚拟机原生服务的影响。而在stop-and-copy阶段,因为虚拟机处于宕机状态,在保证平台网络通信基本带宽的基础上,分配给传输服务最大剩余带宽,极大地提高最后一次迭代拷贝的效率,减少宕机时间。
后拷贝算法没有push阶段,在迁移开始的时候挂起源虚拟机,然后仅将源虚拟机的CPU状态拷贝到目的虚拟机,再在目的虚拟机上启动服务[6]。当目的虚拟机调用内存的时候,产生缺页异常,向源虚拟机发出缺页请求,直到获取所有的内存页面。
后拷贝算法所有内存页面都只需要通过一次传输,避免了脏页面的频繁重复拷贝,降低了平台网络带宽的负载,在总迁移时间上优于预拷贝算法。但同时后拷贝算法对源虚拟机的依赖较强,在目的虚拟机运行服务期间如果遇到频繁的缺页请求,I/O等待时间过长,对虚拟机上服务的性能影响较大。
基于主动推送的优化方法
为了降低目的虚拟机对源虚拟机的依赖,源虚拟机除了响应目的虚拟机的请求页要求以外,主动传输内存页面,减少pull阶段的时间。主动推送通常与请求页预测同时应用与后拷贝技术中。请求页预测方法会记录短时间内收到的请求页要求,根据请求页在内存中的逻辑位置和内存的空间局部性原理,推测接下来请求页的访问位置,优先推送访问率高的内存页面,使得目的虚拟机上发生缺页的频率降低,缓解后拷贝算法对服务性能的影响。
预拷贝算法是针对push和stop-and-copy阶段的解决方案,而后拷贝算法是针对stop-and-copy和pull阶段的解决方案,两种方案都没有囊括完内存迁移的整个过程。因此,混合拷贝算法应运而生,它的迁移流程为:
(1)在push阶段,由源虚拟机提供服务,进行一次预拷贝,传输源虚拟机的所有内存页面到目的虚拟机,并创建脏页面位图记录这个过程中发生修改的内存页;
(2)在stop-and-copy阶段,挂起源虚拟机,传输脏页面位图到目的虚拟机并启动服务;
(3)在pull阶段,类似后拷贝的缺页请求策略,当系统访问脏页面位图中标记为真的内存页时,从源虚拟机获取正确的内存页。
混合拷贝算法相对与预拷贝而言,没有迭代拷贝脏页面的过程,除了脏页面会拷贝两次以外,其它内存页都只会进行一次拷贝,减少了数据流量和对网络的负荷;相对于后拷贝,push阶段的内存页传输使得目的虚拟机刚运行时已经有了本地工作集,极大地降低了缺页异常的发生。
与之前介绍的方法不同,日志回放算法并不是旨在提高内存页面在迁移过程中的拷贝传输性能,而是采用日志来代替内存页面进行传输。该算法中,源虚拟机要记录可能影响系统内存状态的事件,生成可执行追踪的日志文件,用日志文件代替内存页面进行传输。目的虚拟机收到日志文件后,执行日志中记录的事件,回放源虚拟机的操作过程,达到与源虚拟机一致的内存状态。和预拷贝类似,目的虚拟机在日志回放的过程中,源虚拟机会根据内存的改变不断生成新的日志文件。在经过有限次的日志迭代拷贝后,挂起源虚拟机,一次性传输剩余的日志文件到目的虚拟机回放,回放完成后启动目的虚拟机。
相对与内存页面,日志具有的数据量小的特点,因此在动态迁移时的拷贝速率和网络传输效率上有着天然的优势,也只需要占用更少的虚拟机网络带宽,有利于优化整个平台的网络环境。
随着局域网动态迁移技术的日益成熟,广域网的动态迁移开始受到人们的关注。广域网动态迁移相比与局域网最大的区别在于,源虚拟机和目的虚拟机处于不同的网段。而不同网段之间网络的高延迟、低性能的特点,使得共享存储不是存储迁移的一个较为好的解决方案。所以,如何实现在较为恶劣的广域网环境下,迁移高数据容量的虚拟机存储成为我们要攻克的下一个技术难题。
[1]马飞,刘峰,李竹伊.云计算环境下虚拟机快速实时迁移方法[J].北京邮电大学学报,2012,35(001):103-106.
[2]Park,Kim.Virtual Machine Migration in Self-managing Virtualized Server Environments[C].Dublin:Proceedings of the 11th International Conference on Advanced Communication Technology,2009.
[3]Krishnan.VM Power Metering:Feasibility and Challenges[C].New York:Proceedings of the Second Green Metrics Workshop,2010.
[4]江雪.基于Xen虚拟机的动态迁移技术研究[J].上海:上海交通大学计算机应用专业,2009.
[5]高翔.基于Xen的虚拟机动态迁移算法优化[D].哈尔滨:哈尔滨工业大学,2010.
[6]杨正宏.云计算技术指南:应用、平台与架构[M].北京:化学工业出版社,2010.
Cloud Computing;Virtualization;Live Migration;Optization
Live Migration of Virtual Machine and Optimization Research
LIAO Guo-long,WANG Jing-ming
(College of Computer Science,Sichuan University,Chengdu 610065)
Abstarct:
As a new computing mode,cloud computing gets the attention of more and more widely with a flexible service feature.Virtualization technology is the solution for integration of cloud computing platform hardware resources,of which the virtual machine live migration technology plays a key role.Summarizes the mainstream of the virtual machine live migration solution,researches the algorithm and implementation mechanism,and gives a comprehensive analysis of the advantages and disadvantages of each algorithm,finally expounds the typical optimization scheme.
1007-1423(2016)05-0041-04
10.3969/j.issn.1007-1423.2016.05.009
廖国龙(1991-),男,四川南充人,硕士研究生,研究方向为网络与信息安全
2016-01-05
2016-02-15
云计算作为一种新型的计算模式,灵活多变的服务特性使其得到越来越广泛的关注。虚拟化技术是云计算平台整合硬件资源的解决方案,而其中的虚拟机动态迁移技术起着重中之重的作用。综述现今主流的虚拟机动态迁移解决方案,对其算法思想和实现机制进行研究介绍,并较为全面分析各算法的利弊,最后阐述比较典型的优化方案。
云计算;虚拟化;动态迁移;优化
王晋明(1990-),男,四川成都人,硕士研究生,研究方向为网络与信息安全