2014/06/26

Hyper-V の動的メモリに関するメモ(計算式)

Hyper-V の動的メモリが、利用可能なメモリのすべてを使い切ってはくれないの件。

Windows Server 2012 R2 Hyper-V で仮想マシンに割り当て可能な、利用可能メモリは Hyper-V Dynamic Memory Balancer\Available Memory (System Balancer インスタンス) で確認できる。この利用可能メモリは既定で自動計算されるが、その算出式が以下の KB で説明されている。自動計算の結果、利用可能なメモリ少なすぎって場合は、MemoryReserve のレジストリ値で自分で予約できる。

Hyper-V にてメモリ空き容量があるにも関わらず仮想マシンの起動に失敗する
[URL] http://support.microsoft.com/kb/2962295/ja

でも、動的メモリを有効にしても、メモリ バッファーの関係で利用可能メモリのすべてを使い果たしてはくれないことがあるっぽい。動的メモリのメモリ追加の計算式を“想像”して“創造”してみた。

仮想マシンを1つも実行していない状態で Hyper-V Dynamic Memory Balancer\Available Memory: 1, 0227 MB (ホストの状態により増減あり) の Hyper-V ホストで、動的メモリが有効(スタートアップ RAM: 1,024 MB、最小 RAM: 512 MB、最大 RAM: 1 TB、メモリ バッファー: 20%) な仮想マシンを起動し、ゲスト OS でメモリを要求し続ける (http://technet.microsoft.com/ja-jp/sysinternals/bb963901(en-us).aspx の TestLimit64 を使用) と、9,582 MB を最後にメモリが追加されなくなった。Hyper-V Dynamic Memory Balancer\Available Memory は 577 MB 残っている状態。

おそらくメモリ バッファーを確保しようとするには、Hyper-V Dynamic Memory Balancer\Available Memoryの残りではこれ以上は無理って感じ。

メモリ バッファーは仮想マシンの動作中でも変更できるので、最小値の 5% に変更したところ、さらに 9,834 MB まで追加することができた。Hyper-V Dynamic Memory Balancer\Available Memory は 324 MB 残し。

ってことは、

仮想マシンのメモリ要求(D)+(割り当てられたメモリ(C)+追加のメモリ(X))×メモリ バッファー(%、B/100)=(割り当てられたメモリ(C)+追加のメモリ(X))

D+(C+X)*B/100=(C+X)

X=D*100/(100-B)-C


を満たす X の値が、Hyper-V Dynamic Memory Balancer\Available Memory の現在値より大きければ、メモリの追加を行わないってこと?


メモリ バッファー20%のとき(C=9582MB、D=8719MB、B=20)に当てはめてみると、

X=8719MB*100/(100-0.2)-9582MB
 =1316.75MB 

そのときの Hyper-V Dynamic Memory Balancer\Available Memory: 577 MB より大きかったので、9582 MB にさらに追加はできなかったってこと。


Hyper-V Dynamic Memory Configuration Guide
[URL]  http://technet.microsoft.com/en-us/library/ff817651(v=ws.10).aspx
Ben Armstrong's Virtualization Blog > What is the memory buffer when dynamic memory is enabled?
[URL] http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/08/04/what-is-the-memory-buffer-when-dynamic-memory-is-enabled.aspx

0 件のコメント: