文献[1]采用按需取页策略,首先迁移虚拟机的内存数据和CPU 状态,在迁移过程中,磁盘读写在源节点上进行。当虚拟机在目的主机上恢复运行后,根据读写磁盘的请求,从源节点按需取数据块,并在目的节点缓存。当所有需要的块均被缓存后,在目的节点上即可实现磁盘的本地操作。
图1.总体结构图(左)和按需获取机制(右)
如图1 左所示,整个磁盘迁移机制由两部分完成,在源主机和目的主机分别部署一个目标服务器和代理服务器。这两者都是一个网络块设备(NBD)。采用按需获取和后台拷贝机制完成磁盘的迁移工作。迁移工作分为两个阶段进行:2.在内存状态传输基本完成后在目的端恢复虚拟机继续运行。所有的I/O 操作通过代理服务器在目的端进行。此时代理服务器开始磁盘迁移工作。I/O 请求被转发给源端的目标服务器,同时相应的块也被拷贝到目的端的本地文件中。当所有的块全部被拷贝到目的端后,停止NBD 连接,虚拟机将不再依赖源端运行。
按需获取机制如上图所示,a) 当虚拟机要读的位置不在目标端时,代理服务器从源端获取块数据提供给虚拟机使用,并且把它写入本地缓存文件中,当所有的块数据都被传输过来后,把这些缓存文件变成完整的磁盘映像文件,在bitmap结构中标记这个块数据。b)当虚拟机要对某区域进行写操作时,可直接对源端执行写操作,并把它标记为已缓存。c)当虚拟机要读的位置在缓存块中,则直接对缓存块进行操作,无需再从源端获取数据。
后台拷贝机制是指通过网络将块数据从源端拷贝到目的端。它的优先级低于按需获取机制,以保证最小的I/O 阻塞时间。虚拟机及其中应用对磁盘的I/O 操作具有一定的规律, 即I/O 操作偏移位置具有阶段连续性。
如图2 所示,代理服务器通过三个异步队列和四个线程来处理I/O 请求,客户端的I/O 请求(按需获取)处在较高优先级,后台拷贝请求处在校低的优先级。当收到一个客户端的读请求时,代理服务器首先判断请求的区域是否在缓存中,若无,则向远端的目标服务器发送请求。后台拷贝则由一个外部程序控制,以控制传输速度。
文献[2]提出了预迁移结合回放的同步方式实现外存迁移。首先预迁移虚拟机的外存数据,在此过程中截获所有写外存的请求,包括写数据、写的位置及数据长度,并同时转发到目的主机按序保存。当外存预迁移结束后,在目的主机重做这些写操作.。在内存预迁移过程中发生的写操作同样记录到目的主机的队列中。当虚拟机在目的主机恢复运行后,阻塞磁盘I/O 直到重做完队列中的写操作。
增量应用阶段,在目的机上把增量队列应用到磁盘里,在这一阶段出现的写操作也将有序地应用到磁盘中。此时源端虚拟机终止,在目标端恢复运行。
2 网络设备迁移
文献[4]在缺乏VLAN 支持的源主机和目的主机处于不同网段的局域网上也可以进行虚拟机的漂移并保持原有IP 地址,主要思路是利用TCP 连接的通道来传输链路层的数据帧,把二层链路通过高层桥接延长到目的主机。采用星状或网状的连接结构预先在各节点主机间建立和维持TCP 连接,并且在每个节点主机上部署相关守护进程,包括包过滤器、转发表和二层链路帧转发器。虚拟机漂移时,先利用设置好的TCP 通道向目的节点主机传递虚拟机状态,目的节点主机设置好新建虚拟机的MAC 与IP 以后,利用二层链路转发器继续通过TCP 通道向源节点主机转发相应的广播帧,源节点主机的包过滤器截获相应的广播帧并在本网段内转发,从而切换原虚拟机的IP 地址到目的节点主机上的新虚拟机。同样发到漂移后的新虚拟机的二层数据帧也通过TCP 通道由源节点主机转发器转发。
文献[6]虚拟机迁移系统网络连接重定向技术设计基于移动IP 技术的网络连接重定向系统。当虚拟机迁移到不同子网时,将其看作移动节点不改变它的IP地址,通过目的节点(外部网络)和源节点(家乡网络)之间的双向隧道传输所有来自和发往虚拟机的数据。将虚拟机迁移的环境看成移动网络环境,将被迁移的虚拟机看成移动节点。虚拟机迁移到外部网络后其网络配置保持不变,完全利用宿主机的移动代理功能实现与外部网络的通信。该系统使所有数据通过源、目的节点转发。并且系统还要求物理节点支持ARP 代理协议。
要是将源主机内存拷贝到目的主机来同步两端虚拟机的状态。而日志重现机制不需要拷贝内存,通过记录源主机上虚拟机的执行,然后利用目的主机重现来实现。
在虚拟机迁移过程中需要传输大量的数据,因此产生较高的网络开销。特别是迁移CPU 敏感、内存敏感或者应用程序负载密集的虚拟机,或者网络带宽低时,虚拟机内存页面弄脏速度可能比网络传输速度还要快,严重影响虚拟机的性能。在实际应用中,需要对原始的预拷贝机制进行优化。目前主要存在以下几种方法。
文献[7]分析迁移内存页面的不同特征,并对迁移数据采用自适应的压缩算法MECOM。在传输前对数据进行压缩,可以有效改善内存迁移的效率。通过分析内存数据的特点,发现内存页面内容相似度存在以下关系:
文献[8]将Delta 压缩应用于预拷贝的内存页传输过程,即传输内存页面改变的部分而不是整个页面。因为虚拟机内存页是二进制形式的,可以通过对当前页面和修改前页面应用异或操作计算Delta 页,即该页面中被修改的部分。在目的端则对修改前页面和Delta 页应用异或操作得到当前页面。一般情况下,当页面被弄脏时只有小部分被改变,因此通过二进制RLE (run length encoding)压缩Delta 页。考虑到源端内存内容不断变化和保存页面的开销等问题,采用二路组相连缓存模式保存修改前的页面,并且使用较大的缓存以减少缓存振荡的发生。
文献[3]对写工作集进行了研究,探究不同工作负载下的写工作集的规律。使用Xen 系统,在同一台虚拟机中运行不同程序,然后利用影子页表捕获被修改的内存页并统计数量。测试结果表明不同程序的写工作集有着明显的变化,例如程序eon 中被修改的内存页数量普遍较低,内存页的改写速率较低,写工作集所占比例较小。而程序gap 被修改的内存页数量一直较大,内存页的改写速率很高。尽管同一程序的写工作集曲线在不同时间变化较大,但是存在非常明显的规律性。总的来说,虚拟机动态迁移期间大部分内存页的改写速率会比较稳定。所以,在内存迁移时并不需要事先确定内存页所属程序,而只需统计之前一小段时间内的改写情况便可以比较准确的判断出内存页的改写速率。文献中提出rapid page dirtying 策略,周期性地查看当前轮的脏页面位图,只传输那些在前一轮迭代拷贝中弄脏而在扫描时还没有再次被弄脏的内存页面。Stunning Rogue Processes 策略限制每个进程发生写故障次数,达到写故障次数限制的进程进入等待队列。其本质是冻结写内存速度太快而不利于迁移的进程。以提高内存迁移的效率。
文献[9]将页面预取技术和动态内存气球驱动机制应用到后拷贝迁移中。要预测目的主机上虚拟机的内存页面访问位置是非常困难的,文中提出了一个冒泡算法。根据读取内存通常读取一大块的空间局部性原理,调整主动推送页面的顺序,使得缺页异常附近的页面被虚拟机访问之前传输到目的主机,减少了缺页异常的发生。在迁移过程中,有许多的空闲内存页面是不需要被传送的,这些空闲页面的量可大可小,如果能够避免传送这些页面是可以大幅提升迁移效率的。文中利用动态内存气球驱动机制将气球驱动机制自动化,使其周期性地从虚拟机回收空闲页面,减少迁移过程中空闲页面的传输,加快迁移过程。
基于日志重现的实时迁移是一种前面两种方法完全不同的迁移方式。它采用一种很巧妙的方式避开内存改动过快的局限。它的主要思想是:如果系统能够回放,那么系统中发生的事情就是确定的。对计算机而言,只需要捕获所有的终端输入,就可以确定所发生的事情。通过日志跟踪和重现技术同步虚拟机状态,并且通常情况下日志文件远小于内存脏页面,可以大大减少迁移过程过数据的传输。
文献[10]采用检查点/恢复和跟踪重现技术实现快速透明的虚拟机动态迁移,基于全系统跟踪和重现系统ReVirt 提出了CR-TR Motion 迁移策略,其目的是为了减少需要传输的总数据,并巧妙地把原本需要传输的数据,利用目的主机上闲置的资源根据日志文件进行回放,使热迁移应用在WAN/MAN 下成为可能。CR-TR Motion 的基本策略是首先,源主机以些事拷贝的方式生成一个对虚拟机透明的检查点,并传输给目标主机。目标主机接收到检查点后源主机就以一定时间间隔不断发送日志文件,直到达到某终止条件。这些日志文件记录足够的信息(影响系统计算的非确定性事件,如外部输入)。此期间,源主机上的服务保持运行,目标主机则不断根据接收得到的日志文件进行基于检查点的回放。达到终止条件,源虚拟机停止运行,将剩余的日志文件拷贝到目的主机重现,接管源虚拟机提供服务。对于大多数负载而言,日志的增长速率是小于1MB/s 的,远小于网络传输速率。而且日志的回放速度是大于日志的增长速度的,因为在进程在普通执行过程当中会阻塞等待I/O 事件,而回放则会跳过HLT 指令造成的空闲等待时间。所以这一策略显然是可行的。如图5 所示是迁移过程:
日志重现和预拷贝实现的机制比较类似,区别在于传输的内容不是内存页面而是日志文件,所以对带宽的要求并不那么苛刻,总迁移时间和停机明显缩短,对虚拟机中的应用影响较小,并且对写密集应用有更好的适用性。在实际应用中需要对NAS 的访问机制稍加修改,并需要优化Revirt 系统的检查点功能,以适应本方法的特殊要求。
3.虚拟机磁盘迁移。在很多应用场景中,待迁移的虚拟机所在环境可能不存在网络共享存储设备。磁盘作为虚拟机运行所需的持久化状态的封装体,也必须同时被迁移,因为磁盘迁移往往数据量非常大,对整个迁移过程的效率影响十分关键。因此基于虚拟机磁盘的迁移也逐渐成为虚拟机迁移的研究热点。
参考文献
[1] Hirofuchi, Takahiro, et al. "A live storage migration mechanism over wan and its performance evaluation." Proceedings of the 3rd international workshop on Virtualization technologies in distributed computing. ACM, 2009.
[2] Bradford, Robert, et al. "Live wide-area migration of virtual machines including local persistent state." Proceedings of the 3rd international conference on Virtual
execution environments. ACM, 2007.
[3]Clark, Christopher, et al. "Live migration of virtual machines." Proceedings of the 2nd conference on Symposium on Networked Systems Design & Implementation-Volume 2. USENIX Association, 2005.
[4]Sundararaj, Ananth I., Ashish Gupta, and Peter A. Dinda. "Increasing application performance in virtual environments through run-time inference and adaptation." High
Performance Distributed Computing, 2005. HPDC-14. Proceedings. 14th IEEE International Symposium on. IEEE, 2005.
[5]Wood, Timothy, et al. "CloudNet: dynamic pooling of cloud resources by live WAN migration of virtual machines." ACM SIGPLAN Notices. Vol. 46. No. 7. ACM, 2011.
[6]温抿雄, and 李沁. "虚拟机迁移系统网络连接重定向技术倡." 计算机应用研究26.5(2009).
[7]Jin, Hai, et al. "Live virtual machine migration with adaptive, memory compression." Cluster Computing and Workshops, 2009. CLUSTER'09. IEEE International Conference on. IEEE, 2009.
[8]Svärd, Petter, et al. "Evaluation of delta compression techniques for efficient live migration of large virtual machines." ACM Sigplan Notices 46.7 (2011): 111-120.
[9]Hines, Michael R., and Kartik Gopalan. "Post-copy based live virtual machine migration using adaptive pre-paging and dynamic self-ballooning." Proceedings of the
2009 ACM SIGPLAN/SIGOPS international conference on Virtual execution environments.ACM, 2009.
[10]Liu, Haikun, et al. "Live migration of virtual machine based on full system trace and replay." Proceedings of the 18th ACM international symposium on High performance distributed computing. ACM, 2009.