NetBSD on NVMM

この記事は、NetBSD Advent Calendar 2019の18日目の記事です。

はじめに

今年のNetBSDの目玉の一つは、NVMM (NetBSD Virtual Machine Monitor)だと思います。 実際には2018年からあったように思うのですが、NetBSD/amd64上で、AMD製のCPUだけでなくIntel製のCPUでも動くようになったことで、 活用できる幅が広がったように思います。

とは言っても、私のラップトップでは、Windows 10を問題なく動かせるようにはなっていません。 しかし他のマシンではWindows 10 x86_64も動かせるので、これは私の環境に固有の問題だと思います。 (Windows 10を起動させたいのは、Adobe Acrobat DCやWindows版のMozilla Firefoxを動かしたいのが理由でしたが、 そういう用途にはハードウェアを用意するということで解決させました。持ち歩けないのが面倒ですが。)

しかし、NetBSD上でNetBSDを動かすには十分な動作速度の環境のように感じています。 今回は、私がpkgsrcの各種確認のために使っている設定を紹介します。

ホスト側のNetBSDについて

私は新しい環境が好きなので、ほぼ常にNetBSD/amd64-currentを利用しています。 今日時点では、NetBSD/amd64 9.99.26を使っています。 NVMMは、NetBSD/amd64でしか動きません。 ゲストとしてNetBSD/i386を動かすことはできますが、ホストになれるのは、あくまでNetBSD/amd64だけです。 ハードウェアは、今回はIntel製のCPUであるCore i7-8550Uを搭載したラップトップHP Spectre x368 13-inch ae019TUを使います。 Intel VT-dに対応しているCPUであれば良いように思いますが、問題はファームウェア(BIOS)の方かもしれません。 HP Spectre x368 13-inch ae019TUだと、仮想化に必要な何かがファームウェアで欠けているような気がします。

ゲスト側のNetBSDについて

ゲストは最大128台の仮想マシンで、各仮想マシンには最大256個の仮想CPUと最大128GBのメインメモリーを搭載できるようです。 簡単に試せる最大の仮想CPU数で試してみると、実CPUのスレッド数を超えた数を設定すると、ホスト側のNetBSDでカーネルパニックしたようです。 注意した方が良さそうです。

libnvmm(3)というライブラリーがあるので、自分で仮想マシンモニターを書くこともできるようですが、 標準的には、qemuにNVMMサポートを追加したpkgsrc/wip/qemu-nvmmqemu-system-x86_64コマンドを利用するのことになります。 これは、pkgsrc/emulators/qemuと競合するパッケージなので、pkgsrc/emulators/qemuをインストールした状態で、 pkgsrc/wip/qemu-nvmmqemu-system-x86_64を別名で保持しておくのが良いかもしれません。

# cd /usr/pkgsrc/emulators/qemu
# make install
# cd /usr/pkgsrc/wip/qemu-nvmm
# make
# cp ${WRKSRC}/x86_64-softmmu/qemu-system-x86_64 /opt/bin/qemu-system-x86_64-nvmm
これは以下のように利用します。
# modload nvmm
$ qemu-system-x86_64-nvmm -accel nvmm ...
nvmmデバイスドライバーは、カーネルモジュールで利用するようにした方が良いでしょう。 カーネル構成ファイルで有効にしてしまうと、対応していないCPUにカーネルを持って行った時に困った状況になるかもしれません。

qemuを使うというは、qemuのエミュレートする様々なハードウェアや仕組みを利用できるということでもあります。 ld(4) at virtio(4)をストレージに、vioif(4)をネットワークインターフェイスに設定すれば、通常は全く困らないと思います。

$ qemu-system-x86_64-nvmm -accel nvmm -M pc -m 4G -smp 4 \
-drive driver=qcow2,file=netbsd-amd64-10.qcow2,if=virtio \
-net nic,model=virtio -net user \
-cdrom NetBSD-install.iso -boot d \ # この行はインストール時以外は使わない。
-rtc base=utc,clock=host
NetBSD/i386を利用する場合にも、qemu-system-x86_64-nvmmを使うのを間違わなければ迷うことはないはずです。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

plgarc/wip/llama.cppでpkgsrcのBLASサポートを探る

この記事は、 NetBSD Advent Calendar 2024 の13日目の記事です。 llama.cppを使ってみる 以前に、 NetBSD/amd64でllama.cppを使ってみる という記事で llama.cpp を使ってみていました。 あれか...