libvirt cpu-mode ='host-model'混淆了映射cpu模型?

我有物理主机,CPU型号为“Intel(R)Xeon(R)CPU E5-2670 v3 @ 2.30GHz”,在cpuinfo中有'avx2'标志。 主机configuration了kvm / qemupipe理程序和libvirt。 我将cpu模式设置为域XML中的主机模式。 Guest vm可以在主机上创build。 当我查看guest虚拟机的cpu模型时,显示为“SandyBridge”,在cpuinfo中也有“avx2”标志。 但是“SandyBridge”不支持“avx2”标志,但“Haswell”模式确实支持。 这只是由于主机模式,libvirtfind最接近的cpu型号为“Intel(R)Xeon(R)CPU E5-2670 v3 @ 2.30GHz”作为“SandyBridge”,但它应该显示“Haswell”。 这是否意味着libvirt有一个错误,或者在这种情况下它是有效的表示? 我正在使用libvirt版本1.2.2

我认为在这里发生的是,你的老版本的libvirt并没有意识到英特尔在Haswell芯片中禁用TSX的事实,在微代码更新中,你的处理器现在已经几乎可以接受。 Libvirt仅在版本1.2.14中意识到并广告了Haswell-noTSX CPU模型。 因为你的CPU已经禁用了libvirt用于CPUtypes检测的一些function,所以错误地认为它是SandyBridge。 在当前版本的libvirt上,它应该被正确地检测为Haswell-noTSX。

实际上,除了虚拟机无法使用Haswell中介绍的其他function而不在SandyBridge中出现的情况之外,实际上这不会影响到您,但是如果您无法升级libvirt并将其添加到虚拟机定义XML中,真的很想要他们。 请记住,您可能还需要升级qemu。 在这一点上,你可能应该只使用一个更新的pipe理程序。 无论你现在运行什么,比运行的硬件都要旧,这总是一个值得怀疑的想法。

我发现另一个解决方法,不需要升级libvirt。 我从libvirt使用的cpu映射xml文件(/usr/share/libvirt/cpu_map.xml)中删除了Haswell定义中的hle和rtm标志。 然后我重新启动了libvirt进程。 然后我重新启动虚拟机,并显示正确的模型名称为Haswell。