2011/02/23

Dynamic Memory における MemoryReserve の効果の確認

Windows Server 2008 R2 SP1 の Hyper-V では Dynamic Memory が利用可能になりましたが、既定ではホスト (管理用OS) の利用可能メモリまで使い果たしてしまう可能性があります。

下記ドキュメントによると、仮想化サービスとフェールオーバー クラスタリング サービスについては、管理用OSに必要なメモリを確保した上で、残りのメモリを Dynamic Memory に振り分けるようです。ですので、Hyper-V 専用ホストの場合はあまり気にする必要はないかもしれません。それ以外の役割やアプリケーションを実行しようとすると、利用可能メモリが不足するという事態に陥る可能性があるということです。管理用OSに一定量のメモリを予約しておく方法が下記ドキュメントに記されているので、その効果を試してみました。

Hyper-V Dynamic Memory Configuration Guide
http://technet.microsoft.com/en-us/library/ff817651(WS.10).aspx


Dynamic Memory の既定値は、最大 RAM 65535MB (Hyper-V の上限の64GB)、メモリ バッファー 20% です。仮想マシンはスタートアップ RAM に指定したメモリで起動を開始し、統合サービスが動作し始めるとゲスト OS のメモリ要求 (メモリの需要) + 利用可能メモリがメモリバッファーの%になるように動的にメモリを増減します。メモリ バッファーの確保は目標値であり、利用可能な物理メモリによっては達成できない場合があります。その状態は、メモリの状況として OK、低 (%の目標を達成できていない状態)、警告(物理メモリが不足していてバッファーを割り当てられない状態、日本語表記はまだ出会っていないので想像です。英語だとWarning) で通知されます。

さて、メモリ バッファーは 5~2000% の範囲で動的に (オンライン中でも) 変更できるので、最大の2000%に設定して、複数の仮想マシンを起動してみます。仮想マシンにどんどんメモリが追加されるはずです。12GBの物理メモリのホストで試したところ、利用可能メモリ186MB、空きメモリ0MBまで使い果たされてしまいました。

管理用OSに一定量のメモリを予約しておくには、以下のレジストリを新規に作成し、Hyper-V ホストを再起動します。

キー: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization
値の名前 (型): MemoryReserve (DWORD値)
値のデータ: 管理用 OSに予約するメモリ サイズ (MB)



フル インストールの場合は起動時に既に 1.3GB 程度のメモリを消費しているので、2GB (2048MB) 程度のメモリを予約しておくとよいでしょう。Server Core の場合は 1GB (1024MB) くらいで OK だと思います。

メモリを予約した上で、先ほどと同じ設定の仮想マシンを動かしてみます。今度は、1GB以上の利用可能メモリが残されています。起動時に1.3GB 程度消費していたので、指定通りに予約できているようです。



NUMA システムの場合は、NUMA ノードにまたがるメモリ割り当てを無効化しておくこともお勧めします。NUMA ノードにまたがるメモリ割り当ては、パフォーマンスを低下させる原因になります。この設定は、「Hyper-V マネージャー」でホストの「Hyper-V の設定」を開き、「NUMA ノードにまたがるメモリ割り当て」で設定します。既定では、「仮想マシンに NUMA ノードをまたがるメモリを割り当てる」にチェックが入っていますが、これを外して、Hyper-V ホストを再起動します。

0 件のコメント: