Libvirt 没有列出所有支持的 CPU 特性
Libvirt does not list all supported CPU features
我在 Ubuntu 服务器 16.04 上安装了 libvirt-bin。但是我发现奇怪的是 libvirt 没有列出 host.
的所有支持的 CPU 特性。
当我打开文件 /proc/cpuinfo 时,我可以看到 'aes' 在标记列表中。
然而,当我 运行 'virsh capabilities' 时,我得到以下结果,显示 host cpu 没有特征 'aes'。
<capabilities>
<host>
<uuid>30373237-3132-4d32-3236-30383034485a</uuid>
<cpu>
<arch>x86_64</arch>
<model>SandyBridge</model>
<vendor>Intel</vendor>
<topology sockets='1' cores='10' threads='2'/>
<feature name='invpcid'/>
<feature name='erms'/>
<feature name='bmi2'/>
<feature name='smep'/>
<feature name='avx2'/>
<feature name='bmi1'/>
<feature name='fsgsbase'/>
<feature name='abm'/>
<feature name='pdpe1gb'/>
<feature name='rdrand'/>
<feature name='f16c'/>
<feature name='osxsave'/>
<feature name='movbe'/>
<feature name='dca'/>
<feature name='pcid'/>
<feature name='pdcm'/>
<feature name='xtpr'/>
<feature name='fma'/>
<feature name='tm2'/>
<feature name='est'/>
<feature name='smx'/>
<feature name='vmx'/>
<feature name='ds_cpl'/>
<feature name='monitor'/>
<feature name='dtes64'/>
<feature name='pbe'/>
<feature name='tm'/>
<feature name='ht'/>
<feature name='ss'/>
<feature name='acpi'/>
<feature name='ds'/>
<feature name='vme'/>
</cpu>
...
然后我打开文件/usr/share/libvirt/cpu_map.xml,可以看到下面CPU个模型,这意味着Sandbridge继承自Westmere,它应该具有'aes'的特征。
<model name='Westmere'>
<model name='Nehalem'/>
<feature name='aes'/>
</model>
<model name='SandyBridge'>
<model name='Westmere'/>
<feature name='pclmuldq'/>
<feature name='x2apic'/>
<feature name='tsc-deadline'/>
<feature name='xsave'/>
<feature name='avx'/>
<feature name='rdtscp'/>
</model>
我认为 /proc/cpuinfo 中的标志列表应该是正确的,因为它是由 linux 内核调用 cpuid 生成的。这是 libvirt 中的错误,还是 'aes' 只是 'virsh capabilities' 输出中列出的某些功能的子集?
更有意思的是,我开启guest,登录后,发现在guest os中,'aes'在/proc/cpuinfo中。
有什么想法吗?
谢谢,
托比
在 libvirt CPU 设计中,CPU 模型名称被视为一组 CPU 功能的 short-cut/alias。因此,当您在功能 XML 中查询主机 CPU 模型时,您会看到一些表达核心特征集的 CPU 模型,然后是零个或多个特征的列表尚未列出基本 CPU 模型的一部分。您的示例在功能中将 "SandyBridge" 显示为 CPU 模型。这继承自 "Westmere",并且 "Westmere" 被声明为包含 "aes" 功能。因此 libvirt 不需要在功能中列出 "aes" 功能 - 它只需要列出 不 已经属于 "SandyBridge" 模型的功能。
如果您想查看 CPU 功能的完整扩展列表,您可以将 .... XML 保存到文件 CPUMODEL.xml,然后调用 "virsh cpu-baseline --features CPUMODEL.xml".
我在 Ubuntu 服务器 16.04 上安装了 libvirt-bin。但是我发现奇怪的是 libvirt 没有列出 host.
的所有支持的 CPU 特性。当我打开文件 /proc/cpuinfo 时,我可以看到 'aes' 在标记列表中。
然而,当我 运行 'virsh capabilities' 时,我得到以下结果,显示 host cpu 没有特征 'aes'。
<capabilities>
<host>
<uuid>30373237-3132-4d32-3236-30383034485a</uuid>
<cpu>
<arch>x86_64</arch>
<model>SandyBridge</model>
<vendor>Intel</vendor>
<topology sockets='1' cores='10' threads='2'/>
<feature name='invpcid'/>
<feature name='erms'/>
<feature name='bmi2'/>
<feature name='smep'/>
<feature name='avx2'/>
<feature name='bmi1'/>
<feature name='fsgsbase'/>
<feature name='abm'/>
<feature name='pdpe1gb'/>
<feature name='rdrand'/>
<feature name='f16c'/>
<feature name='osxsave'/>
<feature name='movbe'/>
<feature name='dca'/>
<feature name='pcid'/>
<feature name='pdcm'/>
<feature name='xtpr'/>
<feature name='fma'/>
<feature name='tm2'/>
<feature name='est'/>
<feature name='smx'/>
<feature name='vmx'/>
<feature name='ds_cpl'/>
<feature name='monitor'/>
<feature name='dtes64'/>
<feature name='pbe'/>
<feature name='tm'/>
<feature name='ht'/>
<feature name='ss'/>
<feature name='acpi'/>
<feature name='ds'/>
<feature name='vme'/>
</cpu>
...
然后我打开文件/usr/share/libvirt/cpu_map.xml,可以看到下面CPU个模型,这意味着Sandbridge继承自Westmere,它应该具有'aes'的特征。
<model name='Westmere'>
<model name='Nehalem'/>
<feature name='aes'/>
</model>
<model name='SandyBridge'>
<model name='Westmere'/>
<feature name='pclmuldq'/>
<feature name='x2apic'/>
<feature name='tsc-deadline'/>
<feature name='xsave'/>
<feature name='avx'/>
<feature name='rdtscp'/>
</model>
我认为 /proc/cpuinfo 中的标志列表应该是正确的,因为它是由 linux 内核调用 cpuid 生成的。这是 libvirt 中的错误,还是 'aes' 只是 'virsh capabilities' 输出中列出的某些功能的子集?
更有意思的是,我开启guest,登录后,发现在guest os中,'aes'在/proc/cpuinfo中。
有什么想法吗?
谢谢, 托比
在 libvirt CPU 设计中,CPU 模型名称被视为一组 CPU 功能的 short-cut/alias。因此,当您在功能 XML 中查询主机 CPU 模型时,您会看到一些表达核心特征集的 CPU 模型,然后是零个或多个特征的列表尚未列出基本 CPU 模型的一部分。您的示例在功能中将 "SandyBridge" 显示为 CPU 模型。这继承自 "Westmere",并且 "Westmere" 被声明为包含 "aes" 功能。因此 libvirt 不需要在功能中列出 "aes" 功能 - 它只需要列出 不 已经属于 "SandyBridge" 模型的功能。
如果您想查看 CPU 功能的完整扩展列表,您可以将 .... XML 保存到文件 CPUMODEL.xml,然后调用 "virsh cpu-baseline --features CPUMODEL.xml".