zoukankan      html  css  js  c++  java
  • [翻译]标准vMotion的底层运行原理(虚拟机的热迁移原理)

    VMware vSphere vMotion功能是当今虚拟基础架构中最重要的功能之一。自2002年成立以及2003年发布以来,它允许我们将虚拟机的活动状态从一个物理ESXi主机迁移到另一个主机。如今,无缝迁移虚拟机的能力几乎是每个虚拟化部署的重要组成部分。工作负载的可移植性是真正的混合云体验的基础,能够使用VMware混合云扩展(HCX)在内部云和公共云之间移动它们。vSphere vMotion仍然是IT行业中最重要的游戏改变者之一。

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

    此博本文章将重点介绍标准vMotion,这是将活动计算状态从源迁移到目标ESXi主机的标准vMotion。我们还可以执行Storage vMotion,当与标准vMotion结合使用时,它被认为是增强vMotion。其他类型的是长距离vMotion和跨集群vMotion,它们主要是vMotion进程的ESXi端之上的vCenter Server操作。

    vMotion流程

    启动虚拟机迁移后,vCenter Server实例将执行所谓的长时间运行的迁移任务以处理迁移。第一步是执行兼容性检查。是否可以在目标主机上运行虚拟机?考虑可能阻碍实时迁移的可能约束。接下来是告诉源和目标ESXi主机发生了什么。创建包含以下信息的迁移任务:

    • 是否是正在迁移的虚拟机
    • 是否在配置该虚拟机(虚拟硬件,VM选项等)
    • 源ESXi主机是否符合要求
    • 目标ESXi主机是否符合要求
    • vMotion网络相关问题

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

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

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

    准备阶段到预复制阶段

    到目前为止,所有流程和通信路径都已准备好飞机票行实时迁移。准备阶段的目的是确保目标ESXi主机为要迁移的虚拟机预先分配计算资源。此外,虚拟机已经在目标主机上被创建了,但它处于被屏蔽状态。

    完成准备阶段后,该过程将进入预复制阶段,在此阶段将内存从源传输到目标ESXi主机。需要跟踪源ESXi主机上的所有虚拟机内存页面。通过这样,vMotion进程知道源虚拟机的哪些内存页面在迁移期间被覆盖或修改(称为脏页面),因为它需要将这些内存页面重新发送到目标主机。

    页面追踪

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

    迭代内存预复制

    页面跟踪是一个连续的循环。它将通过使用多次迭代来实现内存预复制收敛。第一次迭代(预拷贝阶段-1)复制虚拟机内存。以下迭代(预拷贝阶段0到n)用于复制脏内存页面。举个例子,这就是我们实时迁移具有24GB内存的虚拟机时迭代的样子:

    阶段-1:复制24GB的虚拟机内存和跟踪页面。当我们发送内存时,它会带来8GB的污染。
    阶段0:重新传输脏污的8GB。在这个过程中,内存污染另外3GB。
    阶段1:发送3GB。当转移发生时,虚拟机又会污染1GB。
    阶段2:发送剩余的1GB。

    当内存页面从源复制到目标ESXi主机时,我们需要确定何时能够完成预复制,所以VMM会在每次迭代复制后询问VMkernel是否已完成预复制。当只有将所有内存更改(脏页)复制到目标主机时,才可以执行后续操作。迭代内存预拷贝算法的一部分是将所有目标内存页面与其源匹配。从第0页开始一直到最大或最后一个内存页码,依次检查所有内存页以查看目标页是否与源页同步。

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

    • 迁移传输速率; 以什么速度(GbE)我们在主机之间复制内存数据?
    • 脏页率(GB / s); 客户操作系统覆盖了多少内存页面?
    • 我们还有多少页要传输到目标主机?

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

    现在,如果脏页率高于迁移传输速率会发生什么?如果是这种情况,那么进行另一次迭代是没有意义的,因为我们永远无法实现内存预复制的收敛,并且迁移将停止。这就是我们在vSphere 5.0中引入Stun页面发送(SDPS)的原因。基本上,SDPS是VMkernel告诉VMM不运行预定指令但是引入非常短的“睡眠”的一种方式。这可能听起来像是对工作负载性能的影响,但这种情况发生在细粒度级别。正是由于这些非常小的微秒级别的时间窗口,我们可以将vMotion预复制收敛,并完成vMotion工作。

    如果脏页面速率>传输速率,则每次迭代执行SDPS。后续迭代仅复制在上一次迭代期间修改的脏内存页。迭代的持续时间越短,客户OS就越不能修改或弄脏其存储页面,从而缩短了下一次预复制迭代。虽然产生一些性能开销,但SDPS通常不会对工作负载造成影响。这些开销对客户操作系统来说是可以忽略不计的。

    切换

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

    在此过程中,目标ESXi主机上的虚拟机将被解除屏蔽,并使用源虚拟机的检查点数据恢复状态。基本流程是:启动目标虚拟机、中断启动过程、再把状态指向迁移过来的源虚拟机内存页,完成启动。所有这些通常发生在100-200ms,这是虚拟机处于不可访问的一个时间,这取决于主机硬件性能、动态的访问负载等各种因素。

    到此,虚拟机的vMotion完成。

    原文:https://blogs.vmware.com/vsphere/2019/07/the-vmotion-process-under-the-hood.html

  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/xddsq/p/11299049.html
Copyright © 2011-2022 走看看