目次


ハイパーバイザー、仮想化、そしてクラウド

KVM ハイパーバイザーの調査

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: ハイパーバイザー、仮想化、そしてクラウド

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:ハイパーバイザー、仮想化、そしてクラウド

このシリーズの続きに乞うご期待。

最初に知っておくべき概要

KVM (Kernel-based Virtual Machine) は、仮想化拡張機能 (Intel VT または AMD-V) が含まれる、x86 ハードウェア上の Linux を対象とした完全なネイティブ仮想化ソリューションです。Linux および Windows ゲストでは、準仮想化したネットワーク・ドライバーという形で部分的な準仮想化にも対応します。

KVM は現在、ローダブル・カーネル・モジュールを介してカーネルとインターフェースを取るように設計されています。対応するオペレーティング・システムのバージョンには、Linux、BSD、Solaris、Windows、Haiku、ReactOS、AROS Research Operating System と、幅広いゲスト・オペレーティング・システムがあります。パッチを当てた KVM (qemu) は、Mac OS X 上で動作することが可能です。

注: エミュレーションは、KVM 自体が行うわけではありません。代わりにユーザー空間のプログラムが /dev/kvm インターフェースを使用して、ゲスト仮想サーバーのアドレス空間をセットアップしたり、シミュレートされた I/O をゲスト仮想サーバーに提供したり、ゲスト仮想サーバーの動画ディスプレイをホスト・サーバーのディスプレイにマッピングしたりします。

図 1 に、KVM のアーキテクチャーを示します。

図 1. KVM のアーキテクチャー
KVM のアーキテクチャー

KVM のアーキテクチャーでは、仮想マシンは通常の Linux プロセスとして実装され、標準の Linux スケジューラーによってスケジューリングされます。実際、それぞれの仮想 CPU は通常の Linux プロセスのように見えます。そのため、KVM は Linux カーネルのすべての機能を活用できるというわけです。

デバイスのエミュレーションは、BIOS、PCI バス、USB バス、そしてデバイスの標準セット (IDE および SCSI ディスク・コントローラー、ネットワーク・カードなど) のエミュレーションを提供するように変更された qemu バージョンによって行われます。

特徴

KVM の鍵となるのは以下に挙げる事項です。

セキュリティー

仮想マシンは Linux プロセスとして実装されるため、標準の Linux セキュリティー・モデルを利用してリソースの分離やリソースの管理を行います。Linux カーネルは SELinux (Security-Enhanced Linux) を使用して、強制アクセス制御と、マルチレベルおよびマルチカテゴリーのセキュリティーを追加し、ポリシーを実施します。SELinux は Linux カーネルで実行中のプロセスに対し、リソースを厳格に分離し、制限します。

SVirt プロジェクト (強制アクセス制御 (MAC: Mandatory Access Control) セキュリティーと Linux ベースの仮想化 (KVM) を統合しようとする、コミュニティーによる取り組み) では SELinux をベースに、管理者が仮想マシン分離のポリシーを定義できるようにするための基盤を提供します。SVirt 単独でも、仮想マシンのリソースに対して、他のプロセス (または他の仮想マシン) からアクセスできないようにすることはできますが、sysadmin によって拡張することで、例えば仮想マシンをグループにまとめてリソースを共用させるなど、粒度の細かいパーミッションの定義が可能になります。

メモリー管理

KVM は、Linux から強力なメモリー管理機能を継承します。仮想マシンのメモリーは他の Linux プロセス用のメモリーと同じように保存されるため、パフォーマンス向上のためにラージ・ページを使用してメモリー・スワップを行うことも、ディスク・ファイルによってメモリーを共有することもできます。マルチプロセッサー用のメモリー設計である NUMA (Non-Uniform Memory Access) をサポートすることで、仮想マシンは大量のメモリーに効率的にアクセスできるようになります。

KVM は、CPU 使用量の削減と、より高いスループットを実現するために、Intel の EPT (Extended Page Table) および AMD の RVI (Rapid Virtualization Indexing) に対応した CPU ベンダーの最新メモリー仮想化機能をサポートしています。

メモリー・ページの共有は、KSM (Kernel Same-page Merging) と呼ばれるカーネルの機能によってサポートされます。KSM は各仮想マシンのメモリーをスキャンし、複数の仮想マシンが同一のメモリー・ページを持つ場合には、これらのメモリー・ページを 1 つのページにマージして仮想マシンの間で共有し、1 つのコピーのみを保存します。この共有ページを変更しようとするゲストには、そのゲスト専用のコピーが与えられます。

ストレージ

KVM は、Linux でサポートされているストレージであれば、どのストレージにでも仮想マシン・イメージを保存することができます。これには、IDE、SCSI、SATA を使用したローカル・ディスク、NFS および SAMBA/CIFS を含む NAS (Network Attached Storage)、iSCSI およびファイバー・チャネル対応の SAN も含まれます。ストレージのスループットを改善するとともに、冗長性を提供するためには、マルチパス I/O を使用することもできます。

KVM は Linux カーネルの一部であるため、ストレージに関しても、主要なすべてのストレージ・ベンダーがサポートする、実証済みの信頼できるストレージ基盤を利用することができます。このストレージ・スタックには、本番環境におけるデプロイメントの実績があります。

また、KVM では GFS2 (Global File System) などの共有ファイルシステムに仮想マシン・イメージを保存できるため、仮想マシン・イメージを複数のホストで共有したり、論理ボリュームを使用して共有したりすることができます。ディスク・イメージはシン・プロビジョニングをサポートします。これにより、ストレージ全体を前もって割り当てるのではなく、仮想マシンが必要とするときにのみストレージを割り当てることで、ストレージの使用効率を改善します。KVM のネイティブ・ディスク・フォーマットは QCOW2 です。QCOW2 にはスナップショットのサポートが含まれており、複数レベルのスナップショットや、スナップショットの圧縮および暗号化にも対応することができます。

ライブ・マイグレーション

KVM はライブ・マイグレーションをサポートします。ライブ・マイグレーションは、サービスを中断することなく、ある物理ホストで稼働中の仮想マシンを別の物理ホストへ移動することを可能にします。ライブ・マイグレーションはユーザーにはわからないように行われるため、仮想マシンが新しい物理ホストに再配置される間、仮想マシンのパワー・オンの状態も、ネットワーク接続がアクティブな状態も維持され、ユーザー・アプリケーションは中断することなく実行され続けます。

ライブ・マイグレーションに加え、KVM では仮想マシンの現行の状態をディスクに保存できるようになっています。したがって、仮想マシンの状態を保存して、後で再開することができます。

デバイス・ドライバー

KVM は、ハイブリッド仮想化をサポートします。ハイブリッド仮想化では、準仮想化ドライバーをゲスト・オペレーティング・システムにインストールし、エミュレートされたデバイスを使用するのではなく、最適化された I/O インターフェースを仮想マシンが使用できるようにすることで、ネットワーク・デバイスやブロック・デバイスに対してハイ・パフォーマンスの I/O を実現します。

KVM ハイパーバイザーは、IBM と Red Hat が Linux コミュニティーと協力して準仮想化ドライバーのために作成した VirtIO 標準を使用します。VirtIO は、デバイス・ドライバーを作成するためのインターフェースで、ハイパーバイザーには依存しないインターフェースです。VirtIO を使用して、複数のハイパーバイザーで共通して使用できるデバイス・ドライバー一式を作成することで、ゲストの相互運用性が高まります。

VirtIO ドライバーは、Red Hat Enterprise Linux 4.8+ および 5.3+ を含む、(バージョン 2.6.25 より後の) 最近の Linux カーネルに組み込まれており、Red Hat Enterprise Linux 3 にも使用することができます。Red Hat では、Microsoft Windows ゲスト用にネットワーク I/O とディスク I/O を最適化する VirtIO ドライバーも開発しました。このドライバーは、Microsoft の WHQL (Windows Hardware Quality Labs) 認定プログラムで認定されています。

パフォーマンスとスケーラビリティー

パフォーマンスとスケーラビリティーについても KVM は Linux を継承し、仮想マシンでは最大 16 の仮想 CPU と 256GB の RAM をサポートし、ホスト・システムでは 256 のコアと 1TB を超える RAM をサポートします。これにより、以下のことを実現しています。

  • SAP、Oracle、LAMP、および Microsoft Exchange などの実際のエンタープライズ・ワークロードに対するパフォーマンスは、ベアメタルの最大 95 パーセントから 135 パーセントを達成します。
  • 標準サーバー上で実行される仮想マシンでのメッセージ数は 1 秒あたり 100 万を超え、レイテンシーは 200 マイクロ秒未満です。
  • 最大の統合率では、1 台のサーバー上で 600 を超える仮想マシンによってエンタープライズ・ワークロードを実行することができます。

これはつまり、KVM では最も要求の高いアプリケーション・ワークロードでさえも仮想化できることを意味します。

仮想化のデプロイメント

KVM のデプロイメントは、個別の構成をいろいろと考慮しなければならないことから比較的複雑です。詳細については「参考文献」を参照してください。

仮想マシンの管理

仮想マシンを管理するには、以下を含め、いくつかの仮想マシン管理ツールを使用することができます。

  • Univention Virtual Manager.
  • qemu/KVM: KVM マシンのコマンドラインから直接実行することができます。
  • Virsh: VM を管理するための必要最低限のシェルです。
  • Virtual Machine Manager: virt-manager としても知られる、VM 管理用のデスクトップ・ユーザー・インターフェースです。

KVM の選択

利点:

  • KVM は比較的新しいハイパーバイザーながらも、主流の Linux カーネルに統合されています。この軽量のモジュールは、実装がシンプルであるだけでなく、Linux カーネルの継続的なサポートを提供します。
  • KVM には柔軟性があります。ゲスト・オペレーティング・システムは、Linux カーネルに統合されたハイパーバイザーと通信することから、すべての場合において、仮想化されたオペレーティング・システムを変更することなく、ハードウェアを直接扱うことができます。そのため、KVM は仮想マシンのソリューションをより早く実現します。
  • KVM のパッチは、Linux カーネルに適合します。KVM は Linux カーネル自体に実装されるため、仮想化プロセスをより簡単に制御することができます。

欠点:

  • KVM サーバーおよび VM の管理に使用できる高度なツールがありません。
  • KVM の仮想ネットワーク・サポート、仮想ストレージのサポート、セキュリティーの強化、高可用性、耐障害性、電力管理、HPC/リアルタイム・サポート、仮想 CPU のスケーラビリティー、ベンダー間の互換性、VM 移植可能性にはまだ改善の余地があり、確立されたクラウド・サービス・エコシステムを構築する必要があります。

ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=767246
ArticleTitle=ハイパーバイザー、仮想化、そしてクラウド: KVM ハイパーバイザーの調査
publish-date=10282011