続いては Dynamic Memory について調べてみたことをまとめたいと思います。
■Dynamic Memory の設定
Dynamic Memory の設定ですが、ゲスト OS のメモリを [動的] に設定することで使用することができます。
動的なメモリでは [スタートアップ RAM] と [最大 RAM] の 2 種類を設定します。
# Hyper-V でバッファーとして予約しておくべきメモリの割合についてはヘルプに記載がないので正確なことは言えないのですが、
おそらく ホスト OS 用のメモリ予約なのかな~と思っています。
今回は複数のゲスト OS は起動していないので、[メモリの優先度] に関してはデフォルトのままとしています。
?
■ゲスト OS 起動後の状態
Dynamic Memory を設定して、ゲスト OS を起動してみます。
起動時には、[スタートアップ RAM] のサイズまでメモリが確保されます。
SP1 を適用すると Hyper-V マネージャー も表示が変更され、[現在のメモリ] と [使用可能なメモリ] が表示されるようになります。
こちらも 512 MB となっており、[スタートアップ RAM] まで確保されていることが確認できますね。
?
■動的なメモリ拡張を発生させる
それでは、この状態で Dynamic Memory による動的なメモリ拡張を発生させて見たいと思います。
てっとり早くメモリを消費させるため、[fsutil コマンド] を使用して、ファイルサイズの大きいテキストファイルを作ってみたいと思います。
fsutil file createnew c:test.txt 536870912 |
これで 512 MB のテキストファイルが作成できました。
それでは、このテキストファイルをメモ帳で開いてメモリの割り当てがどのようになるか確認してみたいと思います。
実装メモリが [1.67 GB] に拡張されていることが確認できます。
Hyper-V マネージャーの [現在のメモリ] も拡張されています。
再起動をしないでも動的にメモリを拡張できるのが Dynamic Memory の機能となります。
同じファイルを別のメモ帳で開き、さらにメモリを使用してみたいと思います。
今回は、[最大 RAM] を [2048 MB] に設定していますので、メモリが [2 GB] で止まります。
こちらがホスト OS のタスクマネージャの内容です。
利用可能メモリが 1.3 GB 程度となっていることが確認できます。
?
?
■メモリを使用していたプログラムを終了する
大量のメモリを使用していたメモ帳を終了するとどうなるか試してみます。
閉じたタイミングで、Hyper-V マネージャーの [使用可能なメモリ] が増えていることが確認できます。
# 1.6 GB 程度が使用可能なメモリとなっています。
メモ帳を閉じてしばらく待つと、[現在のメモリ] が [スタートアップ RAM] のサイズまで縮小されます。
# 今回はメモ帳以外プログラムは実行していないため、最小まで縮小されています。
?
一度拡張されたメモリですが、ゲスト OS の実装メモリから見ると縮小はされないみたいですね。
Hyper-V マネージャーの [現在のメモリ] が縮小されたタイミングで、ホスト OS の [利用可能] メモリが増えていますので、
ゲスト OS では [2GB] と表示されていても使用していたメモリが解放されていることが確認できます。
?
■パフォーマンスカウンター
Dynamic Memory のメモリの割り当て、解放ですがホスト OS のパフォーマンスモニターから確認することができます。
Balancer に関しては、[System Balancer] というインスタンスしか表示されていないのですが、VM に関しては起動している
ゲスト OS をインスタンスとして選択することができます。
VM の Added Memory / Physical Memory / Removed Memory を取得するとゲスト OS で動的にメモリの変化があった時の
状況を確認することができそうです。
オブジェクト | カウンター | 説明 |
Hyper-V Dynamic Memory Balancer | Added Memory | このカウンターは、VM に追加されたメモリの累積量を表します。 |
Available Memory | このカウンターは、ノード上に残されたメモリ量を表します。 | |
Averag Pressure | このカウンターは、バランサー ノード上の平均負荷を表します。 | |
Memory Add Operations | このカウンターは、追加操作の合計数を表します。 | |
Memory Remove Operations | このカウンターは、削除操作の合計数を表します。 | |
Removed Memory | このカウンターは、VM から削除されたメモリの累積量を表します。 | |
Hyper-V Dynamic Memory VM | Added Memory | このカウンターは、VM に追加されたメモリの累積量を表します。 |
Averag Pressure | このカウンターは、VM の平均負荷を表します。 | |
Current Pressure | このカウンターは、VM の現在の負荷を表します。 | |
Guest Visible Physical Memory | このカウンターは、VM で表示されるメモリ量を表します。 | |
Maximum Pressure | このカウンターは、VM の最大負荷帯域を表します。 | |
Memory Add Operations | このカウンターは、VM に対する追加操作の合計数を表します。 | |
Memory Remove Operations | このカウンターは、VM に対する削除操作の合計数を表します。 | |
Minimum Pressure | このカウンターは、VM の最小負荷帯域を表します。 | |
Physical Memory | このカウンターは、VM の現在のメモリ量を表します。 | |
Removed Memory | このカウンターは、VM から削除されたメモリの累積量を表します。 |
?
アイドル時にはメモリを解放してくれるようなサービスが実行されているとメモリが有効活用できそうですね。
VDI 環境で、クライアントアプリを実行するような場合も有効に利用できそうですね。