所有
我在服务器上遇到了一个问题,因为我把我的一台虚拟机从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>拓扑:
以下是通过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中的拓扑规范而无需封装。