タグ

xenと仕組みに関するmtbtaizoのブックマーク (6)

  • ライブマイグレーション技術の 解説と活用法 株式会社びぎねっと

  • Xenのモデルと構造

    複数の仮想マシン環境を作り上げ制御するために、仮想マシンモニタであるXenが具体的に何をやっているのか、興味がある方に向け、Xenの設計思想と実装について連載で解説していく。 「仮想マシンとは何か?」で、わたしは「Xenは仮想マシンモニタである」と断言しました。複数の仮想マシン環境を作り上げ制御するために、仮想マシンモニタであるXenが具体的に何をやっているのか、興味を持たれた方も多いと思います。今回からは、そのXenの設計思想と実装について解説していきます。 Xenはどんな動きをしているのだろう? 現在読者の皆さんは、「Xenは仮想マシンモニタであり、複数のOSを制御するプログラムだ」という漠然としたイメージを持たれていると思います。このイメージを、もう少し、ハッキリと感じられるようにしたいと思います。 そのためにはまず、この仮想マシンモニタというプログラムと、普通のOSとを比較してみま

    Xenのモデルと構造
  • Xenの内部設計(後編)

    事象の扱い ハードウェアで発生した事象をOSに通知する手段として、割り込みや例外が利用されます。たとえばLinuxでは、プログラムエラーの検出のために例外を利用するだけでなく、デマンドページング実現のためにページフォルト例外を積極的に利用するといった使い方をしています*。 Xen上で動作するゲストOSもこれらの割り込みや例外を利用できます。実ハードウェアを操作するOSは、これらの割り込みや例外をOSが直接受け取り、処理を行います。一方Xenを用いた仮想環境では、割り込みや例外は、まずXenが受け取り、そのあとで各ドメインに配送されます。また、ドメイン0とやり取りするために、Xen自体が割り込みやI/O要求を生成しドメインに配送することがあります。 実割り込み 実割り込みは、実デバイスからの割り込みです。Xen 3.0の実装では、実割り込みにはXenそのものが受け取る割り込みと、ドメイン0に

    Xenの内部設計(後編)
  • Xenの内部設計(前編)

    連載第1回の内容は以下のように掲載される予定です。 Xenのモデルと構造 記事:Xenの内部設計(前篇) Xenの内部設計(後編) Xenが仮想マシン環境を実現するために行っていることの全体を眺めてみましょう。一つ一つの機能については、今後の連載で詳細に説明していきます。今回は、Xenがどのような設計になっているか、全体をイメージできれば十分だと思います。 空間レイアウト Xenの環境では、それぞれのドメインに1つの仮想空間を割り当てています*(多重仮想空間)。x86(IA-32)用Xenでは、仮想空間の上位アドレスの64MバイトはXenが予約しており、ゲストOSが利用できるのは、残りの4Gバイトから64Mバイトを除いた空間です。Xen体は仮想空間の最上位アドレスに存在し、ゲストOS空間の最上位アドレスには、ゲストOS依存のデータを配置します。物理アドレスとマシンアドレスの対応表もこの

    Xenの内部設計(前編)
  • ドメインの切り替え【前編】

    domain構造体とvcpu構造体 Xenは、各ドメインをdomain構造体で管理し、仮想CPUをvcpu構造体で管理します。それぞれのドメイン(domain構造体)には、複数の仮想CPU(vcpu構造体)が対応付けられています。 仮想CPUは、各CPUごとに用意されたRUNキュー(実行キュー)に登録されます。それぞれのRUNキュー上の仮想CPUの1つが、実CPUと対応付けられ、その仮想CPUを含むドメイン内のゲストOSが実行されます(図3)。 ハイパーバイザースタック Xenは、ハイパーバイザースタックを1つだけ持っています(正確には実CPUごとに1つのハイパーバイザースタックを用意しています)。Linuxカーネルが、プロセスごとにカーネルスタックを用意していたのと対照的です。これは何を意味するのでしょうか? Linux上のプロセスは、システムコールやページフォルトの途中で処理を中断し、

    ドメインの切り替え【前編】
  • ドメインの切り替え【後編】

    コンテキスト切り替え処理の大枠 この部分は、複数のドメイン(ゲストOS)を切り替える心臓部です。ドメイン切り替え処理の大部分は割り込み禁止状態で行います(リスト1のA3、A6、A8)。まず、スーパーバイザースタックの底に置かれているcurrent変数が、次に動作する仮想CPU nextを指すようにします(A4)。 このとき、もし同じ仮想CPU同士で切り替えを指定された場合は(つまり、prevとnextが同じ場合は)、当然コンテキストを切り替える必要がありません(A5)。さらに、次に動作する仮想CPUアイドルドメインのものである場合も、ここではコンテキストの切り替えを行いません(A5)。先ほど説明したように、実際の切り替え処理を遅延させます。 ドメイン同士の場合、通常はコンテキストの切り替えを行います。コンテキスト切り替えの大部分は、__context_switch関数(A7)で行います(

    ドメインの切り替え【後編】
  • 1