/var/log/dmesg

30代文系出身SE(男)が日常生活のブログ。脳みそのバッファメモリを退避して、毎日やすらかに眠りたい。という思いで更新しています。

ハイパー = スーパーのスーパー【LPI304 ~仮想化~】

1.はじめに

さて、バカ高い受験料というプレッシャーにもなんとか打ち勝ち
LPI303 Securityを取得することができた。
その日の夜にLPIから認証しましたメールが送られてくる。
こっちとしてはまぁよかったなぁと思って缶ビールで祝杯を挙げて、一件落着。
とできればよかったのだけど。
この資格を「ゴール」できない以上、次にチャレンジすることとにしようか。

2.用語の整理

特権命令
CPUやメモリ操作など ハードウェアリソースにタッチするような処理命令。
一般ユーザーは実施できない。

ハイパーバイザー
スーパーバイザーのスーパーバイザー。
親の親=じじばば。
ハードウェアの仮想化を実現する低レベルのソフトウェア。
動作に特定のOSを必要とせず、ハイパーバイザーの組込みだけで、
複数OSを動かす仮想環境を実現できる。
技術的には、ハイパーバイザーはコンピューターのBIOSとOSの中間層に位置し、
上位に組み込まれた複数のOSに対し、CPUの処理の割り振りや
競合するハードウェアを調停し、あるいは仮想化した周辺機器を提供する。

ベアメタル(型ハイパーバイザー)
ホストOSを必要としない仮想化ソフトウェアの方式。
ハイパーバイザーの実装先は物理マシン(BIOS)上に実装する。
ホストOSが不要のため、消費リソースは少なめ(最大限活用するイメージ?)
扱える仮想化方式は「準仮想化」「完全仮想化」どちらもできる。

代表例: XenVMWare ESX、Hyper-V

ホストOS型ハイパーバイザー
名前どおりホストOSは必須。
そのため消費リソースはベアメタル型より多い。
扱える仮想化方式は「完全仮想化」。

代表例: KVM、Virtual BOX、Virtual PC

仮想化方式

  • 準仮想化
    ゲストOSが発行する特権命令をハイパーバイザーが代理実行することで
    仮想化を実現する方式。ゲストOSの改変は必要。
    実在のハードウェアを完全にエミュレートする代わりに、
    仮想マシン環境を実現するのに都合の良い仮想的なハードウェアを再定義する。
    この仮想ハードウェアは、実在のハードウェアに似ているが、
    操作をするためにはハイパーバイザコールを呼び出す必要がある。  

    Xen
    Xenはこのハイパーバイザコールの要求に応じて、仮想マシン環境に変更を加える。
    この実装手法はエミュレーションのオーバヘッドを最小限に押させる抑えることができるため、
    性能面で大きなアドバンテージがあるが、OSをXen仮想ハードウェア上に移植する必要がある。

  • 完全仮想化
    ゲストOSが発行する特権命令をハイパーバイザーが例外としてキャッチし
    エミュレーションする仮想化方式。ゲストOSの改変は不要。

    Xen
    この機能を利用すると、実ハードウェア用に用意されたOSを
    そのままXen上で動作させることが可能となる。
    Xenでは、完全仮想化されたドメイン
    HVMドメイン(Hardware Virtual Machine)と呼ぶ。
    この完全仮想化機能が提供する仮想マシン環境内のOSは
    特権モードで動作し完全に物理ハードウェアを支配しているように振る舞う。
    実際には、仮想マシン側のOSが仮想ハードウェアを制御する命令を実行したとき、
    仮想ハードウェアがそれを検出し、例外のようなものが発生してXenに制御を渡す。
    制御を渡されたXenは、OSが行おうとした処理を分析し、仮想ハードウェアの動作をエミュレートする。
    完全仮想化の環境は準仮想化方式に比べると、
    エミュレーションのためのコストが大きくなるが、ソフトウェアをユーザの手で変更することが難しい。
    WindowsなどのOSも動作させることができる。

特権命令時の処理

  • 準仮想化時
     ①ゲストOSがハードウェア操作などの特権命令を実行(ハイパーバイザー)
     ②ハイパーバイザーがハイパーバイザーコールをキャッチし、要求された処理を実行

  • 完全仮想化時
     ①ゲストOSがハードウェア操作などの特権命令を実行
     ②CPUが特権命令をキャッチし、ハイパーバイザーに制御を移す
     ③ハイパーバイザーが要求を分析し、要求された処理をエミュレート


Xen
仮想マシンモニタの一つ。一つのハードウェアを用いて複数のOSを並列実行・制御するサービスを提供する。
Xenでは、仮想マシンの実行単位をドメインと呼ぶ。 Xenシステムにおいて、 Xenハイパーバイザは最も低い特権層で動作する、中核となるソフトウェアである。 Xenハイパーバイザ階層は一つまたは複数のゲストOSをサポートし、物理CPUに対してのスケジューリングを行う。 最初のゲストOSは、Xenの専門用語において「ドメイン 0 (dom0)」と呼ぶ。 これは標準において、ハイパーバイザが起動する時に自動的に実行され、特別な管理特権と、全ての物理ハードウェアへの直接アクセスを受け持つ。 システム管理者は、追加された全てのゲストOSに対して、dom0を通してログインすることができる。 このときの管理対象を、Xenの専門用語において「ドメインU」(domU)と呼び、ドメインUはuser domainsを意味する。 ドメイン0となるOSには、一般的にLinuxNetBSDSolarisの修正版が用いられる。 なお、従来Linuxにおいてもカーネルの修正が必要であったが、Linux kernel 2.6.23においてXenがmain lineに統合されている。 これ以降のバージョンにおいてkernelの修正は必要なくなっている。 ドメインUは、完全仮想化または準仮想化において利用可能なオペレーティングシステムに違いがある。 ホストプロセッサがIntel VT-xやAMD-Vのようなx86仮想化支援機能を有する場合には、 未修正のオープンソース、あるいはMicrosoft WindowsのようなプロプライエタリなOSのコピーが完全仮想化された状態で動作する。 修正が行われているOSは、拡張サポートのための特殊なドライバを併用して準仮想化されるのがXenの特徴である。

  

KVM
完全仮想化をサポートしている。 しかし、カーネルと一体化したアーキテクチャを採用してるため、 コードが大きくなりメンテナンス性を損なうほか、 仮想マシンの一部に起こった不具合が全体に普及する恐れがある。 LinuxおよびWindowsをゲストOSとして、準仮想化を現的的にサポートしている。これには準仮想ネットワークドライバ、ゲストOSの仮想規則管理の動作を変更するバルーンドライバ、Linuxゲスト向けのCPU最適化などが含まれる。 KVMは今のところローダブル・カーネル・モジュールとして実装されている。

3. まとめ

いやー、まいったな。ムツカシイっしょ。これ。
Virtual BOXとか使ってるから仮想化なんてわりと楽勝やんとか思ってた自分、消え去れ。 まぁとりあえずだ。
仮想化ってあらためてコンピューターってどう動いてるのって考えるよいきっかけになるってことはわかった。
ハイパーってハイパーメガランチャーしか使わないと思ってたよ。