ハイパーバイザー、仮想化、そしてクラウド: KVM ハイパーバイザーの調査

この記事では、KVM (Kernel-based Virtual Machine) ハイパーバイザーの特徴、デプロイメント・プロセス、および VM 管理の問題について説明します。Linux カーネルの仮想化基盤である KVM は、ハードウェア仮想化拡張機能によってプロセッサーでのネイティブ仮想化をサポートします。KVM が当初サポートしていたのは x86 プロセッサーでしたが、現在は広範なプロセッサーとゲスト・オペレーティング・システムをサポートするようになっています。これには、Linux の多数のバリエーション、BSD、Solaris、Windows 、Haiku、ReactOS、および AROS Research Operating System が含まれます (さらに、KVM を使用して Mac OS X を実行できるように修正された qemu バージョンもあります)。

システム仮想化は、ハイパーバイザー技術と一緒に実装されるのが通常です。ハイパーバイザーとは、システム・リソースの仮想化を実現するソフトウェアまたはファームウェアのコンポーネントのことです。この連載では、クラウド内でのシステム仮想化の確立を支援する 5 つのハイパーバイザー、つまり PowerVM、VMware ESX Server、Xen、KVM、および z/VM のそれぞれを取り上げ、その特徴、デプロイメント・プロセス、そして VM 管理の問題について一挙に検討します。

Bhanu P Tholeti, Systems Engineer and Architect, IBM

Bhanuprakash はこれまで 8 年以上、ソフトウェア業界でさまざまな技術と製品に取り組んできました。今まで扱ってきた技術と製品には、Pocket PC でのアプリケーション開発、Web ベースのアプリケーション、動画配信ソリューション、そして Tivoli Workload Scheduler、WebSphere Data Interchange、Tivoli Service Automation Manager、Tivoli Provisioning Manager などがあります。IBM SmartCloud Enterprise の一員として、クラウド・インフラストラクチャーおよびハイパーバイザーに関する豊富な知識を培ってきました。



2011年 10月 28日

この連載について

この連載では、まず始めにハイパーバイザーのタイプとシステム仮想化に関する基本事項を説明し、それから 5 つのハイパーバイザーのそれぞれについて、その特徴、デプロイメント・プロセス、そして起こり得る管理上の問題を具体的に説明していきます。各記事で取り上げる内容は以下のとおりです。

クラウドでの仮想化におけるハイパーバイザーの役割を理解するための出発点として、この連載を利用してください。あるいは連載の個々の記事を読んで、ご自分で利用されるクラウドの要求に合った最適なハイパーバイザーを判断する上での参考にしてください。

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

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 移植可能性にはまだ改善の余地があり、確立されたクラウド・サービス・エコシステムを構築する必要があります。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


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