SMPレベルを変更するとqemu Windows VMが失敗する

SMPレベルを変更するとqemu Windows VMが失敗する

かなり前に qemu を使用して Windows10 VM を作成し、それをさまざまなサーバーにコピーして、サーバーの機能に基づいてさまざまな-smpレベルで使用してきました (コマンドライン引数を使用して起動し、-smp 4または-smp 8などを使用します)。基本的に、システムで使用可能な CPU コアの約 75% を使用していますが、10 を超えることはありません。 も同様です。インストールなどのテストに使用するため、-memで実行しています。-snapshot

私のサーバーはすべて x86_64 で、Ubuntu 20.04 (QEMU 4.2.1) を実行しています。

それはうまくいきましたが、Windows VM イメージを新しいパッチなどで更新する必要があったので、それを実行しました (もちろん、-snapshot何もせずに)。うまくいきました。その後、VM イメージを他のサーバーにコピーしましたが、昨夜、そのうちの 1 つでテストが失敗しました。

再試行すると、このイメージがそのサーバー上で起動すると、長時間停止し、その後「電源ドライバーの状態エラー」というエラーで 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

解決策ではありませんが、解決策につながる可能性があります。

古いバグレポートより:
バグ 689665: CPU モデル Nehalem Penryn および Conroe で障害が発生した CPU コアの数を指定します

原因: qemu-kvm で定義されている一部の CPU モデルの「レベル」値が低い (< 4)。これには、Conroe、Penrym、Nehalem などのモデルが含まれます。

これは、qemu-kvm には、VM の仮想アーキテクチャに応じてコア数に制限があるということを意味していると思います。

VM の定義方法についてはよくわかりませんし、qemu も使用していませんが、おそらくその限界の 1 つに達しているのでしょう。コア数を増やすには、qemu のバージョンと構成パラメータを試してみる必要があるかもしれません。

関連情報