1台の物理的なハードウエアに複数のサーバーを集約する場合を考えてみよう。負荷のかかるサーバーには多くリソースを割り当て,負荷の低いサーバーに割り当てるリソースは少なくしたい。そこでここでは,Xen3.0.2-2を使用し,Xenのドメインに対するCPUとメモリー・リソースの割り当て方法と,あるハードウエアで動作している仮想マシンを,稼働させたままほかのハードウエアに移動させる「ライブ・マイグレーション」機能を紹介する。

複数のCPUを割り当てられる

 Xenは,バージョン3.0からSMP(対象型マルチプロセッシング)に対応し,各ドメインに複数のCPUを割り当てられるようになった。従って,高いパフォーマンスが必要なドメインには多くのCPUリソースを割り当て,パフォーマンスをそれほど必要としないドメインには少なく割り当てることが可能である。

 Xenは,ドメインが起動すると,仮想CPUを定義する。そして,ドメイン・スケジューラがドメイン上の仮想CPUと実CPUの間に入り,プロセス処理を制御している(図1)。ドメイン・スケジューラは時分割で各仮想CPUに実CPUを割り当てており,ドメイン内の仮想OSからは,実CPUを占有しているかのように見える。

図1●仮想CPUに実CPUを割り当てる仕組み
図1●仮想CPUに実CPUを割り当てる仕組み

 ドメイン0に割り当てる仮想CPUの数は「/etc/xen/xend-config.sxp」ファイルの中にある「(dom0-cpus 0)」の値で設定する。デフォルトでは0となっているはずだ。この場合,実CPUと同じ数だけ割り当てられる。ドメインの仮想CPU情報を表示するには「xm vcpu-list」コマンドを使用する(図2)。

図2●「xm vcpu-list」コマンドでドメインの仮想CPU情報を表示する
図2●「xm vcpu-list」コマンドでドメインの仮想CPU情報を表示する
[画像のクリックで拡大表示]

 コマンドが表示する「VCPU」は,ドメインに定義されている仮想CPUの番号,そして「CPU」がそれに割り当てられている実CPUの番号となる。図2で使ったサーバーは,ハイパースレッディング対応のCPUを2個搭載しているため,4つのCPUとして認識されている。

 ドメインUに割り当てる仮想CPUの数は,ドメインUを起動する際に用いる設定ファイルの中に記述する(図3)。vcpusパラメータの値でドメインUの仮想CPUの数を指定できる。仮想マシンを2台起動し,1台は仮想CPUが1つ,もう1台は仮想CPUが2つとなるように設定して起動したときの「xm vcpu-list」コマンドの結果は図4のようになる。

図3●ドメインUに割り当てる仮想CPUの数を記述する設定ファイル
図3●ドメインUに割り当てる仮想CPUの数を記述する設定ファイル
[画像のクリックで拡大表示]

図4●1台は仮想CPUが1つ,もう1台は仮想CPUが2つとなるように設定したときの様子
図4●1台は仮想CPUが1つ,もう1台は仮想CPUが2つとなるように設定したときの様子
[画像のクリックで拡大表示]

 実CPUよりも多い数の仮想CPUが存在する場合,同じ実CPUに複数の仮想CPUが割り当てられる。特に指定しなければ,Xenが,割り当てるCPUを判断して設定するが,割り当てるCPUを明示的に指定することも可能である。

 一般にドメイン0の上で高負荷なサービスを起動することは考えられないので,ドメイン0の仮想CPUの割り当てを1つにし,仮想CPUの数と実CPUの数を同じにして,1対1で対応させてみよう。