この記事は、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-nvmm
のqemu-system-x86_64
コマンドを利用するのことになります。
これは、pkgsrc/emulators/qemu
と競合するパッケージなので、pkgsrc/emulators/qemu
をインストールした状態で、
pkgsrc/wip/qemu-nvmm
のqemu-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=hostNetBSD/i386を利用する場合にも、qemu-system-x86_64-nvmmを使うのを間違わなければ迷うことはないはずです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。