PVHとは

Walbrix 3.14以降では、Xen 4.4と Linux 3.14から利用可能になった仮想化モードである PVHを利用することができます。Xenの仮想化モードは大きく分けて

のふたつですが、PVHは PV(準仮想化)の一種です。PVはそれにあらかじめ対応したゲストOSを用いることでハードウェアのエミュレーションを回避し高速に動作するのが特徴で、WalbrixもPVの利用を前提に設計されています。ところがシステムコールの取り回しやページテーブルの処理などどうしても物理ハードウェアにマッピングし直さなければならない部分が実は残り続けているため、(特に 64bitのゲストOSを動作させる際に)そこをソフトウェアで処理する関係上性能的なアドバンテージを出し切れずにいました。

PVHは仮想化対応CPUの機能を利用してその部分の処理を高速化するモードです。つまり、

PVH = 準仮想化 (仮想化対応CPU必須)

となります。ハードウェアエミュレーションという重い処理をなるべく回避しつつ、どうしても必要な箇所ではCPUの仮想化支援命令を用いて高速に処理するという(動作性能面だけ見れば)いいとこ取りのモードということになります。

参考: What Color Is Your Xen? (英語)

PVHを利用可能な条件

  • CPUがVT-xに対応している(AMD系の仮想化支援命令には現時点では未対応とのこと)
  • Xen 4.4以上 (32bit Xenは 4.2までで終了のため 64bit CPU必須)
  • CONFIG_XEN_PVHが有効な ゲスト用 Linuxカーネル 3.14以上

これには、VT-x対応のホストに64bitインストールされた Walbrix 3.14以降が該当します。


CPUが仮想化に対応しているかどうか

PVHを有効にする

前述の要件を満たしていれば、Xen仮想マシンの設定ファイル (/etc/xen/仮想マシン名) にて、

pvh=1

の行を追加するだけです。要件を満たしていないのに pvh=1 が指定されている場合は xl createがちゃんとエラーになります。

仮想アプライアンスのPVH化

Walbrixのいわゆる「仮想アプライアンス」としてダウンロード・作成された仮想マシンを PVHに切り替えるためには、pvh=1を追加するほか「Linux 3.14以上」の要件を満たすために設定ファイルに次の変更が必要です。

kernel="/usr/lib/xen/boot/pv-grub-x86_32.gz"
extra="(hd0)/boot/grub/menu.lst"

kernel="/boot/vmlinuz.domU"
root="/dev/xvda1"

に変更

これはダウンロードされた仮想アプライアンス内に収録されているゲスト Linuxカーネルではなく Walbrix本体側に持っているゲスト Linuxカーネルを用いるようにする設定です。64bitインストールされた Walbrix 3.14以降では /boot/vmlinuz.domU という名前で PVH対応のゲスト用カーネルを提供しているため、これにより確実に PVHでゲストを稼働させることが出来ます。