所有
自从我的一个虚拟机从Windows 2008 Server迁移到Windows 7(最终版)以来,我的服务器出现了问题:尽管我已经为虚拟机分配了四个核心,甚至看上去也能看到它们,但似乎还是认为有两个核心!
谁能告诉我这是怎么回事?我以为KVM和Windows 7之间可能不兼容,但是既然看到了虚拟处理器,我就开始不觉得……有什么线索吗?
这是流程管理器的屏幕快照,在同一框中仅显示两个内核:
所有
自从我的一个虚拟机从Windows 2008 Server迁移到Windows 7(最终版)以来,我的服务器出现了问题:尽管我已经为虚拟机分配了四个核心,甚至看上去也能看到它们,但似乎还是认为有两个核心!
谁能告诉我这是怎么回事?我以为KVM和Windows 7之间可能不兼容,但是既然看到了虚拟处理器,我就开始不觉得……有什么线索吗?
这是流程管理器的屏幕快照,在同一框中仅显示两个内核:
Answers:
我怀疑处理器是在单独的插槽中以单核处理器的形式出现的。Windows 7 Ultimate最多支持2个套接字系统,因此它将使用2个处理器。
我不知道您是否可以配置KVM将处理器显示为单四核CPU或2个双核CPU,这应该可以解决问题。
在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>
<topology sockets='1' cores='4' threads='1'/>
到我的xml中。virsh capabilities | grep topology
显示<topology sockets='1' cores='6' threads='2'/>
。严重:执行了一个操作kill -HUP nnnnn
,其中nnnnn是我的libvirtd进程的PID。启动虚拟机。有效。+1!谢谢!...但是不要忘记用HUP信号或重启来踢libvirtd!
自Ubuntu 15.04起,virt-manager中完全支持拓扑设置。
从virt-manager> CPU>拓扑:
根据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>
在RHEL / CentOS 5.5(kvm> = 83-164.el5)中,kvm二进制文件也支持“ -smp N,cores = N”选项(程序包中有backport补丁)。但是,libvirt版本不支持域XML中的<topology>元素。一种解决方法是为/ usr / libexec / kvm创建一个包装器脚本,该脚本添加适当的选项,并在<emulator>元素而不是默认路径中指定该脚本。