Hyper-V ダイナミック メモリのベスト プラクティスの完全ガイド
Hyper-V ダイナミック メモリは、Windows Server 2008 R2 SP1 で初めて導入されました。そのリリース以前は、 Hyper-V仮想マシン (VM)は、割り当てられたRAMの全容量を使用して起動・実行されるため、メモリの過剰使用につながり、VM全体のパフォーマンスに影響を及ぼしていました。さらに、VMの利用可能なメモリ容量を変更できるのは、VMが停止しているときのみでした。したがって、静的メモリ割り当てを動的メモリ割り当てに置き換える必要があり、Hyper-Vの"動的メモリ"機能が導入されたのは当然のことでした。
Hyper-V ダイナミックメモリとは何ですか?
Hyper-V ダイナミック メモリは、Hyper-V 環境で実行されている仮想マシン (VM) にメモリリソースを動的に割り当てる機能です。この機能により、その時点でメモリを必要としない VM から未使用のメモリの一部を回収し、その回収したメモリを実際にメモリを必要としている他の VM に再割り当てします。
Hyper-V ダイナミック メモリを使用すると、VM が使用できる起動時のメモリ量を指定したり、特定の VM が使用可能な物理メモリの範囲を設定したり、メモリ割り当てにおける VM の優先度を決定したりすることができます。物理メモリは、必要に応じて、パフォーマンスへの影響を最小限に抑えながら、効率的かつ動的に VM に割り当てられます。その結果、メモリ使用状況をよりきめ細かく制御でき、リソースの最適化が図られます。
Hyper-V ダイナミック メモリの長所と短所
Hyper-Vのダイナミックメモリは、次のような多くの利点をもたらす便利な機能です。
- VMは管理者が設定した制限内で、実際に必要なメモリ量のみを使用するため、メモリ消費量が削減されます
- 実行中のVMに対して、メモリの割り当て量を動的に増減できるため、メモリの効率的な配分が可能になります
- メモリリソースの効率的な活用により、統合数が向上した
- Hyper-V スマートページングによる再起動操作の信頼性向上
- VMリソースが無駄にならないため、コスト効率が良い
しかし、Hyper-Vの動的メモリにはいくつかの欠点もあり、VMのメモリパフォーマンスに悪影響を及ぼす可能性があります。具体的には、次のようなものがあります:
- 仮想環境内のメモリ割り当てを適切に管理しない場合、コンピュータの物理メモリを過剰に割り当ててしまうリスクがあります
- VMが実行中の場合、一部のメモリ設定を変更することはできません。したがって、VMが実行中または一時停止中のときは、最大および最小メモリ容量の増減や、VMの起動時のメモリ容量の変更を行うことはできません。
- Hyper-V ダイナミック メモリが有効になっている場合、データベース アプリケーションで問題が発生する可能性があります。パフォーマンスの問題を回避するため、Hyper-V ダイナミック メモリに対応したアプリケーションを使用することをお勧めします。
Hyper-V の動的メモリ設定
Hyper-Vのダイナミックメモリには、以下の5つのVM設定が含まれています。 Hyper-V マネージャーで構成そのために、Hyper-V マネージャーを開き、対象の仮想マシンを選択して、[クリック] します。 Settings、そして選択してください Memory. 次のような画面が表示されます:

ただし、Hyper-Vの動的メモリ設定の構成を開始する前に、まずこれらの機能の仕組みや、どのようなメリットがあるかを理解しておくことをお勧めします。それでは、それぞれの機能について見ていきましょう。
起動時RAM
この"Hyper-V ダイナミックメモリ"の設定値は、選択した仮想マシンが起動時に使用できる物理メモリの最小容量を定義します。起動用 RAM は、仮想マシンが中断することなく迅速に起動できるよう、十分な容量を確保してください。なお、仮想マシンが実行中の場合は、起動用 RAM の変更はできません。

最小RAM容量
この Hyper-V ダイナミックメモリの値は、VM の起動後に割り当てるべき物理メモリの最小容量を決定します。他の VM が追加の RAM を必要とする場合、Hyper-V ホストは、最小 RAM 値に達するまで、この VM から未使用のメモリを回収し始めることがあります。 この値は 32 MB まで低く設定できますが、[起動 RAM] を超えることはできません。また、VM の実行中または一時停止中は最小メモリを増やすことはできませんが、減らすことは可能です(例:最小 RAM 値を 512 MB から 64 MB に変更できます)。

最大RAM容量
この Hyper-V ダイナミックメモリの値は、仮想マシンが使用できる物理メモリの最大容量を指定します。この値は、割り当てられた起動時 RAM よりも小さくすることはできませんが、最大 1 TB (1,048,576 MB) まで設定可能です。 また、VMが実行中または一時停止中の間は、最大メモリ容量を減らすことはできませんが、増やすことは可能です(例:最大RAM値を512 MBから2048 MBに変更できます)。
メモリバッファ
この Hyper-V ダイナミックメモリの値は、バッファとして仮想マシンに割り当てる物理メモリの割合を決定します。メモリバッファとは、仮想マシンのメモリ要件に基づいて確保される物理メモリの一部です。メモリバッファを計算するには、次の式を使用します。
Amount of memory buffer = how much memory the virtual machine actually needs / (memory buffer value / 100).
デフォルトでは、メモリバッファの値は20%に設定されていますが、5%から2000%の範囲で設定可能です。VMの実行中であっても、いつでもメモリバッファの値を変更できます。

メモリの重み
この"Hyper-V ダイナミックメモリ"の値は、このホスト上の他の仮想マシンと比較した、選択した仮想マシンの優先度を指定します。この優先順位の順序に基づいて、同じ Hyper-V ホスト上で実行されている複数の仮想マシン間で、利用可能なメモリをどのように割り当てるかを決定できます。
なお、仮想マシンの優先度が低すぎ、かつ利用可能な物理メモリの量が減少した場合、その仮想マシンが起動できなくなるリスクがあることに注意してください。 メモリの重み付け値は、VM が実行中の場合でも、いつでも変更できます。

Hyper-V ダイナミック メモリのベスト プラクティス
Hyper-V 環境で高いパフォーマンスを実現し、メモリ使用率を向上させるには、Hyper-V ダイナミック メモリのベスト プラクティスに従うことをお勧めします。
以下に挙げる Hyper-V ダイナミック メモリのベスト プラクティスを適用することで、仮想マシンのメモリ パフォーマンスと Hyper-V 環境での全体的な操作性を大幅に向上させることができます。
Hyper-V 統合サービスの有効化
Hyper-V 統合サービス Hyper-V 環境における仮想マシンのパフォーマンスを向上させるためのユーティリティのセットです。 各Hyper-V統合サービスは、正常に機能し、必要なサービスを提供するために、ホストとゲストの両方で有効にする必要があります。デフォルトでは、Hyper-Vゲストサービスインターフェイスを除くすべてのHyper-V統合サービスがゲストOS上で有効になっています。
Hyper-Vダイナミックメモリを効果的に機能させるには、Hyper-V統合サービスが最新バージョンにアップグレードされていること、およびゲストOSがダイナミックメモリ機能をサポートしていることを確認してください。 そうしないと、メモリを動的に割り当てることができず、メモリ要求に適切に対応できないため、Hyper-V で問題が発生する可能性があります。
Windows Server 2016 のリリース以降、Hyper-V 統合サービスおよび対応する更新プログラムは Windows Update を通じてインストールできるようになりました。したがって、Hyper-V インフラストラクチャで Hyper-V 統合サービスの最新バージョンを使用できるようにするには、仮想マシン (VM) が更新プログラムを受け取れるように構成する必要があります。
メモリ使用量とリソースの割り当てを監視する
現在、Hyper-V 環境におけるメモリ使用状況やリソース割り当てを監視できる Hyper-V 管理ツールが数多く市場に出回っています。Hyper-V のダイナミック メモリを有効にしている場合、RAM を過剰に割り当ててしまい、メモリが完全に不足してしまう可能性があります。そのため、Hyper-V ホスト上の各仮想マシンに割り当てている RAM の状況を把握しておくことをお勧めします。
この目的のために、ネイティブの監視ツールを使用するか、サードパーティ製のソフトウェアを購入することができます。 たとえば、Hyper-V マネージャーからホスト経由で、またはタスク マネージャーからゲスト VM 経由で、VM のメモリ状態を確認できます。


これにより、システム内でのメモリリソースの使用状況を監視することができます。ただし、Hyper-V マネージャーとタスク マネージャーでは、メモリ使用量に関する表示結果が異なる点に注意してください。 ゲスト監視ツールには実際の結果が表示されません。これは、ゲストVMが、VMに割り当てられたメモリの総量が、実際にはそのドライバによって使用されていると認識しているためです。実際には、インフラストラクチャ内のVMへのメモリの割り当て状況については、ホストの方がより正確に把握しています。未使用のメモリは実際には他のVMに再割り当てされており、これがHyper-Vマネージャーに反映されています。
起動時のRAM容量を考慮してください
起動時RAMの設定値を高くしたり低くしたりすると、Hyper-Vのパフォーマンスに大きな影響を与える可能性があります。OSおよびその上で実行されるアプリケーションが正常に起動するように、起動時RAMを増やす必要があります。これは、Windowsがアイドル状態にあるときよりも、起動時に多くのRAMを必要とするためです。
さらに、インストールやアップグレードの操作中は、ゲストOSが利用可能なRAMの量は、起動時RAMの設定値と同等になります。 したがって、インストールやアップグレードを実行する前に、起動時RAMの値が選択したOSの最小メモリ要件を満たしていることを確認することが極めて重要です。
なお、起動時RAMの値が高すぎると、Hyper-Vのダイナミックメモリのパフォーマンスや全体的なメモリ使用量に悪影響を及ぼす可能性があります。そのため、ゲストOSが中断なく起動するように、起動時RAMの値として512 MBを割り当てることを推奨します。
メモリリークのことを忘れないでください
特定の仮想マシン(VM)に対してHyper-Vの動的メモリ制限を設定する際は、インフラストラクチャでメモリリークが発生する可能性があることを念頭に置くことが極めて重要です。メモリリークとは、不適切なメモリ割り当ての結果として、利用可能なメモリが徐々に失われていく現象を指します。これは通常、一時的な使用のみを目的として割り当てられたメモリを、アプリケーションが解放し忘れた場合に発生します。深刻な被害が生じる前にこの問題が検出されない場合、OSのメモリが枯渇し、最終的にアプリケーションが動作しなくなる可能性があります。
この問題による悪影響を軽減するためには、監視ツール(例:RAMMap)を導入し、インフラ全体をスキャンして不整合がないかを確認するとともに、実行中のアプリケーションによる異常なメモリ使用状況を検出することを推奨します。また、このようなツールを使用することで、その特定のVMに最適な最小および最大RAM容量を特定することも可能です。
RAMの最大値と最小値を設定する
Hyper-Vの動的メモリ機能が期待通りに動作するように、システムが超えてはならない上限値を設定することをお勧めします。これにより、インフラストラクチャ内のメモリ使用率を効果的に制御でき、仮想マシンがメモリを過剰に消費したり、逆に不足したりすることを防ぐことができます。
メモリバッファの値を慎重に設定してください
Hyper-Vのダイナミックメモリに関するベストプラクティスの1つは、適切な"メモリバッファ"値を割り当てることです。この値は、選択した仮想マシン(VM)に対してどれだけの追加メモリを確保するかを指定します。メモリバッファの値を高く設定すると、この追加メモリは通常、大規模なVMにおけるファイルのキャッシュや、システム内のI/O操作の効率化に使用されます。
一方、大量の物理メモリを必要とするアプリケーションが実行されている場合は、Memory Bufferの値を低く設定する必要があります。Memory Bufferの値を低く設定することで、利用可能なメモリが単一のVMによって完全に消費されることを防ぐことができます。
さらに、VMにすでに大量のメモリが割り当てられている場合、追加のメモリが必要になる可能性は低くなります。したがって、未使用のメモリリソースを、より必要としている他のVMと共有する方が合理的です。
必要に応じてHyper-Vホストを更新する
Hyper-V 環境の安定性とセキュリティを維持するため、Hyper-V ホストには必要な更新プログラムやセキュリティ パッチをすべてインストールするようにしてください。Microsoft の更新プログラムやセキュリティ パッチの主な目的は、システムで特定された問題に対処することです。たとえば、Windows Server 2012 R2 では、Hyper-V 仮想マシンが追加のメモリを取得できなくなる Hyper-V ダイナミック メモリに関する問題が検出されました。 VM上でこの機能が有効化されていたにもかかわらず、引き続き失敗し続けていました。このため、Microsoftはこの問題を解消し、機能が正常に動作するようにするためにホットフィックスをリリースしました。
1日の経過に伴うパフォーマンスの変化を把握する
業務時間中は処理負荷が大幅に増加し、その結果、Hyper-Vのパフォーマンスやリソースの割り当て、メモリ使用率に影響を及ぼします。Hyper-Vのダイナミックメモリに関するベストプラクティスの一つとして、業務時間中のメモリ使用量の変化を監視することをお勧めします。メモリ使用量が高くなる時間帯と低くなる時間帯の傾向を把握することで、Hyper-Vのダイナミックメモリを効果的に活用する方法を理解することができます。
実際に必要になったときにHyper-Vの動的メモリを有効にする
Hyper-Vのダイナミックメモリは、物理メモリの利用効率を向上させる非常に有用な機能ですが、静的なメモリ割り当ての方が適している場合もあります。したがって、特定の仮想マシン(VM)においてHyper-Vのダイナミックメモリを有効にする必要があるかどうかを検討する必要があります。 たとえば、一部のアプリケーションは、中断されることなく使用できるあらかじめ決められた量の RAM を割り当てられた方が、より高いパフォーマンスを発揮します。事前に割り当てられた RAM の量は、メモリ需要の変動にかかわらず一定に保たれます。
したがって、将来的に RAM が不足してアプリケーションが障害を起こすのを防ぐため、Hyper-V 環境における物理メモリの割り当て方法を事前に計画しておくことをお勧めします。
Hyper-Vの動的メモリは、対応しているアプリケーションでのみ使用してください
Hyper-V ホストまたはゲストにアプリケーションをインストールする前に、そのアプリケーションが Hyper-V ダイナミック メモリと併用可能であることを確認してください。この情報を確認するには、まず製品のサポート ドキュメントを読み、その機能やシステム要件を把握することをお勧めします。このような予防措置を講じることで、メモリの使用や割り当てに関連して発生する可能性のある問題を回避できます。
まとめ
Hyper-Vの動的メモリに関するベストプラクティスを学んだ後は、物理メモリをより効率的かつ安全に活用できるようになります。しかし、仮想インフラストラクチャは依然として、パフォーマンスを低下させる可能性のあるさまざまな危険や脅威にさらされています。仮想環境の安全性を確保するためには、データ保護ソリューションの導入が最も現実的な選択肢となります。 NAKIVO Backup & Replication 信頼性が高く、効果的かつ手頃な価格のソリューションであり、VMのバックアップ、レプリケーション、クラウドへのバックアップ、バックアップコピーの作成、サイト復旧をはじめとする豊富な機能を提供します。