VMメモリ
VMを作成すると、固定量のメモリがVMに割り当てられます。動的メモリ制御(DMC)を使用して、XenServer®環境における物理メモリの利用率を向上させることができます。DMCは、VM間でメモリを動的に再割り当てできるメモリ管理機能です。
XenCenterは、メモリタブでメモリ使用量のグラフィカル表示を提供します。詳細については、XenCenterドキュメントを参照してください。
動的メモリ制御(DMC)には、次の利点があります。
-
VMを再起動することなくメモリを追加または削除できるため、ユーザーにシームレスなエクスペリエンスを提供します。
-
ホストが満杯の場合、DMCを使用すると、これらのホストでより多くのVMを起動でき、実行中のVMに割り当てられるメモリ量を比例して削減します。
動的メモリ制御(DMC)とは?
XenServer DMCは、実行中のVMのメモリを自動的に調整し、各VMに割り当てられるメモリ量を指定された最小メモリ値と最大メモリ値の間に保つことで、パフォーマンスを保証し、ホストあたりのVM密度を高めることを可能にします。
DMCがない場合、ホストが満杯のときにVMを追加で起動しようとすると、「メモリ不足」エラーで失敗します。既存のVMメモリ割り当てを減らしてより多くのVMのためのスペースを確保するには、各VMのメモリ割り当てを編集してからVMを再起動する必要があります。DMCを使用する場合、XenServerは、定義されたメモリ範囲内で実行中のVMの現在のメモリ割り当てを自動的に削減することで、メモリを再利用しようとします。XenServerは、ホストが満杯の場合でもメモリを再利用しようとします。
注記:
動的メモリ制御は、仮想GPUを持つVMではサポートされていません。
動的範囲の概念
各VMについて、管理者は動的メモリ範囲を設定できます。動的メモリ範囲とは、再起動を必要とせずにVMからメモリを追加/削除できる範囲です。VMが実行中の場合、管理者は動的範囲を調整できます。XenServerは常に、VMに割り当てられるメモリ量が動的範囲内に保たれることを保証します。したがって、VMの実行中にこれを調整すると、XenServerがVMに割り当てられるメモリ量を調整する可能性があります。最も極端なケースは、管理者が動的最小値/最大値を同じ値に設定し、XenServerにこの量のメモリがVMに割り当てられることを強制する場合です。「満杯」のホストで新しいVMを起動する必要がある場合、実行中のVMのメモリは、新しいVMを起動するために「絞り込まれます」。必要な追加メモリは、既存の実行中のVMを事前に定義された動的範囲内で比例して絞り込むことによって取得されます。
DMCを使用すると、動的な最小メモリレベルと最大メモリレベルを設定し、VMが動作する動的メモリ範囲(DMR)を作成できます。
-
動的最小メモリ:VMに割り当てる下限メモリ。
-
動的上限: VMに割り当てるメモリの上限。
例えば、動的最小メモリが512MBに設定され、動的最大メモリが1,024MBに設定されている場合、VMには512~1024MBの動的メモリ範囲(DMR)が与えられ、その範囲内で動作します。DMCを使用する場合、XenServerは、指定されたDMR内で各VMにメモリを割り当てることを保証します。
静的範囲の概念
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の起動時にパフォーマンスの低下や安定性の問題を引き起こす可能性があります。
DMCはどのように機能しますか?
DMCを使用すると、ゲスト仮想マシンを次の2つのモードのいずれかで操作できます。
-
ターゲットモード: 管理者はゲストのメモリターゲットを指定します。XenServerは、ターゲットを満たすようにゲストのメモリ割り当てを調整します。ターゲットを指定することは、仮想サーバー環境や、ゲストに使用させたいメモリ量を正確に把握している状況で役立ちます。XenServerは、指定したターゲットを満たすようにゲストのメモリ割り当てを調整します。
-
動的範囲モード: 管理者はゲストの動的メモリ範囲を指定します。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の静的メモリプロパティを表示する
-
必要なVMのUUIDを見つける:
xe vm-list <!--NeedCopy--> -
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 を使用します:
-
必要なVMのUUIDを見つける:
xe vm-list <!--NeedCopy--> -
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 の動的メモリプロパティを更新します。
-
必要な VM の UUID を見つけます:
xe vm-list <!--NeedCopy--> -
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-->