Citrix Hypervisor

仮想マシンのメモリ

VMを作成すると、一定量のメモリがVMに割り当てられます。動的メモリ制御(DMC:Dynamic Memory Control)を使用して、Citrix Hypervisor環境の物理メモリの使用率を向上させることができます。DMCは、VM間のメモリの動的な再割り当てを可能にするメモリ管理機能です。

XenCenterの [メモリ] タブには、メモリの使用状況がグラフで示されます。詳しくは、XenCenterのドキュメントを参照してください。

動的メモリ制御機能には、以下の特長があります。

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

  • ホスト上で追加の仮想マシンを起動できない状況でも、実行中の仮想マシンのメモリ割り当て量が均等に削減されるため、仮想マシンを新たに起動できるようになります。

動的メモリ制御(DMC)とは何ですか?

Citrix Hypervisorの動的メモリ制御では、実行中の仮想マシンのメモリが自動的に調節されます。この機能では、各仮想マシンに割り当てられたメモリ量を特定の範囲内で増減して、パフォーマンスを維持しながらサーバーあたりの仮想マシン密度を向上させることができます。

DMCが無効な場合、サーバー上に使用可能なメモリがないときに追加の仮想マシンを起動しようとすると、メモリ不足によるエラーが発生します。この問題を解決するには、既存の仮想マシンに割り当てたメモリ量を減らして、各仮想マシンを再起動しなければなりません。DMCを使用すると、Citrix Hypervisorで、実行中の仮想マシンのメモリ割り当て量が(管理者が設定した範囲内で)減らされ、メモリが解放されます。Citrix Hypervisorでは、サーバー上に使用可能なメモリがない場合でも、メモリの解放が試みられます。

注:

動的メモリ制御は、仮想GPUを持つ仮想マシンではサポートされません。

動的メモリ範囲

仮想マシンごとに、管理者は動的メモリ範囲を設定できます。動的メモリ範囲は、仮想マシンを再起動せずに増減できるメモリ量の範囲を指します。管理者は、仮想マシンの実行中にその動的範囲を調整できます。Citrix Hypervisorでは、仮想マシンに割り当てられるメモリがこの動的メモリ範囲内で維持されます。そのため、仮想マシンの実行中にそれを調整すると、Citrix Hypervisorにより、仮想マシンに割り当てられているメモリの量が調整される場合があります。たとえば、動的メモリ範囲の最小値と最大値に同じ値を設定すると、Citrix Hypervisorで、その仮想マシンに割り当てられるメモリ量が強制的にその値に変更されます。使用可能なメモリがないサーバー上で追加の仮想マシンの起動が必要になると、実行中のほかの仮想マシンのメモリが解放されます。追加の仮想マシン用に必要なメモリは、実行中の各仮想マシンから、指定されたメモリ範囲内で均等に再割り当てされます。

動的メモリ制御機能では、動的最小メモリ量と動的最大メモリ量を設定して、その仮想マシンの動的メモリ範囲(DMR:Dynamic Memory Range)を作成します。

  • 動的最小メモリ量:その仮想マシンに割り当てるメモリ量の最小値。

  • 動的最大メモリ量:その仮想マシンに割り当てるメモリ量の最大値。

たとえば、動的最小メモリ量を512MB、動的最大メモリ量を1024MBに設定した場合、この仮想マシンの動的メモリ範囲(DMR)は512~1024MBになり、この範囲内で仮想マシンが動作します。DMCを使用する場合は、Citrix Hypervisorにより、各仮想マシンのメモリがこのDMR内で常に確保されます

静的メモリ範囲

Citrix Hypervisorでサポートされているオペレーティングシステムの中には、メモリの動的な追加や削除を正しく処理できないものがあります。そのため、Citrix Hypervisorで、仮想マシンの再起動時に必要な最大メモリ量を宣言する必要があります。最大メモリ量を宣言することにより、ゲストオペレーティングシステムがページテーブルやほかのメモリ管理構造のサイズをそれに基づいて決めることができます。Citrix Hypervisorでこれを行うには、静的メモリ範囲という概念を使用します。静的メモリ範囲は、仮想マシンの実行中に増減できないメモリ範囲です。仮想マシンによっては、動的メモリ範囲が常に静的メモリ範囲内でなければならないなどの制約を受けます。静的最小メモリ量(静的メモリ範囲の最小値)には、Citrix Hypervisor上でそのオペレーティングシステムが動作するために必要な最低限のメモリ量が設定されています。

注:

静的最小メモリ量にはそのオペレーティングシステムで必要な最低限のメモリ量が設定されているため、この値は変更しないことをお勧めします。詳しくは、メモリ制御の制限事項の表を参照してください。

静的最大メモリ量に動的最大メモリ量よりも大きな値を設定すると、仮想マシンを再起動せずに、仮想マシンにより多くのメモリを割り当てることができます。

動的メモリ制御の動作

仮想マシンメモリの自動圧縮

  • 動的メモリ制御が無効な場合、追加の仮想マシンを起動できない状態のホスト上で仮想マシンを新たに起動しようとすると、メモリ不足エラーが発生し、起動に失敗します。

  • 動的メモリ制御が有効になっている場合、Citrix Hypervisorは、実行中の仮想マシンに割り当てられているメモリを動的メモリ範囲内で削減することで、このような状態のホストでメモリを解放しようとします。それにより、そのホストで実行中のすべての仮想マシンが、動的最小メモリ量と動的最大メモリ量の範囲内で均等に「圧縮」されます。

動的メモリ制御が有効なとき

  • ホストで使用可能なメモリ量が十分な場合、実行中のすべての仮想マシンに動的最大メモリ量が割り当てられます。

  • ホストで使用可能なメモリ量が不十分な場合、実行中のすべての仮想マシンに動的最小メモリ量が割り当てられます。

動的メモリ制御を設定するときは、十分なメモリが仮想マシンに割り当てられるようにしてください。割り当てられたメモリが十分でないと、仮想マシンで以下の問題が発生する場合があります。

  • 動的メモリ制御により割り当てられるメモリが十分でないと、仮想マシンの起動に時間がかかる場合があります。同様に、仮想マシンに割り当てるメモリ量が少なすぎると、起動に時間がかかる場合があります。

  • 動的最小メモリ量の設定が低すぎると、仮想マシン起動時のパフォーマンスおよび安定性が低下する場合があります。

動的メモリ制御のしくみ

動的メモリ制御では、以下の2つのモードのいずれかで仮想マシンが動作します。

  1. ターゲットモード: 仮想マシンの動的メモリ範囲を指定します。Citrix Hypervisorは、このターゲットに合致するように仮想マシンのメモリ割り当てを調節します。メモリターゲットの設定は、特に仮想サーバー環境や、仮想マシンに必要なメモリが分かっている場合に使用します。Citrix Hypervisorは、指定されたターゲットに合致するように仮想マシンのメモリ割り当てを調節します。

  2. 動的範囲モード: 管理者が、仮想マシンの動的メモリ範囲を指定します。Citrix Hypervisorは、指定された範囲からターゲットを選択し、そのターゲットに合致するように仮想マシンのメモリ割り当てを調節します。動的範囲の設定は、仮想デスクトップ環境や、実行する仮想マシンの数に応じてCitrix Hypervisorによって動的にメモリを再割り当てする場合に使用します。Citrix Hypervisorは、指定された範囲内からターゲットを選択し、そのターゲットに合致するように仮想マシンのメモリ割り当てを調節します。

注:

これらの動作モードは、実行中の仮想マシンで必要に応じて切り替えることができます。Citrix Hypervisorでは、仮想マシンは、特定のメモリサイズを指定するとターゲットモードになり、メモリ範囲を指定すると動的範囲モードになります。

メモリの制約

Citrix Hypervisorでは、管理者は、すべてのゲストオペレーティングシステムに対してすべてのメモリ制御操作を使用できます。ただし、Citrix Hypervisorでは、常に以下の条件を満たしている必要があります:

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

Citrix Hypervisorでは、管理者は、仮想マシンのメモリプロパティを設定する際、上記の条件を満たす任意の値を指定できますが、検証チェックが行われます。この条件に加えて、特定のオペレーティングシステムに適用される制限事項もあります。サポートされる構成の範囲は、使用しているゲストオペレーティングシステムによって異なります。Citrix Hypervisorでは、これらの制限を超えた値を設定しても、警告は表示されません。ただし、パフォーマンスおよび安定性の問題を避けるため、以下のメモリ制限を超えないように設定してください。サポートされるオペレーティングシステムごとの最小および最大メモリ制限の詳細なガイドラインについては、「ゲストオペレーティングシステムのサポート」を参照してください。

警告:

そのオペレーティングシステムで使用可能な物理メモリの上限を超えるメモリを仮想マシンに割り当てないことを推奨します。オペレーティングシステムがサポートするメモリ量の上限を超えると、その仮想マシンの動作が不安定になる場合があります。

サポートされるすべてのオペレーティングシステムにおいて、動的最小メモリ量は静的最大メモリ量の4分の1以上に設定する必要があります。動的最小メモリ量を下回るメモリを割り当てると、その仮想マシンの動作が不安定になる場合があります。仮想マシンのサイズを慎重に測定して、動的最小メモリ量でもアプリケーションが正しく動作することを確認してください。

動的最小値は静的最大値の少なくとも75%である必要があります。値が低いとゲスト内でエラーが発生する可能性があるため、サポートされません。

xe CLIコマンドを使用するには

仮想マシンの静的メモリプロパティを表示する

  1. 次のコマンドを実行して、仮想マシンのUUIDを確認します:

    xe vm-list
    <!--NeedCopy-->
    
  2. UUIDを指定して、コマンドparam-name=memory-staticを実行します。

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

    たとえば、以下は、ec77で始まるUUIDを持つ仮想マシンの静的最大メモリプロパティを示しています:

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

    この仮想マシンに設定されている静的最大メモリ量は、268,435,456バイト(256MB)です。

仮想マシンの動的メモリプロパティを表示する

仮想マシンの動的メモリプロパティを表示するには、上記の手順でparam-name=memory-dynamicコマンドを指定します:

  1. 次のコマンドを実行して、仮想マシンのUUIDを確認します:

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

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

    たとえば、以下は、ec77で始まるUUIDを持つ仮想マシンの動的最大メモリプロパティを示しています

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

    この仮想マシンに設定されている動的最大メモリ量は、134,217,728バイト(128MB)です。

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

警告:

静的または動的メモリ量を設定する場合、各パラメーターを正確な順序で指定してください。また、以下の条件を満たしている必要があります:

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-->

メモリターゲットの設定は、特に仮想サーバー環境や、仮想マシンに必要なメモリが分かっている場合に使用します。Citrix Hypervisorは、指定されたターゲットに合致するように仮想マシンのメモリ割り当てを調節します。例:

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-->

注:

  • 仮想マシンに特定サイズのメモリ量を割り当てるには、動的最大値と動的最小値に同じ値を指定します。
  • static-maxを超える値を動的メモリに指定することはできません。
  • 仮想マシンの静的最大メモリ量を変更するには、仮想マシンをシャットダウンする必要があります。

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

警告:

静的最小メモリ量にはそのオペレーティングシステムで必要な最低限のメモリ量が設定されているため、この値を変更しないことをお勧めします。詳しくは、「メモリの制約」を参照してください。

仮想マシンの動的メモリプロパティを変更する

  1. 次のコマンドを実行して、仮想マシンのUUIDを確認します:

    xe vm-list
    <!--NeedCopy-->
    
  2. UUIDを指定して、コマンドmemory-dynamic-{min,max}=valueを実行します。

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

次の例では、動的最大値を128MBに変更しています:

xe vm-param-set uuid=ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 memory-dynamic-max=128MiB
<!--NeedCopy-->
仮想マシンのメモリ