引言
虚拟机(Viaual Machine。VM)技术常常应用于数据中心、集群计算等场合。该技术让多个操作系统可以运行在同一个物理机器上,并提供了可靠的隔离,大大提高了物理资源的复用性。
随着虚拟机技术的盛行,VMM(Virtual MachineMonitor)的概念也随之推广,VMM是建它在虚拟机和硬件中间的隔离层,它可以有效地协调,分配和管理在虚拟机中运行的客户操作系统。XEN是一种混合模式的VMM,它是准虚拟化技术的代表,这表示,为了调用系统管理程序,要有选择地修改操作系统,而不需要修改操作系统上运行的应用程序。XEN占用资源少,其虚拟机性能与真实机器性能相差3%左右。
虚拟机迁移对于分布式数据中心和集群的负载均衡和灾难恢复有非常重大的意义,Vmware、Intel和微软目前都在进行虚拟机迁移相关的研究。虚拟机动态迁移停机时间很短,可使服务中断最小,从而实现动态负载均衡和服务器在线维护,将成为新的发展趋势。
1 相关工作
Collective项目把VM的迁移当作一种方法,该方法使得在不同时间使用不同位置物理主机的用户得到便利,比如用户在从家里到公司的途中,OS的实例从家里的计算机迁移到公司的计算机上。这个项目是在ADSL慢速连接上进行的,在迁移时停止了OS的执行,并减小映像文件的大小,使得网络带宽占用小、总迁移时间比较快。相对的,本文是在比较快的网络链接环境下,实现了更小的downtime。
Zap是基于修改后的Linux内核的项目,采用了部分的US虚拟化,支持名为pods的进程级虚拟机的迁移,这种进程虚拟机实际上是一组进程的集合。Zap的方法是把进程对内核的接口,如文件句柄、socket,都独立出来并放到一个可迁移的容器中。这种方法比Collective项目的速度快,主要是因为迁移的单位更小,而且Zap的迁移也不支持动态迁移。
NomadBIOS}0是一个基于L4microkernel的虚拟化的迁移系统。NomadBIOS采用了pre-copy迁移来实现尽可能小的downtime。但它没有涉及到工作集的概念。
本文小结了相关工作,采用了预拷贝技术,基于XEN的开源环境,进行了同一个局域网内不同物理机器之间的虚拟机动态迁移的研究。
2 虚拟机动态迁移模型
要实现动态迁移,必须达到以下几点要求。
1)最小中断:迁移时尽量使停机时间最小,因为在停机时间内任何服务都无法执行。
2)一致性:总迁移时间不要太长,因为这段时间内2台机器状态必须同步,可能会影响稳定性。
3)最小干扰:保证迁移不会通过资源争夺来干扰正在活动的服务,如CPU、网络带宽。
4)透明性:迁移过程对用户应该是透明的,在迁移期间,要维持所有的网络连接、应用程序状态。本文将通过预拷贝(pre-copy)方法来实现这个要求。
虚拟机的迁移包括文件系统、内存、网络连接等完整的状态和资源的迁移,这样才能保证迁移后的虚拟机能在新的计算机上恢复且继续运行。其中,文件系统的迁移可以通过网络文件系统NFS的方式解决。XEN已经实现了局域网内的网络连接重定向,通过发送ARP重定向包,将虚拟机的IP地址与目的机器的MAC地址相绑定,之后的所有包就可以发送到目的机器上。内存中数据量大,且内容是动态变化的,因此内存的迁移难度最大,本文将重点介绍内存迁移的部分。
2. 1内存迁移的阶段
一般说来,内存迁移有三个阶段。
1)push阶段。一些页面从源VM通过网络被push到目的机器,而源VM运行不间断,为了保证数据一致性,被修改了的页面需要重传。
2)stop-and-copy阶段。源VM停止,页面被传送到目的VM,然后启动新的VM。
3)pull阶段。新的VM执行,如果访问到没有被拷贝的页面,出现页错误并且从源VM处执行pull得到该页面。
实际的做法是选取三个阶段中的1或2个。纯粹的stopand-copy阶段,虽然实现简单,但是停顿时间、总迁移时间与VM分得的物理内存成正比,性能低下。本文采用了预拷贝迁移方法,由有限次push阶段和stop-and-copy阶段组成。pre-copy的push阶段是分为多次迭代执行的,在第一次传送全部页面,第n次传送的页面是第n一1次中被修改了的页面。每个VM都有一定的页面集合会经常被修改,这些页面不利于pre-copy方法,被称为可写工作集。我们通过分析可写工作集来限制pre-copy的迭代次数。
2.2迁移的步骤
我们把迁移过程视作两个主机之间的事务交互,具体的步骤如下。
1)预迁移。在物理主机A上启动一个VM。预先选好接受迁移VM的目的主机B。
2)预定。从主机A向主机B发起一个迁移请求。我们先确认B上有迁移所必须的资源,并且预定一个适当大小的VM容器。如果B上资源不够,VM继续在A执行。
3)迭代的pre-copy。在第一次迭代中,所有的页面被A传送到B,后来的迭代过程只拷贝前一次传送页面中被修改的页面。我们限制r最大迭代次数,并且对迁移造成的网络负担进行了限制,一旦达到最高限度将停止迭代。
4)stop-and-copy阶段。挂起主机A上运行中的US实例,CPU状态和任何其他的不一致的内存页面被传送。在这阶段,A和B都有VM的挂起的拷贝。A上的拷贝为主,万一失败,将在A上继续执行。
5)提交。主机B通知A,它已经成功收到了一致的US映象,主机A收到这个消息后可以抛弃原来的VM,此时以主机B上的映像为主。
6)激活。已迁移的VM在B上被激活并正常运行。
假定源主机在迁移事务提交前一直稳定,VM在源主机上可以安全的挂起、重启动,这个方法可以保证在迁移过程中任何时候至少一个主机有此VM的映象。这样不管遇到什么错误,都可以在本地恢复。
2.3模型的优化
XEN是准虚拟化的VMM,可以让US感知到真实的和虚拟的环境的区别,这种优点使得迁移时的优化成为可能。我们在迁移前先通知US,并且在以下几个方面改进性能。
1)写错误的限制。pre-copy迁移时最好的情况是,内存页面被复制到目的主机的速度比变脏的速度快。但是实际情况通常相反。在迁移开始时在OS内核中fork一个监控线程,这个监管线程可以监视每个进程的工作集。在每个进程进人等待队列前,给它们加上不得超过40个写错误的限制,这样就可以辖制妨碍到迁移的进程,但是必须保证不会打击到一些重要的交互式服务。
2)释放page cache的页面。在OS中,总会有一些空闲页面,可能是完全空闲的或者在冷却的buffer cache中,迁移开始前,US可以把这些页面中的一些或者全部都交给XEN,这样第一次复制的时间就被减少很多。不过再次需要这些页面的内容时候,就要从磁盘中读了,这样引起更大的开销,需要权衡二者利弊。
3 动态迁移模型的评测
3. 1评测环境
1)硬件环境:实验在两台支持Intel VT-x技术的计算机上进行,这两台机器配置如下:
CPU:Intel Core 2 6320 1 .86 CHZ
内存:1024 MB
磁盘:60 GB
网络连接:100 Mbps以太网
2)软件环境:实验在安装了XEN 3. 1. 0的Fedora7(2. 6. 18)系统上进行。在下面的实验中,若无特殊说明,所有的虚拟机都是分配了6GB的磁盘空间,2个VCPU,通过XEN模拟的RTL8139虚拟网卡借由Domain0连到网络。另外根据不同实验口的,在虚拟机上安装了相应的软件。
3.2评测方案设计
本文把迁移过程中因虚拟机停止运行而造成的服务中断时间称为停机时间,而将虚拟机开始迁移到整个迁移结束的时间称为总迁移时间。实验主要分为动态迁移(live)和静态迁移(non_live)两种迁移方式,live方式采用了pre-copy方法,non_live方式是纯粹的stop-and-copy,故其总迁移时间就是停机时间。
为了测量不同大小内存对虚拟机迁移的影响,分别测试了128MB,256MB,512MB内存下不同虚拟机的迁移情况。另外不同的负载情况一也会影响虚拟机迁移过程,本文设计了CPU密集型、内存密集型、I/0密集型的迁移实验,另外做了一组无负载的迁移实验作为对比。以卜是儿种实验方案的具体设置和实验数据。
1)无负载型。这组实验迁移的是基础系统,在虚拟机中没有安装任何软件。由于是在无负载的情况下进行实验,脏页率比较低,所以迭代次数很少。
表1无负载虚拟化系统的迁移
2)CPU密集型。通过这组实验测量CPU密集的情况对虚拟机迁移的影响。采用的方法是在迁移的同时,编译虚拟机的内核。
在这组实验中,停机时间是无负载情况下的7倍左右,128MB,256MB,512MB情况下分别是静态迁移的停机时间的34.9%,15.9%,8.70%,停机时间随内存的增加有所缩短。由于在编译内核时进行迁移,脏页率较无负载时高,但脏页速度没有超过迁移速度,没有达到迭代终止条件,当达到预设的最大迭代次数(30)时,才进行停机拷贝。
表2 CPU密集型虚拟化系统的迁移
3)I/O密集型。通过这组实验测量I/O密集的情况对虚拟机迁移的影响。使用netperf工具,让控制域Domain0成为server端,虚拟机作为client端,在迁移的同时,虚拟机不断向Domain0发包,从而形成I/O密集型的迁移。
表3 网络I/O密集型虚拟化系统的迁移
在这组实验中,停机时间是无负载情况下的2到3倍左右,128MB,256MB,512MB情况下分别是静态迁移的停机时间的8.88%,3.61%,3.00%,停机时间与内存大小没有明显的关系。由于页速度快,大于迁移速度,因此迁移开始后不久即达到迭代终止条件,迭代次数较少,但略多于内存密集型。
4)内存密集型。通过这组实验测量内存密集的情况对虚拟机迁移的影响。用C语言编写了一个写内存的小程序,在迁移的同时,运行这个程序则自动向虚拟机内存执行写操作,每次写人数据量为虚拟机内存大小的一半,形成内存密集型的迁移。
表4 内存密集型负载虚拟化系统的迁移
表5 不同负载情况的比较
在这组实验中,停机时间是无负载情况下的2倍左右,128MB,256MB,512MB情况下分别是静态迁移的停机时间的7.53%,4.39%,1.96%,停机时间与内存大小没有明显的关系。这种情况脏页率最高,脏页速度远远大于迁移速度,因此迁移开始后不久即达到迭代终止条件,迭代次数非常少,仅比无负载情况略有增加。
3.3评测结果分析
1)不同内存大小。由图1-3可知,内存大小对于迁移时间有明显影响。live方式的迁移,总迁移时间与内存大小基本成正比,然而停机时间与内存大小无关;non_live方式的迁移,停机时间与内存基本成正比。
2)动态和静态迁移。从图1-图3来看,live方式的总迁移时间总是比non_ive方式要长。由表1一表4可知在CPU密集型实验中,live方式总迁移时间是non_live方式的2到3倍,其他几种负载live方式是non_live方式的1.2倍左右。
图1 128MB内存在四种负载情况下的迁移时间
图2 256MB内存在四种负载情况下的迁移时间
图3 512MB内存在四种负载情况下的迁移时间
但live方式的停机时间总是远远小于non_live方式的停机时间,128MB,256MB,512MB的停机时间分别是non_live方式的4.8%,2.1%,1%。
说明live方式比non_live方式总迁移时间稍长但可以忍受,而且被迁移虚拟机的服务中断时间要少很多,可以提高虚拟机在迁移时的可用性。
3)不同负载对迁移时间的影响。从图1一图3可以看出,在内存大小相同的情况下,负载的不同导致总迁移时间和停机时间也不相同。由表1一表4可知,I/O密集和内存密集型的总迁移时间分别为无负载时的1.07倍、1.2倍,而CPU密集型负载是无负载时的2.2倍;I/O密集和内存密集型的停机时间分别为无负载时的2.15倍、1.84倍,而CPU密集型负载是无负载时的7.75倍。说明CPU密集型负载对XEN的动态迁移影响比较大。
4 结语
本文在总结相关工作的基础上,研究了虚拟机动态迁移方法,并设计了4种不同负载下的迁移实验。实验数据表明CPU密集型负载对迁移的影响最大,I/O和内存密集型影响较小。动态迁移方式的停机时间总是远远小于传统静态迁移方式的停机时间,内存越大,静态迁移停机时间越长,但动态迁移停机时间变化不大,说明动态迁移可以显著改善服务性能。本文主要在局域网进行迁移,今后会向广域网迁移发展,为了保持虚拟机的网络连接,需要采用移动IP或者动态DNS等网络重定向技术}SJ;如果在集群中要迁移整个磁盘内容,可以在目的主机上建立一个cow的磁盘镜像,支持块设备迁移。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:虚拟机动态迁移的研究