20.40.4. 确定兼容的 CPU 型号来保证主机物理机器池
现在,可以找出单一主机物理计算机具有的 CPU 功能,下一步是决定哪些 CPU 功能最好向客户机虚拟机公开。如果已知客户机虚拟机绝不需要迁移到另一台主机物理计算机,则主机物理机器 CPU 模型可以直接通过未修改进行传递。虚拟化数据中心可能具有一组配置,它可以保证所有服务器都拥有 100% 的相同 CPU。同样,可以通过未修改来直接传递主机物理机器 CPU 模型。然而,较常见的情况是主机物理机器之间的 CPU 变化。在这种混合 CPU 环境中,必须确定最低的 denominator CPU。这并不完全直接,因此 libvirt 为此任务提供了一个 API。如果 libvirt 是 XML 文档列表,每个文档都描述主机物理计算机的 CPU 模型,libvirt 在内部将其转换为 CPUID 掩码,计算它们的交集,并将 CPUID 掩码结果转换为 XML CPU 描述。
以下是执行 virsh 功能时 libvirt 作为基本工作站功能 的一个示例:
图 20.4. 拉取主机物理机器的 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 命令:
图 20.5. 从随机服务器生成 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 中缺少几个功能。为了能够在客户端和服务器之间迁移,需要打开 XML 文件并注释掉一些功能。要确定需要删除哪些功能,请在包含两台计算机的 CPU 信息运行 virsh cpu
- baseline 命令。运行 # virsh cpu-baseline two-cpus.xml 将生成:
图 20.6. 复合 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>
此复合文件显示哪些元素是通用的。不常见的一切都应被注释掉。