Windows TIPS
[System Environment] |
Hyper-VのDynamic Memoryで親パーティション用のメモリを予約する
|
 |
■ |
Windows Server 2008 R2 SP1のHyper-Vでは、Dynamic Memory機能を使って、仮想マシンにメモリを動的に割り当てることができる。 |
■ |
デフォルトでは、ほとんどすべてのメモリを仮想マシンに割り当てるので、親パーティションのメモリが不足することがある。 |
■ |
親パーティションに割り当てるメモリ・サイズを固定するにはレジストリを設定する。 |
|
|
Windows Server 2008 R2 SP1のHyper-Vには、新しくDynamic Memoryという機能が追加されている。これは、各仮想マシンに割り当てるメモリの量を実行時に動的に制御する機能である。以前のHyper-Vでは、仮想マシンに割り当てるメモリの量は、仮想マシンの作成時に固定的に決めるしかなかった。そのため、仮想マシンの運用計画を立てる場合は、それぞれの仮想マシンが必要とするメモリ・サイズを事前に慎重に見積もっておく必要があった。だがDynamic Memoryを利用すると、各仮想マシンのメモリ需要に応じて動的にメモリが配分されるようになる。詳細は次の記事を参照していただきたい。
Dynamic Memoryを利用すると、Hyper-Vのサーバにおけるメモリ管理は動的に行われるようになり、システムに搭載されているメモリが有効に活用される。その一方で、親パーティションのWindows Server 2008 R2に割り当てられるメモリも削減され、ゲスト仮想マシンになるべく多く割り当てられるようになる。
Hyper-Vの実行専用のサーバならこれでも問題はないだろうが、親パーティション上でメモリを多く使うアプリケーションなどを起動する予定があるならば(もしくはパフォーマンス改善のために、ディスク・キャッシュ用に多くのメモリを残しておきたいのなら)、親パーティション用のメモリもあらかじめ予約しておきたい。だがHyper-Vの管理ツールではこのような設定はできない。代わりに、レジストリを設定することで、親パーティション用に割り当てるメモリのサイズを固定的に設定できる。本TIPSではその方法を紹介する。
[注意] |
レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリ・エディタの操作は慎重に行うとともに、あくまで御自分のリスクで設定を行ってください。何らかの障害が発生した場合でも、本Windows Server Insider編集部では責任を負いかねます。ご了承ください。 |
Windows Server 2008 R2 SP1のHyper-Vにおいて、親パーティション用に割り当てるメモリのサイズは、次のレジストリで設定できる。
項目 |
内容 |
キー |
HKEY_LOCAL_MACHINEの
\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization |
 |
値の名前 |
MemoryReserve |
型 |
REG_DWORD |
値 |
親パーティションのために残しておくメモリのサイズ(Mbytes単位) |
 |
親パーティションのために残しておくメモリ・サイズの指定 |
ここで指定したサイズのメモリが親パーティション専用に割り当てられる。
【注:】前掲の記事では、当初、値の名前を「MemReserve」と記述しておりましたが、正しくはこの表のように「MemoryReserve」です(当該記事はすでに修正済み)。 |
DWORD型の値MemoryReserveに、親パーティションに割り当てるメモリのサイズをMbytes単位で記述しておく。例えば4Gbytes割り当てたければ、「4096」(10進数)をセットする。レジストリの設定後はシステムを再起動する。
なおWindows Server 2008 R2 SP1のHyper-Vではなく、従来の(Dynamic Memoryが利用できない)Hyper-Vの場合は、仮想マシンに割り当てるメモリは常に固定サイズになる。親パーティションに割り当てるメモリ・サイズを固定したければ、各仮想マシンに割り当てるメモリ・サイズを調整すればよい。
レジストリ設定の効果
以下は、4096(4Gbytes)という値をMemoryReserveにセットして起動したWindows Server 2008 R2 SP1のHyper-V管理ツールの画面例である。サーバ・ハードウェア自体には10Gbytesのメモリがあるが、4Gbytesが親パーティションに割り当てられているので、仮想マシンで利用可能なメモリは多くても6Gbytesまでになる。仮想マシンに割り当てるメモリが不足し、これ以上仮想マシンを起動できない状態になっている。
 |
メモリ不足で仮想マシンが起動できない場合の管理画面 |
|
 |
3台の仮想マシンが起動中で、すでに5.9Gbytesのメモリを使用している。 |
|
 |
この仮想マシンは、1.1Gbytesのメモリが必要だが、空きメモリが不足しているので、0.9Gbytesしか割り当てられていない。 |
|
 |
4台目の仮想マシンを起動しようとしたが、空きメモリ不足で失敗している。 |
|
このときの親パーティション上のWindows Server 2008 R2 SP1のタスク・マネージャを見ると(次の画面参照)、まだ空きメモリが2.2Gbytes以上あり、十分なメモリが残されていることが分かる。
 |
親パーティションに4Gbytes残した場合の例 |
これは、親パーティション上のWindows Server 2008 R2のタスク・マネージャの画面。親パーティションには常に4Gbytesのメモリが割り当てられ、仮想マシンには最大でも6Gbytesしか割り当てられない。親パーティション上のWindows Server 2008 R2では十分なサイズのディスク・キャッシュが利用できる(Windows OSでは、空きメモリは可能な限りディスク・キャッシュとして利用されるようになっている)。 |
|
 |
トータルのメモリ使用量は7.35Gbytes(全メモリ・サイズの73%使用。グラフの上端が10Gbytesの位置になる)。ここには、親パーティションのWindows Server 2008 R2で使用するメモリと、仮想マシンに割り当てられている総メモリの合計が含まれる。仮想マシンでは6Gbytes使用しているので、Windows Server 2008 R2では1.35Gbytes使用中ということになる。 |
|
 |
全物理メモリ・サイズは10Gbytes。
|
|
 |
利用可能なキャッシュ・サイズ。 |
|
もしMemoryReserveのレジストリ値を設定していないと、仮想マシンは多く起動できるが(9Gbytes以上まで割り当て可能)、親パーティションはメモリ不足になりやすい。例えばディスク・キャッシュのサイズなども抑えられ、親パーティションにおけるファイル入出力や仮想ディスク・ファイルの入出力のパフォーマンスなどが低下する可能性がある(デフォルトでは、全メモリの5%程度が親パーティションのために残され、それ以外はすべて仮想マシンへ優先的に割り当てられるようである。詳細は先の記事参照)。次の画面は同じマシンにおいて、レジストリを設定していない場合の親パーティションのタスク・マネージャの例である。キャッシュ・サイズなどに余裕があるのが分かるだろう。
 |
親パーティションに予約しなかった場合の例 |
先ほどと同じシステムであるが、レジストリ値は設定していないので、より多くの仮想マシンが起動できる。Hyper-Vの管理ツールで確認すると、仮想マシン全体で9.2Gbytesのメモリが割り当てられている。そのときの親パーティションのタスク・マネージャの画面がこれである。 |
|
 |
ほとんどすべてのメモリ(99%)がすでに使用中状態になっている。 |
|
 |
親パーティションで利用可能なキャッシュ・サイズはわずか数十Mbytesしかない。 |
|
Windows Server Insider フォーラム 新着記事