为什么在Linux下运行的Windows 7虚拟机不能使用所有虚拟处理器?

所有

我在服务器上遇到了一个问题,因为我把我的一台虚拟机从Windows 2008 Server迁移到了Windows 7(最终版本):虽然我已经为虚拟机分配了四个内核,甚至似乎也看到了这个问题,有两个核心!

它承认我的处理器,但不使用它们!

谁能告诉我这里发生了什么事? 我以为这可能是KVM和Windows 7之间的一些不兼容,但是因为它看到虚拟处理器,我开始不认为……任何线索?

下面是过程pipe理器的屏幕截图,只显示了同一个盒子上的两个核心:

任务管理器

    我怀疑这些处理器是在单独的套接字中作为单核处理器呈现的。 Windows 7的终极支持2套接字系统,所以它将使用2个处理器。

    我不知道是否可以configurationKVM将处理器configuration为单个四核CPU或双核CPU,这可以解决问题。

    在libvirt 0.8.3上,如果input:

    virsh capabilities | grep topology 

    它会列出主机的拓扑结构:

     <topology sockets='1' cores='4' threads='1'/> 

    数字指的是插槽,每个插槽的核心数和每个核心的线程数。 将此行添加到xml文件中的cpu条目以允许窗口使用全部4个内核,例如:

      <vcpu>4</vcpu> <cpu> <topology sockets='1' cores='4' threads='1'/> </cpu> 

    从Ubuntu 15.04开始,virt-manager完全支持拓扑设置。

    从virt-manager> CPUs>拓扑:

    • 检查:手动设置CPU拓扑
    • 套接字:2
    • 内核:2
    • 主题:2

    以下是通过virt-manager中的上述设置创build的。 你不需要用virsh编辑input。

     <vcpu placement='static'>8</vcpu> <cpu mode='host-model'> <model fallback='allow'/> <topology sockets='2' cores='2' threads='2'/> </cpu> 

    更新后,拓扑停止被窗口识别,并再次将虚拟CPU限制为2个插槽。

    为了解决这个问题,使用'virsh edit'来隐藏kvm特性,并添加hyperv特性。 完成关机并重新启动后,Windows VM将再次识别多个CPU。

    为什么在Linux下运行的Windows 7虚拟机不能使用所有虚拟处理器?

     <features> <acpi/> <apic/> <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> </hyperv> <kvm> <hidden state='on'/> </kvm> </features> 

    在RHEL / CentOS 5.5(kvm> = 83-164.el5)中,kvm二进制文件也支持“-smp N,cores = N”选项(包中有backport补丁)。 但是,libvirt版本不支持域XML中的<topology>元素。 解决方法是为/ usr / libexec / kvm创build一个包装脚本,它将添加相应的选项,并在<emulator>元素中指定该脚本,而不是默认path。

    值得注意的是,Ubuntu 10.4(Lucid)具有libvirt的0.7.5版本,而在0.7.6版本中对libvirt添加了对拓扑的支持 。 Ubuntu 10.10(Maverick)拥有0.8.3 libvirt,因此应该能够直接支持XML中的拓扑规范而无需封装。