libvirt cpu-mode =' host-model'映射cpu模型时会出现混淆?

时间:2017-01-06 03:03:15

标签: intel virtualization libvirt

我的物理主机有cpu型号和Intel(R)Xeon(R)CPU E5-2670 v3 @ 2.30GHz'它有' avx2'在cpuinfo中的标志。主机配置了kvm / qemu hypervisor和libvirt。我在域XML中将cpu模式设置为主机模型。可以在主机上创建Guest vm。当我检查来宾vm的cpu模型时,它显示为' SandyBridge'它还有'avx2'在cpuinfo中的标志。但是SandyBridge'不支持' avx2'旗帜但是' Haswell'模型确实支持。这只是由于主机模型模式,libvirt找到最近的cpu模型到英特尔(R)Xeon(R)CPU E5-2670 v3 @ 2.30GHz'作为' SandyBridge'但它应该显示' Haswell'代替。这是否意味着libvirt有错误或在这种情况下它是有效的表示?我使用的是libvirt版本1.2.2

2 个答案:

答案 0 :(得分:1)

在特定的芯片代(SandyBridge,Haswell等)中,英特尔实际上并不保证它所制造的所有不同型号都具有相同的CPU标志。我们可以在Haswell或更高版本中看到这一点,其中一些CPU具有TSX功能,而另一些则没有。 QEMU / libvirt通常只为每个英特尔代产品提供单一型号,因此您的物理CPU可能实际上与相应命名的QEMU型号不兼容。

从libvirt POV,名称只是特定功能组的快捷方式。因此,当识别“主机型号”的CPU时,libvirt会完全忽略名称,只查找其功能列表与主机CPU最密切相关的CPU,然后在XML中明确列出任何额外的CPU功能。所以这一切意味着即使你有Haswell作为你的物理CPU,libvirt也完全有可能为你的客人显示不同的型号名称。功能性POV没有什么问题 - 功能应该全部存在(除了KVM故意阻止的一些功能),看起来只是有点“令人惊讶”。

在您的情况下,我认为正在进行的是由于英特尔TSX支持中的错误。此功能是在Haswell中引入的,但在英特尔发现它被破坏后,在微代码更新中被阻止。这会导致'tsx'功能从物理机中的CPU模型中消失。 libvirt / QEMU Haswell CPU模型仍包含'tsx',因此这意味着libvirt将与您的Haswell CPU不匹配。在libvirt> = 1.2.14中,我们引入了一个新的Haswell-noTSX CPU模型来解决这个特殊问题,但是你说你只有1.2.2。 SandyBridge是libvirt可以为您找到的下一个最佳兼容CPU模型。

答案 1 :(得分:0)

我找到了另一种不需要升级libvirt的解决方法。我从libvirt(/usr/share/libvirt/cpu_map.xml)使用的cpu映射xml文件中删除了Haswell定义中的hle和rtm标志。然后我重新启动了libvirt进程。然后我重新启动了VM,它显示了正确的型号名称Haswell。