仮想マシンのメモリ
VMを作成すると、一定量のメモリがVMに割り当てられます。Dynamic Memory Control(DMC)を使用して、XenServer環境の物理メモリの使用率を向上させることができます。DMCは、VM間のメモリの動的な再割り当てを可能にするメモリ管理機能です。
XenCenterの [メモリ] タブには、メモリの使用状況がグラフで示されます。詳しくは、XenCenterのドキュメントを参照してください。
動的メモリ制御機能には、以下の特長があります。
-
VMを再起動せずにメモリを追加または削除して、ユーザーにシームレスなエクスペリエンスを提供できます。
-
ホスト上で追加の仮想マシンを起動できない状況でも、実行中の仮想マシンのメモリ割り当て量が均等に削減されるため、仮想マシンを新たに起動できるようになります。
動的メモリ制御(DMC)とは何ですか?
XenServerの動的メモリ制御では、実行中の仮想マシンのメモリが自動的に調節されます。この機能では、各仮想マシンに割り当てられたメモリ量を特定の範囲内で増減して、パフォーマンスを維持しながらホストあたりの仮想マシン密度を向上させることができます。
DMCが無効な場合、ホスト上に使用可能なメモリがないときに追加の仮想マシンを起動しようとすると、メモリ不足によるエラーが発生します。この問題を解決するには、既存の仮想マシンに割り当てたメモリ量を減らして、各仮想マシンを再起動しなければなりません。DMCを使用すると、XenServerで、実行中の仮想マシンのメモリ割り当て量が(管理者が設定した範囲内で)減らされ、メモリが解放されます。XenServerでは、ホスト上に使用可能なメモリがない場合でも、メモリの解放が試みられます。
注:
動的メモリ制御は、仮想GPUを持つ仮想マシンではサポートされません。
動的メモリ範囲
仮想マシンごとに、管理者は動的メモリ範囲を設定できます。動的メモリ範囲は、仮想マシンを再起動せずに増減できるメモリ量の範囲を指します。管理者は、仮想マシンの実行中にその動的範囲を調整できます。XenServerでは、仮想マシンに割り当てられるメモリがこの動的メモリ範囲内で維持されます。そのため、仮想マシンの実行中に調整すると、XenServerが仮想マシンに割り当てられるメモリの量を調整してしまう場合があります。たとえば、動的メモリ範囲の最小値と最大値に同じ値を設定すると、XenServerでその仮想マシンに割り当てられるメモリ量が強制的にその値に変更されます。使用可能なメモリがないホスト上で追加の仮想マシンの起動が必要になると、実行中のほかの仮想マシンのメモリが解放されます。追加の仮想マシン用に必要なメモリは、実行中の各仮想マシンから、指定されたメモリ範囲内で均等に再割り当てされます。
動的メモリ制御機能では、動的最小メモリ量と動的最大メモリ量を設定して、その仮想マシンの動的メモリ範囲(DMR:Dynamic Memory Range)を作成します。
-
動的最小メモリ量:その仮想マシンに割り当てるメモリ量の最小値。
-
動的最大メモリ量:その仮想マシンに割り当てるメモリ量の最大値。
たとえば、動的最小メモリ量を512MB、動的最大メモリ量を1024MBに設定した場合、この仮想マシンの動的メモリ範囲(DMR)は512~1024MBになり、この範囲内で仮想マシンが動作します。DMCを使用する場合は、XenServerにより、各仮想マシンのメモリがこのDMR内で常に確保されます。
静的メモリ範囲
XenServerでサポートされるオペレーティングシステムの中には、メモリの動的な追加や削除を正しく処理できないものがあります。そのため、XenServerが仮想マシンの再起動時に必要な最大メモリ量を宣言する必要があります。最大メモリ量を宣言することにより、ゲストオペレーティングシステムがページテーブルやほかのメモリ管理構造のサイズをそれに基づいて決めることができます。XenServerでこれを行うには、静的メモリ範囲という概念を使用します。静的メモリ範囲は、仮想マシンの実行中に増減できないメモリ範囲です。仮想マシンによっては、動的メモリ範囲が常に静的メモリ範囲内でなければならないなどの制約を受けます。静的最小メモリ量(静的メモリ範囲の最小値)には、XenServer上でそのオペレーティングシステムが動作するために必要な最低限のメモリ量が設定されています。
注:
静的最小メモリ量にはそのオペレーティングシステムで必要な最低限のメモリ量が設定されているため、この値は変更しないことをお勧めします。詳しくは、メモリ制御の制限事項の表を参照してください。
静的最大メモリ量に動的最大メモリ量よりも大きな値を設定すると、仮想マシンを再起動せずに、仮想マシンにより多くのメモリを割り当てることができます。
動的メモリ制御の動作
仮想マシンメモリの自動圧縮
-
動的メモリ制御が無効な場合、追加の仮想マシンを起動できない状態のホスト上で仮想マシンを新たに起動しようとすると、メモリ不足エラーが発生し、起動に失敗します。
-
動的メモリ制御が有効な場合、XenServerは、実行中の仮想マシンに割り当てられているメモリを動的メモリ範囲内で削減することで、このような状態のホストでメモリを解放しようとします。それにより、そのホストで実行中のすべての仮想マシンが、動的最小メモリ量と動的最大メモリ量の範囲内で均等に「圧縮」されます。
動的メモリ制御が有効なとき
-
ホストで使用可能なメモリ量が十分な場合、実行中のすべての仮想マシンに動的最大メモリ量が割り当てられます。
-
ホストで使用可能なメモリ量が不十分な場合、実行中のすべての仮想マシンに動的最小メモリ量が割り当てられます。
動的メモリ制御を設定するときは、十分なメモリが仮想マシンに割り当てられるようにしてください。割り当てられたメモリが十分でないと、仮想マシンで以下の問題が発生する場合があります。
-
動的メモリ制御により割り当てられるメモリが十分でないと、仮想マシンの起動に時間がかかる場合があります。同様に、仮想マシンに割り当てるメモリ量が少なすぎると、起動に時間がかかる場合があります。
-
動的最小メモリ量の設定が低すぎると、仮想マシン起動時のパフォーマンスおよび安定性が低下する場合があります。
動的メモリ制御のしくみ
動的メモリ制御では、以下の2つのモードのいずれかで仮想マシンが動作します。
-
ターゲットモード: 仮想マシンの動的メモリ範囲を指定します。XenServerは、ターゲットに応じてゲストのメモリ割り当てを調整します。メモリターゲットの設定は、特に仮想サーバー環境や、仮想マシンに必要なメモリが分かっている場合に使用します。XenServerは、指定するターゲットに応じてゲストのメモリ割り当てを調整します。
-
動的範囲モード: 管理者が、仮想マシンの動的メモリ範囲を指定します。XenServerは、指定された範囲からターゲットを選択し、そのターゲットに合致するように仮想マシンのメモリ割り当てを調節します。動的範囲の設定は、XenServerが、変化するゲスト数または変化するホストメモリの必要性に応じて、ホストメモリを動的に再パーティションする場合のあらゆる状況で役に立ちます。XenServerは、指定された範囲内からターゲットを選択し、そのターゲットに合致するように仮想マシンのメモリ割り当てを調節します。
注:
これらの動作モードは、実行中の仮想マシンで必要に応じて切り替えることができます。XenServerでは、仮想マシンは、特定のメモリサイズを指定するとターゲットモードになり、メモリ範囲を指定すると動的範囲モードになります。
メモリの制約
XenServer管理者は、どのゲストオペレーティングシステムに対しても、任意のメモリ制御操作を行うことができます。ただし、XenServerでは常に以下の条件を満たしている必要があります。
0 < memory-static-min <= memory-dynamic-min <= memory-dynamic-max <= memory-static-max
仮想マシンのメモリプロパティを設定するときは、上記の条件を満たす任意の値を指定できますが、検証チェックが行われます。この条件に加えて、特定のオペレーティングシステムに適用される制限事項もあります。サポートされる構成の範囲は、使用しているゲストオペレーティングシステムによって異なります。XenServerでは、これらの制限を超えた値を設定しても、警告は表示されません。ただし、パフォーマンスおよび安定性の問題を避けるため、以下のメモリ制限を超えないように設定してください。サポートされるオペレーティングシステムごとの最小および最大メモリ制限の詳細なガイドラインについては、「ゲストオペレーティングシステムのサポート」を参照してください。
警告:
そのオペレーティングシステムで使用可能な物理メモリの上限を超えるメモリを仮想マシンに割り当てないことを推奨します。オペレーティングシステムがサポートするメモリ量の上限を超えると、その仮想マシンの動作が不安定になる場合があります。
サポートされているすべてのオペレーティング システムでは、動的最小メモリ量は静的最大メモリ量の75%以上である必要があります。制限値が低いと安定性の問題が発生する可能性があります。仮想マシンのサイズを慎重に測定して、動的最小メモリ量でもアプリケーションが正しく動作することを確認してください。
xe CLIコマンドを使用するには
仮想マシンの静的メモリプロパティを表示する
-
次のコマンドを実行して、仮想マシンのUUIDを確認します:
xe vm-list <!--NeedCopy-->
-
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
コマンドを指定します:
-
次のコマンドを実行して、仮想マシンのUUIDを確認します:
xe vm-list <!--NeedCopy-->
-
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-->
メモリターゲットの設定は、特に仮想サーバー環境や、仮想マシンに必要なメモリが分かっている場合に使用します。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-->
注:
- 仮想マシンに特定サイズのメモリ量を割り当てるには、動的最大値と動的最小値に同じ値を指定します。
- static-maxを超える値を動的メモリに指定することはできません。
- 仮想マシンの静的最大メモリ量を変更するには、仮想マシンをシャットダウンする必要があります。
個々のメモリプロパティを更新する
警告:
静的最小メモリ量にはそのオペレーティングシステムで必要な最低限のメモリ量が設定されているため、この値を変更しないことをお勧めします。詳しくは、「メモリの制約」を参照してください。
仮想マシンの動的メモリプロパティを変更する
-
次のコマンドを実行して、仮想マシンのUUIDを確認します:
xe vm-list <!--NeedCopy-->
-
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-->