KVM とは?なぜ重要なのかをわかりやすく解説
KVM (Kernel-based Virtual Machine:カーネルベースの仮想マシン) は、Linux® に組み込まれたオープンソースの仮想化テクノロジーです。KVM を使用すると、Linux をハイパーバイザーとして機能させることができます。これによりホストマシンは、ゲストや仮想マシン (VM) と呼ばれる複数の独立した仮想化環境を稼働させることができます。そのため、新しいハードウェアに投資することなくスケーリングでき、多数の仮想マシンを簡単にデプロイできます。
KVM は Linux の一部です。Linux 2.6.20 以降をお持ちの場合は、KVM が搭載されています。KVM は 2006 年に初めて発表され、1 年後にメインラインの Linux カーネルバージョンに統合されました。KVM は既存の Linux コードの一部であるため、追加のエンジニアリングを必要とせず、Linux の新機能、修正、拡張機能をすぐに利用できます。
KVM の仕組み
KVM は Linux を Type 1 (ベアメタル) ハイパーバイザーに変換します。すべてのハイパーバイザーには、VM を稼働するために、メモリーマネージャー、プロセス・スケジューラー、入出力 (I/O) スタック、デバイスドライバー、セキュリティ・マネージャー、ネットワークスタックなど、オペレーティング・システム・レベルのコンポーネントが必要です。KVM は Linux カーネルの一部であるため、これらのコンポーネントをすべて備えています。各 VM は、ネットワークカード、グラフィックアダプター、CPU、メモリー、ディスクなどの専用の仮想ハードウェアを使用して、標準の Linux スケジューラーによってスケジュールされた通常の Linux プロセスとして実装されます。
KVM の実装
KVM の実装に必要なのは、要約すると 2007 年以降にリリースされたバージョンの Linux を実行すること、仮想化機能をサポートする X86 ハードウェアにインストールすることです。この 2 つの条件をどちらも満たしていれば、既存の 2 つのモジュール (ホスト・カーネル・モジュールとプロセッサー固有のモジュール)、エミュレータ、および追加のシステムの実行をサポートするドライバーをロードするだけで済みます。
しかし、KVM を Red Hat Enterprise Linux などのサポートされる Linux ディストリビューションに実装すると KVM の能力が拡張され、リソースのゲスト間でのスワップ、共通ライブラリの共有、システムパフォーマンスの最適化などが実現します。
KVM ベースの仮想インフラストラクチャへの移行
契約で縛られているプラットフォームに仮想インフラストラクチャを構築すると、ソースコードへのアクセスが制限されてしまうことがあります。このとき、IT 開発部門の労力はイノベーションよりも回避策を探すことに向けられるようになり、次回の契約ではクラウド、コンテナ、自動化に投資できなくなる可能性があります。KVM ベースの仮想化プラットフォームに移行すると、ハイパーバイザーの内部にあるソースコードを検査、修正、強化できます。そして、保護する必要のあるソースコードは存在しないため、エンタープライズライセンス契約も必要がありません。コードを自由に活用できます。
KVM の機能上のメリット
KVM は Linux の一部であり、Linux は KVM の一部です。Linux に備わっているものは、KVM にも備わっています。企業がハイパーバイザーとして KVM を使用する機能的なメリットとして以下が挙げられます。
セキュリティ
KVM は、Security-Enhanced Linux (SELinux)とセキュア仮想化 (sVirt) を組み合わせて使用し、VM のセキュリティと独立性を強化します。SELinux は VM の周囲にセキュリティ境界を設定します。sVirt は SELinux の機能を拡張し、強制アクセス制御 (MAC) セキュリティをゲスト VM に適用できるようにして、手動によるラベル付けのエラーを防ぎます。
ストレージ
KVM は、一部のローカルディスクやネットワーク接続型ストレージ (NAS) など、Linux がサポートするすべてのストレージを使用できます。マルチパス I/O を使用すると、ストレージが向上し、冗長性がもたらされます。KVM はさらに、共有ファイルシステムもサポートしているため、複数のホストで VM イメージを共有できます。ディスクイメージは、シンプロビジョニングをサポートしており、事前割り当てではなく、オンデマンドでストレージを割り当てます。
ハードウェアのサポート
KVM は、さまざまな認定済みの Linux 対応ハードウェア・プラットフォームを使用できます。ハードウェアベンダーは定期的にカーネル開発に貢献しているため、最新のハードウェア機能がいち早く Linux カーネルに採用されることも珍しくありません。
メモリ管理
KVM は、不均一メモリアクセスや Kernel Samepage Merging など、Linux のメモリ管理機能を継承しています。VM のメモリーは、スワップ、大容量の割り当てによるパフォーマンス向上、ディスクファイルでの共有または割り当てができます。
ライブ・マイグレーション
KVM は、ライブ・マイグレーションをサポートしています。ライブ・マイグレーションとは、実行中の VM をサービスの中断なしに物理ホスト間で移動する機能です。VM の再配置中には、VM の電源を入れたままにして、ネットワーク接続をアクティブのまま維持し、アプリケーションを実行し続けます。KVM は VM の現在の状態も保存するため、後からそれを保管して再開することができます。
パフォーマンスと拡張性
KVM は Linux のパフォーマンスを継承し、ゲストマシンとリクエストの数が増えると、負荷需要に合わせてスケーリングします。KVM を使用すると、最も需要の多いアプリケーション・ワークロードを仮想化することができます。KVM は、データセンターやプライベートクラウド (OpenStack® 経由) などの多くのエンタープライズ仮想化セットアップの基礎となります。
スケジューリングとリソース制御
KVM モデルでは、VM は Linux プロセスであり、カーネルによってスケジューリングおよび管理されます。Linux スケジューラーは、Linux プロセスに割り当てられたリソースを細かく制御し、特定のプロセスのサービス品質を保証します。KVM ではこれに、完全に公平なスケジューラー、制御グループ、ネットワーク名前空間、リアルタイム拡張などが含まれます。
レイテンシー短縮と優先順位向上
Linux カーネルはリアルタイム拡張機能を備えているため、VM ベースのアプリケーションを (ベアメタルよりも) 低いレイテンシーかつ高い優先順位で実行できます。カーネルはまた、計算時間が長いプロセスを小規模のコンポーネントに分割します。コンポーネントはそれに応じてスケジューリングされ、処理されます。
KVM と Red Hat
Red Hat は KVM のメリットを高く認め、すべての Red Hat 製仮想化製品のハイパーバイザーとして KVM を採用しています。また、Red Hat は KVM コミュニティのコントリビューターとして、継続的にカーネルコードを改善しています。しかし、KVM は Linux の一部であるため、すでに Red Hat Enterprise Linux にも含まれています。