hiroの長い冒険日記

主にコンピュータ周辺の興味を持った内容を綴ります

Windows版qemu で whpx 有効で仮想マシンを起動する (課題あり)

当日記ではアフィリエイト広告を利用しています

以前に、VirtualboxHyper-V が共存できるかを試していました。結局、PC を更新して CPU が新しくなり、Windows10 の Version Up に伴って使えるようになりました。色々と試行錯誤する中で、qemu の whpx option を有効にした時に Windows Hypervisor が使用できずに断念した事がありました。
現在は、WSL2 と Hyper-VVirtualbox が共存できています。今なら qemu の whpx option 有効でも仮想マシンが起動できるのではないかと考えて試してみました。

過去の取り組み

最初に qemu を使用し始めたのは 2019年1月の事でした。Ver.3.1.0 (20181127) でした。
hiro20180901.hatenablog.com
当時は、whpx 無効の binary しかなく、しょうがないので whpx 有効の binary を作り始めました。その前段階として、cross compile 用の Linux 環境を整備しました。
hiro20180901.hatenablog.com

当時は日本語の記事がみあたらず、中国で出来たらしい記事を引用していました。
hiro20180901.hatenablog.com

PC も古かった為、Hyper-V に余っていた SSD を path through で接続して、再起動して Linux で compile、出来上がった binary を Windows10 で起動してから仮想マシン経由で取り出す、なんて面倒な事をやっていました(色々と経験を積めたので面白かったですが)。cross compile だった事もあり躓く事は多かったですが、何とか binary を作っては Windows10 で実行する、を繰り返していました。結局、whpx 有効では qemu を起動させる事は出来ませんでした。
hiro20180901.hatenablog.com
hiro20180901.hatenablog.com
hiro20180901.hatenablog.com
hiro20180901.hatenablog.com

当時は Intel の CPU だったので、HAXM が使えるかも、と試してみましたが、それでもダメ。
hiro20180901.hatenablog.com
hiro20180901.hatenablog.com

最終的に、この時の結論としては CPU が対応していないから起動出来なかったという事でした。

qemu を whpx 有効で起動した事例

改めてググると、qemu の whpx option 有効で起動したと書かれている方がいました。
legacyos.ichmy.0t0.jp
現在の binary では whpx option は有効になっているようですので、改めて試してみる事にしました。

Windowsqemu の install

今回は、現時点で最新の Ver.6.2.0 (20211215) を使用します。install 方法は通常の Windows のやり方と変わりませんので省略します。
www.qemu.org

qemu 仮想マシンの作成

仮想 HDD (qcow2) の作成

先ずは仮想 HDD の作成です。以下、folder は適宜読み替えてください。

PowerShell :

PS> & 'C:\Program Files\qemu\qemu-img.exe' create `
-f qcow2 'E:\VirtualHDD\qemuhd.qcow2' 32G

PowerShell の 先頭の '&' は、その後の文字列を実行する機能の様です。TAB 補完すると自動で入ります。一行目の行末の "`" (backquote) は行を連結するためです。
qiita.com

install 用 ISO image の準備

debian 11 の ISO image が手元にありますので、こちらを使用します。

qemu の画面に SPICE client を使用する

qemu の 標準の画面では

  • keyboard の設定を合わせても何故か右 Shift だけが無効になる
  • mouse cursor がズレる (一旦 Window 上端まで移動すれば回避可能)

という現象が発生しましたので、下記サイトを参考に SPICE client で接続して install しました。

gihyo.jp

使用した SPICE client は virt-viewer です。
virt-viewer :
virt-manager.org
此方の "Win x64 MSI" の link から msi file を落として install しました。install 後は Remote Viewer という名称になります。

qemu の network 設定をちゃんとしようとすると Windows10 での設定も必要なので、とりあえず Windows10 の tcp 5900 port を qemutcp 5900 port に接続し、SPICE で接続できるように設定します。

Virtio を使用

Network 及び Block Device に Virtio を使用して高速化します。

install 用の起動 command (whpx 無効)

以上をまとめて、SPICE で接続、Virtio を使用し、qemudebian 11 を install する command です。whpx 有効だと keyboard 操作が出来なくなるので、install の段階では無効にしています。今回は動作確認のみなので、GUI は入れずに最小 install しました。NAT されて外の network には接続されています。
PowerShell :

PS> & 'C:\Program Files\qemu\qemu-system-x86_64.exe' `
-m 8G -smp 4 `
-drive file='E:\VirtualHDD\qemuhd.qcow2',if=virtio `
-net nic,model=virtio -net user,hostfwd=tcp::5900-:5900 `
-vga qxl -spice port=5900,disable-ticketing=on `
-machine vmport=off `
-cdrom 'E:\ISO\debian-11.2.0-amd64-netinst.iso' -boot once=d -no-reboot

各行の説明です。

  1. 実行ファイル名
  2. Memory 8GB、CPU 4個
  3. 仮想 HDD の指定 virtio 使用
  4. 仮想 NIC の指定 virtio 使用、Windows10 の tcp 5900 を qemutcp 5900 に接続
  5. vga として qxl を使用、SPICE (virt-viewer) で接続する為の設定
  6. SPICE を使う際のおまじない (VMWare の設定が干渉するらしい)
  7. cdrom の指定、cdrom から起動、再起動の際には停止する

PowerShell に複数行をコピペすると警告画面が出ますが、そのまま貼り付けて大丈夫です。

f:id:hiro20180901:20220109163533p:plain:w408

qemu 仮想マシンを起動したら、virt-viewer を起動して接続します。

f:id:hiro20180901:20220109163604p:plain:w137

通常起動用の command (whpx有効)

install が終了したら、仮想 HDD から起動します。whpx を有効にし、cdrom を指定している最後の一行を消します。
PowerShell :

PS> & 'C:\Program Files\qemu\qemu-system-x86_64.exe' `
-m 8G -smp 4 `
-accel whpx `
-drive file='E:\VirtualHDD\qemuhd.qcow2',if=virtio `
-net nic,model=virtio -net user,hostfwd=tcp::5900-:5900 `
-vga qxl -spice port=5900,disable-ticketing=on `
-machine vmport=off

install 時と同様に SPICE client で接続すれば、仮想マシンの画面が表示されます。

whpx: injection failed

無事に起動しましたが、起動させた PowerShell に気になる文字が出力されていました。
PowerShell :

WHPX: setting APIC emulation mode in the hypervisor
Windows Hypervisor Platform accelerator is operational
whpx: injection failed, MSI (0, 0) delivery: 0, dest_mode: 0, trigger mode: 0, vector: 0, lost (c0350005)

ん?Hypervisor Platform は使えるようになっているけど、injection failed が出ています。使えているのかな?

SPICE を使用せずに qemu 標準画面を出して、monitor 画面に切り替えて状態を確認しても有効な情報がなく、whpx が使えている確信がありません。

UEFI は現状では使えない

始めは qemu 標準の BIOS (SeaBIOS) ではなく UEFI (OVMF) を使えないか試していました。これまで Hyper-VVirtualboxUEFI で install していた為、できれば統一したかった為です。

しかしながら、whpx 有効では UEFI は使用できませんでした。

  • -bios option に OVMF を指定すれば、UEFI は起動して debian の intall も完了するが、仮想 HDD が見つからず通常起動できない。(UEFI の書き換えができない為?)
  • -pflash や -drive if=pflash を使う方法 (UEFI を書き換えできる) では、whpx 有効だと error が発生して起動できない。

PowerShell:

& 'C:\Program Files\qemu\qemu-system-x86_64.exe' -drive if=pflash,format=raw,readonly=on,file='E:\VirtualHDD\OVMF_CODE.fd' -drive if=pflash,format=raw,file='E:\VirtualHDD/OVMF_VARS.fd' -accel whpx
WHPX: setting APIC emulation mode in the hypervisor
Windows Hypervisor Platform accelerator is operational
whpx: injection failed, MSI (0, 0) delivery: 0, dest_mode: 0, trigger mode: 0, vector: 0, lost (c0350005)
C:\Program Files\qemu\qemu-system-x86_64.exe: WHPX: Failed to emulate MMIO access with EmulatorReturnStatus: 2
C:\Program Files\qemu\qemu-system-x86_64.exe: WHPX: Failed to exec a virtual processor

github.com
gitlab.com
こちらと同じ状況です。という事で、現状では whpx 有効で UEFI を使うのは出来ないと考えています。

まとめ

Windows10 で qemu を whpx 有効で起動する事ができました。ただ、

  • 本当に whpx が有効になっているか確認できない (injection failed が出る)
  • install 段階で whpx を有効にすると keyboard が効かない
  • UEFI を使えない

など、未だ課題の多い状態である事が分かりました。linuxkvm を使う環境では安定しているのでしょうが、Windows Hypervisor Platform を使う環境は未だ安定していないと感じます。

今回の検証では、確実に「使える!」という状態ではありませんが、とりあえず起動できる事が分かりましたので、qemu (あるいは Window Hypervisor Platform) の今後に期待したいと思います。