热迁移(Live Migration)在云计算中是如同黑魔法一般的存在,它可以使用户在无感知的情况下将虚拟机从一台物理服务器迁移到另一台物理服务器上,且整个迁移过程中应用程序几乎不会发生中断,是保障 SLA 的利器。
热迁移的原理
当一个运行中的虚拟机在不同计算节点中进行移动的时候,对于用户的应用程序来说主要涉及到 CPU 和内存的运行状态,CPU 状态的拷贝几乎是可以瞬时完成的,而由于内存的特性,其在迁移过程中已经拷贝的内存也会面临被重写的情况,所以在整个虚拟机迁移过程中,内存迁移需要消耗较长的时间。
在这篇文章中,我主要介绍一种最常见的内存拷贝策略:预拷贝策略(Pre-Copy)。
简单来说,预拷贝策略主要分为三个阶段:
• Init Copy:将所有内存页标记为 Dirty Page(脏内存),并将其拷贝到目标主机上,此时虚拟机管理器继续监视虚拟机的内存变化情况
• Iterative Pre-Copy:重新计算新产生的脏内存,并进行迭代,将被修改的内存页拷贝到目标主机上,直到满足条件退出
• Stop-and-Copy:停止运行源主机的 GuestOS,将剩余的脏内存以及设备状态信息迁移到目标主机上,并启动虚拟机
ArStack 的探索与实践
根据第一性原理(First Principle),我们不难发现在虚拟机进行热迁移的过程中, Iterative Pre-Copy 是最重要的阶段,所以 ArStack 几乎所有的优化工作都是围绕这一阶段展开的。