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


  1. NVMMとは
  2. NVMMのインストール
    1. NetBSDカーネルとモジュールのビルド
    2. qemu-nvmmパッケージのインストール
  3. 使い方
  4. 参考文献

NVMMとは

NVMM(NetBSD Virtual Machine Monitor)はNetBSD x86_64アーキテクチャ上でハイパーバイザを提供するNetBSDカーネルの機能です。Xenと同じくNetBSDのソースコードに取り込まれているハイパーバイザですが、Xenと違いゲスト仮想マシン用のカーネル(Domain-U)を別途用意したり、ホスト側のカーネルがマルチコアに対応していないわけではありません。LinuxカーネルのKVMやNetBSDのHAXMと同じく、ハードウェア仮想化にQEMUを用いて、QEMUのプラグインとしてハードウェアアクセラレーション(hardware-acceleration)を使うことになります。

2019年11月16日時点で最新のNetBSD 8.1では、NVMMはまだ提供されていません。したがっていまNVMMを試してみたいのであればcurrentブランチかnetbsd-9ブランチをチェックアウトするしかありません。本稿の内容は2019年10月19日にビルドしたNetBSD 9.99.17を使って確認しています。

NVMMのインストール

NetBSDカーネルとモジュールのビルド

標準ではNVMMの疑似デバイス(pseudo-device)は有効になっていません。GENERICカーネルを使うのであれば、sys/arch/amd64/conf/GENERICを次のように編集してください。

--- a/sys/arch/amd64/conf/GENERIC       Sat Oct 19 14:42:30 2019 +0000
+++ b/sys/arch/amd64/conf/GENERIC       Sat Nov 16 12:15:37 2019 +0900
@@ -1153,7 +1153,7 @@
 pseudo-device  lockstat                # lock profiling
 pseudo-device  bcsp                    # BlueCore Serial Protocol
 pseudo-device  btuart                  # Bluetooth HCI UART (H4)
-#pseudo-device nvmm                    # NetBSD Virtual Machine Monitor
+pseudo-device  nvmm                    # NetBSD Virtual Machine Monitor

 # wscons pseudo-devices
 pseudo-device  wsmux                   # mouse & keyboard multiplexor

カーネルのビルドに成功したら、カーネルを入れ替えてOSを再起動してください。カーネルモジュールをロードする必要があるため、build.shはdistributionまで作ってinstall=/するのが確実です(modulesオペレーションでモジュールだけビルドするのもいいです)。再起動後正しくOSが立ち上がれば、modload(8)を実行しnvmmカーネルモジュールを読み込んでください。

modload /stand/amd64/9.99.17/modules/nvmm/nvmm.kmod

qemu-nvmmパッケージのインストール

上記の操作によってNetBSDカーネル側でNVMMを使う準備は完了しましたが、QEMUからNVMMをプラグインとして使う準備はまだできていません。NVMMを使えるようになるパッチが当たったQEMUをビルドし、システムにインストールする必要があります。

pkgsrc(8)からwip/qemu-nvmmパッケージをインストールします。pkgsrc-2019Q3時点では、このパッケージはまだ提供されていません。そこで、pkgsrc-wipをインストールし、そこからこのパッケージをビルドしインストールします。ここではpkgsrc-wipのインストール手順を省略します。公式Webページを参照してください。

wipであれ、インストール方法は通常のpkgsrc(8)と同じです。通常のemulators/qemuパッケージが既にインストールされているのであれば、pkg_delete(1)で削除してください。

cd wip/qemu-nvmm
make install clean clean-depends

使い方

実行すべきコマンドラインについては『QEMUとHAXMによるハイパーバイザの利用』を参照してください。HAXMとの違いは、accelオプションにnvmmを指定する点です。動作テスト済みのゲストOSの一覧は『NVMM』に載っています。

参考文献

Maxime Villard, NVMM
NVMMの公式なプロジェクトページです。
Maxime Villard, From Zero to NVMM
NVMMの作者VillardによるNVMMの解説記事です。
The pkgsrc-wip project