連載
» 2007年01月24日 08時00分 UPDATE

Xenの内部設計(後編) (1/2)

前回に引き続き、Xenが仮想マシン環境を実現するために行っていることの全体を眺めてみましょう。

[高橋浩和(VA Linux Systems Japan),ITmedia]

事象の扱い

 ハードウェアで発生した事象をOSに通知する手段として、割り込みや例外が利用されます。たとえばLinuxでは、プログラムエラーの検出のために例外を利用するだけでなく、デマンドページング実現のためにページフォルト例外を積極的に利用するといった使い方をしています*

 Xen上で動作するゲストOSもこれらの割り込みや例外を利用できます。実ハードウェアを操作するOSは、これらの割り込みや例外をOSが直接受け取り、処理を行います。一方Xenを用いた仮想環境では、割り込みや例外は、まずXenが受け取り、そのあとで各ドメインに配送されます。また、ドメイン0とやり取りするために、Xen自体が割り込みやI/O要求を生成しドメインに配送することがあります。

実割り込み

 実割り込みは、実デバイスからの割り込みです。Xen 3.0の実装では、実割り込みにはXenそのものが受け取る割り込みと、ドメイン0に転送する割り込みがあり、コンソール割り込みはXenが制御し、それ以外はドメイン0のデバイスドライバが処理します*。割り込みを受け取ったとき、Xenはそれを適切なドメインに転送しますが、送信先のドメインが実行可能状態でなければいったん転送を保留にし、実行可能状態にします。また、保留された割り込みは、そのドメインが実行を始めたときに配送されます。

仮想割り込み

 仮想割り込みは、Xenの中で生成され、ドメインに配送される割り込みです。たとえば、ゲストOSに対して発生させるタイマー割り込みは、Xen内部で生成したもので、それぞれのドメインに仮想的なタイマー割り込みを発生させます。ドメイン内での割り込み発生は、実割り込みの場合と同様に処理されます。

 Xenの中で生成する仮想割り込みには、ほかに仮想コンソール割り込み、デバッガ割り込みなど、いくつか用意されています(図13)

図13 図13 割り込み

ドメイン間通信とイベントチャネル

 ドメイン上のゲストOSからI/O要求が発行されると、ドメイン0に転送されます。I/Oが完了すると、ドメイン0からゲストOSにその完了が通知されます。このドメイン間の事象通知に、イベントチャネルという仕組みを利用しています。これも仮想割り込みの一種として実装されています。

例外

 ドメイン上のゲストOSの動作によって、例外が引き起こされることがあります。仮想空間関連の例外の一部は、Xenの内部で処理され、ゲストOSに通知されないものもありますが、Xenの内部で処理しない例外は、ゲストOSに転送されます。転送には、割り込みと同様の仕組みを利用しています。

割り込みマスク

 準仮想化ドメインでは、割り込みの禁止と許可を、小さなオーバーヘッドで実現する仕組みを提供しています。Xenとドメインで共有するメモリ領域を設け、ドメイン上のゲストOSからXenに割り込みマスク状態を通知し、逆にXenからドメイン上のゲストOSに割り込みの保留状態を知らせることができるようにしているのがそれです。

 ゲストOSがこの領域を通じて割り込みの禁止を行うと、Xenはドメインに対する割り込み発生を抑制します。逆に、ゲストOSが割り込みの解除を行ったときは、割り込みの保留状態をチェックし、必要ならXenに割り込み発生の要求を行う必要があります。

 一方、完全仮想化ドメインでは、割り込み禁止許可の命令をXenが捕捉し、x86のVT機能を利用して、(仮想)割り込みのマスクを制御します。

時刻と時計

 時計は、それぞれのゲストOS内で独立して動作するもので、時刻を刻み、時限処理を実行します。XenはゲストOSに対して周期的に(仮想的な)タイマー割り込みを発生させる義務があります。

 しかし、同時に複数のドメインが動作しているため、周期の精度は高くありません。また、ドメイン上のゲストOSの負荷が高い場合、そのタイマー割り込みが縮退*してしまうこともあります。

 準仮想化ドメインに対しては、この問題に対し時刻補正を行う仕組みを提供しています。XenとゲストOSとの共有メモリ領域に、Xenが正確な時刻を書き込んでから、ゲストOSにタイマー割り込みを発生させるというものです。これによってゲストOSは、タイマー割り込みハンドラの中で共有メモリ域を参照し、時刻補正できます。ゲストOSからは、正確な時刻を刻むカレンダが存在するように見えます。

 Xenの時計はもう1つ重要な役割を持っています。それぞれの実CPU上で定期的にドメインスケジューラを呼び出し、ドメインの再スケジューリング処理を行わせることです。

 現在のXen環境には、ゲストOSにおける経過時間の観測に影響が出ます。ゲストOSは、自分だけが動作していることを仮定しているため、さまざまな処理の時間計測の結果に狂いが生じます。実際には、頻繁にXenによって実行権を奪い取られているのですが、それに気付かないゲストOSは、Xenに奪い取られた時間も、自OS上の処理が使った時間として計測してしまうことになります。残念ながら現在のXenでは、そのことをゲストOSに通知する経路は用意されていません。

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

ページフォルト例外を積極的に利用するといった使い方をしています

書籍「Linux 2.6カーネル解読室」の「Part3 メモリ管理」内「第13章 プロセス空間の管理」参照。

それ以外はドメイン0のデバイスドライバが処理します

近い将来には、実デバイスを制御するドメインを同時に複数持てるようになる予定。

タイマー割り込みが縮退

タイマー割り込みハンドラを実行する前に、次のタイマー割り込みが発生し、2回または複数回のタイマー割り込みに対して、1回のタイマー割り込みハンドラしか実行されないことがある。


       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

ピックアップコンテンツ

- PR -

注目のテーマ