在迁移命令调用阶段,用户输入 xm migrate targethost 向 Xen 发出迁移命令,Xen 调用 Python 语言程序 XendDomain.py 中的 domain_migrate()函数采用 socket的方式与目的虚拟机建立连接,同时检查源虚拟机与目的虚拟机的虚拟机资源对于迁移是否充足。当资源足够时,调用 XendCheckPoint.py 中的 save()函数开始迁移。
迁移主要包括虚拟机的内存页拷贝和设备信息拷贝。内存页拷贝通过XendCheckPoint.py 调用 C 语言程序 Xc_save.c,然后 Xc_save.c 程序调用函数
Xc_linux_save()来实现。Xc_linux_save()函数实现分为预拷贝和停机拷贝,在预拷贝时,通过迭代的方式对脏页面进行迁移,当迭代满足一定的条件时停止,
进入停机拷贝。停机拷贝的结束标志着设备迁移的开始。停机拷贝结束后回到XendCheckPoint.py 程序,该程序调用 XendDomainInfo.py 的 migrateDevices()函
数实现设备迁移。设备迁移结束后回到 domain_migrate()函数,整个迁移结束。
参考:基于xen的虚拟机动态迁移策略研究