全部
自从我将我的一台虚拟机从 Windows 2008 Server 迁移到 Windows 7(旗舰版)以来,我的服务器就出现了问题:虽然我已经为虚拟机分配了四个核心,而且它似乎看到了它们,但它似乎认为它有两个核心!
有人能告诉我这是怎么回事吗?我以为可能是 KVM 和 Windows 7 之间不兼容,但由于它看到了虚拟处理器,我开始认为不是……有什么线索吗?
下面是进程管理器的屏幕截图,其中仅显示同一盒子上有两个核心:
答案1
我怀疑这些处理器是作为单独插槽中的单核处理器提供的。Windows 7 Ultimate 支持最多 2 个插槽系统,因此它将使用 2 个处理器。
我不知道您是否可以配置 KVM 以将处理器显示为单个四核 CPU 或 2 个双核 CPU,这应该可以解决问题。
答案2
在 libvirt 0.8.3 上,如果您输入:
virsh capabilities | grep topology
它将列出主机的拓扑:
<topology sockets='1' cores='4' threads='1'/>
这些数字指的是插槽数、每插槽核心数和每核心线程数。将此行添加到 xml 文件中的 cpu 条目,以允许 Windows 使用所有 4 个核心,例如:
<vcpu>4</vcpu>
<cpu>
<topology sockets='1' cores='4' threads='1'/>
</cpu>
答案3
自 Ubuntu 15.04 起,virt-manager 完全支持拓扑设置。
从 virt-manager > CPU > 拓扑:
- 检查:手动设置 CPU 拓扑
- 插槽: 2
- 核心数:2
- 主题:2
以下内容是根据 virt-manager 中的上述设置创建的。您无需使用 virsh edit 输入这些内容。
<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
<model fallback='allow'/>
<topology sockets='2' cores='2' threads='2'/>
</cpu>
更新后,Windows 不再识别拓扑,并且再次将虚拟 CPU 限制为 2 个插槽。
要解决此问题,请使用“virsh edit”隐藏 kvm 功能并添加 hyperv 功能。完全关闭并重新启动后,Windows VM 将再次识别多个 CPU。
为什么在 Linux KVM 下运行的 Windows 7 VM 没有使用所有虚拟处理器?
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
</features>
答案4
值得注意的是,Ubuntu 10.4(Lucid)的 libvirt 版本为 0.7.5,而支持拓扑已添加到 libvirt 0.7.6 版本中。Ubuntu 10.10 (Maverick) 有 0.8.3 libvirt,因此应该能够直接支持 XML 中的拓扑规范,而无需包装器。