【译文】幕后的vMotion流程

四月的奥德赛 VMware 110 次浏览 没有评论

VMware vSphere vMotion功能是当今虚拟基础架构中最重要的功能之一。 自2002年推出以来,到2003年发布以来,它使我们能够将虚拟机的活动状态从一台物理ESXi主机迁移到另一台ESXi主机。 如今,无缝迁移虚拟机的能力已成为几乎每个虚拟化部署中不可或缺的一部分。 工作负载的可移植性是真正混合云体验的基础,它可以使用VMware Hybrid Cloud Extension(HCX)在本地云和公共云之间移动。 vSphere vMotion仍然是并将永远是IT行业最重要的变革者之一。

 

多年来,vMotion内部已经开发了很多技术来支持新技术。

 

 

该博客文章将重点讨论仅计算迁移,这是将活动计算状态从源迁移到目标ESXi主机的标准vMotion。 我们还可以执行与计算vMotion组合在一起的被视为XvMotion的Storage vMotion。 其他类型包括Long Distance vMotion和Cross vCenter vMotion,它们都是在vMotion进程ESXi端之上的主要vCenter Server操作。

阅读本文将使您更好地理解启动虚拟机迁移时幕后发生的”魔术”。

 

vMotion流程

启动虚拟机迁移后,vCenter Server实例将执行所谓的长期迁移任务以处理迁移。 第一步是执行兼容性检查。 是否可以在目标主机上运行虚拟机? 考虑一下可能阻止实时迁移的限制条件。 接下来是告诉源和目标ESXi主机正在发生的情况。 创建的迁移规范包含以下信息:

     正在实时迁移的虚拟机
     该虚拟机的配置(虚拟硬件,VM选项等)
     源ESXi主机
     目标ESXi主机
     vMotion网络详细信息

vCenter Server实例与源ESXi主机和目标ESXi主机共享迁移规范,请确保交换了所有必要的信息以启动迁移过程。 vCenter Server使用Virtual Provisioning X守护程序(VPXD)与ESXi主机进行通信,该守护程序调出ESXi主机上运行的Virtual Provisioning X代理(VPXA)。 VPXA侦听来自VPXD的消息,它接收迁移规范并将其通过托管传递给VMX进程。 主机守护程序(hostd)维护特定于主机的信息和访问权限,以进行管理,包括VMstate等虚拟机遥测。 启动迁移后,hostd会将虚拟机置于中间状态,因此在迁移期间无法更改虚拟机的配置。

 

 

虚拟机监视器(VMM)进程负责管理虚拟机内存,并将虚拟机存储和网络I / O请求传输到VMkernel。 所有其他对性能不重要的I / O请求都由VMM转发到VMX。 虚拟机扩展(VMX)进程在VMkernel中运行,负责处理对性能不重要的设备的I / O。 请注意,VMM仅在迁移期间在源ESXi主机上使用,因为这是虚拟机活动内存所在的位置。

完成此操作后,源ESXi上的VMkernel迁移模块将打开启用vMotion的网络上的套接字,以设置与目标ESXi主机的通信。

 

准备阶段到预复制阶段

至此,所有流程和通信路径都已准备就绪,可以开始实时迁移。 准备阶段是关于确保目标ESXi主机为要迁移的虚拟机预分配计算资源。 此外,虚拟机是在目标ESXi主机上创建的,但已被屏蔽。 有关虚拟机配置的所有信息已经众所周知,因为它包含在迁移规范中。

完成准备阶段后,过程将转到复制前阶段,在此阶段,内存将从源转移到目标ESXi主机。 需要跟踪源ESXi主机上的所有虚拟机内存页面。 这样,由于vMotion进程需要将这些内存页重新发送到目标主机,因此它知道在迁移过程中覆盖了哪些内存页,称为脏页。

 

页面追踪

在预复制阶段,虚拟机正在使用的vCPU会短暂地被震撼以安装页面跟踪程序。 VMkernel迁移模块现在要求VMM启动页面跟踪,因为VMM拥有虚拟机的内存页面表状态。 下图显示了客户机操作系统在vMotion期间将数据写入内存时会发生什么:

 

迭代内存预复制

页面跟踪是一个连续的周期。通过使用多次迭代,它将有助于内存复制前的融合。第一次迭代(预复制阶段1)将复制虚拟机内存。以下迭代(预复制阶段0到n)用于复制脏内存页。举个例子,这是我们实时迁移具有24GB内存的虚拟机时的迭代形式:

阶段-1:复制24GB的虚拟机内存和跟踪页。当我们发送内存时,它的容量为8GB。
阶段0:重新传输脏的8GB。在此过程中,内存又弄脏了3GB。
阶段1:发送3GB。在进行传输的同时,虚拟机脏了1GB。
阶段2:发送剩余的1GB。

随着内存页面从源复制到目标ESXi主机,我们需要确定何时将所有内存复制到其目标。 VMM询问VMkernel,是否可以在每次迭代后终止预复制过程。仅当所有内存更改(脏页)都复制到目标主机时,才有可能。迭代内存预复制算法的一部分是将所有目标内存页面与其源进行匹配。从第零页开始一直到最大或最后一个内存页号,将顺序检查所有内存页,以查看目标页是否与源页同步。

 

为了确定是否可以终止预复制,我们需要验证是否可以在<500ms的窗口中完成最后的内存页复制。 我们可以使用移民税中的信息来计算:

     迁移传输速率; 我们以什么速度(GbE)在主机之间复制内存数据?
     脏页率(GB / s); 来宾操作系统将覆盖多少个内存页面?
     我们还剩下几页要传输到目标主机?

如果否,则发生下一次迭代。 如果结果为是,则VMkernel迁移模块将终止预复制过程。

现在,如果脏页面速率高于迁移传输速率,将会发生什么?如果真是这样,那么再进行一次迭代是没有意义的,因为我们永远无法达到内存复制前的收敛,并且迁移将停止。这就是为什么我们在vSphere 5.0中引入了”在页面发送期间进行眩晕(SDPS)”。基本上,SDPS是VMkernel告诉VMM不运行计划的指令而是引入非常短的”睡眠”的一种方式。这听起来像是对工作负载性能的影响,但这是在细粒度的级别上发生的。我们在这里谈论的是微秒级,这是因为可以在非常短的时间范围内收敛,因此vMotion过程将成功。

如果脏页速率>传输速率,则每次迭代都会执行SDPS。后续迭代仅复制在先前迭代期间修改的脏内存页面。较短的迭代持续时间使来宾OS较少机会修改或弄脏其内存页面,从而缩短了下一次预复制迭代。尽管涉及某种形式的性能成本,但通常SDPS对于工作负载而言并不明显。目标始终是使来宾OS不了解正在进行的迁移。

 

切换

随着内存预复制迁移被VMM终止,所有内存页面都驻留在目标ESXi主机上。 VMM现在将远程过程调用(RPC)发送到VMX,它可以挂起源虚拟机。 VMX将进入检查点阶段,在该阶段它将挂起虚拟机,并将检查点数据发送到目标ESXi主机。

 

在此过程中,将取消屏蔽目标ESXi主机上的虚拟机,并使用检查点数据恢复状态。基本上发生的是目标计算机上的虚拟机已启动,但引导过程被中断并指向从源ESXi主机迁移的内存页。所有这些通常发生在100-200毫秒内。那是虚拟机未处于运行状态的击晕时间。眩晕时间的持续时间取决于多种因素,例如主机硬件和动态来宾工作负载。

虚拟机现已实时迁移!
结论……

尽管我试图深入解释vMotion流程,但是还有更多细节可以分享后台发生的事情。希望您对此博客文章感激不已。非常感谢您的vMotion工程团队提供宝贵的信息。

如果您正在参加VMworld,请务必访问HBI2333BU –”如何充分利用vSphere vMotion”会议!随着工作负载的不断增长,如何做才能提高vMotion性能?在本节中,您将了解有关vMotion流程的更多详细信息,并获得有关如何减少迁移时间和调试的最佳实践。了解如何使用100GbE NIC调整vMotion以获得线速性能。

更新:要了解有关vMotion流体系结构以及如何优化vMotion以减少迁移时间的更多信息,请查看此博客:如何调整vMotion以缩短迁移时间?要了解有关对vMotion进行故障排除,要查找哪些日志文件和条目的更多信息,请阅读此博客:对vMotion进行故障排除

发表评论

Go