MSC2010のHyper-V関連資料からリソースについてのおさらいをしてみた

Microsoft Conference 2010の資料が(もうちょっと前ですが)公開されたので、Hyper-V関連について資料を斜め読みした内容を取りまとめてみます。

  • CPU

Hyper-Vでは、物理CPUにおける各コアをLP (Logical Processor)、ペアレントパーティションによる管理CPUをRoot VP (Virtual Processor)、ゲストOSに割り当てられたCPUをVPとして管理します。つまり、Hyper-Vが全てのLPを管理しており、ペアレントパーティションについてもメモリの認識は特殊なVPとなっています。

割り当てCPU数に加えて、リソースコントロールとしては、%による予約と上限の設定とシェア値の設定を行うことができます。

Hyper-Vは最大で64LPまで、LPあたり最大8VPまでをサポートします。ただし、同時稼働最大数は384VPまで。

LPとVPについては、それぞれの使用率をパフォーマンスカウンタによって取得することが可能です。

肝は、ペアレントパーティションもCPU負荷を与えているという点。ペアレントパーティションは全てのLPをRoot VPとして認識しているため、ペアレントパーティション側でCPUに負荷をかけると、全てのゲストOSのCPUパフォーマンスに影響を与えることになります。

  • Memory

メモリについては、Windows Server 2008 R2 SP1における新機能の1つ、Dynamic Memoryがポイントとなります。もちろん、これまでどおりの静的なメモリ割り当てをすることも可能です。

Dynamic Memoryは、割り当てメモリサイズを動的に増減させる機能。ゲストOSが認識する形でメモリの増減が行われるため、ゲストOS側もサポートしている必要があります。そのため、残念ながらサポートされるゲストOSは、Windows Server 2003 SP2以降とWindows Vista SP2 (Enterprise以上)以降のみ。当然、ゲストOS側に導入する統合サポートについても、SP1のものにアップグレードが必要です。

アーキテクチャにおける肝は、ペアレントパーティションであるWindows Server 2008 R2 SP1における、ゲストOSごとのメモリマネージャ(vmwp.exe)と、それらの間における調整を行うメモリバランサー(vmss.exe)によってメモリ管理を実装している点。Hyper-V自体は非常にシンプルなHypervisorとなっているため、メモリ管理の機能はペアレントパーティション側に実装されています。

メモリバランサーは、ホスト側のVSP(Virtualization Service Provider)とゲスト側のVSC(Virtualization Service Client)の間でVMBusを通じた連携管理を行います。VSPはメモリリソースの割り当てを、VSCはメモリリソースの追加・削除の要求を管理します。

メモリの追加はゲストOS側の対応と連携したHot add、メモリの回収はバルーニングによる回収となります。回収もVVSP/VSCの組み合わせによるメモリバランサーが実施しています。

仕組みはおおよそVMwareと同様で、バルーンドライバがゲストOS内でメモリページを確保し、それをHypervisor側に(Hyper-Vの場合はVSCからVSPに対して通知することにより)回収させるようです。

  • Disk

Hyper-VにおいてゲストOS側が使用できる仮想ハードディスクは、仮想ハードディスクファイル(.vhd)とパススルーディスクの2パターン。パススルーディスクの場合、特定のパーティションがダイレクトに仮想ハードディスクとしてゲストOSに認識されます。

VHDファイルには固定サイズ(Fixed)、可変サイズ(Dynamic)、差分の3種類があります。

固定サイズはVHDファイルにおける基本パターン。ゲストOSに認識されるディスクサイズほぼそのままのVHDファイルが作成されます。本番環境向けのサーバOS用のゲストOSに対しては、基本的には固定サイズVHDの割り当てが基本となります。

可変サイズはVHDファイルへの書き込みに応じてVHDファイルのサイズが拡大される形式。固定サイズと比較して少しパフォーマンスが低下しますが、初期状態における実際のディスク消費容量を抑えて仮想ディスクファイルを作成することができます。…が、それよりも問題なのはファイルのフラグメンテーション。同一ディスク内に複数の可変サイズVHDファイルを配置した場合、お互いにフラグメンテーションしてしまう可能性があります。

差分VHDファイルは、1つの親VHDファイルに対してそれぞれの子VHDファイルが差分として生成される特殊な形式。子VHDのさらに子VHD(孫VHD)を作成することもできます。

多段チェインした場合におけるパフォーマンス低下も課題でしたが、Windows Server 2008 R2 SP1では可変サイズVHDと同程度ほどのパフォーマンスに改善しているとのことです。使い方はサーバ用途というよりも、仮想デスクトップや開発環境、キオスク端末的な使い方などのためとなるかと思います。

最後にパススルー。こちらはパフォーマンスを最重視する場合には選択肢となり得る方式ですが、固定サイズVHDとそれほどパフォーマンス差があるわけでもなく、特殊な必要性がない限りは選択する必要性はない方式かと思います。

  • ネットワーク

個人的に、Hyper-Vにおいて一番わかりづらい部分がネットワークです。その理由は、仮想スイッチの実体があまり明確に扱われていないからのような気がします。また、他のHypervisor製品がネットワーク機能の強化に力を入れている中、R2 SP1でもそれほど強化されなかったのも残念なところ。

Hyper-Vにおけるネットワークは、外部と通信が可能な「外部」、ペアレントパーティションおよび他の仮想マシンとのみ通信が可能な「内部のみ」、仮想マシンとのみ通信が可能な「プライベート仮想マシンネットワーク」の3種類から選択することができます。

さらにHyper-Vにおいて残念な点が、仮想マシン側に構成される仮想ネットワークアダプタの扱いがまだ制約が多い点。統合サポートを導入することにより使用することができる高パフォーマンスな「統合ネットワークアダプタ」は、ゲストOSが物理デバイスとして認識する「完全な形のNIC」ではなく、ドライバがNICに見せかける「仮想的なNIC」となっているため、PXEの使用や、統合サポート未導入ゲストOSで使用できないなどの問題点があります。そのための回避策として「レガシーネットワークアダプタ」が用意されているわけですが、Windows Server 2008 64bitではドライバが含まれていないために使用できないなど、使い勝手があまり良いとは言えない状況です。

本番環境で使用するためには必須機能とも言えるチーミング対応については、一時期不明確でしたが、サポートされることが明確になっています。

他社が軒並み搭載してきている分散仮想スイッチに対して、Microsoftがどのような対策をうってくるのか、今後注目していきたいと思いますが、まずはR2 SP1ですから、その当たりが打ち出されてくるのはしばらく先になってしまいそうですね。

Live Migrationやクラスタリング、SCVMM関連など、Hyper-Vについてはまだまだ色々な情報が公開されていますので、ぜひMicrosoft Conferenceの資料は一通り目を通されることをオススメします。
http://www.microsoft.com/japan/cloud/msc2010/digital/default.mspx