VMware EVC 模式如何工作:完整概述

如果您熟悉vMotion功能,您可能还记得推荐的做法是在所有ESXi服务器上使用相同的处理器进行虚拟机实时迁移。如果您想在集群中使用不同处理器型号的服务器,最好部署同一代的处理器。此外,严格要求处理器必须由同一供应商制造,例如Intel或AMD。否则,在使用vMotion时可能会出现错误。

VMware设计其vSphere软件时考虑了在生产环境中可能发生的情况,包括通过添加具有不同处理器的新服务器来扩展集群。这是一种常见情况 – 想象一下,您有一个集群,其中包含您在3年前购买的5个ESXi节点,并且您需要添加两个节点以运行更多的虚拟机以满足业务需求。您在3年前购买的处理器目前已不再生产,并且在市场上已经停售;您只能购买最新一代的处理器。不用担心 – 您可以在vSphere中使用高可用性集群,添加具有不同处理器的节点,并在具有不同处理器的主机之间使用vMotion进行虚拟机实时迁移。这是由于VMware vSphere中的增强vMotion能力(EVC)功能,可以为集群启用该功能。

VMware EVC模式的工作原理

每一代新的处理器都包含了新的指令集,除了上一代处理器可用的指令集之外。新功能通常会提高运行应用程序的性能或安全性。例如,SkyLake 一代处理器相比 Haswell 一代处理器多了一个新的指令集(SGX)。让我们来看看这两代处理器的指令集,并探索它们的细节。

Haswell(2013)指令集:

x86-64, MMX, AES-NI, CLMUL, FMA3, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, TXT, VT-x, VT-d。由于一个错误,Haswell 处理器上的 TSX 指令通过微码被禁用,除了 Haswell-EX 处理器。

SkyLake(2017)指令集:

x86-64, MMX, AES-NI, CLMUL, FMA3, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, TXT, TSX, SGX, VT-x, VT-d。

这意味着如果您在 EVC 设置中选择 Haswell 兼容级别,则必须在具有 Skylake 处理器的服务器上禁用(屏蔽,更准确地说)SGX 指令集,结果所有处理器将使用相同的指令集。因此,您将拥有一个为 VM 迁移采用的同质环境,通过使用 vMotion。通过强制在没有统一处理器的 ESXi 主机上运行的所有 VM 的相同 CPUID 指令基线,提供了统一的 vMotion 兼容性。CPUID 可以被视为 CPU 的 API。

一方面,启用 Haswell EVC 模式时,SGX 指令集的优势会丧失,但另一方面,如果向集群添加了使用更新处理器的主机,则现有集群的性能不会降低。如果向现有集群添加了使用较旧处理器的 ESXi 主机,则在特定情况下可能会注意到性能下降。

注意:SGX(软件保护扩展)允许您组织受保护的代码和数据片段(也称为飞地),以确保工作应用程序对抗黑客攻击具有高级别的数据保护。使用 SGX 指令来开发其应用程序的开发人员可以保护应用程序免受未经许可的访问或修改,即使攻击者应用程序具有更高的权限。

注意:TSX(事务同步扩展)确保将大部分正在运行的任务移动到硬件级别(CPU 本身)以在处理器核之间分配资源。如果处理器不支持 TSX 指令,则此分配将由操作系统和应用程序在软件级别执行。如果通过微码禁用了 Haswell 处理器的 TSX 指令集,则可能需要为 EVC 模式设置较旧的(Ivy Bridge)级别。

通常,运行中的虚拟机必须关闭并重新启动以应用更改的 EVC 模式设置。如果您使用的是 vCenter 4.1 或更高版本,则运行在具有最旧处理器的 ESXi 主机上的虚拟机可能不会被关闭(您可以将它们保持运行状态)。在这种情况下,EVC 模式必须等于最旧处理器的代数。在整个集群中启用 EVC 模式之前,必须关闭具有更新 CPU 功能的处理器的 ESXi 主机上运行的虚拟机。当 ESXi 主机被从集群中排除时,它将继续以禁用 EVC 模式运行。

VMware vSphere 版本 / EVC 的 CPU 兼容性

所需的 EVC 模式取决于处理器型号和版本。最新版本的 vCenter Server 上的 EVC 模式支持最新的处理器。如果您拥有最新一代处理器的服务器,请考虑使用最新版本的 vCenter。在下表中,您可以看到哪些组合的英特尔处理器代和 vCenter 版本支持确定您环境中的 EVC 集群基线。

最合适的 EVC 模式由集群内 ESXi 服务器的最老处理器型号确定。技术上可以选择比最老处理器的世代更旧(较低)级别的 EVC 模式,但通常没有理由进行这样的设置。旧版的 ESXi 和 vSphere 支持新处理器,但最大的 EVC 基线保留在发布该 vSphere 版本时功能正常的最老处理器级别上,并在当时被认为是最新可用的处理器。

当您更改 EVC 模式的级别时,您应该关闭并重新启动正在运行的虚拟机以将这些设置应用到这些虚拟机上;重新启动虚拟机是不够的。

VMware 兼容性指南

您可以在VMware的网站上检查处理器的兼容性以及您的vCenter服务器可用的最高EVC模式。为了检查兼容性,打开VMware兼容性指南页面,在下拉菜单(即您要查找的内容)中选择CPU系列,在产品发布版本列表中选择您的ESXi版本,在CPU系列列表中按住Ctrl按钮并选择安装在您的ESXi主机上的处理器(单击鼠标左键)。选择必要的参数后,单击CPU/EVC矩阵按钮以查看ESXi服务器可用EVC模式的表格。在下面的截图示例中,已选择ESXi 6.5(由vCenter 6.5管理),Intel Xeon E3-1500-v5、Xeon E5-4600-v3和Xeon Platinum 8100处理器。所有已选择的处理器支持的最高EVC模式为Intel Haswell Generation

要求

启用EVC模式后,为了使vMotion正常工作,必须满足以下要求:

  • 所有ESXi主机的处理器必须为Intel或AMD。
  • ESXi主机的UEFI/BIOS中必须启用处理器虚拟化功能,如Intel VT-x或AMD-V。
  • ESXi主机必须由相同的vCenter服务器管理。
  • ESXi主机必须配置为使用vMotion。如何启用和配置EVC

如何启用和配置EVC

在熟悉了理论之后,让我们来实际回顾EVC模式的配置。您可能需要关闭ESXi主机上的虚拟机,其EVC级别必须降级。确保在UEFI/BIOS中没有禁用处理器功能,以避免可能出现的问题。

通过在浏览器的地址栏中输入vCenter Server的IP地址,打开您的Web浏览器中的VMware vSphere Web Client。转到vCenter > 主机和集群,并选择每个ESXi主机以验证CPU(中央处理器单元)配置。在当前示例中,我们考虑两个运行ESXi 5.5的主机,它们已添加到集群并由vCenter Server 5.5管理。如下面的屏幕截图所示,第一个ESXi主机的处理器型号是Intel Xeon E3110,第二个ESXi主机上安装的处理器是Intel Xeon X3430

如果ESXi主机已添加到集群中,请选择您的集群(在我们的示例中为temp-cluster),单击管理选项卡,然后打开设置选项卡,选择配置 > VMware EVC,然后单击编辑按钮。

现在,在vCenter中选择EVC模式之前,在您的网络浏览器中打开一个新标签页,并打开VMware兼容性指南,如本博客文章中所示。在当前示例中,我们应该选择ESXi 5.5Intel Xeon 31xx系列Intel Xeon 34xx系列。单击CPU/EVC矩阵按钮后,您可以在屏幕截图上看到,在EVC模式设置中应选择Intel Penryn Generation

返回到您的网络浏览器标签页,打开集群的EVC模式设置。单击为Intel主机启用EVC。在VMware EVC模式的下拉菜单中,我们应该选择Intel Penryn Generation。在窗口底部,您应该看到验证成功兼容性部分。现在您可以点击确定保存EVC模式设置。

之后,在VMware EVC部分,显示了VMware EVC已启用的信息。单击当前CPUID详细信息以展开有关寄存器和掩码值的详细信息部分。

EVC模式也可以在创建新集群时启用;VMware推广这种可能性作为推荐做法。在创建新集群时启用EVC模式可以防止您遇到与关闭和迁移在集群中开启的VM相关的问题(正如您所记得的,通常需要关闭并重新开启VM以应用新的EVC设置)。

CPUID掩码化

除了应用于整个集群中所有VM和ESXi主机的全局EVC模式外,vCenter Server还允许您为自定义VM手动配置CPUID标志。vCenter会将为VM设置的CPUID参数与目标ESXi主机上可用的CPUID参数进行比较。如果这些参数相同,则允许使用vMotion进行VM迁移。CPUID掩码功能比EVC模式功能更早。

为了为VM配置CPUID掩码,请执行以下操作:

选择必要的VM,右键单击VM并选择编辑设置。在打开的编辑设置窗口中,打开虚拟硬件> CPU,选择 CPUID掩码,然后单击高级

CPU识别掩码窗口中,选择必要的寄存器字符串,然后单击值以在位级别上编辑掩码。单击图例按钮以查看用于设置掩码的每个字符的含义。

注意!在熟悉VMware知识库或VMware支持说明之前,请勿编辑掩码。手动编辑CPU兼容性掩码可能会导致不受支持的VM配置。例如,Windows VM可能会出现蓝屏错误。

检查PowerCLI中EVC模式的配置

您可以使用以下命令在VMware PowerCLI中检查整个集群和自定义VM的EVC模式配置:

Get-VM | 选择名称,硬件版本,

@{Name=’VM_EVC_Mode’;Expression={$_.ExtensionData.Runtime.MinRequiredEVCModeKey}},

@{Name=’Cluster_Name’;Expression={$_.VMHost.Parent}},

@{Name=’Cluster_EVC_Mode’;Expression={$_.VMHost.Parent.EVCMode}} | ft

您还可以在运行以下命令后检查集群中所有主机支持的最大EVC级别:

Get-VMHost | Select-Object Name,ProcessorType,MaxEVCMode

每个VM的EVC模式

上述考虑的EVC模式是集群级选项。VMware vSphere 6.7提供了设置每个VM的EVC模式的能力,这对于在不同集群或vCenter服务器之间迁移VM很有用,并为您提供了更多的灵活性。每个VM的EVC模式是作为虚拟机设置的属性进行设置的,并为必须使用vMotion迁移的VM提供了更多的管理灵活性。VM硬件兼容性必须为版本14或更高。每个VM的EVC模式的配置保存在VM的VMX配置文件中,其中包含包含featMask.vm.cpuid字符串的行。当配置了每个VM的EVC模式的VM迁移时,其存储在VMX文件中的EVC配置将与VM一起迁移。每个VM的EVC模式设置可以在VM关闭时更改(关闭和打开VM以应用更改的每个VM的EVC模式设置)。

如果您为已经配置全局EVC模式的群集中的VM启用了每个VM的EVC模式,则每个VM的EVC模式可以等于或低于整个群集中设置的EVC模式。因此,可以同时配置全局和每个VM的EVC模式。克隆VM后,每个VM的EVC设置将与VM一起克隆。

为了配置每个VM的EVC模式,请打开VMware vSphere HTML5客户端,转到主机和群集,然后选择所需的VM。打开配置选项卡,选择更多> VMware EVC,然后点击编辑

如何在群集中启用EVC模式而无需停机

在某些情况下,您可以在整个群集中启用EVC模式而无需任何VM停机(通常,必须关闭和开启VM才能应用群集EVC模式设置)。如果满足以下要求,则可以实现这一点:

  • 正在运行的VM位于具有最旧处理器的ESXi主机上
  • 群集中的EVC模式配置为使用与最旧处理器的代数匹配的CPU指令集

为vCenter VM启用EVC模式

在VMware vSphere环境中,可能会遇到以下常见情况:

vCenter Server作为VM运行在必须添加到启用了EVC模式的群集中的ESXi主机上。

问题在于启用EVC后,无法将运行VM(包括运行vCenter的VM)的ESXi主机添加到集群中,直到关闭所有VM。另一方面,需要运行vCenter的VM来管理集群,因为目前正在使用,无法关闭vCenter VM。当vCenter VM在具有更新处理器的ESXi主机上运行时,这个问题尤为严重。

注意:建议在这种情况下使用标准vSwitch(而不是分布式vSwitch)将运行vCenter的VM连接到网络。

A possible solution. Consider the algorithm that can help you to resolve the issue for VMware vSphere 5.5:

  1. 如果集群中尚无ESXi服务器,请将另一个ESXi服务器(不运行vCenter VM)移至集群。必须关闭要移至集群的ESXi服务器上的VM。
  2. 关闭运行vCenter Server的VM。使用VMware Host Client连接到vCenter VM所在的ESXi主机,注销VM,或使用SSH客户端复制文件。在VMware Host Client中,右键单击vCenter VM,然后单击注销。手动将vCenter VM的所有文件复制到已在步骤1中移动到集群的ESXi服务器连接的数据存储。如果两个ESXi主机都使用NFS或iSCSI共享存储,则无需将VM文件复制到另一个位置。

注意:在将VM从一个ESXi主机移动到另一个ESXi主机之前,可能需要手动设置运行vCenter Server的虚拟网络适配器的MAC地址。

  1. 将已移至集群的 ESXi 主机上的 vCenter VM 注册(使用 VMware Host Client 连接到 ESXi 主机,打开数据存储,定位 vCenter VM 的文件,选择 VMX 文件,右键单击文件并点击 注册 VM)。在集群中的此 ESXi 主机上运行 vCenter VM。使用 VMware vSphere Client 登录 vCenter,确保您可以使用 vCenter 管理您的 vSphere 环境。您可能需要暂时禁用准入控制。
  2. 将最初运行 vCenter VM 的源 ESXi 主机移至集群。在移动主机之前,如有需要,请关闭该 ESXi 主机上的其他 VM。

结论

增强 vMotion 能力(EVC)是一个有用的 VMware vSphere 功能,可保持您的集群可扩展性,并允许您将具有不同处理器世代的节点添加到集群,以在支持 vMotion 的 ESXi 主机之间执行 VM 实时迁移。EVC 模式屏蔽了新一代处理器的功能,以创建与集群中 ESXi 主机使用的最老处理器世代的功能相匹配的统一基线。因此,您拥有一个所有处理器使用相同指令集且正在运行的 VM 可以使用 vMotion 迁移的同质环境。许多使用集群的 VMware 客户使用 EVC 模式。建议您在创建集群阶段启用 EVC 模式,以避免与添加 ESXi 主机和迁移正在运行的 VM(包括运行 vCenter Server 的 VM)相关的可能问题。

无论您是否使用集群,都不要忘记备份 VMware VM。NAKIVO Backup & Replication 是一种快速、可靠且价格合理的数据保护解决方案,可以保护您的 VMware VM,即使这些 VM 在集群中的 ESXi 主机之间迁移。

Source:
https://www.nakivo.com/blog/how-vmware-evc-mode-works-overview/