全部
自从我将我的一个 VM 从 Windows 2008 Server 迁移到 Windows 7(最终)后,我的服务器出现了问题:虽然我已经为 VM 分配了四个内核,它甚至似乎看到了它们,但它似乎认为它有两个核心!
谁能告诉我这里发生了什么?我认为这可能是 KVM 和 Windows 7 之间的一些不兼容,但由于它看到了虚拟处理器,我开始不认为......任何线索?
这是进程管理器的屏幕截图,在同一个盒子上只显示了两个核心:
全部
自从我将我的一个 VM 从 Windows 2008 Server 迁移到 Windows 7(最终)后,我的服务器出现了问题:虽然我已经为 VM 分配了四个内核,它甚至似乎看到了它们,但它似乎认为它有两个核心!
谁能告诉我这里发生了什么?我认为这可能是 KVM 和 Windows 7 之间的一些不兼容,但由于它看到了虚拟处理器,我开始不认为......任何线索?
这是进程管理器的屏幕截图,在同一个盒子上只显示了两个核心:
在 libvirt 0.8.3 上,如果您键入:
它将列出主机的拓扑:
这些数字指的是插槽数、每个插槽的内核数和每个内核的线程数。将此行添加到 xml 文件中的 cpu 条目以允许 windows 使用所有 4 个内核,例如:
我怀疑这些处理器在单独的插槽中被呈现为单核处理器。Windows 7 Ultimate 最多支持 2 个插槽系统,因此它将使用 2 个处理器。
我不知道您是否可以将 KVM 配置为将处理器呈现为单个四核 CPU 或 2 个双核 CPU,这应该可以解决问题。
自 Ubuntu 15.04 起,virt-manager 完全支持拓扑设置。
从 virt-manager > CPUs > 拓扑:
以下是根据 virt-manager 中的上述设置创建的。您无需使用 virsh edit 输入这些内容。
更新后拓扑停止被 Windows 识别,并再次将虚拟 CPU 限制为 2 个插槽。
要解决此问题,请使用“virsh edit”隐藏 kvm 功能,并添加 hyperv 功能。完全关闭并重新启动后,Windows VM 将再次识别多个 CPU。
为什么我在 Linux 的 KVM 下运行的 Windows 7 VM 没有使用所有的虚拟处理器?
在 RHEL/CentOS 5.5 (kvm >= 83-164.el5) 中,kvm 二进制文件也支持“-smp N,cores=N”选项(软件包中有反向移植补丁);但是,libvirt 版本不支持域 XML 中的 <topology> 元素。一种解决方法是为 /usr/libexec/kvm 创建一个包装脚本,该脚本添加适当的选项并在 <emulator> 元素中指定该脚本而不是默认路径。
值得注意的是,Ubuntu 10.4 (Lucid) 有 0.7.5 版的 libvirt,而对拓扑的支持是在 0.7.6 版的 libvirt 中添加的。Ubuntu 10.10 (Maverick) 有 0.8.3 libvirt,因此应该能够直接支持 XML 中的拓扑规范,而无需包装器。