2017/02/10

iGVT-g(KVMGT)構築

XenGT同様とりあえず動かしてみたかったので、またまたカーネルビルドするところからやってみた。目指すのは、物理ディスプレイを一切使わずにリモート操作のみで構築・使用すること。

Ubuntu16.04.1 LTS Install
[*] standard system utilities
[ ] Virtual Machine host
[*] OpenSSH server
こっちもlibvirtは入れない。
# apt update
# apt upgrade -y
# apt install emacs nmap

最低限のXorg環境(リモートで操作すること前提。自分にとってここが重要
# apt install xorg openbox menu gconf2 fonts-takao x11vnc xvfb
.bash_aliases
alias xvnc='x11vnc -create -env FD_GEOM=1024x800 -env FD_PROG=openbox'
.x11vncrc をこんな感じで用意
nopw
nonc
shared
noxrecord
noxdamage
noxfixes
norc
noscr
no6
xkb
repeat
scr_keyrepeat 4-6
forever
bg
o x11vnc.log
foreverとbgおよびnoscrを追加。noscrを入れるとぐっと安定する気がする。

ビルドツールインストール
# apt install -y git clang
自分は最近clangですが、build-essential でもいいと思う。

ビルドパッケージインストール
# apt install -y libx11-dev autoconf python-dev bin86 bcc iasl uuid-dev libncurses5-dev libglib2.0-dev libpixman-1-dev libaio-dev libssl-dev libyajl-dev libc6-dev-i386 libsdl1.2-dev bc gettext bison flex

Qemu Compositor Display Mode を使いたい場合
# apt install -y  libegl1-mesa-dev libudev-dev

/etc/initramfs-tools/modules に次の1行記述
kvm

カーネルビルド スクリプト (XenGT/KVMGT共に共通)
./build_kernel
#!/bin/sh
git clone https://github.com/01org/igvtg-kernel kernel_src
cd kernel_src/
git checkout 2016q3-4.3.0
cp config-4.3.0-host .config
sed -i "s/.*CONFIG_BLK_DEV_NVME.*/CONFIG_BLK_DEV_NVME=y/" .config
make -j8 && make modules_install
mkinitramfs -o /boot/initrd.img-4.3.0-rc6-vgt+ -v 4.3.0-rc6-vgt+
cp arch/x86/boot/bzImage /boot/vmlinuz-4.3.0-rc6-vgt+
cp vgt.rules /etc/udev/rules.d
chmod a+x vgt_mgr
cp vgt_mgr /usr/bin

Qemuビルド スクリプト
./build_qemu
#!/bin/sh
git clone https://github.com/01org/igvtg-qemu -b 2016q3-2.3.0 qemu_src
cd qemu_src/
git submodule update --init dtc
git submodule update --init roms/seabios
./configure --prefix=/usr --enable-kvm --enable-sdl --disable-werror  --target-list=x86_64-softmmu
make -j8
cd roms/seabios
git checkout master
LC_ALL=C make -j8
cd -
make install
cp `pwd`/roms/seabios/out/bios.bin /usr/bin/bios.bin

ビルド&インストール
# ./build_kernel && ./build_qemu

Grubセットアップ
少し変則的な方法にしましたが、極力シンプルで扱いやすくということでこんな感じに。
/root/grub-kvmgt.cfg 作成
OS='KVMGT'
GRUB_CMDLINE_LINUX='intel_iommu=igfx_off i915.hvm_boot_foreground=1 i915.enable_cmd_parser=0 loglvl=all guest_loglvl=all conring_size=4M noreboot'
list='/boot/vmlinuz-4.3.0-rc6-vgt+'
./etc/grub.d/09_linux_kvmgt 作成
# cp /etc/grub.d/10_linux /etc/grub.d/09_linux_kvmgt
# sed -i "/top_level=true$/a . '/root/grub-kvmgt.cfg'" /etc/grub.d/09_linux_kvmgt
Brubアップデート
# update-grub

ネットワーク設定
# apt install bridge-utils uml-utilities
# emacs /etc/network/interface
# The primary network interface
auto enp0s31f6 br0
iface enp0s31f6 inet manual
iface br0 inet dhcp
bridge_ports enp0s31f6

ゲストにホストと同じカーネルとモジュール類をコピーするので、持って行きやすくアーカイブする
kernel/modulesアーカイブ
# tar zcf /home/user/vgt.tgz /boot/vmlinuz-4.3.0-rc6-vgt+ /boot/initrd.img-4.3.0-rc6-vgt+ /lib/modules/4.3.0-rc6-vgt+ /etc/udev/rules.d/vgt.rules /root/.x11vncrc
x11vncはゲストでも使うので、.x11vncrc ファイルもアーカイブセットに入れておく。

ゲスト起動で使用する /root/qemu-ifup シェルスクリプトを用意
#!/bin/bash

switch=$(brctl show| sed -n 2p |awk '{print $1}')
if [ -n $switch ]; then
  tunctl -u `whoami` -t $1
  ip link set $1 up
  /sbin/ifconfig $1 0.0.0.0 up
  brctl addif $switch $1
  exit 0
else
  echo Error: no interface specified
  exit 1
fi
実行権限セット
# chmod +x qemu-ifup

この辺で一度リブート
# reboot
ビルドしたカーネルで起動する。

これ以降はデスクトップ上でやるので、x11vnc起動してリモートデスクトップから操作する
# xvnc
リモートからtightvncかTourboVNCで接続

ゲスト作成
installer iso ダウンロード
ディスク作成
# qemu-img create -f qcow2 guest.img 30G
LVMで作る場合は
# lvcreate -n LVNAME VGNAME(どのVGに作るか) -L 10G

ゲスト起動(OSインストール。何らかのDesktopを入れないと面白くない)
/usr/bin/qemu-system-x86_64 \
  -m 2048 \
  -smp 2 \
  -bios /usr/bin/bios.bin \
  -enable-kvm \
  -M pc \
  -machine kernel_irqchip=on \
  -net nic -net tap,script=/root/qemu-ifup,downscript=no \
  -hda /root/guest.img \
  -cdrom /root/mini.iso \
  -boot d
LVMの場合は -hda を
-drive file=/dev/mapper/VGNAME-LVNAME,if=ide,index=0,cache=none,format=raw \
にする。

作っておいたvgt.tgzをゲスト側から scp で取得して展開。ついでにGrubデフォルト設定
$ scp user@host:vgt.tgz .
$ sudo tar zxf vgt.tgz -C /
$ sudo sed -i 's/DEFAULT=0/DEFAULT="1>Ubuntu, with Linux 4.3.0-rc6-vgt+"/' /etc/default/grub
$ sudo update-grub
$ sudo apt install x11vnc
$ sudo shutdown -h now
このタイミングでx11vnc入れておく。

これでKVMGTなゲストが起動できる準備は整いました。
だけど残念ながら、libvirtやvirt-managerは使えません。物理FBが使用されるので、virt-viewerも使えません。
ゲストコンソールにアクセスしてもうんともすんとも。色々頑張ればどうにかなるのだろうか。。
この辺りは、Xenの方が管理ツールが少し使える分扱いやすいかも。

最初に書いたとおりリモート操作前提なので、ゲスト上でx11vncを起動する必要がある。もちろんIPアドレスが分からないといけない。
そこで、以下のような起動スクリプトにした。

ゲスト起動スクリプト
#!/bin/sh
/usr/bin/qemu-system-x86_64 \
  -daemonize \
  -m 4096 \
  -smp 2 \
  -bios /usr/bin/bios.bin \
  -enable-kvm \
  -M pc \
  -machine kernel_irqchip=on \
  -net nic -net tap,script=/root/qemu-ifup,downscript=no \
  -hda /root/guest.img \
  -vgt -vga vgt \
  -vgt_low_gm_sz 128 \
  -vgt_high_gm_sz 384 \
  -vgt_fence_sz 4
## 苦肉の策
sleep 1
tcpdump ip -itap0 | awk '/DHCP/{print $_}'
起動してゲストのネットワークが確立するとき、ルータとのDHCPハンドシェイクでIPアドレスがわかる。
それを表示するのが最後の1ラインスクリプト。表示されてIPアドレスが分かったらCtrl+Cでシェルスクリプトを終わらせる。
OpenSSHはどんな場合でも入れているので、IPさえ分かれば何とかなる。

ゲストにsshログイン
$ ssh username@guest-ip-address

ゲストでx11vnc起動
$ sudo x11vncrc -auth guess -display :0

ゲストデスクトップへ接続
ホストから xtightvncviewer で、もしくはリモートから、TourboVNC Viewer で接続
これで、物理ディスプレイ前にいなくても、めでたくゲストデスクトップへ接続できたと。

ゲストディスプレイ解像度は、物理ディスプレイが接続されていればそれに依存する。
物理ディスプレイが接続されていなければデフォルトの 1024x768 になるようだ。
物理ディスプレイやEDIDエミュレータとか繋がなくても、ゲストで物理FBとGPUを使うことが出来るのが最大の魅力。
しかし完全に自由な解像度で、というわけには行かないようだ。
インダイレクトモードでのmonitor.configがその要求に答えてくれそうだが、機能しているかどうか体感できず。

XenGTとKVMGT両方やってみたが何はともあれ、安定性は大差ない気がする。
XenGTの方がXenツールも込みなので、ゲスト管理がしやすいかな。

最後に
ここに書いたように無理にx11vnc使ってリモート操作する必要はない。物理ディスプレイ前に座っていられるならゲスト起動すれば(カーネルオプション  i915.hvm_boot_foreground=1 にしていれば)自動的にディスプレイが切り替わる。そして普通に使える。


自分がやりたいのは、物理も仮想もモニタレスでリモートでGPUアクセラレーションが効いていて全てを同時に使うことなので、こんな流れになった。もっと素直に使えばもう少し安定するっぽいけど、それではつまらないのでね。

2017/02/04

iGVT-g(XenGT)構築 パート2

前回のパート1ではプリセットされたISOをインストールしてみただけだったが、パート2ではカーネルビルドするところからやってみることにする。2つ目のゲストが起動しないという問題も原因がわかった。最後に原因についてまとめた。

Ubuntu-16.04.1-ServerをOpenSSHだけ入れた状態からスタート
自分の場合、LVMでdom0用に50% 残りはゲスト用に空けておく。イメージファイルとLVM両方試したいので。

ほとんどのコマンド実行が root権限が必要なので
$ sudo su -
その後のすべての操作をrootで行う。

事前準備の前準備
# apt update
# apt install emacs -y # <= 愛用のテキストエディタ
# apt upgrade -y
普通のXenを入れないように。xen tools関係が混乱する。自分はこれでハマった。
no! # apt install xen-hypervisor-4.6-amd64 -y

XenGTビルド 事前準備
前回取り扱ったISOファイルの中にXenGT/KVMGTをソースからビルドする手順が説明されているセットアップガイド(iGVT-g_Setup_Guide.txt)が入っている。ネット上にもほぼ同じものが見つかるが、ISO内のファイルより古いものしか見つからなかった。基本的にはこのガイド通りに進めていくが、ところどころ変更している。

ビルドに必要なパッケージをインストール
# apt install -y git clang libx11-dev autoconf python-dev bin86 bcc iasl uuid-dev libncurses5-dev libglib2.0-dev libpixman-1-dev libaio-dev libssl-dev libyajl-dev libc6-dev-i386 libsdl1.2-dev bc gettext

Qemu Compositor Modeを使う場合に必要なパッケージインストール
# apt-get install -y libegl1-mesa-dev libudev-dev
これもちょっとハマった・・・

# emacs /etc/initramfs-tools/modules
xengt
kvm
を追加。今回kvmはいらないかもしれないけど説明がそうなっているので一応。

カーネル ビルド&インストール
# git clone https://github.com/01org/igvtg-kernel kernel_src
# cd kernel_src/
# git checkout 2016q3-4.3.0
# cp config-4.3.0-host .config
# make -j8 && make modules_install
# mkinitramfs -o /boot/initrd.img-4.3.0-rc6-vgt+ -v 4.3.0-rc6-vgt+
# cp arch/x86/boot/bzImage /boot/vmlinuz-4.3.0-rc6-vgt+
# cp vgt.rules /etc/udev/rules.d
# chmod a+x vgt_mgr
# cp vgt_mgr /usr/bin
ここもハマりました。Ubuntuインストールしたディスクは、NVMeデバイスだったため上の手順だけではブートせず。
.config を編集
# sed -i "s/.*CONFIG_BLK_DEV_NVME.*/CONFIG_BLK_DEV_NVME=y/" .config
NVMeモジュールをbuilt-inにして make以降をやり直し。普通にSATAとかだったら不要。

Hypervisor(Xen) と Device model(QEMU) ビルド&インストール
# git clone https://github.com/01org/igvtg-xen xen_src
# cd xen_src/
# git checkout 2016q3-4.6
# git clone https://github.com/01org/igvtg-qemu.git -b 2016q3-2.3.0 qemu-xen
# cp -r qemu-xen/ tools/
# sed -i '/QEMU_UPSTREAM_URL/s:http\://xenbits.xen.org/git-http/qemu-upstream-4.6-testing.git:$(XEN_ROOT)/tools/qemu-xen:' Config.mk
# sed -i '/QEMU_UPSTREAM_URL/s:git\://xenbits.xen.org/qemu-upstream-4.6-testing.git:$(XEN_ROOT)/tools/qemu-xen:' Config.mk
# ./autogen.sh
# ./configure --prefix=/usr # XEN4.6 default path is /usr/local
# make -j8 xen tools
# cp xen/xen.gz /boot/xen-4.6-amd64-vgt.gz
# make install-tools PYTHON_PREFIX_ARG=
2つ目のsedは実行しても条件が合わず効果なし。Config.mkを以下のように変更する。 自分はやらなかった。
#QEMU_UPSTREAM_URL ?= git://vgt.sh.intel.com/qemu-xen.git
QEMU_UPSTREAM_URL ?= $(XEN_ROOT)/tools/qemu-xen

Xen自動起動設定
# update-rc.d xencommons defaults
# emacs /etc/fstab
none /proc/xen xenfs defaults 0 0
 の1行追加

Grub セットアップ
始めから用意されている/etc/grub.d/20_linux_xenをXenGT用のファイルにしてしまう。
# emacs /etc/grub.d/20_linux_xengt
is_top_level=true
の下に以下の2行を追加
OS='XenGT'
linux_list='/boot/vmlinuz-4.3.0-rc6-vgt+'

Grubデフォルト設定ファイル作成
# emacs /etc/default/grub.d/xengt.cfg
GRUB_DEFAULT='XenGT, with Xen hypervisor'
GRUB_CMDLINE_XEN='dom0_mem=2048M loglvl=all guest_loglvl=all conring_size=4M noreboot'
GRUB_CMDLINE_LINUX_XEN_REPLACE='rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM ignore_loglevel console=tty0 console=hvc0 consoleblank=0 log_buf_len=4M i915.hvm_boot_foreground=1 i915.enable_cmd_parser=0'
Grub更新
# update-grub

ネットワーク設定
# apt install bridge-utils
# emacs /etc/network/interface
# The primary network interface
auto enp0s31f6 xenbr0
iface enp0s31f6 inet manual
iface xenbr0 inet dhcp
bridge_ports enp0s31f6

再起動
# reboot

これでほぼ完了だが、まだホストがUbuntuServerなので、フレームバッファが存在せず、qemuが起動しない。

オリジナルのセットアップガイド(iGVT-g_Setup_Guide.txt)には 3.5.1 Configuring Remote Control の項目でgnomeとvncserverを入れてどうこうするとか書いてある。実際やってみるととても使える環境とは言えない。
ここは自分の好みでシンプルX環境を作る。

最低限のX環境をインストール
# apt install xorg openbox obconf gconf2 fonts-takao menu menu-xdg
# apt install x11vnc xvfb
何度も実行するフレーズなので、.bash_aliasesとかに以下のaliasを記述しておく。
# alias xvnc='x11vnc -create -env FD_GEOM=1280x800 -env FD_PROG=openbox'
.x11vncrc ファイルはいつも通りこんな感じ。
nonc
shared
noxrecord
noxdamage
noxfixes
norc
xkb
repeat
scr_keyrepeat 4-6
o x11vnc.log
x11vncをXvfbで起動
# xvnc
ホスト:5900 にリモートでvnc接続する。シンプルなopenbox環境が起動しているはず。
デスクトップ4つとかウザいんで、obconfで1つに設定変更。 これで幸せになれる。この辺については 以前の記事 を参照。

ゲスト作成

インストールISOファイル ダウンロード
# wget http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/mini.iso

ゲストディスク作成
# qemu-img-xen create -f qcow2 guest.qcow2 30G

ゲストインストール用 HVMファイル作成
# emacs guest.hvm
builder = "hvm"
name = "install"
memory = 1024
vcpus = 2
vif = [ 'type=ioemu,bridge=xenbr0,model=e1000' ]
disk=[ '/root/install.qcow2, qcow2,xvda,rw','file:/root/mini.iso,hdc,cdrom,r' ]
boot="dc"

device_model_version='qemu-xen'
device_model_override='/usr/lib/xen/bin/qemu-system-i386'
sdl = 1
serial='pty'
stdvga = 0
usb=1
usbdevice='tablet'
keymap='en-us'
acpi_s3=0
acpi_s4=0

ゲスト起動
# xl cr guest.hvm
好みのデスクトップ環境と、OpenSSHを入れる。Xorgを動かさないと意味が無いので、デスクトップ必須。

ゲスト用 HVMファイルへ更新
# emacs guest.hvm
disk=[ '/root/install.qcow2, qcow2,xvda,rw' ]
boot="c"
に変更して、ゲスト再起動
# xl cr guest.hvm
このときは普通にQemuウインドウ内で起動するはずなので、普通にログインするか
# xl console -t pv domID
でログインする。

vgtカーネルインストール
ホストと同じカーネルとカーネルモジュールでゲストも起動する必要があるが、パート1でやったが、ガイド通りだと nbd、kpartx、image mount という手順で面倒。今回は別の方法でやる。

1.ホストでコピーするファイル群をtarballにする
# tar zcf xengt.tgz /boot/initrd.img-4.3.0-rc6-vgt+ /boot/vmlinuz-4.3.0-rc6-vgt+ /lib/modules/4.3.0-rc6-vgt+ /etc/udev/rules.d/vgt.rules

2.ゲスト側からホストのxengt.tgzをscpして、'/'に展開
$ sudo tar zxf xengt.tgz -C /

3.ついでにGRUB設定する
$ sudo sed -i "/GRUB_DEFAULT/s:0:'1>Ubuntu, with Linux 4.3.0-rc6-vgt+':" /etc/default/grub
GRUB_DEFAULT='1>Ubuntu, with Linux 4.3.0-rc6-vgt+' な感じになると思う。

4.Grubアップデート
$ sudo update-grub

5.vgt有効な ゲスト HVMへ更新
vgt=1
vgt_low_gm_sz=128
vgt_high_gm_sz=384
vgt_fence_sz=4
を追加

6.ゲスト再起動
次回のゲスト作成時は1.を省略できる。こっちの方が簡単確実だ。条件はゲストにOpenSSHを入れる必要があるということだけ。

ゲストのデスクトップへリモート接続
リモートデスクトップ上のqemuゲストウインドウにはペンギンアイコンが出て止まっているようにみえるが、これで正常。
vgtが機能すると、物理ディスプレイ側のフレームバッファが使われるので仮想デスクトップには表示されないのだ。
ここまでの手順を物理ディスプレイ上のデスクトップ環境から操作しているならば、自動的にゲストにディスプレイが切り替わるが
自分はリモートでx11vnc接続なので、ゲストデスクトップ接続までに、ここから一手間いる。

ゲストへコンソール接続
# xl console -t pv domID
ログインしたら、こっちにもx11vncセットアップ
# apt install x11vnc
ホストから.x11vncrcファイルをコピー。手書きしてもいいけど。面倒なので。
# scp ホスト:.x11vncrc .
IPアドレス確認
# ifconfig
x11vnc起動
# x11vnc -auth guess -display :0

ホストにVNCするのと同じ要領でゲストにリモートVNC接続する。ゲストのデスクトップ(ログイン)画面が出てくる。

vgt カーネルオプション

/etc/default/grub.d/xengt.cfg で GRUB_CMDLINE_LINUX_XEN_REPLACE に色々設定したが、この中のi915.で始まるオプションがvgtカーネルオプション。幾つかの起動モードオプションがあるので、その辺を少し。

Foreground(Direct?) Mode
i915.hvm_boot_foreground=1
ゲスト起動で自動的に物理ディスプレイがゲストデスクトップに切り替わるモード。通常はこれでいい。

Indirect Mode
i915.propagate_monitor_to_guest=0
ゲストhvmファイルに以下を追加
vgt_monitor_config_file='/path/to/monitor.config'
monitor.configのサンプルがセットアップガイドに示されている。
# cat monitor.config
 # monitor.config file.
 # first bit 1 for text mode, and second bit 2 for number of ports in the config
 11
 # 04 for PORT_E; and 01 for PORT_B to be override (virtual VGA on physical DP)
 0401
 # Virtual VGA monitor EDID
 00ffffffffffff000469b1232df80000
 0f16010381331d782a5ea5a2554da026
 115054bfef00d1c095008140818081c0
 950fb300714f023a801871382d40582c
 4500fd1e1100001e000000ff0043344c
 4d54463036333533330a000000fd0032
 4b185311000a202020202020000000fc
 00415355532050413233380a202000e0
この辺はEDID変えてみたり、物理ディスプレイ接続をしたりしなかったり、色々やってみたが、機能している気がしない。不明。。

Qemu Compositor Display Mode
i915.hvm_boot_foreground=0
i915.enable_vgtbuffer=1
ホストデスクトップを物理ディスプレイ上で動かしている場合(egl extensionsが機能する状態)なら、ホストデスクトップのQemuウインドウにゲストデスクトップイメージが合成されるモード。事実上これもIndirectMode。
これはこれで楽しいけれど、モニタレスにしたい自分としては、Xvfb上でもコンポジットしてほしかった。eglExtensionな仮想FBドライバがあれば合成可能なのかな。

最終的に自分は、ダイレクトモードだけど自動切り替えなし。という状態に落ち着いた。x11vncでゲストへリモート接続するから。
i915.hvm_boot_foreground=0

この時点で最大の魅力は、物理ディスプレイを接続していなくても、デフォルト解像度固定ではあるが、モノホンのグラフィックスドライバが機能する(GPUが使えている)。WindowsゲストでもちゃんとIntelグラフィックスドライバが動く。

ゲストで、vgtイネーブル(vGPUが機能している状態)を軽く確認
$ sudo apt install mesa-utils glmark2
ドライバ、GPU、GL profile 情報とか見てみる
$ glxinfo
GLデモ動かしてみる
$ glmark2
GFXBenchを試してみたかったが起動するとシステムフリーズしてしまった。

最後に2つ目のゲストが起動できなかった原因と解決(?)
結論から言うとメモリリソース不足。シェアードメモリを1つ目のゲストが使い切っていたから。
BIOSでshard memory sizeを最大の1GBにしていたが、これでは十分じゃない? BIOSでAUTOにしても結果同じ。

vgtリソース情報を見やすくする簡単なスクリプトを用意した
# cat gminfo.py 
#!/usr/bin/python
import sys
words = sys.stdin.readlines()[0].split(",")
print int(words[0],16) ,'MB : total CPU visible Graphics memory size'
print int(words[1],16) ,'MB : free CPU visible graphics memory size'
print int(words[2],16) ,'MB : toal CPU invisible graphics memory size'
print int(words[3],16) ,'MB : free CPU invisible graphics memory size'
print int(words[4],16) ,' : total number of fence register'
print int(words[5],16) ,' : the number of free fence registers'
で、以下のように実行する
# cat /sys/kernel/vgt/control/available_resource | ./gminfo.py
と、こんな感じで表示される
256 MB : total CPU visible Graphics memory size
128 MB : free CPU visible graphics memory size
3840 MB : toal CPU invisible graphics memory size
3456 MB : free CPU invisible graphics memory size
32 : total number of fence register
28 : the number of free fence registers

この中の CPU visible Graphics memory size が問題。CPUから見えるグラフィックスメモリ。すなわちGPU/CPUシェアードメモリのことだと思うが、これが自分のBeebox-S 6200U では(なのか?)256MBしかないというのだ。これは納得出来ないが、 カーネルソースに、vgtシステムとして512MB取っているらしいのと、dom0で128MB消費してしまうらしい。
1GB-512MB-128MB=384MB 残りそうなものだが、なぜか トータル256MB、残り128MBということだ。

この状態で2つのゲストを動かすためには、ゲスト起動HVMオプションで
vgt_low_gm_sz=64
とすることで、2つゲスト起動可能となった。linuxでも64以上が望ましいということなので、自分の環境では2つが限界。
dom0の確保分を減らせないかとオプションで試してみたが、効果なし。

最終手段はカーネル側で確保しているサイズを小さくすることだが、今でもシステム不安定なのにこれ以上不安定にしてもなぁ。
ということで、今のところ諦める。

不安定といえば、vgtゲスト起動しっぱなしでしばらく時間が立つと突然マシン全体がフリーズしてしまったり、暴走してネットワークがフルトラフィック状態に陥ったり、色々してくれる・・・そのせいでかみさんに時々怒られている。実用はむりかなぁ。

次回は、KVMGTをビルドして稼働させてみようかと思う。XenGTとさほど変わらないと思うが、これも実験。


期待したいのはシェアードメモリ空き容量。安定性。どうかな。