VM メモリ割り当てに関する推奨事項 一般/Hyper-V

VM メモリ割り当てに関する推奨事項 一般/Hyper-V

VM のセットアップに関する基本的な質問があります。Hyper-V を使用していますが、この質問は非常に一般的なものだと思います。これはホーム オフィス向けで、多くの作業を行わずに VM で十分なパフォーマンスを実現したいと考えています。VM はソフトウェアのテスト/デバッグに使用します。理想的にはすべての OS を起動しますが、一度にアクティブに使用されるのは 1 つだけです (ほとんどの場合、おそらくゼロです)。

VM へのメモリ割り当てに関する一般的なガイドラインはありますか? 極端な場合、合計メモリを VM の数で割ることができます (合計 4 GB、4 つの VM -> 各 1 GB)。もう一方の極端な場合、すべての VM に完全なメモリを与え、OS に調整させることもできます。どちらも間違っていると思います。適切なパフォーマンスを得るための「経験則」を探しています。VM サーバーが VM のメモリをどのように管理するかはわかりません。

[編集] この質問をしたのは、Hyper-V (2008 R2 バージョン) は、追加のメモリが利用可能な場合に VM に動的に追加メモリを提供できると誤って想定していたためです。使用量がピークに達する VM が一度に 1 つだけであれば、メモリを過剰に割り当てることができると考えていました。Hyper-V は、VM の起動時に各 VM に固定メモリを割り当てようとするため、一部の VM をシャットダウンして必要な VM のみを実行するか、VM のメモリ割り当てを低く設定して、割り当てすべてに加えて Hyper-V プロセスと (場合によっては) ホスト OS に十分な物理メモリがあることを確認する必要があります。

提供された回答に記載されているように、VMWare にはこの点に関してさらに多くのオプションがあるようです。[/edit]

ありがとう、ブレット

答え1

一般的なルールとして、最悪の状況でも、すべての標準機能が RAM から確実に動作するために十分な物理 RAM があることを知っておく必要があります。そのマジックナンバーは OS ごとに異なり、ゲスト OS の用途によって大きく異なります。数百 MB の RAM を搭載した Windows 2003 Server や、30 MB 以下の一部の Linux コンパクト ディストリビューションなどでも問題なく起動できますが、数 GB のデータベースを持つゲストで SQL Server を実行する場合は、実際に搭載されていると思われる数 GB の RAM をバックアップする実際の RAM が搭載されていることを確認する必要があります。

ハイパーバイザーが RAM を処理する方法は、ベンダーや製品によって大きく異なります。Hyper-V はメモリ オーバーコミットと呼ばれる機能をサポートしていないため、物理的に使用可能な量に基づいて RAM を割り当てるしかありません。VMware の ESX ではオーバーコミットが可能で、競合の調停 (共有) のルールを設定して、VM がビジー状態になり、物理 RAM の合計量が負荷を満たすのに不十分になった場合に何が起こるかを制御します。Hyper-V 環境ではこのレベルの制御ができないため、事前に十分な RAM を割り当てる必要があります。

VMware には、メモリのオーバーコミットに対処するための他のトリックがいくつかあります。透過的なページ共有とメモリ バルーニングです。

透過的なページ共有は、基本的に RAM の単一インスタンス ストレージです。ハイパーバイザーは各 VM に割り当てられた RAM ブロックを監視し、複数の VM に共通ブロックが存在することを検出した場合は、単一のコピーのみを保持し、すべての VM をそのブロックにポイントします。その後、いずれかの VM がそのブロックに書き込もうとすると、問題が起きないようにコピーが分割されます。均質な VM 環境では、これによりパフォーマンスに影響を与えることなく、かなりの量の RAM を節約できます。

メモリ バルーニングは、ハイパーバイザーが 1 つの VM に割り当てられた RAM を「借用」し、そのゲスト内で (大きな) メモリ チャンクを割り当てるゲスト OS ドライバーを使用して、より重要な VM に RAM を渡すことができるメカニズムです。割り当てられると、ハイパーバイザーはバルーン ドライバーが割り当てたメモリをバックアップする物理 RAM を安全に再割り当てできます。ハイパーバイザーが RAM を再割り当てするためにゲスト VM のメモリをディスクにスワップするだけの直接的なアプローチと比較して、この方法の利点は、物理 RAM を失うゲストがメモリが何かによって使用されていることを認識し、「借用」された RAM がゲスト内の重要なシステム機能に割り当てられるリスクが大幅に軽減されることです。

追加編集: 使用可能な物理 RAM の量を超えるメモリ要件を持つ VM を起動しようとしたときに Hyper-V で何が起こるかを確認したことはありません。私が見つけたすべてのドキュメントには、VM は構成されたすべての RAM を取得し、残りの RAM がハイパーバイザーとホスト OS に割り当てられると記載されています。Hyper-V には、VM に最小限の RAM 予約を適用し、残りをプールから割り当てるメカニズムはありませんが、CPU リソースにはそのようなメカニズムが用意されています。繰り返しますが、VMware の ESX\ESXi ではこのオプションが提供されています。

ハイパーバイザーとホストOSの両方に必要な物理メモリも計画する必要があることを覚えておく価値があります(ベアメタルHyper-Vサーバーを実行している場合は後者は無視してください)。MicrosoftのHyper-V のパフォーマンス チューニングに関するアドバイスVM に搭載されている XGig の RAM に加えて、次のものが必要であるとされています。

  • ハイパーバイザー用に300 MB
  • 各仮想マシンに割り当てられる最初の 1 GB の RAM に 32 MB が加算されます。
  • 各仮想マシンに割り当てられる RAM の GB ごとにさらに 8 MB が追加されます。
  • ルートパーティションで実行されるホストオペレーティングシステム用に512 MBを追加

これらに十分な物理 RAM がない場合、パフォーマンスに重大な影響が及び、安定性にも影響が出る可能性があります。

答え2

Windows Server 2008 R2 の Hyper-Vするダイナミック メモリ機能をサポートします (SP1 を実行しています。RTM バージョンにあったかどうかはわかりません)。質問がかなり古いので、おそらく質問した時点ではサポートされていなかったと思います。

最初は各ゲスト VM に静的メモリを割り当てていましたが、すぐにサーバーの限界に達しました。動的メモリを使用すると、VM ごとに初期量 (おそらく低い) と最大量を割り当てることができます。その後、メモリはオンデマンドで割り当てられ、未使用のメモリも回復されます。これを設定するには、各 VM の設定を編集する必要があります。新しい VM を作成するときには使用できません。私は、動的メモリを使用するように多数の VM を再構成したところ、全体的なメモリ使用量がほぼ半分に減りました。

割り当てられたメモリを示す Hyper-V マネージャーのスクリーンショット

動的メモリ用に構成した VM には、現在のメモリ需要とステータスが表示されます。強調表示された VM は、初期割り当ての 1 GB 内でまだ実行されています。Exchange サーバー (上から 2 番目) は、非常に容量が大きく、初期割り当ての 1 GB を使い果たし、さらに 2 GB 割り当てられています。この機能では、構成可能なバッファー (既定では 20%) が許可されているため、Hyper-V は Exchange に必要な量に加えて、さらにいくらかの余裕を与えています。

答え3

これは一般的な質問ではありません。Hyper-V は VMWare のようにメモリ ページ共有を実行できないためです。このテクノロジによって、VM メモリの割り当て方法が大幅に変わる可能性があります。Hyper-V がサポートしている場合は、VM に開始量を割り当ててから、VM ごとの実際の使用量を時間の経過とともに確認し、動作についてさらに詳しく知るにつれて割り当てを変更することをお勧めします。

関連情報