QEMUとHAXMによるハイパーバイザの利用


pkgsrc-2019Q1からemulators/haxmパッケージが提供されるようになりました。NetBSDでの仮想化環境は何のアクセラレータもないQEMUか、あるいはカーネルの入れ替えが必要なXenくらいしか選択肢がなかったように思えます。VMWareやVirtualBoxも動いていたようですがこれについてはよくわかりません。とにかく、ようやくNetBSDでもインストールしやすく高速な仮想化環境を使えるようになりました。

目次

  1. HAXMとは
    1. HAXMの利点
    2. HAXMの欠点
  2. インストール
  3. QEMUを使う
    1. インストーラを取得する
    2. 仮想ディスクを作成する
    3. インストールする
    4. 起動する
  4. トラブルシューティング
    1. Failed to open the hax moduleというエラーが出る
  5. 参考文献

HAXMとは

HAXM(Hardware Accelerated Execution Manager)はIntel社から提供されているFLOSSのハイパーバイザです。Darwin, Linux, NetBSD, Windows上で動作します。HAXMはKamil Rytarowskiによってpkgsrc(7)に取り込まれ、pkgsrc-2019Q1でstable版として使えるようになりました。KVMやHVFと同じく、QEMUのアクセラレータとして利用します。

HAXMはVT-xが利用可能なIntel CPU上でのみ動作します。AMDや非x86アーキテクチャ上では利用できません。

HAXMの利点

Rytarowskiによれば、HAXMには次のような利点があります。

HAXMの欠点

以上のような利点がある一方で、Rytarowskiは次のような欠点も指摘しています。

インストール

コンピュータのBIOSからIntel Virtualization Technology(VT-x)を有効にしてください。VT-xが有効にされていないとHAXMは動作しません。

emulators/qemuとemulators/haxmパッケージをインストールします。

# cd /usr/pkgsrc/emulators/qemu
# make install clean clean-depends
# cd /usr/pkgsrc/emulators/haxm
# make install clean clean-depends

HAXM用のdevice special filesを作成します。mknod(8)のWrapperスクリプトがemulators/haxmパッケージで提供されているのでそれを使うと便利です。

# haxm-mknod

HAXMのカーネルモジュールをhaxm-modloadコマンドでロードします。アンロードしたい場合はhaxm-modunloadコマンドを実行してください。

# haxm-modload

カーネルモジュールのロードに成功すると、dmesg(8)からhaxm_warning: -------- HAXM v7.4.1 Start --------というメッセージを確認できます。

QEMUを使う

インストーラを取得する

ここではNetBSDをゲストOSとして仮想マシンにインストールします。任意のFTPサーバからNetBSDのインストーラをダウンロードしてください。

仮想ディスクを作成する

qcow2フォーマットで20GBの仮想ディスクを作成します。

# qemu-img create -f qcow2 NetBSD.qcow2 20G

インストールする

qemu-system-x86_64コマンドの-boot order=dオプションを使い、NetBSDインストーラを起動して先ほど作成した仮想ディスクにNetBSDをインストールします。インストール手順は省略します。

# qemu-system-x86_64 \
-m 2048M \
-smp cpus=2 \
-boot order=d -cdrom ~/qemu/iso/NetBSD-8.0-amd64.iso \
-hda NetBSD.qcow2 \
-net nic -net user \
-accel hax

見てのとおり、HAXMをQEMUと一緒に使うにはQEMUに-accel haxオプションを渡します。

起動する

インストール後は仮想ディスクからNetBSDを起動します。

# qemu-system-x86_64 \
-m 2048M \
-smp cpus=2 \
-hda NetBSD.qcow2 \
-net nic -net user \
-accel hax
dmesg on NetBSD on QEMU with HAXM

トラブルシューティング

Failed to open the hax moduleというエラーが出る

権限が足りていないと以下のようなエラーが出てHAXM付きでQEMUを使えません。

Failed to open the hax module
No accelerator found.
qemu-system-x86_64: failed to initialize HAX: Operation not supported by device

この場合、su(1)sudo(1)を使いroot権限でQEMUを実行してください。

参考文献

Kamil Rytarowski, Intel HAXM — a hardware-assisted acceleration engine in the NetBSD kernel
pkgsrc(7)にHAXMを取り込んだKamil Rytarowskiによる報告の論文です。これを読むとHAXMの概要についておおまかに理解できるのではないかと思います。
HOWTO set up QEMU with HAX acceleration on NetBSD
実際にNetBSD上でQEMU-HAXMを動かすにはどのような手順を踏むのかが説明されています。カーネルにパッチを当ててビルドしたり、GitHubからHAXMのソースコードをcloneしてビルドする項目は読み飛ばして構いません。pkgsrc-wipをcloneする必要もありません。HAXMデバイスの作成は、上述したhaxm-mknodスクリプトを一度実行すれば良いです。
QEMU
QEMUの操作方法はArchWikiを読めば大丈夫でしょう。