I created a Windows10 VM using qemu a LONG time ago and have copied it around to various servers and have been using it with different -smp
levels (I start it just using command line arguments and I just use -smp 4
or -smp 8
or whatever) based on the capabilities of the伺服器.基本上我使用了系統上大約 75% 的可用 CPU 核心,但從未超過 10 個。與 相同-mem
。我運行它是-snapshot
因為我只是用它來測試安裝等。
我的所有伺服器都是 x86_64,運行 Ubuntu 20.04 (QEMU 4.2.1)
這工作得很好,但我需要用更新的補丁等更新 Windows VM 映像,所以我這樣做了(沒有-snapshot
明顯的情況),而且效果很好。然後我將虛擬機器映像複製到其他伺服器,但昨晚在其中一台伺服器上測試失敗。
重試表明,當該映像在該伺服器上啟動時,它會暫停很長時間,然後拋出 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 對核心數量有限制,具體取決於 VM 的虛擬架構。
我不太了解你的虛擬機器是如何定義的,而且我不使用 qemu,但你可能已經達到了它的限制之一。您可能需要嘗試 qemu 版本和配置參數才能獲得更高的核心數量。