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>
此复合文件显示哪些元素是通用的。不常见的一切都应被注释掉。