6
8

More than 5 years have passed since last update.

FreeBSDがXenのDom0になれるらしいので試してみた #1

Last updated at Posted at 2015-05-27

Dom0環境構築

Xen4.5とFreeBSD 11-currentの組み合わせでDom0として動くようです。
まだ開発途上なので色々と未実装、制限事項ありますが、試す分には充分以上に動きます。
EPT, IOMMU をサポートするCPU, マザーボードが必須です。

http://wiki.xen.org/wiki/FreeBSD_Dom0
https://wiki.freebsd.org/FreeBSD/XenNG
http://wiki.xen.org/wiki/FreeBSD_PVH
https://lists.freebsd.org/pipermail/freebsd-xen/2015-May/002391.html

ためしてみる

ハードウェアは、自作機
CPU: Xeon E3 1265Lv2
MB: Asus P8B WS (C206チップセット)
メモリは NonECC 32GB

FreeBSDのバージョン
%uname -v                                                  [~]
FreeBSD 11.0-CURRENT #0 r283309: Sun May 24 01:30:32 JST 2015     root@:/usr/obj/usr/src/sys/GENERIC 

FreeBSDのインストール

OSのインストール手順は割愛します。
-current を入れるという事だけど、配布されているスナップショットイメージを使ったらコンパイル作業中にカーネルパニックが多発して作業にならなかったので、10.1-STABLEをインストールしてから11-currentに更新しています。

Xen環境の作成

色々と設定しますが、見落としがちなのは主に以下の3点かと思います。

  • BIOS設定で VT-d が有効になっている事
  • login.conf の設定
  • if_tap.koのロード

emulators/xen-kernel sysutils/xen-tools をインストールしますが、emulators/xen がこれらのメタポートになってますので、これを入れます。
xen-kernel の pkg-messages に必要な設定が載っていますので、これに従い設定を行ってください。

console
% sudo portmaster emulators/xen
...
% cat /usr/ports/emulators/xen-kernel/pkg-message
Please add the following entries in order to boot the xen kernel

in /etc/sysctl.conf:
        vm.max_wired=-1

in /etc/ttys
        xc0     "/usr/libexec/getty Pc"         xterm   on  secure

In /boot/loader.conf for a dom0 with 2G memory and 4 vcpus
        xen_kernel="/boot/xen"
        xen_cmdline="dom0_mem=2048M dom0_max_vcpus=4 dom0pvh=1 com1=115200,8n1 guest_loglvl=all loglvl=all"

Add
        console=com1 to the above xen_cmdline in order to activate the serial console

In /boot/menu.rc.local
        try-include /boot/xen.4th

サンプルではDom0のメモリが 2GBですが、ZFSを使うなら 4GB以上割り当てておいたほうが良いと思います。
上記に記載はありませんが、追加で設定を行います。

  • /etc/login.conf で、memorylocked の値を unlimited に設定
  • if_tap.ko を起動時にロード

login.confを編集し、memorylocked の項目を unlimited に変更し、cap_mkdb コマンドでDBに書き込んで内容をシステムに反映させます。

login.conf
% sudo vi /etc/login.conf
...
default:\
...
        :memorylocked=unlimited:\
...
root:\
...
        :memorylocked=unlimited:\
...
daemon:\
...
        :memorylocked=unlimited:\
...
% sudo cap_mkdb /etc/login.conf

if_tap.koを起動時に読み込むように、/boot/loader.conf に if_tap_load="YES"の行を記載します。

loader.conf
% cat /boot/loader.conf
kern.geom.label.gptid.enable="0"
zfs_load="YES"
xen_cmdline="dom0_mem=4096M dom0_max_vcpus=4 dom0pvh=1 com1=115200,8n1 guest_loglvl=all loglvl=all"
xen_kernel="/boot/xen"
if_tap_load="YES"

システムを再起動すると、Xen Dom0 として FreeBSD が起動してきます。
ゲストのセットアップ等、xl コマンドの使い方自体は変わりません。

躓いた点を挙げると、
OS起動時にパニックする
=> BIOSでVT-d、IOMMU、EPT あたりが無効になっている
ゲストの起動時にエラー
=> login.conf の設定漏れ
=> if_tab.ko がロードされていない
でした。

Windows 8.1Proを入れてみましたが、問題なく動作しています。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8