sedfスケジューラの実装を理解する【前編】仮想マシンモニタ Xen 3.0解読室(2/3 ページ)

» 2007年09月26日 04時33分 公開
[高橋浩和(VA Linux Systems Japan),ITmedia]

スケジューリング拡張方針

 基本方針に加え、さらに以下のスケジューリング方針を付加しています。これは、方針1-1による仮想CPUへの割り当て時間だけでは、CPU時間が余ることがあるからです。次に挙げる拡張方針によって、余った時間を各仮想CPUに再割り当てできます*

2. I/O待ちなどのために自ら実行権を手放し、方針1-1で与えられた一定時間の実行権を使い切れなかった仮想CPUに、優先的に残り時間を割り当てる。仮想CPUが実行可能状態に戻ったときに、使い切れなかった時間分を優先的に利用できる(この時間を補償時間と呼ぶことにします)

3. それでもCPU時間が残った場合は、実行可能状態にある仮想CPUに実行権を分け与える(この時間を、有効利用時間と呼ぶことにします)


 これらのスケジューリング方針により、各仮想CPUは必ず一定のCPU時間を割り当てられることが補償されます。さらに、余ったCPU時間も、無駄なく利用できます。

 このリアルタイムスケジューリングは、比較的うまく機能します。通常リアルタイムシステムでは、複数のタスクが相互に関係を持ち、互いに協調して動作します。これらのシステムでは、ほかのタスクが競合資源を握っているために、目的のタスクが動けなくなったり、さらにプライオリティインバージョン(優先度逆転)の発生により、その状況がさらに悪化することがあります。

 一方Xenの環境では、これらの問題は発生しないため、ほぼ理論どおりにスケジューリングできます。正確には、I/O処理を代行するドメイン0に処理を依頼するので、そこだけほかのドメインの影響を受けます*が、それ以外の仮想CPUはそれぞれ独立して動作します。

拡張方針の動作例

 補償時間と有効利用時間を使って、仮想CPUが動作するときの例も見てみましょう。仮想CPU A上のゲストOSがI/O要求を出し、I/O完了待ち(待機状態)になったとしましょう(図5の2)。仮想CPU Aの割り当て時間が残っていたとしても、自ら実行権を手放したため、正規の割り当て時間はここで消失します。

 ドメインスケジューラは次に動作する仮想CPUとして、仮想CPU Bを選んだとします(図5の3)。また、仮想CPU Bが動作を開始してすぐに、仮想CPU Aが要求したI/Oが完了し、仮想CPU Aが実行可能状態に復帰したとしましょう。

 しばらくすると、仮想CPU Bが割り当て時間を使い切ります。このとき、割り当て時間を持つ仮想CPUが残っていなければ、仮想CPU Aが使わずに捨ててしまった分の時間の補償を試みます(図5の4)

 この図の例では、仮想CPU Aが補償時間を使い切った時点で、正規の割り当て時間を利用して動作する仮想CPUがまだ存在しなければ、CPU時間を仮想CPUに再配分します(図5の5)

 この図では、仮想CPU Cの新しい周期が始まり、仮想CPU Cが仮想CPU Aから実行権を奪い取っています(図5の6)

図5 図5 補償時間と有効利用時間

このページで出てきた専門用語

余った時間を各仮想CPUに再割り当てできます

割り当てポリシーは、Xenのxmコマンドで変更できる。

そこだけほかのドメインの影響を受けます

現在のXenの実装では、ドメイン0はI/O要求元ドメインの違いを考慮せず、すべてのI/O要求を同列に扱う。デッドラインが近い仮想CPUのI/O要求から処理したり、優先度の高いドメインのI/O帯域を保証するなどということは行わない。


関連キーワード

CPU | Xen | アルゴリズム | Linux | カーネル


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ