vSphere vMotion功能使客户能够将工作负载从源实时迁移到目标ESXi主机。随着时间的流逝,我们已经开发了vMotion以支持新技术。vSphere 7发行版也不例外,因为我们极大地改进了vMotion功能。vSphere 7中的vMotion增强功能包括在实时迁移过程中降低的性能影响和减少的眩晕时间。这篇博客文章将详细介绍vMotion的改进如何帮助客户轻松使用vMotion处理大型工作负载。
要了解我们在vSphere 7中针对vMotion进行了哪些改进,必须了解vMotion内部。阅读高级vMotion流程以了解有关vMotion流程本身的更多信息。
大型VM vMotion挑战
vSphere是托管大型虚拟机(VM)(也称为“ Monster” VM)的理想平台,当前每个VM资源的最大值设置为256个vCPU和6 TB的内存。但是,我们注意到在大型VM中运行工作负载的客户并不总是很乐意实时迁移这些VM。这是由于在vMotion流程中可能会对工作负载性能产生影响,并且切换(stun)时间花费的时间过长。
例如,处理大量I / O的大型事务数据库平台在vMotion期间可能会出现性能下降,尽管精确的影响很大程度上取决于工作负载的特性和规模。vSphere 7中vMotion的增强逻辑克服了所有这些挑战,使我们能够实时迁移大型工作负载,而不会对性能或可用性产生重大影响。
内存预复制优化
如本视频所述,我们需要跟踪VM在vMotion操作期间所有更改的内存页面。由于这是实时迁移,因此VM内的来宾OS将在vMotion期间继续将数据写入内存。我们需要跟踪并重新发送在vMotion期间被覆盖的内存页面。
vMotion进程在为虚拟机配置的所有vCPU上安装页面跟踪程序。这样,vMotion可以了解正在覆盖哪些内存页面。在页面跟踪期间,这称为“页面触发”。我们正在将跟踪工作分配给实时迁移的VM的所有vCPU。
要安装页面跟踪程序并处理页面触发事件,请短暂停止vCPU。只有几微秒,但是停止所有vCPU会破坏工作负载。扩展VM的计算资源会增加vMotion操作的影响。在停止vCPU进行跟踪工作之后,所有内存页面表条目(PTE)都设置为只读,并且刷新了转换后备缓冲区(TLB)以避免TLB命中并迫使页面表遍历,因此vMotion进程可以完全理解哪些内存页已被覆盖。在此博客文章中了解有关这些内存构造的更多信息。此处描述的方法称为“基于停止的页面跟踪安装”。
我们如何在vSphere 7中做到这一点
最大的影响来自必须停止所有vCPU进行页面跟踪。如果我们可以在不停止所有vCPU的情况下安装页面跟踪程序,该怎么办?在vSphere 7中,我们引入了“宽松的页面跟踪安装”。页面跟踪的方法基本保持不变,但是现在不使用所有vCPU,而是仅声明一个vCPU来执行所有跟踪工作。有权使用VM的所有其他vCPU只会继续运行工作负载而不会中断。
页面跟踪程序将安装在一个声称的vCPU上,并将所有PTE设置为只读。TLB是特定于vCPU的,因此每个vCPU仍需要刷新其TLB。但这发生在不同的时间,以最大程度地减少影响。总体而言,此方法效率更高,因为仅使用一个vCPU进行页面跟踪。
页表粒度
因此,我们降低了跟踪的成本,但是如果我们可以提高跟踪效率呢?我们优化了将内存设置为只读的方式,这意味着该部分要做的工作较少。更少的工作意味着更高的效率。在将vSphere 7设置为4KB页面粒度之前,将内存设置为只读的方式。所有单独的4KB页面都需要设置为只读访问。
从vSphere 7开始,虚拟机监视器(VMM)进程将在1GB页面上以更大的粒度设置只读标志。如果发生页面火灾(覆盖内存页面),则将1GB PTE分为2MB和4KB页面。VMware工程师已经看到,在vMotion流程中,VM通常不会占用其所有内存。vMotion期间的内存工作集大小通常仅为10%至30%。如果在vMotion时间内使用了更多的内存,则成本效率将会降低。
切换相位增强
到目前为止,我们已经讨论的所有增强功能都是在内存预复制阶段完成的,在该阶段进行跟踪。一旦达到内存融合,这意味着几乎所有内存都已复制到目标主机,vMotion准备就绪,可以切换到目标ESXi主机。在此最后阶段,源ESXi主机上的VM被挂起,并将检查点数据发送到目标主机。请记住,我们希望切换时间(激励时间)为1秒或更短。对于大型VM,这是一个挑战,因为工作负载大小随着时间的推移而增加。
在切换阶段,我们发送检查点数据和内存位图。内存位图用于跟踪VM的所有内存。它知道哪些页面将被覆盖,仍然需要将其传输到目标ESXi主机。当vMotion传输最后的内存页面时,目标主机上的VM开始启动。但是它可能仍需要剩下最后几页进行传输。为了在目标上标识这些页面,我们使用从源传输来的位图。如果客户过量使用内存,则会在可选的交换位图中跟踪换出的页面。
内存位图是稀疏的。它包含最后一个内存页以及VM正在使用的所有内存页的信息。具有1GB内存的VM的内存位图大小为32KB。传输毫秒只需32毫秒:没问题!
vSphere 7如何做到的
对于运行6TB内存的VM(或将来可能更多),位图已经是192MB。为了将切换时间保持在1秒以内,我们需要使位图较小,因为发送192MB以上的数据可能需要一秒钟或更长时间。如果我们可以压缩位图并仅发送您真正需要的信息怎么办?
在此阶段,我们已经复制了大多数内存页面,因此仅需要发送最后剩余的内存页面。使用压缩的内存位图,vMotion能够在几毫秒内发送大型VM的位图,从而大大减少了眩晕时间。
性能改进
vSphere 7中对vMotion的这些增强允许实时迁移工作负载,而在vMotion期间几乎没有性能下降。下图是一个测试示例,向您展示了在vSphere 7中潜在的性能提升。该测试床是运行HammerDB工作负载的大型VM(72 vCPU / 512GB)。我们以1秒的粒度在时间轴上监视提交/秒。
与vSphere 6.7相比,我们在vSphere 7的此测试过程中注意到的几个关键要点是:
- 在页面跟踪阶段,我们不再遇到性能影响。
- 眩晕时间保持在1秒以内,而不是花费数秒。
- 整个实时迁移时间缩短了将近20秒。
您的里程可能会有所不同,具体取决于vMotion网络配置和VM大小,但这是一个示例性测试,旨在显示这些vMotion改进的潜在好处。
结论
vSphere 7在vMotion中所做的改进是巨大的,并大大降低了为vMotion支付的成本。除了将系统升级到vSphere 7外,您不需要享受新的和改进的vMotion逻辑就可以了。