如果我更改 SMP 级别,qemu Windows VM 将失败

如果我更改 SMP 级别,qemu Windows VM 将失败

很久以前,我使用 qemu 创建了一个 Windows10 VM,并将其复制到各种服务器上,并根据服务器的功能以不同的-smp级别使用它(我仅使用命令行参数启动它,我只使用-smp 4-smp 8或其他)。基本上,我使用了系统上大约 75% 的可用 CPU 内核,但从未超过 10 个。与 相同-mem。我使用它来运行它,-snapshot因为我只用它来测试安装等。

我的所有服务器都是 x86_64,运行 Ubuntu 20.04(QEMU 4.2.1)

这样做效果很好,但我需要用较新的补丁等更新 Windows VM 映像,所以我这样做了(-snapshot显然没有),效果很好。然后我将 VM 映像复制到我的其他服务器上,但昨晚在其中一台服务器上测试失败。

重试显示,当此映像在该服务器上启动时,它会暂停很长时间,然后抛出一个带有错误“电源驱动器状态故障”的 BSOD,然后它最终重新启动,之后一切正常。然而,这并不好,因为当它最终启动时,我的测试都超时了等等。

我搜索了这个错误,但没找到太多。所以我决定尝试一些随机的东西 :)。我注意到的第一件事是,虽然我的“工作”系统和“非工作”系统都使用-mem 8G,但工作系统使用-smp 4而非工作系统使用-smp 10:非工作系统是一台更大的服务器,具有更多的 CPU; 的结尾显示/proc/cpuinfo

processor       : 19
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz

于是我尝试在“不工作”的系统上重新启动 qemu,-smp 4结果它成功了!我也试过了-smp 8,同样失败了,但-smp 6成功了。

所以,这对我来说很不幸。有谁知道为什么会发生这种情况,为什么这个新版本的镜像会出现这个问题,而旧版本运行正常,是否有任何方法可以从镜像内部修复它(更改 QEMU 启动会很烦人,因为它需要更改大量 Git 分支中的大量测试脚本),或者其他提示?

我的 QEMU 启动行是:

qemu-system-x86_64 -enable-kvm -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time \
    -vnc 0.0.0.0:5 -pidfile qemu-installer-vm.pid -daemonize \
    -device nec-usb-xhci -device usb-tablet \
    -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
    -drive file=win10-x64.qcow2,if=none,id=drive-ide0-0-0,format=qcow2 -vga std \
    -net user,hostfwd=tcp::6350-:22 -net nic -name windows \
    -m 8G -smp 10 -snapshot

如果我将其更改-smp 10-smp 4,它就可以工作。

答案1

虽然不是一个解决方案,但它可能指向一个解决方案。

来自一个旧的错误报告:
Bug 689665:指定 CPU 型号 Nehalem Penryn 和 Conroe 的 CPU 核心数失败

原因:qemu-kvm 上定义的某些 CPU 型号的“级别”值较低(<4)。这包括以下型号:Conroe、Penrym、Nehalem。

我认为这意味着 qemu-kvm 的核心数量是有限制的,这取决于虚拟机的虚拟架构。

我不太了解您的虚拟机是如何定义的,而且我不使用 qemu,但您可能已经达到了它的一个限制。您可能需要尝试使用 qemu 版本和配置参数来实现更高的核心数。

相关内容