vMotion CPU 兼容性 - 由于 CPU 不匹配,阻止迁移 - 如何覆盖掩码
search cancel

vMotion CPU 兼容性 - 由于 CPU 不匹配,阻止迁移 - 如何覆盖掩码

book

Article ID: 301431

calendar_today

Updated On:

Products

VMware vCenter Server VMware vSphere ESXi

Issue/Introduction

Symptoms:
免责声明:本文为 vMotion CPU Compatibility - Migrations Prevented Due to CPU Mismatch - How to Override Masks (1993)的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。

本文将介绍由 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)


Environment

VMware vSphere ESXi 5.0
VMware ESXi 3.5.x Embedded
VMware vCenter Server 5.1.x
VMware vCenter Server 4.0.x
VMware vSphere ESXi 6.0
VMware vSphere ESXi 5.5
VMware ESX Server 3.0.x
VMware ESX Server 2.0.x
VMware vCenter Server 5.0.x
VMware ESX Server 3.5.x
VMware VirtualCenter 2.5.x
VMware ESXi 4.0.x Installable
VMware VirtualCenter 2.0.x
VMware ESX Server 2.1.x
VMware ESXi 3.5.x Installable
VMware ESX 4.1.x
VMware vSphere ESXi 5.1
VMware vCenter Server 5.5.x
VMware ESXi 4.0.x Embedded
VMware vCenter Server 4.1.x
VMware ESX 4.0.x
VMware vCenter Server 6.0.x
VMware ESX Server 2.5.x
VMware ESXi 4.1.x Installable
VMware ESXi 4.1.x Embedded

Resolution

如果您有最新的 Intel 45nm Core 2 CPU,并且 VirtualCenter 或 vCenter Server 中的消息指向本文章,请参考 vMotion errors between different Intel 45nm Core 2 revisions (1008315)
在 ESX/ESXi 3.5 Update 2 和更高版本中,VMware 建议使用 Enhanced vMotion Compatibility (EVC) 来消除大部分 vMotion CPU 兼容性问题。有关 EVC 的详细信息,请参见 Enhanced vMotion Compatibility (EVC) processor support (1003212)
默认情况下,VirtualCenter 和 vCenter Server 仅允许在兼容源和目标 CPU 之间使用 vMotion 进行迁移。本文提供了有关何时适合覆盖 CPU 兼容性约束以及如何覆盖它们的信息,并提供指向其他信息和资源的链接。主题包括:

背景

为实现 vMotion,兼容 CPU 意味着源 CPU 和目标 CPU 必须具有相同的制造商(AMD 或 Intel),是同一基本处理器系列的成员(例如,Pentium 4 或 Core ),并且实现了一组通用的功能。

要确定源 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 兼容性的特定信息,请参见:

简而言之,对 vMotion 的 CPU 兼容性的默认位掩码的修改也简称为掩码,通常由 CPU 功能标识 — 例如,本文和相关的知识库文章 1991 和 1992 中的 SSE3 掩码。
许多掩码都不受支持。ESX 3.5 和更高版本中的一些掩码可获得实验支持。下表中汇总了掩码的支持情况。

掩码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 位掩码,具体取决于 ESX/ESXi 版本和具体需求。
  • 使用任何 ESX/ESXi 或 ESX Server 版本:您都可以按处理器制造商、版本号和其他标准在 VirtualCenter Server 或 vCenter Server 级别修改默认的位掩码。此方法不受支持,并且在使用 vMotion 进行迁移期间,尝试使用屏蔽功能的应用程序可能会崩溃。
  • ESX/ESXi 3.x 及更高版本:您可以使用 VI Client 或 vSphere Client 按每个虚拟机修改位掩码。由于可能存在应用程序或客户机操作系统不稳定风险,因此,您必须先关闭虚拟机电源,然后才能进行这些修改。此方法的支持情况如 vMotion CPU Compatibility Requirements for Intel Processors (1991)(适用于 Intel 处理器)和 vMotion CPU Compatibility Requirements for AMD Processors (1992)(适用于 AMD 处理器)中所列。

CPU 标识工具

要获得有关主机系统 CPU 的详细信息,请使用 CPU 标识实用程序。即使在安装操作系统或 ESX 之前,VMware 也可将此作为 ISO 映像文件提供,可通过对该文件进行解压创建可引导 CD-ROM,以提供有关主机的 CPU 信息。此工具的最新版本可在 VMware 下载页面上找到,此下载页面网址为 http://vmware.com/download/shared_utilities.html

使用 ESX/ESXi 3.x 和更高版本屏蔽每个虚拟机

在 Virtual Center 2.x 和 vCenter Server 4.x 中,您可以使用 VI Client 或 vSphere Client 为每个虚拟机修改默认的位掩码。请先关闭虚拟机电源,然后修改其位掩码。
要修改虚拟机的默认位掩码,请执行以下操作:
  1. 启动 VI Client 或 vSphere Client,然后以管理员身份连接到 VirtualCenter Server 或 vCenter Server。
  2. 在清单中选择要迁移的虚拟机。
  3. 单击摘要选项卡上的编辑设置。将显示虚拟机的“属性”窗口。
  4. 单击“属性”窗口中的选项选项卡。
  5. 选择 CPUID 掩码选项以显示 CPU 标识掩码信息和设置。
  6. 单击高级会在右侧窗格中显示几个设置相关的框,其中包括 CPU 标识掩码。

在此处,可以根据要屏蔽的内容,为选定的虚拟机适当修改此掩码。下述部分介绍用于修改几个通用 CPU 寄存器的掩码的步骤。

修改默认 NX/XD 掩码

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 位,请执行以下操作:

  1. 导航到虚拟机选项选项卡上的 CPUID 掩码选项(如果有必要,请参见上述步骤)。
  2. 选择对客户机隐藏 NX 标志以禁用对选定虚拟机进行 CPU 兼容性检查,或选择向客户机公开 NX 标志以启用对选定虚拟机进行 CPU 兼容性检查。
  3. 单击确定保存所做更改。

修改 Intel CPU 的默认掩码

要为 vMotion 提供更高的兼容性,可以修改几个其他功能的掩码。vMotion CPU Compatibility Requirements for Intel Processors (1991) 中列出了这些功能掩码的支持情况。由于在迁移之后存在应用程序或客户机操作系统出现故障的风险,因此,VMware 通常不支持也不推荐修改应用程序(如,SSE3)使用的 vMotion 的 CPU 功能约束。

请先关闭虚拟机电源,然后修改其位掩码。

要修改其他 CPU 掩码,请执行以下操作:

  1. 导航到虚拟机的选项选项卡(如果有必要,请参见上述步骤)。
  2. 单击高级以打开“CPU 标识掩码”属性对话框。

    注意:“CPU 标识掩码”对话框具有两个选项卡 —虚拟机默认值AMD 覆盖。可以在虚拟机默认值选项卡上进行大部分 Intel CPU 功能修改。可以在 AMD 覆盖选项卡上进行 AMD CPU 功能修改,这将在本文的下一部分讨论。

  3. 如果有必要,单击虚拟机默认值选项卡以激活此对话框。

要修改特定功能的掩码,请输入一系列短横线和 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-

在完成所有修改后,请单击确定,然后退出“CPU 标识掩码”对话框。

修改 AMD CPU 的掩码

AMD 覆盖选项卡上列出了特定于 AMD 处理器的功能,并可对这些功能进行更改。vMotion CPU Compatibility Requirements for AMD Processors (1992) 中列出了这些功能掩码的支持情况。由于在迁移之后存在应用程序或客户机操作系统出现故障的风险,因此,VMware 通常不支持也不推荐修改应用程序(如,SSE3)使用的 vMotion 的 CPU 功能约束。

请先关闭虚拟机电源,然后修改其位掩码。

要修改 AMD 处理器的其他 CPU 掩码,请执行以下操作:

  1. 导航到虚拟机的选项选项卡(如果有必要,请参见上述步骤)。
  2. 单击高级以打开“CPU 标识掩码”属性对话框。
  3. 单击 AMD 覆盖选项卡以激活此对话框。将会显示“AMD 覆盖”页面。

要修改特定功能的掩码,请输入一系列短横线和 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 寄存器掩码。


使用 ESX Server 2.x 和更高版本进行全局屏蔽

对于 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> 结束标记。

<config></config><config>
<vpxd>
<guestOSDescriptor>
<esx-2-x-x>
<all-versions>
<all-guests>
<cpuFeatureMask>

<vpxd></vpxd><guestosdescriptor></guestosdescriptor><esx-2-x-x></esx-2-x-x><cpufeaturemask></cpufeaturemask>[元素和掩码定义位于此处。可以从下列模式示例中复制粘贴通用掩码模式。]
</cpuFeatureMask>
</all-guests>
</all-versions>
</esx-2-x-x>
</guestOSDescriptor>
...

</vpxd>

</config>

在此示例中 [Elements and mask...] 占位符部分中嵌入的任何掩码适用于 VirtualCenter Server 管理的所有 ESX Server 2.x 主机,并且适用于所有客户机操作系统。

编辑 VirtualCenter 配置文件

要编辑 VirtualCenter 配置文件,请执行以下操作:

  1. 导航到 vpxd.cfg 文件所在的位置。默认情况下, vpxd.cfg 文件位于 C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter 目录中。
  2. 使用文本编辑器(如写字板)打开 vpxd.cfg 文件。 vpxd.cfg 文件是 XML 格式的文本文件,其中包含 VirtualCenter Server 或 vCenter Server 系统的各种可选设置。
  3. 添加起始和结束标记,以标识掩码适用的主机、版本和其他特定属性。
  4. 从通用掩码模式中复制和粘贴,或根据部署需要应用其他掩码。
  5. 在进行适当的更改后,请重新启动 VMware VirtualCenter Server 服务以启用新屏蔽功能。

通用掩码模式

以下是几个通用 CPU 功能掩码的掩码示例。请根据环境需要复制、粘贴和修改它们。由于在迁移后可能存在应用程序或客户机操作系统出现故障的风险,因此 VMware 不支持也不建议使用下面显示的掩码。

SSE3
<cpuFeatureMask>
<default-vendor>
<level-1>
<ecx>----:----:----:----:----:----:---x:-x-x</ecx>
</level-1>
</default-vendor>
<amd>
<level-1>
<ecx>----:----:----:----:----:----:----:---x</ecx>
</level-1>
</amd>
</cpuFeatureMask>

<default-vendor></default-vendor>
<level-1></level-1>
SSSE3
<cpufeaturemask></cpufeaturemask><cpuFeatureMask>
<default-vendor>
<level-1>
<ecx>----:----:----:-x--:----:--x-:---x:-x--</ecx>
<edx>----:----:----:--x-:----:----:----:----</edx>
</level-1>
</default-vendor>
</cpuFeatureMask>


SSE3 和 SSSE3 的组合

<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>

还原到默认 CPU 兼容性位掩码

通过将所做的任意更改还原到默认掩码,可还原到默认的 vMotion 兼容性约束。这可以通过执行所应用的掩码类型的相应步骤来完成:

  • 在使用每虚拟机掩码时,请通过单击“CPU 标识掩码”对话框上的全部重置为默认值来将任何更改的行重置为默认值。
  • 在使用全局掩码时:删除在 vpxd.cfg 文件中输入的任何添加的标记,然后重新启动 VirtualCenter 服务。


其他信息:

有关本文的翻译版本,请参见:


Additional Information

vMotion CPU Compatibility - Migrations Prevented Due to CPU Mismatch - How to Override Masks