Hyper-V のホストリザーブメモリについて

こんにちは Windows プラットフォームサポートの林です。

メモリ不足で仮想マシンが起動できない場合にホストリザーブと呼ばれるホスト OS 用のメモリ予約領域が原因となることがあります。本件については KB2962295 として公開されておりますが今回その概要についてご説明致します。

【問題】

まず、問題として Hyper-V ホストにてタスクマネージャで利用可能メモリが十分にあるにも関わらず仮想マシン起動時に以下のエラーで起動が失敗することがあります。


ログの名前 : Microsoft-Windows-Hyper-V-VMMS/Admin

イベント ID: 19544

レベル     : エラー

メッセージ : XXXX MB のメモリが必要な仮想マシン '<仮想マシン名>' を起動できませんでした。システムには、XXXX MB の空きメモリしかありませんでした (仮想マシン ID <仮想マシン GUID>)。


しかしながら、タスク マネージャーの [パフォーマンス] タブで "利用可能" なメモリサイズを確認すると上記で表示されているサイズ以上のメモリが利用可能となっていることがあります。

 【原因】

Windows Server 2012 R2 よりホスト OS のメモリ枯渇がなくなるよう、ホスト OS が動作するために最低限必要なメモリサイズを動的に内部で確保するようになっております。この挙動変更により Windows Server 2012 R2 以降では Hyper-V で利用可能なメモリはタスクマネージャ上の "利用可能" に表示されているサイズより更にホスト OS 用に予約されているサイズを引いたサイズしか利用できません。そのために、空きメモリがあるように見えても仮想マシンが起動しないことがあります。

Hyper-V では仮想マシン起動用に必要なメモリは以下のように算出されており、システムの空きメモリから更に下記の [ホスト OS 用予約サイズ] を引いたサイズが実際に仮想マシンに割り当て可能なサイズとなります。

Hyper-V 利用可能メモリ = [物理メモリ利用可能サイズ] - [ホスト OS 用予約サイズ]

上記の [ホスト OS 用予約サイズ] については内部仕様に関わるため残念ながら具体的なサイズ情報は公開されておりませんが、システムのメモリサイズに依存しており 128 GB 程度までのシステムでは 3 ~ 4 GB 程度を見て頂ければと思います。それ以上大きいメモリのシステムでは「ホスト OS 用予約サイズ」は物理メモリサイズに対して数パーセントであり、ほぼ無視できるものとなります。

また、正確な [Hyper-V 利用可能メモリ] は KB2962295 にも記載がありますが下記パフォーマンスカウンタから確認できます。

 Hyper-V Dynamic Memory Balancer\Available Memory (インスタンスは System Balancer)

よって、メモリ不足で仮想マシンが起動せず、NUMA ノード毎のメモリサイズも足りており、タスクマネージャで利用可能メモリが十分ある場合は、上記パフォーマンス モニターの [Hyper-V Dynamic Memory Balancer\Available Memory] のカウンタから Hyper-V 用空きメモリサイズを確認してみてください。