3.4 仮想化
3.4.1 仮想化とは?
昨今、オンプレミスでは仮想化技術を利用するケースのほうが多いでしょう。大量のコンピュータを扱うクラウド環境は仮想化技術をベースに構築されています。現在避けては通れない「仮想化」について、その歴史とメリットを紹介します。
仮想化とは、一言で言うと「コンピュータシステムにおける物理リソースの抽象化」のことです。物理リソースには「サーバー」「ネットワーク」「ストレージ」などがありますが、ここではサーバーの仮想化について見ていきます。
サーバーの仮想化のうち「1台のサーバーを複数の論理リソースに見せかける」技術について説明しますが、この技術は古くは1970年代のメインフレームの時代から存在するものです。
3.4.2 OS も仮想化技術の 1 つ
ハードウェアを意識せずにアプリケーションを実行できるOperating System(OS)は仮想化技術の1つと言えます(図3.19)。OS登場以前は、ハードウェアを意識したプログラミングが必要で、非常に手間がかかりました。OSのカーネルによってハードウェアが抽象化されたことで、コンピュータにつながれた記憶装置や、ネットワークを通じたデータのやり取りが、ハードウェアを意識せずとも行なえるようになりました。
また、もし一度に動くプログラムが1つだけであれば、OSの役目はさほど大きくなかったでしょう。しかし実際には、1つのコンピュータ内で同時に複数のプログラムが動きます。OSのないプログラムでこれを実現しようと思うと大変なことになります。
たとえばOSがない場合、1つのプログラムのバグのせいで、コンピュータ全体が機能停止に陥る可能性があります。対して、OSがある場合は、仮想メモリによりプロセスやOSカーネルのメモリ空間が隔離され、1つのプログラムが処理に失敗しても、システム全体に影響が出ないように工夫されています。
3.4.3 仮想マシン
仮想マシン方式には、ホストOS型とハイパーバイザー型があります(図3.20)。ホストOS型は、WindowsやLinuxなどホストOS上にアプリケーションとして仮想化ソフトをインストールして利用するもので、VMware Server、Microsoft Virtual Serverなどがあります。ソフトウェアでハードウェアをエミュレートするため性能面で課題があり、その後ハイパーバイザー型が登場しました。
VMware vSphere、Hyper-V、Xen、KVMなどハイパーバイザー型はハードウェア上で直接仮想化ソフトウェアを動かし、その上で仮想マシンを動作させる技術です。ホストOSを介さないためホストOS型よりもパフォーマンスが高く、サーバー仮想化の主流になっています。
ハイパーバイザー型仮想化のアーキテクチャには、完全仮想化と準仮想化があります(図3.21)。完全仮想化は物理マシン上で動作するOSやドライバーをそのままゲストとして利用できるメリットがある反面、ソフトウェアでのエミュレーションを行なうためにパフォーマンスが低下するデメリットがあります。
この問題を解決するために登場したのが準仮想化で、実存するハードウェアをエミュレーションするのではなく、仮想環境用の仮想ハードウェアをソフトウェア的にエミュレートします。準仮想化では、仮想環境で動作させるゲストのOSごとに準仮想化専用のドライバーや、準仮想化用に最適化されたOSカーネルを利用する必要がありました。
その後、IntelやAMDなどのプロセッサメーカーがハードウェア支援機能(Intel VT-x/VT-d/VT-c、AMD V/Viなど)を開発してハイパーバイザー側もサポートし、現在では完全仮想化が主流になっています。