本文将介绍由 VirtualCenter 2.x 或 vCenter Server 4.x 管理的 ESX 主机之间的 vMotion CPU 兼容性重要限制。有关由 VirtualCenter 1.x 管理的 ESX 主机之间的 vMotion CPU 兼容性重要限制,请参见 vMotion CPU Compatibility - Migrations Prevented Due to CPU Mismatch - How to Override Masks for VirtualCenter 1.x (1011354)。
警告:除非明确说明,否则 VMware 既不支持也不推荐修改由 SSE3 等应用程序使用的 vMotion 的 CPU 功能约束,因为在迁移之后存在应用程序或客户机操作系统出现故障的风险。ESX 3.5 和更高版本中的一些掩码可获得实验性支持。和有关详细信息,请参见 http://www.vmware.com/support/policies/experimental.html。
VMware 建议使用 Enhanced vMotion Compatibility (EVC) 来消除大部分 vMotion CPU 兼容性问题。有关 EVC 的详细信息, 请参见 Enhanced vMotion Compatibility (EVC) processor support (1003212)。
要确定源 CPU 和目标 CPU 是否符合 vMotion 要求,VirtualCenter 和 vCenter Server 会将目标 CPU 与默认的位掩码定义进行比较,以通过比较排除不重要的功能。随着处理器供应商引入新的功能,VirtualCenter 和 vCenter Server 使用的位掩码也会随之更新 。例如,在 ESX Server 2.x 中,不使用 NX (AMD) 或 XD (Intel) 功能来计算 vMotion 兼容性,但在 ESX 3.x 中,则使用该功能。
要禁用 vMotion 对某一特定功能进行 CPU 兼容性检查,您可以修改默认的位掩码。在某些 VMware 文档中,位掩码修改过程有时也称作“放宽”特定约束。
有关基本组件以及 VirtualCenter Server 和 ESX Server 主机系统如何处理它们的所有内容已超出本文的讨论范围。有关详细信息,请参见 Basic System Administration 中的“CPU 兼容性掩码”。其他有用资源可以在 VMware vMotion and CPU Compatibility 技术文章中找到。
有关 Intel 和 AMD CPU 以及 vMotion 兼容性的特定信息,请参见:
掩码 | ESX 2.x | ESX 3.x | ESX 4.x |
CMPXCHG16B (AMD) | 不支持 | 在 ESX 3.5 之前不支持。在 ESX 3.5 和更高版本中获实验支持。 | 实验支持 |
FFXSR (AMD) | 不支持 | 不支持 | 不支持 |
NX (AMD) | 支持 | 支持 | 支持 |
RDTSCP (AMD) | 不支持 | 在 ESX 3.5 之前不支持。在 ESX 3.5 和更高版本中获实验支持。 | 实验支持 |
SSE3 (AMD) | 不支持 | 在 ESX 3.5 之前不支持。在 ESX 3.5 和更高版本中获实验支持。 | 实验支持 |
SSE3 (Intel) | 不支持 | 不支持 | 不支持 |
SSE4.1 (Intel) | 不支持 | 在 ESX 3.5 之前不支持。在 ESX 3.5 和更高版本中获实验支持。 | 实验支持 |
SSE4.2 (Intel) | 不支持 | 在 ESX 3.5 之前不支持。在 ESX 3.5 和更高版本中获实验支持。 | 实验支持 |
XD (Intel) | 支持 | 支持 | 支持 |
AES (Intel) | 不支持 | 在 ESX 3.5 之前不支持。在 ESX 3.5 和更高版本中获实验支持。 | 实验支持 |
在此处,可以根据要屏蔽的内容,为选定的虚拟机适当修改此掩码。下述部分介绍用于修改几个通用 CPU 寄存器的掩码的步骤。
CPU 的 NX/XD 功能存在共同的问题。请确保在所有主机的 BIOS 中启用(或禁用)了此功能,以避免出现这些兼容性错误消息。
注意:并不是所有的服务器都可以选择在 BIOS 中禁用或启用 NX 或 XD。
如果 NX/XD 位出现 CPU 功能兼容性问题,将会出现类似下面的错误:
主机的 CPU 与虚拟机的 CPU 功能要求不兼容;在 CPUID 级别 0x80000001 注册“edx”时检测到问题 (The CPU of the host is incompatible with the cpu feature requirements of virtual machine; problem detected at CPUID level 0x80000001 register 'edx')。
请先关闭虚拟机电源,然后修改 NX/XD 掩码。
要修改此掩码以启用或禁用 NX/XD CPU 位,请执行以下操作:
要为 vMotion 提供更高的兼容性,可以修改几个其他功能的掩码。vMotion CPU Compatibility Requirements for Intel Processors (1991) 中列出了这些功能掩码的支持情况。由于在迁移之后存在应用程序或客户机操作系统出现故障的风险,因此,VMware 通常不支持也不推荐修改应用程序(如,SSE3)使用的 vMotion 的 CPU 功能约束。
请先关闭虚拟机电源,然后修改其位掩码。
要修改其他 CPU 掩码,请执行以下操作:
要修改特定功能的掩码,请输入一系列短横线和 0,如下表中所示:
功能 | 级别 | 行 | 掩码 |
SSE3 | 1 | ecx | ---- ---- ---- ---- ---- ---- ---0 -0-0 |
SSSE3 | 1 | ecx | ---- ---- ---- -0-- ---- --0- ---0 -0-- |
1 | edx | ---- ---- ---- --0- ---- ---- ---- ---- | |
SSE4.1 | 1 | ecx | ---- ---- ---- 0--- ---- ---- ---- ---- |
SSE4.2 | 1 | ecx | ---- ---- 0--0 ---- ---- ---- ---- ---- |
80000001 | edx | ---- 0--- ---- ---- ---- ---- ---- ---- | |
AES | a | ecx | ---- --0- ---- ---- ---- ---- ---- --0- |
AMD 覆盖选项卡上列出了特定于 AMD 处理器的功能,并可对这些功能进行更改。vMotion CPU Compatibility Requirements for AMD Processors (1992) 中列出了这些功能掩码的支持情况。由于在迁移之后存在应用程序或客户机操作系统出现故障的风险,因此,VMware 通常不支持也不推荐修改应用程序(如,SSE3)使用的 vMotion 的 CPU 功能约束。
请先关闭虚拟机电源,然后修改其位掩码。
要修改 AMD 处理器的其他 CPU 掩码,请执行以下操作:
要修改特定功能的掩码,请输入一系列短横线和 0,如下表中所示。
功能 | 级别 | 行 | 掩码 |
SSE3 | 1 | ecx | ---- ---- ---- ---- ---- ---- ---- ---0 |
RDTSCP | 80000001 | edx | ---- 0--- ---- ---- ---- ---- ---- ---- |
80000001 | ecx | ---- ---- ---- ---- ---- ---- ---- 0--- | |
CMPXCH16B | 1 | ecx | ---- ---- ---- ---- --0- ---- ---- ---- |
FFXSR | 80000001 | edx | ---- --0- ---- ---- ---- ---- ---- ---- |
在完成所有修改后,请单击确定,然后退出“CPU 标识掩码”对话框。
您可以将所做修改合并到默认的位掩码中,以允许根据多个 CPU 功能使用 vMotion 在不兼容的组之间迁移。例如,要取消对 SSE3 和 SSSE3 的兼容性检查,请组合以下内容:
---- ---- ---- ---- ---- ---- ---0 -0-0
和
---- ---- ---- -0-- ---- --0- ---0 -0--
以形成:
---- ---- ---- -0-- ---- --0- ---0 -0-0
用于 ecx 寄存器掩码。
对于 VirtualCenter 或 vCenter Server 管理的 ESX/ESXi 主机,您可以通过手动编辑 VirtualCenter 或 vCenter Server 配置文件 ( vpxd.cfg ) 全局修改位掩码。配置文件 vpxd.cfg 包含可为 VirtualCenter Server 或 vCenter Server 系统定义各种元素和设置的 XML 标记。可通过添加适当的 XML 标记来修改位掩码,以将客户机操作系统配置选项上下文中的掩码定义为配置文件。
只有在关闭并再次打开虚拟机电源后,对全局位掩码的更改才会在虚拟机中生效。
注意:默认情况下, vpxd.cfg 文件位于 C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter
虽然有关构建这些元素的所有内容已超出本文章的讨论范围,但关于标记部分中提供了相关的简述。请参见下述部分以了解与编辑配置文件和通用掩码模式(如 SSE3、SSSE3 以及 SSE3 和 SSSE3 的组合)的 XML 标记相关的特定操作。
警告:由于在迁移之后存在应用程序或客户机操作系统出现故障的风险,因此,VMware 不支持也不推荐修改应用程序(如 SSE3)使用的 vMotion 的 CPU 功能约束。
这些标记可标识掩码适用的寄存器和掩码适用的主机和版本。在 vpxd.cfg 文件中,这些标记是 <vpxd> <vpxd></vpxd>标记的直接子级。标记按嵌套顺序列出:
<guestosdescriptor></guestosdescriptor><guestOSDescriptor> — <vpxd> <vpxd></vpxd>元素的直接子级(子)标记。 vpxd.cfg 包含单个 guestOSDescriptor 元素。 < host-product-and-version> — 在 <guestOSDescriptor> <guestosdescriptor></guestosdescriptor>的起始和结束标记之间,您可以嵌套多个 host-product-and-version-tags 以指定您定义的掩码适用的版本和主机。通常,可以指定 <host-product-and-version> <host-product-and-version></host-product-and-version>标记,如 <esx-2-x-x> <esx-2-x-x></esx-2-x-x>(对于 ESX Server 2.x 主机)和 <esx-3-x-x> <esx-3-x-x></esx-3-x-x>(对于 ESX/ESXi 3.x 主机)中所示,也可以精确指定该标记,如 <esx-3-5-0> <esx-3-5-0></esx-3-5-0>中所示。例如, <esx-2-5-x> <esx-2-5-x></esx-2-5-x>标记可标识后续嵌套的掩码适用的 ESX Server 的各种维护版本级别。 <virtual-machine-configuration-hardware-version></virtual-machine-configuration-hardware-version><virtual-machine-configuration-hardware-version> — 允许通过虚拟机硬件版本限制配置。例如, <all-versions> 、 <vmx-03> <vmx-03></vmx-03>或 <vmx-04> <vmx-04></vmx-04>。在下例中,指定了 <all-versions> ,这意味着掩码适用于所有虚拟机硬件版本。 <virtual-machine version="" guest=""></virtual-machine><virtual-machine guest version> — 允许指定客户机版本。例如, <all-guests> 、 <winXPPro64Guest> <winxppro64guest></winxppro64guest>、 <winVistaGuest> <winvistaguest></winvistaguest>等。在下例中,指定了 <all-guests> ,因此,此掩码适用于所有客户机版本。 <cpufeaturemask></cpufeaturemask><cpuFeatureMask> — 此标记在实际掩码之前。然后,根据需要为 <default-vendor> <default-vendor></default-vendor>、 <amd> 或 <intel> <intel></intel>定义此掩码。用于定义此掩码的标记元素可标识 CPU 掩码。元素详细信息包含供应商、CPU ID 级别和 CPU 寄存器。这些信息的有效选项如下所示:
CPU 供应商 <default-vendor></default-vendor><default-vendor>, <amd>, <intel> <intel></intel> CPU ID 级别 <level-0>, <level-1>, <level-80000000>, <level-80000001> <level-0></level-0><level-1></level-1><level-80000000></level-80000000><level-80000001></level-80000001> CPU 寄存器 <eax>, <ebx>, <ecx>, <edx> <eax></eax><ebx></ebx><ecx></ecx><edx></edx>
必须按上表中所示的顺序嵌入标记。CPU-vendor 标记后跟 CPU-ID-level 标记,再后跟 CPU-register 标记。CPU-register 标记后是连续的 32 个短横线和 x-s,表示实际上有 32 位寄存器掩码适用于要修改的功能。然后,此掩码后跟 CPU-register-、CPU-ID-level- 和 CPU-vendor- 结束标记。
注意:只有未为同一 CPU ID 级别指定特定于供应商的掩码时,系统才会使用利用 <default-vendor></default-vendor>标记定义的掩码 <default-vendor> 。
在您完成掩码定义后,请以 </guestOSDescriptor> 标记结束。
下面是标记顺序的示例,如 vpxd.cfg 文件的上下文中所示。 <config> <config></config>和 <vpxd> <vpxd></vpxd>起始和结束标记位于 vpxd.cfg 文件中。 <guestOSDescriptor> <guestosdescriptor></guestosdescriptor>起始标记可直接放在 <vpxd> <vpxd></vpxd>起始标记之后,嵌入符合您需求的相应标记,后跟 </guestOSDescriptor> 结束标记。
在此示例中 ,[Elements and mask...] 占位符部分中嵌入的任何掩码适用于 VirtualCenter Server 管理的所有 ESX Server 2.x 主机,并且适用于所有客户机操作系统。
要编辑 VirtualCenter 配置文件,请执行以下操作:
<cpufeaturemask></cpufeaturemask><cpuFeatureMask>
<default-vendor>
<level-1>
<ecx>----:----:----:-x--:----:--x-:---x:-x-x</ecx>
<edx>----:----:----:--x-:----:----:----:----</edx>
</level-1>
</default-vendor>
<amd>
<level-1>
<ecx>----:----:----:----:----:----:----:---x</ecx>
</level-1>
</amd>
</cpuFeatureMask>
<default-vendor></default-vendor>
<level-1></level-1><ecx></ecx><level-1></level-1><ecx></ecx>
通过将所做的任意更改还原到默认掩码,可还原到默认的 vMotion 兼容性约束。这可以通过执行所应用的掩码类型的相应步骤来完成: