IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Linux  >

仮想マシンモニタ Xen 3.0解読室:第3回 Xenの内部設計(後篇)

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません


レベル: 初級

高橋 浩和, VA Linux Systems Japan, ITmedia

2007年 3月 30日

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

事象の扱い

ハードウェアで発生した事象を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 割り込み
割り込み

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

ドメイン上のゲスト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に通知する経路は用意されていません。

デバイスモデル

準仮想化ドメインは、仮想デバイスを経由してI/Oを実現します。




上に戻る


仮想ブロックデバイス

仮想ブロックデバイスは、IDEやSCSIディスクの動作を真似ます。ドメインU上のゲストOSは、仮想デバイスを制御する仮想デバイスドライバを持ち、このドライバはフロントドライバと呼ばれます。フロントドライバは、仮想デバイスを操作するための入り口部分の処理のみを行い、I/O要求をドメイン0に投げます。具体的には、I/Oリングに書き込んだ後、イベントチャネルを利用してドメイン0にI/O要求が発生したことを通知するといった動作になります。

ドメイン0はイベントチャネルから要求を受け取ると、仮想デバイスドライバを起動し、これはバックエンドドライバと呼ばれています。I/OリングからI/O要求を取り出し、ドメイン0の実デバイスを制御するドライバにI/Oを要求します(図14)


図14 仮想ブロックデバイス
仮想ブロックデバイス

この2つの仮想デバイスドライバ(ドメインUのフロントエンドドライバと、ドメイン0のバックエンドドライバ)は、Xenバスという仕組みを通して制御情報をやり取りし、協調動作できるようになっています。




上に戻る


仮想ネットワークインタフェース

Xenでは、ネットワークインタフェースも仮想化されています。ドメイン間に仮想的なネットワークを立ち上げており、Linuxカーネルが用意しているブリッジ機能を利用して、物理ネットワークインタフェース(peth0)の先に、仮想ネットワークインタフェースをつなぎます。ドメインUが送信したパケットは、ドメイン0の物理ネットワークインタフェース(peth0)を通して外の世界に送り出されます(受信はその逆となります)。ドメイン0がeth0として利用しているネットワークが、仮想ネットワークインタフェースとして実装されているのが、面白い点でしょう(図15)


図15 仮想ネットワークインタフェース
仮想ネットワークインタフェース

マイグレーション

Xenは、ドメインを異なる実マシン上に移動する機能を持っています。いったんゲストOSを停止し、そのイメージをファイルに保存、別の実マシンにそのファイルを転送して、そこからゲストOSを再開できます。また、これに加えてXenでは、ゲストOSを止めずにこの移動を行うための機能(ライブマイグレーション)も提供しています。

動作しているゲストOSのイメージを、ほかのマシンに移動するわけですが、この場合、せっかく転送したメモリイメージが元のマシン上では書き換えられてしまうことがあります。これを検出し再度転送し直す仕掛けも用意されています。

この仕組みは、イメージを転送したページに書き込み保護をかけることで実現されています。再度このページに更新があったときに発生する例外を捕捉し、このページのイメージを再送しなければならないことを認識するわけです。

更新頻度の高いページはどうしても残るので、一番最後にはゲストOSを一瞬だけ停止し、これら更新頻度の高いページのイメージを転送します。




上に戻る


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

ページフォルト例外を積極的に利用するといった使い方をしています
書籍「Linux 2.6カーネル解読室」の「Part3 メモリ管理」内「第13章 プロセス空間の管理」参照。
それ以外はドメイン0のデバイスドライバが処理します
近い将来には、実デバイスを制御するドメインを同時に複数持てるようになる予定です。
タイマー割り込みが縮退
タイマー割り込みハンドラを実行する前に、次のタイマー割り込みが発生し、2回または複数回のタイマー割り込みに対して、1回のタイマー割り込みハンドラしか実行されないことがあります。


参考文献



著者について

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




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


この記事を共有する

はてなブックマーク はてなブックマーク livedoorクリップ livedoorクリップ del.icio.us del.icio.us Buzzurl(バザール) Buzzurl(バザール) Choix! Choix!
Saafブックマーク Saafブックマーク FC2ブックマーク FC2ブックマーク MM/memo MM/memo ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
CZブックマーク CZブックマーク newsing newsing




上に戻る


本記事は、オープンソースマガジン2006年4月号「仮想マシンモニタ Xen 3.0解読室」連載第1回を再構成したものです。

Copyright© 2007 ITmedia, Inc. All Rights Reserved.

    日本IBMについて プライバシー お問い合わせ