KVM (Kernel-based Virtual Machine:カーネルベースの仮想マシン) は、Linuxに組み込まれた
オープンソースの仮想化テクノロジー。
具体的には、KVM を使用すると、Linux をハイパーバイザーに変貌させることができる。
これによりホストマシンは、ゲストや仮想マシン (VM) と呼ばれる複数の独立した仮想化環境を
稼働させることができる。
KVM は Linux の一部で、Linux 2.6.20 以降の場合は、KVM が搭載されている。
<KVM の仕組み>
KVM は Linux を Type 1 (ベアメタル) ハイパーバイザーに変換。
すべてのハイパーバイザーには、VM を稼働するために、メモリーマネージャー、プロセス・スケジューラー、
入出力 (I/O) スタック、デバイスドライバー、セキュリティ・マネージャー、ネットワークスタックなど、
オペレーティング・システム・レベルのコンポーネントが必要。
KVM は Linux カーネルの一部であるため、これらのコンポーネントをすべて備えている。
すべての VM が、ネットワークカード、グラフィックス・アダプター、CPU、メモリ、ディスクなどの専用の
仮想ハードウェアを使用し、標準 Linux スケジューラーによってスケジュールされた通常の Linux プロセス
として実装される。
<セキュリティ>
KVM は、Security-Enhanced Linux (SELinux) とセキュア仮想化 (sVirt) を組み合わせて使用し、
VM のセキュリティと独立性を強化。SELinux は VM の周囲にセキュリティ境界を設定する。
sVirt は SELinux の機能を拡張し、強制アクセス制御 (MAC) セキュリティをゲスト VM に
適用できるようにして、手動によるラベル付けのエラーを防ぐ。
<ストレージ>
KVM は、一部のローカルディスクやネットワーク接続型ストレージ (NAS) など、Linux がサポートする
すべてのストレージを使用できる。
マルチパス I/O を使用すると、ストレージが向上し、冗長性がもたらされ、共有ファイルシステムも
サポートしているため、複数のホストで VM イメージを共有できる。
ディスクイメージは、シンプロビジョニングをサポートしており、事前割り当てではなく、オンデマンドで
ストレージを割り当てる。
<ハードウェアのサポート>
KVM は、さまざまな認定済みの Linux 対応ハードウェア・プラットフォームを使用できる。
ハードウェアベンダーは定期的にカーネル開発に貢献しているため、最新のハードウェア機能がいち早く
Linux カーネルに採用されることも珍しくない。
<メモリ管理>
KVM は、不均一メモリアクセスや Kernel Samepage Merging など、Linux のメモリ管理機能を継承している。
VM のメモリは、スワップされ、パフォーマンスを向上させるために大規模なボリューム単位でバックアップされ、
ディスクファイルによって共有またはバックアップされる。
<ライブ・マイグレーション>
KVM は、ライブ・マイグレーションをサポートしている。ライブ・マイグレーションとは、実行中の VM を
サービスの中断なしに物理ホスト間で移動する機能。
VM の再配置中には、VM の電源を入れたままにして、ネットワーク接続をアクティブのまま維持し、
アプリケーションを実行し続ける。
KVM は VM の現在の状態も保存するため、後からそれを保管して再開することができる。
<パフォーマンスと拡張性>
KVM は Linux のパフォーマンスを継承し、ゲストマシンとリクエストの数が増えると、負荷需要に合わせて
スケーリングする。
KVM を使用すると、最も需要の多いアプリケーション・ワークロードを仮想化することができる。
KVM は、データセンターやプライベートクラウドなどの多くのエンタープライズ仮想化セットアップの基礎となる。