KVMメモ
仮想化技術であるKVMを試してみようと調べたので、整理してみました。まだ実際に試してはいないので、技術的に深く踏み込んだ内容はあまりありません。そもそも仮想化とは何か、から始まりKVMの特徴、という流れで書いています。
仮想化について
仮想化とは
Wikipediaでは、
仮想化(英: Virtualization)とは、コンピュータにおいてリソースの抽象化を指す用語である。「リソースの物理的特性を、そのリソースと相互作用するシステム/アプリケーション/エンドユーザーから隠蔽する技法。単一の物理リソース(サーバ、OS、アプリケーション、補助記憶装置など)を複数の論理リソースに見せかけたり、複数の物理リソース(複数の補助記憶装置群やサーバ群)を単一の論理リソースに見せかけたりできる」という実用的定義がある[1]。また、単一の物理リソースを何らかの特性の異なる単一の論理リソースに見せかけることもできる。
仮想化 - Wikipedia
と記述されています。
しかし、ここではx86仮想化に限って以下続けます。
x86仮想化とは、x86ベースのゲストオペレーティングシステム (OS) を、別のx86ベースのホストOS上で、ほとんど(あるいは全く)ゲストOSを修正することなく動作させる手法である。
x86仮想化 - Wikipedia
なぜ仮想化か
では、仮想化のメリットは何か、という話です。ビューティフルアーキテクチャによると、柔軟性や性能上の隔離や資源の有効活用が仮想化のメリットです。
まず、柔軟性について。複数ユーザがOSを使うと言う観点で考えると、マルチタスクOSで十分ですが、管理者権限がないとソフトウェアのインストールができませんが、仮想化されたOSを1人1つ割り当てれば、限られた範囲で自由に使うことができます。
次に、性能上の隔離について。こちらもマルチタスクOSと比較すると、カーネルは複雑なので、ユーザごとに使用する資源の限度を設けるのは困難ですが、仮想化されたOSごとに資源の限度を設けることはできるので、他のユーザに迷惑をかけるようなことはできなくなります。
最後に、資源の有効活用について。CPUを使うアプリケーションやメモリを使うアプリケーションを別々の物理マシンにするのは資源の無駄ですが、同一OS上で実行すると1つの機能が別の機能を巻き込んだ障害を起こす可能性があります。仮想化されたOSを使うことで、独立した環境で資源を有効活用することができます。
その他に、機能ごとのマシンを増やすのが簡単というのもありますね。クラウドサービスとして考えると必要な時に必要な資源だけを利用できるというメリットも出てくるかと思います。
仮想化の種類
ハードウェアのエミュレーション方式から、次のように、完全仮想化と準仮想化に分けられます。
準仮想化 | 完全仮想化 | |
---|---|---|
ゲストOSのコード書き換え | あり | なし |
エミュレーションのオーバーヘッド | 小さい | 大きい |
準仮想化では、ゲストOSのカーネルがハードウェアと通信する命令はハイパバイザと通信するよう置き換えられ、ハイパバイザが代わりに実行する。そのため、ゲストOSの完全な互換性は失われるが、完全仮想化と比較して性能が良い。
一方、完全仮想化は、ハイパバイザが、ゲストOSのハードウェアと通信する命令を検出し、ハイパバイザを直接呼び出す命令に置き換える、という形でハードウェアを完全にエミュレートする。このエミュレーションのコストが大きいので準仮想化と比較して性能が低い。しかし、CPUの仮想化支援機能(Intel VTやAMD-V)やパラバーチャルドライバを使うことで性能は改善される。
また、ハイパバイザの動作方式から、Type1(ネイティブ方式)とType2(ホスト方式)に分けられます。
Type1 | Type2 | |
---|---|---|
ハイパバイザの動作場所 | ハードウェア上 | ハードウェア上のホストOS上 |
メリット | 性能が良い | インストールが簡単 |
ハードウェア上でハイパバイザが直接動作している方式をType1の仮想化という。KVMのようにLinuxカーネルとして実装されているハイパバイザも含まれる。
一方、Type2の仮想化は、通常のOSの上に、通常のアプリケーションのようにハイパバイザがインストールされる方式のことをいう。インストールが簡単だが、ホストOSにスケジューリングされることやレイヤが厚いことなどから、Type1と比較して性能が低い。
KVMについて
参考
以下の記事などを参考にしました。
- ハイパーバイザ - Wikipedia
- 仮想化入門
- Linux標準の仮想化技術「KVM」の仕組み (1/2):知って見るみるKVM(1) - @IT
- http://www.computerworld.jp/topics/vt/111429.html
- 開発者Avi Kivityのインタビュー
- KVM Form 2007でのAvi Kivityの発表(PDF)
また、ビューティフルアーキテクチャの「7章 Xenと仮想化の美」も参考にしました。Xenを開発しているXenSourceの創始者がXenのアーキテクチャについて説明しています。