fc2ブログ
このブログは、日々頭の中に蓄積されては薄れていく技術情報を書き留めておく為のものです。
Linuxエンジニア日記
仮想化の種類と概要
2008-11-24-Mon  CATEGORY: 仮想化
今回は仮想化の種類とその概要について纏めてみます。

まず、主な仮想化のタイプとして以下の三つが挙げられます。

1. ファームウェアタイプ
2. ハイパーバイザータイプ
3. アプリケーションタイプ

厳密に言えばもう少し細かく分類出来るのですが、
それは後述するとして順にひとつずづ見ていきましょう。

ファームウェアタイプ

IBMのLPARやHPのvParsなどに代表され、パーティショニング方式と呼ばれる事もあります。
実際にはさらに物理パーティションニング、論理パーティショニングと分類される。

物理パーティショニングはレガシーサーバのCPU・メモリ・
I/Oスロットなどを一塊にし、物理的なブロック単位で管理します。

論理パーティショニングは更にCPU単位、メモリブロック単位などで
細かく分類し、リソースの配分をより柔軟に設定する事が出来ます。

これらはつまりHWのリソースを上位の仮想OS毎に物理的に割り振り実現しているのです。

長所

仮想OSとHWの間にはファームウェアや仮想マシンソフトウェアのみが
存在するので、仮想化によるオーバーヘッド処理が他のタイプに比べ少ない。
また、物理的に違うリソースが割り振られている場合、障害の影響範囲が少ない。

短所

リソースの割当てが他のタイプに比べ柔軟に割り当てる事が出来ない。

以上がファームウェアタイプの特徴になります。

ハイパーバイザタイプ

VMware ESX ServerやXenに代表される専用カーネルを用意する方式。
この専用カーネルの事を「ハイパーバイザ」、または「VMM」などと呼びます。

簡単に言ってしまえば予め仮想化に特化され最適化されている
ソフトウェアを用意し、その上に仮想OSを作成していくと言った方式です。

ハイパーバイザタイプの中でもBIOSを持つものと持たないものの違いがあります。

前者の方式を「バイナリートランスレーション」といい、
後者の方式を「パラバーチャライゼーション(準仮想化)」と言います。

これらの違いはCPUの動作モードの違いやそれにより処理形態の違いなど、
これの説明だけで記事が出来上がってしまうので詳細はまた別の機会に。

簡単に言いますと、バイナリートランスレーションは
多少のオーバーヘッドがあるが仮想OS側の修正はなくても済む。

パラバーチャライゼーションはバイナリートランスレーションより
オーバーヘッドが少ないが仮想OS自体に修正が必要になる。
(ゲストOSが限られてしまう)

と言った違いになります。

長所

リソースの割当てがファームウェア方式に比べ自由度が高い。
ピーク時などに合わせて動的に自動で割当てる事が可能。

短所

HWとの間にVMMが存在しているため、少なからずオーバーヘッドが存在する。
物理的なリソースを仮想OS間で共有する為、障害に影響範囲が多岐に渡る。

以上がハイパーバイザータイプの特徴になります。


アプリケーションタイプ

MiscrosoftのVirtual ServerやVMwareのVMware Serverなどに代表される、
言わばエミュレーションタイプの仮想化方式である。

ホストOS上に専用のアプリケーションをインストールして、
そのアプリ上で仮想OSをエミュレートして動かします。

長所

アプリを入れるだけで仮想環境の構築が可能な為、導入が非常に容易。
また、ハードウェア依存の傾向も他の方式に比べると少ない。

短所

仮想OSとHWの間に、エミュレーションソフト、ホストOSと
階層があるため他の方式に比べオーバーヘッドが多くなる。

以上がアプリケーション方式の特徴になります。

仮想化はHWとの関係(特にCPU)が密接な為、
結構突き詰めて行くとだんだんと難しくなります。

なのでとりあえず簡単に纏めてみました。

スポンサーサイト



ページトップへ  トラックバック0 コメント0
バイナリートランスレーションとパラバーチャライゼーション
2008-11-26-Wed  CATEGORY: 仮想化
前回詳細な説明を省いてしまったこの二つについてお話してみたいと思います。

まず、本題に入る前にCPUの特権レベルについておさらいしてみます。

X86系のCPUは4段階のレベルを持っています。
ちなみにレベルの事は「リング」と呼ばれています。

リング0が一番高い動作レベルとなり、CPUリソース、メモリーの全空間へのアクセス、
HWデバイスへのアクセスなどが可能となっています。

通常のレガシーサーバで例えるとOSやデバイスドライバがリング0で動作し、
いわゆるカーネルモードと呼ばれるものになります。

対して、ユーザーモードと呼ばれる一般的なアプリケーションの
動作レベルはリング3になります。

リング3はアクセスが限定されている代わりに、そのレベルの致命的な障害が、
より上位のリング0で動作しているOSなどには影響を与えないようにしています。

つまりアプリの障害をシステム全体にまで影響を与えないようにしている訳です。

では、ようやく本題に入ります。

バイナリートランスレーション

バイナリートランスレーションもパラバーチャライゼーションも
VMMと呼ばれるゲストOSを制御するソフトウェアを持っています。

VMMはリング0で動作し、その上の仮想OSはリング1で動作する事になります。

しかし仮想OSは自分がリング1で動作している事を知らないので、リング1では実行できない
特権命令までも、さもリング0で動作しているかのように普通に発行してしまいます。

当然命令を受け取ったCPUでは例外、割り込みが発生します。
VMMはこの割り込みを全て監視しているので、
割り込みが発生した処理をVMMが横取りして処理してあげます。

VMMはリング0で動作しているので、ここからの特権命令は
もちろん例外なく実行されると言う訳です。

これがバイナリートランスレーションと呼ばれる仕組みになります。

(実際には仮想OSからの全ての処理を例外ハンドラで処理している訳ではなく、
VMMの実装の仕方、命令によっては、直接命令を横取りしたりもしています。)

バイナリートランスレションは上記のようなトリッキーかつ複雑な動きをする為、
オーバーヘッドが少なからず発生してしまいます。

パラバーチャライゼーション

パラバーチャライゼーションもVMMを持っている事は先程説明しましたが、
パラバーチャライゼーションの場合は仮想OSがリング1、もしくは2で動作します。

但し、バイナリートランスレーションと違い、仮想OS上のコードを変更し、
リング0でしか処理できないような特権命令をCPUに命令するのではなく、
VMMに一度渡してあげるようしています。

つまり、仮想OS自身が自分が動作しているレベルはリング0以外である事を
認識していると言う事になります。

最終的にはVMMから実行するという点はバイナリートランスレーションと同じですが、
例外ハンドラやトラップの処理がない為、バイナリトランスレーションよりオーバーヘッドが
少なくて済むという利点があります。

しかし、仮想OSのコードに手を入れなければならない為、
専用にコンパイルされているOSしか動かせないといった制限があります。

ざっと説明してみましたが、ソフトウェアレベルでの仮想化は
どうしてもオーバーヘッドや制限などが存在してしまいます。

これに対して、最近はハードウェアレベルでの仮想化を支援する技術もあり、
IntelのVTやAMD-VなどのCPUの仮想化支援機能などが代表的なものです。

こちらはまた機会があったら纏めてみたいと思います。

今回は以上。

ページトップへ  トラックバック0 コメント0
<< 2023/09 >>
S M T W T F S
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


余白 Copyright © 2005 Linuxエンジニア日記. all rights reserved.