国内外对虚拟机迁移的研究主要集中在四个方面:(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