仮想マシンのプロセススケジューリングを考える


東京工業大学
田所秀和
2008/12/9

マルチコアプロセッサが主流となり、サーバの仮想化・統合などの技術が一般的になってきた現在、データベースサーバもその例外ではない。しかし、実運用に際しては仮想化技術ならではの制約を理解しておく必要がある。本稿を参考に仮想マシン上のプロセスの挙動をどのように理解しておくべきかを考えてほしい(編集部)

仮想マシンのスケジューリングの重要性

 近年、サーバの利用率を向上させるために、仮想マシンを用いて複数のサーバを1台のマシンに統合することが多くなっています。Xenのような仮想化技術では、それぞれのマシンのスケジューリングを「仮想マシンモニタ(ハイパーバイザ:VMM)」を使って行うのが一般的ですが、仮想マシンモニタによる仮想マシンスケジューリングは、仮想化されたシステム全体のパフォーマンスの特性に大きな影響を与えます。このように、仮想マシンのスケジューリングについて知ることは、サーバ統合において重要なことであるといえます。

Xenのドメインスケジューラ 2種類のスケジューリングポリシー

 現在のXenで利用可能なドメインスケジューラは、sedfとcreditです。古いバージョン(Xen 3.0.2まで)では、bvtというスケジューラも利用可能でした。これら3つのスケジューラについて説明します。

bvt、sedfスケジューラはSMP環境でスケールしない

 borrowed virtual time(bvt)スケジューラは、現在のバージョンのXenではサポートしていません。bvtは、ドメインごとに最小時間が決められていて、その間はドメインは割り込まれずに実行することが保証されます。

 Simple Early Deadline First(sedf)スケジューラでは、ドメインごとに周期とタイムスライスが割り当てられ、この周期ごとにタイムスライスだけCPUを使うことができます。

 これら2つのスケジューラには、SMP(Symmetric Multi Processing:対称型マルチプロセッシング)環境でスケーラビリティ(拡張性)に欠けるという欠点があります。具体的には、物理CPUが複数ある環境で、CPU間で自動でロードバランスすることができません。

 このような問題を解決するために、次で述べるcreditスケジューラが開発されました。creditスケジューラでは、物理CPUごとにランキュー(プロセスの実行待ちリスト)が存在し、ランキュー間のロードバランスを自動で行ってくれます。

creditスケジューラ

 現在のXen仮想マシンモニタでは、ドメインスケジューラとしてcreditスケジューラを用いています。creditスケジューラでは、各ドメインにcreditという数が割り当てられます。そして、このcreditの値に比例して、CPU時間が公平に割り当てられます。2つのドメインに同じ数が割り当てられた場合には、同じCPU時間が割り当てられることになります。

 各物理CPUは1つのランキューを持ち、そのランキュー上で仮想CPUが実行を待ちます。仮想CPUは、UNDERとOVERという2つの状態のいずれかになります。UNDERは、仮想CPUが割り当てられたcreditを使い果たしていない状態を表し、OVERは、仮想CPUが割り当てられたcreditを使い果たしてしまった状態を表します。

 ドメインのcreditは、現在実行中の仮想CPUから10ミリ秒の割り込みごとに、一定量ずつ引かれていきます。もし、すべてのドメインのcreditが0になったら、その時点ですべてのドメインのcreditがリセットされます。

 仮想CPUの実行が選択されるとき、必ずUNDER状態の仮想CPUがOVER状態の仮想CPUよりも優先されます。creditを使い切った仮想CPUは、UNDER状態の仮想CPUが存在しないときのみ実行されます。これによって、公平にCPUを使った場合CPUがアイドルになってしまうことを防ぎ、CPU時間をより効率的に使うことができます。

 Xenのcreditスケジューラでは、creditの配分をweightというパラメータで設定します。つまり、weightは相対的なCPUの割り当て時間を表すことになります。ここでは具体的な例として、ドメインAのweightの値が512で、ドメインBのweightの値が256である場合を考えます。

 この場合、2つのドメインがCPUを使おうとした場合には、ドメインAはドメインBの2倍のCPU時間を割り当てられます。

 weightの値は、1から最大65535までの値を設定することができます。指定しない場合、デフォルトの値である256が設定されます。

 さらに、CAPというパラメータを使うことで、CPUがアイドルになったとしても、ドメインが使うCPU時間の上限を設定することも可能です。CAPは、物理CPUを100としたときの割合を表します。例えば、100ならば物理CPU1つ分、50なら物理CPU半分、400なら物理CPU4つ分を表します。この値はデフォルトでは0になっていて、上限がないことを表しています。

 次ページからは具体的なcreditスケジューラの利用方法を紹介していきます。

  1/3 次のページへ

 Index
仮想マシンのプロセススケジューリングを考える
→ Page 1
・仮想マシンのスケジューリングの重要性
・bvt、sedfスケジューラはSMP環境でスケールしない
・creditスケジューラ
  Page 2
・creditスケジューラの利用方法
  Page 3
・仮想マシンモニタによるプロセススケジューリング

Databaseフォーラム全記事インデックス



Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間