前回、whpx 有効で build した qemu を Windows10 で起動させてみたが、No accelerator found で起動させる事が出来なかった。
hiro20180901.hatenablog.com
しかし、Hyper-V 仮想マシンを使用してるし、Docker for Windows も起動している。Hyper-V が機能していないという事はない。なんとか qemu でも whpx を有効にできないか、!whpx_cap.HypervisorPresent の条件を外して build してみた。
# diff -u whpx-all.c.bak whpx-all.c --- whpx-all.c.bak 2019-02-17 17:27:10.779656206 +0900 +++ whpx-all.c 2019-02-17 17:27:57.413574701 +0900 @@ -1383,7 +1383,8 @@ hr = whp_dispatch.WHvGetCapability( WHvCapabilityCodeHypervisorPresent, &whpx_cap, sizeof(whpx_cap), &whpx_cap_size); - if (FAILED(hr) || !whpx_cap.HypervisorPresent) { +/* if (FAILED(hr) || !whpx_cap.HypervisorPresent) { */ + if (FAILED(hr)) { error_report("WHPX: No accelerator found, hr=%08lx", hr); ret = -ENOSPC; goto error;
もう一度 make して qemu-system-x86_64.exe を作成した。前回の build を残してあるので、whpx-all.c のみ compile、link されるので、時間は殆どかからない。Path through 仮想マシンで実行した。
Windows10側に scp して、既存の物に上書きして実行してみた。
PS C:\Program Files\qemu> .\qemu-system-x86_64.exe -accel accel=whpx C:\Program Files\qemu\qemu-system-x86_64.exe: WHPX: Failed to create partition, hr=c0351000 C:\Program Files\qemu\qemu-system-x86_64.exe: failed to initialize WHPX: Invalid argument
やっぱりダメか...
qemu/target/i386/whpx-all.c :
... 略 ... hr = whp_dispatch.WHvGetCapability( WHvCapabilityCodeHypervisorPresent, &whpx_cap, sizeof(whpx_cap), &whpx_cap_size); /* if (FAILED(hr) || !whpx_cap.HypervisorPresent) { */ if (FAILED(hr)) { error_report("WHPX: No accelerator found, hr=%08lx", hr); ret = -ENOSPC; goto error; } hr = whp_dispatch.WHvCreatePartition(&whpx->partition); if (FAILED(hr)) { error_report("WHPX: Failed to create partition, hr=%08lx", hr); ret = -EINVAL; goto error; } ... 略 ...
一つ目の FAILED(hr) を通っても二つ目の FAILED(hr) で引っ掛かるので、!whpx_cap.HypervisorPresent の条件が立っていないと進まないようだ。Hypervisor 初期化の手順が不足しているように感じる ... が、これ以上は知識が足りず対処できない。whpx_cap の中身を見たら少しは分かるかと思うが、正常に動作する個体と比較しながらじゃないと掴めない。
結果
- もがいてみたが、残念ながら qemu を whpx 有効な状態で起動させる事は出来なかった。
- おそらく、Virtualbox の仮想マシンが Hyper-V で起動できる環境だと、qemu 仮想マシンも whpx 有効で起動できると思う。
- もう少し Windows Hypervisor Platform に関する sample があれば良いのだが ...
Virtualbox も qemu も、source 内の該当箇所が分かったので、進展あるまでは(諦めてないが)中断する。