(图片来源网络,侵删)
我们都知道,CPU的更新升级速度是遵循摩尔定律的,换句话而言,CPU更新换代很快举个例子说明,比如现在英特尔目前主流用在X86服务器上的至强铂金银铜系列CPU最新是4代,今年采购了一批服务器,随着业务增长,两三年后,可能需要再采购一批进行扩容,但是这个时候,你会发现CPU有可能去到了第5代或第6代了这对于虚拟化平台来说,这里会存在一个问题,就是同一个集群的主机间的CPU代数相差太大或者CPU指令集之间存在差距,这就会vMotion失败但VMware帮我们考虑了这个问题,就是今天要说的主角EVC,EVC全称vSphere 增强型 vMotion 兼容性 (EVC),该功能可确保可以使用 vMotion 在群集中运行不同 CPU 代次的 ESXi 主机之间实时迁移(vMotion)虚拟机我强烈建议各位技术兄弟们,在给客户实施时,一般情况下建议启用 EVC,因为它能很好地帮助客户在日后做集群扩容时,可无缝支持添加不同CPU代数的新主机,并完美支持vMotion注意:如果集群已经有虚拟机在运行,再去开启EVC功能的话,就需要将虚拟机迁移出去或关机,这会非常麻烦,这就是为什么我们强调从一开始就启用它本文详细介绍 EVC 功能的作用机制和用途EVC 如何工作?EVC 的底层实现原理也不复杂,就是为同一集群上所有ESXi 主机上运行的虚拟机强制实施同一 CPUID(指令)基准这意味着 EVC 将根据所选和支持的兼容性级别允许并向虚拟机公开 CPU 指令集如果要将包含较新 CPU 包的较新主机添加到群集,则 EVC 可能会隐藏对虚拟机的新 CPU 指令通过这样做,EVC 可确保群集中的所有虚拟机都在同一 CPU 指令上运行,从而允许在 ESXi 主机之间实时迁移虚拟机 (vMotion)EVC 使用 CPUID 确定要从客户机操作系统屏蔽哪些指令基本上,您可以将CPUID视为CPU的API它允许 EVC 了解 CPU 能够执行哪些指令集,以及根据配置的 EVC 基线需要屏蔽哪些指令在群集上启用 EVC 后,群集中的所有 ESXi 主机都必须遵守该设置每虚拟机 EVCEVC 是支持群集内虚拟机移动的群集级别设置将虚拟机移动到另一个群集(本地或混合云环境中)时,它会丢失其 EVC 配置,具体取决于目标环境除此之外,在具有实时工作负载的环境中更改群集 EVC 基线具有挑战性通过实施每虚拟机 EVC,EVC 模式将成为虚拟机的属性,而不是它恰好在群集中引导的特定处理器代系这有助于在 EVC 启用和基线方面更加灵活我们在 vSphere 6.7 中引入了每虚拟机 EVC 功能需要虚拟机硬件版本 14 或更高版本才能启用每虚拟机 EVC关闭虚拟机电源后,可以更改每个虚拟机的 EVC 基准每个 EVC 的配置保存在 vmx 文件中vmx 文件是用作提供虚拟机配置的值字典的文件如果将虚拟机迁移到另一个群集,则每个 EVC 的配置将与虚拟机本身一起移动启用每虚拟机 EVC 时,vmx 文件将包含如下所示的 featMask.vm.cpuid 行:featMask.vm.cpuid.Intel = “Val:1” featMask.vm.cpuid.FAMILY = “Val:6” featMask.vm.cpuid.MODEL = “Val:0x4f” featMask.vm.cpuid.STEP = “Val:0” featMask.vm.cpuid.NUMLEVELS = “Val:0xd”启用EVC是否会影响虚拟机性能?很多客户可能会关注一个问题,启用了EVC后,会不会对虚拟机的性能产生额外的开销并且影响很大?实际,关于这一点,VMware已经明确给出了答复,只要设置得当,影响就不大,VMware专门出了一份技术白皮书去说明这个问题如下图所示:这份技术白皮书提到,只有当群集中存在型号和代数很旧的CPU这类服务器,而管理员又选择 EVC 模式以与较旧的处理器保持一致的情况,可能会在某些场景下发生某些特定操作的性能损失例如,由于AES功能的丢失,选择“Westmere”之前的EVC模式可能会导致“Westmere”或“Westmere”之后的系统的性能损失多媒体工作负载(视频编码)在进入英特尔“Merom”一代(由于丢失 SSE4.1)时显示出轻微的性能损失除此之外,其他类型的工作负载通过降级到较旧的处理器代没有明显的性能损失检查 EVC 配置要深入了解您的环境和使用的 EVC 配置,可以使用脚本以下代码片段允许创建概述,其中包括虚拟机和群集 EVC 级别旁边的虚拟机 EVC 级别由于它是表格数据,因此可以通过添加 |转换为 CSV 1234Get-VM | Select Name,HardwareVersion,@{Name='VM_EVC_Mode';Expression={$_.ExtensionData.Runtime.MinRequiredEVCModeKey}},@{Name='Cluster_Name';Expression={$_.VMHost.Parent}},@{Name='Cluster_EVC_Mode';Expression={$_.VMHost.Parent.EVCMode}} | ft运行此 PowerCLI 命令将使您深入了解启用 EVC 时配置的 EVC 基线启用群集 EVC 模式后,脚本将显示使用的基线它还显示 VM 硬件版本,因为每个 EVC 仅适用于 VM 硬件版本 14 及更高版本如果虚拟机配置了每虚拟机 EVC,则基准可能与群集 EVC 配置不同在以下扩展输出中,你将注意到虚拟机“DB01”具有与群集设置不同的每虚拟机 EVC 基线这是受支持的情况但是,如果虚拟机每虚拟机 EVC 基准高于群集中 ESXi 主机支持的基准,则虚拟机将不会打开电源,因为没有与其每虚拟机 EVC 基准兼容的主机应始终验证 ESXi 主机是否支持配置的 EVC 基准,以确保它可以容纳运行每虚拟机 EVC 配置的虚拟机如果需要有关 ESXi 主机以及支持的最大 EVC 级别的信息,可以发出以下 PowerCLI 命令: 1Get-VMHost | Select-Object Name,ProcessorType,MaxEVCMode输出显示 ESXi 主机、它们正在运行的 CPU 包以及支持的最大 EVC 基准总结如前所述,一般建议启用 EVC,启用 EVC 功能后,您将充分使用vMotion功能去灵活调度和平衡集群资源
0 评论