![libvirt cpu-mode='host-model' 在映射 CPU 模型时会产生混淆?](https://linux22.com/image/696409/libvirt%20cpu-mode%3D'host-model'%20%E5%9C%A8%E6%98%A0%E5%B0%84%20CPU%20%E6%A8%A1%E5%9E%8B%E6%97%B6%E4%BC%9A%E4%BA%A7%E7%94%9F%E6%B7%B7%E6%B7%86%EF%BC%9F.png)
我有一台物理主机,其 CPU 型号为“Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz”,并且它在 cpuinfo 中具有“avx2”标志。主机已配置 kvm/qemu 虚拟机管理程序和 libvirt。我在域 XML 中将 CPU 模式设置为主机模型。可以在主机上创建客户虚拟机。当我检查客户虚拟机的 CPU 型号时,它显示为“SandyBridge”,并且它在 cpuinfo 中也具有“avx2”标志。但是“SandyBridge”不支持“avx2”标志,而“Haswell”型号支持。这只是由于主机模型模式,libvirt 找到最接近“Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz”的 CPU 型号为“SandyBridge”,但它应该显示“Haswell”。这是否意味着 libvirt 有错误,或者它在这种情况下是有效的表示?我正在使用 libvirt 版本 1.2.2
答案1
我认为这里发生的是,你的旧版本的 libvirt 没有意识到英特尔禁用了多伦多证券交易所Haswell 芯片中的微代码更新几乎肯定已经收到了,而您的处理器现在肯定已经收到了。Libvirt 直到版本 1999 才意识到并宣传了 Haswell-noTSX CPU 模型1.2.14。由于您的 CPU 禁用了 libvirt 用于 CPU 类型检测的某些功能,因此它误认为它是 SandyBridge。在当前版本的 libvirt 上,它应该被正确检测为 Haswell-noTSX。
实际上,这根本不会对你造成任何影响,除非虚拟机无法使用其他特征在 Haswell 中引入,但在 SandyBridge 中不存在,但你可以手动添加这些如果您无法升级 libvirt 但又确实需要它们,则请将其添加到您的 VM 定义 XML 中。请记住,您可能还需要升级 qemu。此时,您可能应该使用更新的虚拟机管理程序。您现在运行的任何东西都比它所运行的硬件更旧,这始终是一个值得怀疑的想法……
答案2
我找到了另一种不需要升级 libvirt 的解决方法。我从 libvirt 使用的 CPU 映射 xml 文件 (/usr/share/libvirt/cpu_map.xml) 中 Haswell 的定义中删除了 hle 和 rtm 标志。然后我重新启动了 libvirt 进程。然后我重新启动了虚拟机,它显示正确的型号名称为 Haswell。