虚拟机迁移研究

虚拟机迁移研究

国内外对虚拟机迁移的研究主要集中在四个方面:(1)虚拟机内存状态的迁移算法;(2)虚拟机外设的迁移,包括磁盘和网络设备等;(3)虚拟机的放置算法,主要包括虚拟机迁移的3W(when,Which,Where)问题;(4)虚拟机迁移的应用。

1 虚拟机的内存迁移算法

虚拟机迁移有两项重要的性能指标:停机时间(migration downtime )和迁移总时间(也称迁移延迟migrationlatency )。在数据中心采用共享存储(sAN 或NAS) 的设计时,虚拟机内存镜像的迁移策略将对这两项指标起决定性作用。针对不同的应用需求,在这两项指标之间做权衡可以设计出不同的迁移算法:“停止一拷贝( stop 一and 一copy ) ”算法,“预拷贝(pre 一copying ), “后拷贝(post 一copying ) " ,以及“懒惰拷贝(lazy 一copying ) ”算法。

最简单的迁移算法莫过于“停止一拷贝”算法,它在虚拟机迁移时直接停止操作系统的运行,待内存镜像转移完毕后在目标主机端恢复虚拟机的执行。该算法同其它算法相比,在同等网络环境下造成的停机时间最长,但山于拷贝的数据量最少,因此迁移总时间最短。

“预拷贝”算法设计的首要目标在于如何有效降低迁移过程中的系统停机时间,VMware和Xen 等主流虚拟化平台的在线迁移技术都是基于预拷贝算法。这里简要介绍一下xen 实现的预拷贝算法:

(1) 当迁移命令发出后,虚拟机所在的源节点检查目标节点是否拥有足够的资源,如果资源充足则执行预迁移(Pre 一migration )和资源预留过程。

(2) 接着,源节点的虚拟机管理器(vMM )执行预拷贝(pre-copy )过程,预拷贝过程中,源主机将guest VM 的所有页面都发送到目标节点。xen 使用一个Bitmap 即来标示页面传输过程中被修改过的脏页面。在发送页面之前需要先将guestVM的影子页表中相应的脏页位置位。在页传输过程中,guest VM保持继续运行状态。因此,一些已经发送的页面会在虚拟机继续执行中被修改。这些被修改的页面在脏页位图数据结构中自动地设置为脏页,以便在下一轮拷贝中可以被识别。

(3)在每一轮传输之前,XenVMM需要先把记录脏页的Bitmap拷贝一份,然后Bitmap中所有已经被标示为脏页的bit位被清零,以便记录该轮拷贝中产生的脏页。虚拟机所在的源主机反复地发送这些被修改的页面到目的端,直到通过启发式方法确定预拷贝过程对于减小虚拟机迁移停机时间不再有贡献为止。

(4)此时,guest VM需要停止运行,源主机将最后一批修改的页面以及该时刻的VCPU的状态发送扫目标节点,这个过程被称为“停止-拷贝”过程。通过最后的同步,guest VM在目标主机端的状态就和源主机端一致了。

(5)最后,目标主机接收到源主机发送的迁移完成的确认消息之后,就可以放弃源主机上的虚拟机了。目标机器上的虚拟机管理器程序扫描虚拟机的内存映射,重新改写客户操作系统的页表,分配新的内存页表地址。新虚拟机从旧虚拟机的断点处开始恢复执行,并重新启动器虚拟设备驱动程序并更新时钟,迁移结束。

这种内存到内存的同步算法通过多轮迭代来同步源主机和目标主机之间内存的变化数据,使得在迁移的停止一拷贝阶段,目标主机中需要传输的内存脏数据量降低到最小,从而大大减小了虚拟机停机来同步这部分内存数据的网络传输时间,因而可以让用户几乎无法感知到虚拟机的迁移。经测试,预拷贝算法能够在一秒钟之内(根据虚拟机的内存大小不同,迁移时间从60 毫秒到1 秒不等)从一个物理节点迁移到另外一个物理节点,几乎不会影响到用户体验。该算法同其它算法相比可以获得最短的虚拟机停机时间,但由于预拷贝过程需要多轮地重复拷贝内存脏数据,尤其是迁移那些内存密集型的应用时会造成较长时间的迁移延迟。

与“预拷贝”算法相反,“后拷贝”算法首先拷贝的是VCPU 的状态和虚拟机能够恢复运行的最小工作集,然后源主机上的虚拟机停止执行,目标主机上利用这个最小工作集开始运行,此后源主机开始发送尚未拷贝的其它内存页面到目标主机(push 过程),在此过程中,倘若虚拟机执行过程中需要访问的内存页面还没有拷贝到目标主机端,则会造成一个缺页中断,目标主机端的迁移控制程序以同步方式请求源主机立即发送该内存页面(pull 过程)。该算法由于不需要重复拷贝虚拟机的内存页面数据,因此迁移总时间最短并且需要传输的数据量最少,但由于停机时需要拷贝相对较大的虚拟机工作集,因而虚拟机的停机时间将很长,同时由于迁移过程中可能造成的大量远程内存访问会影响程序执行的效率,造成较大的性能损失。

比“后拷贝”算法更加极端的是“懒惰拷贝”算法,该算法思想和“后拷贝”相似,都是先传输虚拟机的最小工作集到目标主机端恢复执行,不同的是,该算法不主动发送剩余的大量内存数据,而是在虚拟机运行过程中每发生一次缺页中断后才一会把内存页面拷贝到目标主机端。由于这种按需请求内存的方式严重影响了虚拟机恢复执行后的性能,同时造成对源主机长时间的遗留依赖,迁移完成总时间很难估计,该算法几乎不会被运用到实际的系统中。

综上所述,这几种算法在量化指标不同时都互有优劣,针对不同的应用场景,可以通过启发式的策略选择不同的算法。但是,在实际系统(VMware , Xen , KVM 等)中应用的算法目前只有“预拷贝”算法,“后拷贝”算法将来可能会被Xen 虚拟化平台采用。然而,由于“预拷贝”和“后拷贝”算法都是基于内存同步机制的,因此在迁移内存密集型应用时普遍存在同步效率不高,虚拟机性能损耗较大的问题。

2 虚拟机的外设迁移

    虚拟机外设资源的迁移是完成虚拟机迁移的一个重要方面,包括虚拟机文件系统的迁移以及网络设备的重定向,是消除对源主机的遗留依赖关系、保证虚拟机迁移的透明性和迁移后运行性能的关键技术。

    (1)文件系统的迁移

针对虚拟机的外存迁移问题,有些研究机构研究了在分布式环境下如何进行虚拟机迁移的问题。此时,虚拟机迁移不需要保证程序的在线运行,而需要保存一个检查点状态,但是需要对存储系统(文件系统)进行迁移。网络挂起/恢复ISR系统是由CMU开发的,通过在分布式存储器上安装虚拟机,IsR 系统可以让虚拟机封装用户的操作状态,把每个用户的计算环境状态收集成一组文件称之为parcel,然后通过分布式存储器可以在不同的时空重现用户执行环境。用户可以有很多parcel ,就像他们可以有很多套带有操作系统或者应用程序的机器一样,并把这些pareel 保存在集中的网络服务器中,使用一个大规模的分布式文件系统来存储所有的parcel。在任何一个有ISR 系统安装的客户机上,可以从分布式存储系统取得挂起的parcel ,并恢复挂起时刻的状态,完全保留了用户最后一次的工作状态。斯坦福大学的collective项目研究人员研究了如何使用写时复制( copy-on-write )技术通过增量机制传送一个虚拟机的镜像。在传输虚拟机镜像的时候,使用哈希函数来判断重复的数据块,仅发送不相同的数据块;若虚拟机在运行过程中,则仅需要传输所需要的数据块,而无需一次就传输整个虚拟机所需要的大型系统文件,并且使用内存排除的策略尽量减少所需要发送的物理内存的容量,从而达到通过慢速的网络迁移一个完整虚拟机的目的。这两个典型系统都是通过“冷迁移”方式迁移完整的虚拟机,包括CPU ,内存,外存,以及设备状态。完整虚拟机的迁移使得使用者能够通过虚拟机的封装特性在任何地点都可以保持虚拟桌面运行环境的一致性。但是,由于存储系统涉及到的数据量巨大,当前一个典型的台式机硬盘可能达到数百个GB 的容量,如果对于所有的文件都要进行网络传输,往往会花费大量的时间和网络流量,并且这种外存迁移的方式主要基于“停止一拷贝”模式,虚拟机需要中断很长时间。

然而,在某些情况下,使用网络文件系统可以回避文件系统迁移的问题。例如,当前数据中心一般会采用网络存储系统(Network 一Attached Storage )或存储区域网络( storage Aiea Network ) ,这样集群中所有的主机都可以一致地访问网络文件系统。在这样的情况下,虚拟机迁移就不用考虑文件系统迁移的问题。但是,并非所有的虚拟机都通过网络文件系统来访问外存数据,某些系统仍然存在着本地存储。这种情形下,完成虚拟机的在线迁移还必须迁移本地的外存数据。有人提出了在数据块级别的写追踪机制,并通过预拷贝算法来增量地同步虚拟机的镜像数据,从而可以在局域网环境下对使用本地磁盘的虚拟机实现透明的迁移。为了实现在广域网环境下的虚拟机迁移,提出了在数据块级别的预拷贝算法以及写操作扼杀的机制来迁移虚拟机的镜像文件,并且通过动态DNS 及IP 隧道机制来保持网络连接。刘诗海等提出了一种面向可扩展集群环境的虚拟机磁盘镜像的迁移方法,通过在分布式文件系统GlusterFS 中增加Heartbeat 监测模块来实时监测集群环境中物理机节点的加入与退出,并动态创建或修改GlusterFS 文件系统的配置文件,实现了动态挂(卸)载集群环境中物理机节点的功能,达到了实时更新文件存储的拓扑结构的目的,在保证迁移性能和文件可靠性的同时提高了系统的扩展能力。

(2)网络设备的迁移

对于网络I/O来说,迁移时最重要的挑战是保持网络连接不受影响。当虚拟机在局域网和广域网迁移时,网络连接的保持策略是不同的。即使在局域网中的网络迁移上,不同的虚拟机管理器也采取了不同的方案,例如Xen 的迁移方式与VMware 的迁移方式在细节上就稍有不同。

Xen 的网络连接是使用ARP 协议来实现的,将IP 地址可以直接定向到新的物理机器中。由迁移虚拟机的主机主动发送ARP 回答信号,广播IP 地址被转移到新的机器上,这样其它机器的发送包将直接发送到新的物理地址。也有些路由器出于安全的考虑设置成不广播A 即回答信号,以免IP 地址被欺骗,所以主动发送ARP 回答信号的方法不能在所有场合都能使用。若操作系统知道自己将被迁移,则它可以向其ARP高速缓冲区中所列的接口有针对性地发送回答信号,不需要广播。

VMware 虚拟机的VMotion 机制则通过虚拟机提供的虚拟网卡(VNIC )来保证网络连接的保持。在迁移的过程中,虚拟网卡与虚拟机一同迁移,就可以维持唯一的物理层地址来完成网络连接的迁移。虚拟网卡是虚拟平台的一部分,每一个虚拟网卡都有一个用来在局域网络中作为唯一标识的MAC 地址。每个虚拟网卡与一个或者多个物理网卡(NIC )关联,多个虚拟机中的虚拟网卜也可以与同一个物理网卡相连。由于虚拟网卡拥有与物理网卡的MAC 地址不相关的MAC 地址,虚拟机可以在运行过程中保持网络连接不中断的条件下从一台机器迁移到另外一台机器上。但由于以太网的相关限制,能这样做的前提是源机器和目标机器在同一个子网中。

如果虚拟机迁移在不同的局域网之间进行,则迁移之后虚拟机需要配置新的IP地址,即广域网中的网络连接会中断。为了保持网络连接,可以采用IP隧道和动态DNS结合的方法。在虚拟机内存和磁盘迁移结束后,虚拟机对源机器的依赖关系消除之前的时刻,在源机器的IP 地址和目标机器的IP 地址之间建立IP隧道,用来转发原有的网络数据。在网络重定向过程中到达旧IP 地址的数据包将通过隧道被转发到目标机器。一旦迁移结束,虚拟机可以对新网络做出响应,此时动态DNS 己经更新,网络连接指向虚拟机的新IP 地址。

对于普通网卡,虚拟机管理器可以通过虚拟出多个网卡以分时复用的模式来实现共享,这样,虚拟机的I/O操作都必须通过管理域(domain 0 )来中转数据,因而虚拟化I/O很可能成为性能的瓶颈。然而,对于拥有高速智能网络设备(如Infiniband ) 的高性能计算机系统,虚拟机可以通过操作系统旁路(OS-byPass )的模式直接访问智能网络设备,而不是像普通网卡那样需要通过管理域的支持。在这种情况下,虚拟机迁移过程中外围设各的重定向将变得困难,scarpazza 等研究了基于分割的全局地址空间(PGAS )编程模型的应用在使用hifiniband 设备时的虚拟机迁移机制,实现了在Xen 的内核模块上透明支持用户态Infiniband 协议以及对Infiniband 之上的IP 协议的支持。威斯康辛麦迪逊大学采用影子设备驱动机制来解决存在直接设备访问的虚拟机迁移问题,影子驱动运行在客户操作系统中以捕获真实网络设备的状态,并在迁移目的地生成与目的主机网络设备匹配的设备驱动,并终止影子驱动的运行。Huang 等研究了通过高速网络infiniband 来实现远程直接内存访问(RDMA ) ,从而避免了迁移过程中内存的拷贝和同步问题。
3 虚拟机放置算法

虚拟机迁移时放置算法的设计与应用场景是密切相关的,例如,针对数据中心负载均衡和节能的不同需求,虚拟机迁移的触发条件是截然相反的。但归根结底,放置算法设计的核心可以归结为Www ( when , which ,where )问题,即什么时候把哪一个虚拟机迁移到哪一台物理机器上。对于迁移时机(即when )的问题,主要在于根据虚拟机在线迁移是应用于负载均衡还是节能的不同场景,充分考虑物理服务器的资源利用率情况来设计虚拟机迁移的触发条件。而对于迁移目的地的选择(即where)可以抽象为经典的装箱问题,服务器可以表示为箱子,而虚拟机可以表示为不同大小的球。装箱问题是一个NP 难问题,在数据中心规模比较大时求解最优解的开销是异常巨大的。这类问题主要有三种求解算法:首次适配( First-Fit Decreasing ) ,最优适配(Best-Fit )和最差适配(Worst-Fit )。sandpiper 系统为了实现虚拟机集群的负载均衡,总是利用启发式信息把负载最重的虚拟机放置到负载最轻的物理机上。verma 等提出了能耗和代价可感知的pMapper 模型来指导虚拟机在迁移时的放置。在决定虚拟机迁移的新位置时,pMapper 采用首次适配(FFD )算法来决定虚拟机的放置位置,并月.迁移后期望的性能提升和迁移的代价在该模型中都有考虑。但是,迁移的代价主要是通过应用程序的性能退化(如吞吐率下降)和服务水平协议下降来量化的。这种基于黑盒模型的迁移代价预测方法只能通过离线学习的方式来实现,因而在事先不知道虚拟机中运行的负载的情况下,是无法通过在线的方式预测出迁移的代价的,应用范围受到很大限制。对于迁移的候选对象的选择(即which )问题,目前针对性的研究还不是很多。多数情况下都是在迁移触发后先确定了迁移那一个虚拟机,然后再考虑迁移的目的地。由于运行不同类型负载的虚拟机之间存在的性能干扰问题,这可以作为迁移对象选择的一个评判准则。例如,实现负载均衡时可以把存在性能干扰问题的一个虚拟机迁移到一个不存在性能干扰或者干扰最小的物理机上。本文将从虚拟机迁移的代价出发来解决which 的问题,通过预测迁移性能和能耗,优化虚拟机迁移的决策算法,从而来选取迁移代价最小的虚拟机。

4 虚拟机迁移的应用

虚拟机在线迁移技术的应用主要体现在三个方面:负载均衡、能耗管理以及系统容错,目前这些应用研究正方兴未艾。

负载均衡是虚拟机迁移的主要应用场景之一。Choi 等提出了一种自动学习的方法来自动调整虚拟机动态迁移触发条件的参数闭值,从而利用最优数量的虚拟机迁移达到最佳的资源利用率。Wood等基于虚拟机迁移技术提出了利用灰盒及黑盒机制来自动地减少虚拟集群中的热点,他们实现了一种热点监测算法来决定何时迁移虚拟机,并利用贪婪算法来决定把虚拟机迁移到何处以及分配多少资源给迁移后的虚拟机。

利用虚拟机的迁移来实现节能是当前迁移应用的一个热点。Hu 等提出了物理集群中基于虚拟机环境的任务迁移节能管理机制,通过构建多环网络拓扑,把不同负载的结点纳入不同环中进行管理,通过任务迁移实现聚合承载,从而关闭空闲结点,达到节能目标。PADD是Lim 等人提出的一种在虚拟化环境下利用虚拟机整合机制来节能的策略。它通过动态迁移虚拟机并把它们聚合到更少的物理服务器上从而实现节能,但在设计虚拟机放置算法时主要考虑的是避免服务水平协议(SLA ) 的下降,而没有考虑虚拟机迁移阶段造成的性能损失以及能耗。

对于利用虚拟机迁移进行容错,Nagarajan 和Mueller 等人基于虚拟化软件xen 实现了一种自动、透明的主动容错系统,允许进程自动地从“不健康”节点透明地迁移到健康节点。该系统可以适用于任何MPI 应用程序,并在虚拟机迁移时实现了节点之间的负载平衡机制。VMWare 结合虚拟机迁移和回放技术提供了其虚拟机容错技术,帮助最普通的虚拟机拥有了容错能力,即所谓的“持续可用”( Contimious Avallability )的特点。持续可用是在“记录与回放”这个想法之上实现的,它取代原来在一个文件上存储执行操作这一过程,而是将它们传送到第二台虚拟机上。也就是当第一台虚拟机无法工作时,第二台虚拟机就会马上接管,并且没有任何损失。基于虚拟机在线迁移的容错技术,可以在对上层软件完全透明的情况下,实现硬件资源动态负载均衡,保证软件在硬件设备升级、维护、失效时都能不间断地运行,从而提高软件的可用性和可靠性。RemuS 系统是英属哥伦比亚大学开发的基于虚拟机迁移的高可靠容错系统。和VMware 实现的容错机制类似,通过不间断的异步复制主虚拟机和备份虚拟机之间状态,从而保证了提供服务的主虚拟机在发生故障时,备份机可以立刻接管服务,实现了应用的持续可用性和系统的高可靠性。

综上所述,这些针一对虚拟机迁移的应用主要研究的都是虚拟机迁移的时机及位置选择这两个方面的问题,而对于虚拟机迁移的性能代价及能耗问题则考虑的较少。然而,虚拟机负载的多样性使得迁移的代价存在巨大的差异性,研究虚拟机迁移的性能预测模型对于虚拟机放置算法有重要的指导意义。


你可能感兴趣的:(虚拟机与虚拟化)