Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

14.16.3. 确定兼容的 CPU 型号以 Suit a Pool of Host Physical Machines

现在,可以找出单个主机物理机器拥有的 CPU 功能,下一步是确定哪些 CPU 功能最适合公开给客户机虚拟机。如果已知 guest 虚拟机绝不需要迁移到另一台主机物理机器,则主机物理机器 CPU 模型可以直接通过未经修改的方式进行传递。虚拟化数据中心可能具有一组配置,可保证所有服务器具有 100% 相同的 CPU。再次通过未修改的方式传递主机物理机器 CPU 模型。尽管如此,但 CPU 在主机物理机器之间有变化的情况。在这种混合 CPU 环境中,必须确定最低共用的 denominator CPU。这不是完全直接的,因此 libvirt 提供一个 API 来执行此任务。如果 libvirt 提供了 XML 文档列表,每个描述主机物理机器的 CPU 模型,libvirt 将在内部将它们转换为 CPUID 掩码,计算它们的交集,并将 CPUID 掩码结果重新转换为 XML CPU 描述。
以下是执行 virsh 功能时,作为基本工作站功能的libvirt 报告的示例:

图 14.3. 拉取主机物理机器的 CPU 模型信息


<capabilities>
  <host>
    <cpu>
      <arch>i686</arch>
      <model>pentium3</model>
      <topology sockets='1' cores='2' threads='1'/>
      <feature name='lahf_lm'/>
      <feature name='lm'/>
      <feature name='xtpr'/>
      <feature name='cx16'/>
      <feature name='ssse3'/>
      <feature name='tm2'/>
      <feature name='est'/>
      <feature name='vmx'/>
      <feature name='ds_cpl'/>
      <feature name='monitor'/>
      <feature name='pni'/>
      <feature name='pbe'/>
      <feature name='tm'/>
      <feature name='ht'/>
      <feature name='ss'/>
      <feature name='sse2'/>
      <feature name='acpi'/>
      <feature name='ds'/>
      <feature name='clflush'/>
      <feature name='apic'/>
    </cpu>
 </host>
</capabilities>
现在,与任何随机服务器比较,使用相同的 virsh capabilities 命令:

图 14.4. 从随机服务器生成 CPU 描述


<capabilities>
  <host>
    <cpu>
      <arch>x86_64</arch>
      <model>phenom</model>
      <topology sockets='2' cores='4' threads='1'/>
      <feature name='osvw'/>
      <feature name='3dnowprefetch'/>
      <feature name='misalignsse'/>
      <feature name='sse4a'/>
      <feature name='abm'/>
      <feature name='cr8legacy'/>
      <feature name='extapic'/>
      <feature name='cmp_legacy'/>
      <feature name='lahf_lm'/>
      <feature name='rdtscp'/>
      <feature name='pdpe1gb'/>
      <feature name='popcnt'/>
      <feature name='cx16'/>
      <feature name='ht'/>
      <feature name='vme'/>
    </cpu>
    ...snip...
要查看此 CPU 描述是否与先前工作站 CPU 描述兼容,请使用 virsh cpu-compare 命令。
减少的内容存储在名为 virsh-caps-workstation-cpu-only.xml 的文件中,可以在此文件上执行 virsh cpu-compare 命令:
# virsh cpu-compare virsh-caps-workstation-cpu-only.xml
Host physical machine CPU is a superset of CPU described in virsh-caps-workstation-cpu-only.xml
如此输出中所示,libvirt 正确报告 CPU 不严格兼容。这是因为客户端 CPU 中缺少了服务器 CPU 中的一些功能。为了能够在客户端和服务器之间迁移,需要打开 XML 文件并注释掉某些功能。要确定需要删除哪些功能,请在包含两台机器的 CPU 信息的 both-cpus.xml 上运行 virsh cpu-baseline 命令。运行 # virsh cpu-baseline both-cpus.xml,结果如下:

图 14.5. 复合 CPU 基准


<cpu match='exact'>
  <model>pentium3</model>
  <feature policy='require' name='lahf_lm'/>
  <feature policy='require' name='lm'/>
  <feature policy='require' name='cx16'/>
  <feature policy='require' name='monitor'/>
  <feature policy='require' name='pni'/>
  <feature policy='require' name='ht'/>
  <feature policy='require' name='sse2'/>
  <feature policy='require' name='clflush'/>
  <feature policy='require' name='apic'/>
</cpu>
此复合文件显示哪些元素是通用的。并非常见内容应该被注释掉。