XenServer

VM メモリ

VM を作成すると、固定量のメモリが VM に割り当てられます。Dynamic Memory Control (DMC) を使用すると、XenServer® 環境における物理メモリの利用率を向上させることができます。DMC は、VM 間でメモリを動的に再割り当てできるメモリ管理機能です。

XenCenter は、メモリタブでメモリ使用量のグラフィカル表示を提供します。詳細については、XenCenter ドキュメントを参照してください。

Dynamic Memory Control (DMC) には、次の利点があります。

  • VM を再起動することなくメモリを追加または削除できるため、ユーザーにシームレスなエクスペリエンスを提供します。

  • ホストが満杯の場合、DMC を使用すると、これらのホストでより多くの VM を起動でき、実行中の VM に割り当てられるメモリ量を比例して削減します。

動的メモリ制御 (DMC) とは?

XenServer DMC は、実行中の VM のメモリを自動的に調整することで機能し、各 VM に割り当てられるメモリ量を指定された最小メモリ値と最大メモリ値の間に保ち、パフォーマンスを保証し、ホストあたりの VM 密度を高めることができます。

DMC を使用しない場合、ホストが満杯のときに、追加の VM を起動しようとすると「メモリ不足」エラーで失敗します。既存の VM メモリ割り当てを減らしてより多くの VM のためのスペースを確保するには、各 VM のメモリ割り当てを編集してから VM を再起動します。DMC を使用する場合、XenServer は、定義されたメモリ範囲内で実行中の VM の現在のメモリ割り当てを自動的に削減することで、メモリを再利用しようとします。XenServer は、ホストが満杯の場合でもメモリを再利用しようとします。

注:

仮想 GPU を持つ VM では、Dynamic Memory Control はサポートされていません。

動的範囲の概念

各 VM について、管理者は動的メモリ範囲を設定できます。動的メモリ範囲とは、再起動を必要とせずに VM からメモリを追加/削除できる範囲です。VM が実行中の場合、管理者は動的範囲を調整できます。XenServer は常に、VM に割り当てられるメモリ量を動的範囲内に保つことを保証します。したがって、VM の実行中にこれを調整すると、XenServer が VM に割り当てられるメモリ量を調整する可能性があります。最も極端なケースは、管理者が動的最小値/最大値を同じ値に設定し、XenServer にこの量のメモリが VM に割り当てられるように強制する場合です。「満杯」のホストで新しい VM を起動する必要がある場合、実行中の VM のメモリは、新しい VM を起動するために「絞り込まれます」。必要な追加メモリは、既存の実行中の VM を事前に定義された動的範囲内で比例的に絞り込むことによって取得されます。

DMC を使用すると、動的な最小メモリレベルと最大メモリレベルを設定でき、VM が動作する動的メモリ範囲 (DMR) を作成できます。

  • 動的最小メモリ: VM に割り当てる下限メモリ。

  • 動的上限: VMに割り当てるメモリの上限です。

例えば、動的最小メモリが512 MBに設定され、動的最大メモリが1,024 MBに設定されている場合、VMには512~1024 MBの動的メモリ範囲(DMR)が与えられ、その範囲内で動作します。DMCを使用する場合、XenServerは、各VMに指定されたDMR内のメモリを常に割り当てることを保証します。

静的範囲の概念

XenServerがサポートする多くのオペレーティングシステムは、メモリの動的な追加または削除という概念を完全に「理解」していません。そのため、XenServerは、VMが再起動する際に消費を要求される最大メモリ量を宣言する必要があります。最大メモリ量を宣言することで、ゲストオペレーティングシステムはページテーブルやその他のメモリ管理構造を適切にサイズ設定できます。これにより、XenServer内に静的メモリ範囲の概念が導入されます。静的メモリ範囲は、VMの実行中に調整することはできません。特定の起動においては、動的範囲は常にこの静的範囲内に含まれるように制約されます。静的最小値(静的範囲の下限)は管理者を保護し、OSがXenServerで実行できる最小メモリ量に設定されます。

注:

静的最小レベルはオペレーティングシステムごとにサポートされているレベルに設定されているため、変更しないことをお勧めします。詳細については、メモリ制約の表を参照してください。

動的最大値よりも高い静的最大レベルを設定すると、将来的にVMを再起動することなく、より多くのメモリをVMに割り当てることができます。

DMCの動作

VMの自動圧縮

  • DMCが有効になっていない場合、ホストが満杯になると、新しいVMの起動は「メモリ不足」エラーで失敗します。

  • DMCが有効になっている場合、ホストが満杯であっても、XenServerは実行中のVMのメモリ割り当てを定義された動的範囲内で削減することにより、メモリを再利用しようとします。このようにして、実行中のVMは、ホスト上のすべてのVMに対して、動的最小値と動的最大値の間の同じ距離で比例的に圧縮されます。

DMCが有効な場合

  • ホストのメモリが十分な場合 - すべての実行中のVMは動的最大メモリレベルを受け取ります

  • ホストのメモリが不足している場合 - すべての実行中のVMは動的最小メモリレベルを受け取ります。

DMCを構成する際は、VMに少量のメモリしか割り当てないと、VMに悪影響を与える可能性があることに注意してください。例えば、メモリの割り当てが少なすぎると、次のようになります。

  • 動的メモリ制御を使用してVMに利用可能な物理メモリの量を減らすと、VMの再起動が遅くなる可能性があります。同様に、VMに割り当てるメモリが少なすぎると、起動が遅くなることがあります。

  • VMの動的メモリの最小値を低く設定しすぎると、VMの起動時にパフォーマンスの低下や安定性の問題が発生する可能性があります。

DMCの仕組み?

DMCを使用すると、ゲスト仮想マシンを次の2つのモードのいずれかで操作できます。

  1. ターゲットモード: 管理者はゲストのメモリターゲットを指定します。XenServerは、ターゲットを満たすようにゲストのメモリ割り当てを調整します。ターゲットの指定は、仮想サーバー環境や、ゲストに使用させたいメモリ量が正確にわかっている状況で役立ちます。XenServerは、指定したターゲットを満たすようにゲストのメモリ割り当てを調整します。

  2. 動的範囲モード: 管理者はゲストの動的メモリ範囲を指定します。XenServerは、その範囲からターゲットを選択し、ターゲットを満たすようにゲストのメモリ割り当てを調整します。動的範囲の指定は、ゲスト数の変化やホストメモリの負荷の変化に応じてXenServerにホストメモリを動的に再パーティション化させたいあらゆる状況で役立ちます。XenServerは、その範囲内からターゲットを選択し、ターゲットを満たすようにゲストのメモリ割り当てを調整します。

注:

実行中の任意のゲストに対して、ターゲットモードと動的範囲モードをいつでも切り替えることができます。新しいターゲットまたは新しい動的範囲を指定するだけで、残りの処理はXenServerが行います。

メモリの制約

XenServerでは、管理者は任意のゲストオペレーティングシステムですべてのメモリ制御操作を使用できます。ただし、XenServerはすべてのゲストに対して以下のメモリプロパティの順序付け制約を適用します。

0 < memory-static-min <= memory-dynamic-min <= memory-dynamic-max <= memory-static-max

XenServerでは、管理者は検証チェックに従い、この制約を満たす任意の値にゲストメモリプロパティを変更できます。ただし、上記の制約に加えて、サポートされている各オペレーティングシステムに対して特定のゲストメモリ構成のみをサポートしています。サポートされる構成の範囲は、使用中のゲストオペレーティングシステムによって異なります。XenServerは、管理者がサポートされている制限を超えるようにゲストを構成することを妨げません。ただし、パフォーマンスや安定性の問題を避けるため、メモリプロパティをサポートされている制限内に保つことをお勧めします。サポートされている各オペレーティングシステムの最小および最大メモリ制限に関する詳細なガイドラインについては、ゲストオペレーティングシステムのサポートを参照してください。

警告:

ゲストメモリを構成する際は、オペレーティングシステムがアドレス指定できる物理メモリの最大量を超えないようにすることをお勧めします。オペレーティングシステムでサポートされている制限を超えるメモリ最大値を設定すると、ゲスト内で安定性の問題が発生する可能性があります。

動的最小値は、サポートされているすべてのオペレーティングシステムで静的最大値の少なくとも75%である必要があります。これより低い制限は、安定性の問題につながる可能性があります。管理者は、VMのサイズを慎重に調整し、アプリケーションのワーキングセットが動的最小値で確実に機能することを確認することをお勧めします。

xe CLIコマンド

VMの静的メモリプロパティを表示する

  1. 必要なVMのUUIDを見つける:

    xe vm-list
    <!--NeedCopy-->
    
  2. UUIDをメモし、次にコマンド param-name=memory-static を実行します

    xe vm-param-get uuid=uuid param-name=memory-static-{min,max}
    <!--NeedCopy-->
    

    たとえば、以下はUUIDがec77で始まるVMの静的な最大メモリプロパティを表示します:

    xe vm-param-get uuid= \
        ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \
        param-name=memory-static-max;
        268435456
    <!--NeedCopy-->
    

    この例は、このVMの静的な最大メモリが268,435,456バイト (256 MB) であることを示しています。

VMの動的メモリプロパティを表示する

動的メモリプロパティを表示するには、上記の手順に従いますが、コマンド param-name=memory-dynamic を使用します:

  1. 必要なVMのUUIDを見つける:

    xe vm-list
    <!--NeedCopy-->
    
  2. UUIDをメモし、次にコマンド param-name=memory-dynamic を実行します:

    xe vm-param-get uuid=uuid param-name=memory-dynamic-{min,max}
    <!--NeedCopy-->
    

    たとえば、以下はUUIDがec77で始まるVMの動的な最大メモリプロパティを表示します

    xe vm-param-get uuid= \
        ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \
        param-name=memory-dynamic-max;
        134217728
    <!--NeedCopy-->
    

    この例は、このVMの動的な最大メモリが134,217,728バイト (128 MB) であることを示しています。

メモリプロパティを更新する

警告:

静的/動的の最小/最大パラメータを設定する際は、正しい順序を使用してください。さらに、以下の制約を無効にしてはなりません:

0 < memory-static-min <= memory-dynamic-min <= memory-dynamic-max <= memory-static-max

仮想マシンの静的メモリ範囲を更新します。

xe vm-memory-static-range-set uuid=uuid min=value max=value
<!--NeedCopy-->

仮想マシンの動的メモリ範囲を更新します。

xe vm-memory-dynamic-range-set \
      uuid=uuid min=value \
      max=value
<!--NeedCopy-->

ターゲットを指定することは、仮想サーバー環境や、ゲストに正確にどれくらいのメモリを使用させたいかを知っているあらゆる状況で役立ちます。XenServerは、指定したターゲットに合わせてゲストのメモリ割り当てを調整します。例:

xe vm-memory-target-set target=value vm=vm-name
<!--NeedCopy-->

仮想マシンのすべてのメモリ制限 (静的および動的) を更新します。

xe vm-memory-limits-set \
      uuid=uuid \
      static-min=value \
      dynamic-min=value \
      dynamic-max=value static-max=value
<!--NeedCopy-->

注:

  • 変更されない特定の量のメモリをVMに割り当てるには、動的最大値と動的最小値を同じ値に設定します。
  • VMの動的メモリを静的最大値を超えて増やすことはできません。
  • VMの静的最大値を変更するには、VMをシャットダウンする必要があります。

個々のメモリプロパティを更新する

警告:

静的最小レベルは、オペレーティングシステムごとにサポートされているレベルに設定されているため、変更しないでください。詳細については、「メモリ制約」を参照してください。

VMの動的メモリプロパティを更新します。

  1. 必要なVMのUUIDを見つけます。

    xe vm-list
    <!--NeedCopy-->
    
  2. UUIDをメモし、その後、コマンド memory-dynamic-{min,max}=value を使用します。

    xe vm-param-set uuid=uuid memory-dynamic-{min,max}=value
    <!--NeedCopy-->
    

以下の例では、動的最大値を128 MBに変更します。

xe vm-param-set uuid=ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 memory-dynamic-max=128MiB
<!--NeedCopy-->
VM メモリ