vSphere Client を使用して、メモリ割り当ての設定に関する情報を表示し、それらの設定を変更できます。メモリ リソースを効果的に管理するには、メモリ オーバーヘッド、アイドル メモリ税、および ESXi ホストがメモリをどのように解放するかについてもよく理解しておく必要があります。

メモリ リソースを管理する場合、メモリ割り当てを指定できます。メモリ割り当てをカスタマイズしない場合、ESXi ホストは、ほとんどの状況で良好に機能するデフォルトを使用します。

メモリ割り当てを指定する方法は、いくつかあります。

  • vSphere Client[] を通じて使用可能な属性と特殊な機能を使用します。vSphere Client を使用して ESXi ホストまたは vCenter Server システムに接続できます。
  • 詳細設定を使用します。
  • スクリプト化したメモリ割り当てに vSphere SDK を使用します。
注: この章では、「メモリ」は物理 RAM または永続的なメモリを指します。

メモリ オーバーヘッドについて

メモリ リソースの仮想化には、関連するいくつかのオーバーヘッドがあります。

ESXi 仮想マシンは、2 種類のメモリ オーバーヘッドを被ることがあります。

  • 仮想マシン内のメモリにアクセスするための追加の時間。
  • ESXi ホストが自身のコードとデータ構造のために必要とする、各仮想マシンに割り当てられたメモリを超える余分のスペース。

ESXi のメモリ仮想化では、メモリ アクセスへの時間のオーバーヘッドはほとんど追加されません。プロセッサのページング ハードウェアがページ テーブル(ソフトウェア ベースのアプローチ用のシャドウ ページ テーブルまたはハードウェア アシストによるアプローチ用の 2 レベルのページ テーブル)を直接使用するので、仮想マシン内のほとんどのメモリ アクセスは、アドレス変換のオーバーヘッドをせずに実行できます。

メモリ スペース オーバーヘッドには、2 つの構成要素があります。

  • VMkernel が必要とする、システム全体の固定されたオーバーヘッド。
  • 各仮想マシンの追加のオーバーヘッド

オーバーヘッド メモリには、仮想マシンのフレーム バッファと、シャドウ ページ テーブルなどの各種の仮想化データ構造のために予約されたスペースが含まれます。オーバーヘッド メモリは、仮想 CPU の数とゲスト OS 用に構成されたメモリに依存します。

仮想マシン上のオーバーヘッド メモリ

仮想マシンをパワーオンするには、特定の量の使用可能なオーバーヘッド メモリが必要です。このオーバーヘッドの量を認識しておく必要があります。

仮想マシンに必要なオーバーヘッド メモリの量は、vCPU の数、メモリ サイズ、デバイスの数とタイプ、モニタで使用している実行モード、仮想マシンのハードウェア バージョンなどの多数の要素によって決まります。また、使用している vSphere のバージョンも、必要なメモリの量に影響する可能性があります。仮想マシンに必要なオーバーヘッド メモリの量は、VMX によって自動的に計算されます。

特定の構成に必要なオーバーヘッド メモリの量を確認するには、まず対象となる仮想マシンをパワーオンします。vmware.log ファイルを調べます。仮想マシンをパワーオンすると、必要なオーバーヘッド メモリの量がログに出力されます。ログ内で VMMEM を検索して、仮想マシン用に予約されているオーバーヘッド メモリの最初の正確な量を確認します。

ESXi ホストによるメモリ割り当ての方法

ホストは、メモリがオーバーコミットされていないかぎり、制限 パラメータによって指定されたメモリを各仮想マシンに割り当てます。ESXi ホストは、指定された物理メモリ サイズを上回るメモリを仮想マシンに割り当てることはしません。

たとえば、1GB の仮想マシンには、デフォルトの制限 (制限なし) またはユーザー指定の制限 (たとえば 2GB) がある場合があります。このどちらの場合も、ESXi ホストは、1GB (仮想マシン用に指定された物理メモリ サイズ) を上回るメモリは割り当てません。

メモリがオーバーコミットされる場合、各仮想マシンには、[予約] によって指定された量と [制限] によって指定された量の間のメモリを割り当てられます。仮想マシンの予約を超えて仮想マシンに与えられるメモリの量は、通常、現在のメモリ負荷とともに変動します。

ホストは、仮想マシンに割り当てられたシェアの数と最新の作業セット サイズの概算に基づいて、各仮想マシンへの割り当てを決定します。

  • シェア: ESXi ホストは、修正された比例的なシェアのメモリ割り当てポリシーを使用します。メモリ シェアは、使用可能な物理メモリの一部を仮想マシンに割り当てます。
  • 作業セット サイズ: ESXi ホストは、仮想マシン実行時間の連続的な期間にわたってメモリの動作を監視することによって、仮想マシンの作業セットを見積もります。見積もりは、いくつかの期間にわたって平滑化されます。これには、作業セット サイズの拡大にすばやく対応し、作業セット サイズの縮小にゆっくりと対応する技法が使用されます。

    この方法により、アイドル メモリを解放した仮想マシンがメモリをより有効に使用し始めた場合、共有ベースの割り当てすべてを短時間のうちに確実に獲得できます。

    作業セットのサイズを見積もるために、デフォルトで 60 秒間、メモリの動作が監視されます。このデフォルトを変更するには、Mem.SamplePeriod 詳細設定を調整します。ホストの詳細属性の設定 を参照してください。

アイドル仮想マシンのメモリ税

現在割り当てられているメモリのすべてを仮想マシンが有効に使用していない場合、ESXi は、使用中のメモリに対してより、アイドル メモリに対してより多くのコストを課します。これは、仮想マシンがアイドル メモリを蓄えないようにするのに役立ちます。

アイドル メモリ税は、累進的に課税されます。仮想マシンのアクティブなメモリに対するアイドル メモリの割合が大きくなるにつれて、実効税率も増加します (以前のバージョンの ESXi は階層リソース プールをサポートしておらず、仮想マシンのすべてのアイドル メモリには均一に課税されていました)。

アイドル メモリの税率は、Mem.IdleTax オプションで変更できます。このオプションを Mem.SamplePeriod 詳細属性とともに使用して、仮想マシンのターゲット メモリ割り当ての決定方法を制御します。ホストの詳細属性の設定 を参照してください。

注: ほとんどの場合、 Mem.IdleTax の変更は必要なく、適切でもありません。

VMX スワップ ファイル

仮想マシン実行可能 (VMX) スワップ ファイルを使用すると、VMX 処理のために予約されるホストのオーバーヘッド メモリの量を大幅に削減できます。

注: VMX スワップ ファイルは、ホスト スワップ キャッシュ機能へのスワップや通常のホスト レベルのスワップ ファイルとは関係がありません。

ESXi は、さまざまな目的で仮想マシンごとにメモリを予約します。仮想マシン モニタ (VMM) や仮想デバイスなどの特定のコンポーネントに必要なメモリは、仮想マシンのパワーオン時にすべて予約されます。しかし、VMX 処理のために予約されるオーバーヘッド メモリの一部は、スワップすることができます。VMX スワップ機能によって、VMX メモリの予約が大幅に削減されます (たとえば、仮想マシンごとに 50MB 以上だったのが、仮想マシンごとに 10MB 程度など)。これにより、ホストのメモリが割り当てられすぎているときに、残りのメモリをスワップ アウトすることが可能になり、仮想マシンごとのオーバーヘッド メモリの予約量を削減できます。

VMX スワップ メモリは、仮想マシンのパワーオン時に空きディスク領域が十分にあれば、ホストで自動的に作成されます。

メモリの解放

ESXi ホストは、仮想マシンからメモリを解放できます。

ホストは、予約によって指定された量のメモリを、仮想マシンに直接割り当てます。予約を超えるメモリは、ホストの物理リソースを使用して割り当てられるか、物理リソースを使用できない場合は、バルーニングやスワップなどの特別な方法を使用して処理されます。ホストは、2 つの方法を使用して、仮想マシンに割り当てられたメモリの量を動的に拡大または縮小します。

  • ESXi システムは、仮想マシン内で実行中のゲスト OS にロードされたメモリ バルーン ドライバ (vmmemctl) を使用します。メモリ バルーン ドライバ を参照してください。
  • ESXi システムは、ゲスト OS による関与なしに仮想マシンからサーバ スワップ ファイルにページをスワップ アウトします。各仮想マシンには、独自のスワップ ファイルがあります。

メモリ バルーン ドライバ

メモリ バルーン ドライバ (vmmemctl) は、サーバと協同して、ゲスト OS によって最も価値がないと見なされたページを解放します。

このドライバは、同様のメモリ制約下のネイティブ システムの動作と緊密に一致する、予測可能なパフォーマンスを提供する専用のバルーニング技法を使用します。この技法は、ゲスト OS に対するメモリ プレッシャーを増減して、ゲスト自身のネイティブ メモリ管理アルゴリズムをゲストに使用させます。メモリが十分ではない場合、ゲスト OS は、どのページを解放するかを決定し、必要に応じて、それらのページを自身の仮想ディスクにスワップします。

図 1. ゲスト OS のメモリ バルーニング

この図は、ゲスト OS のメモリ バルーニングを示しています。
注: 十分なスワップ スペースを持つゲスト OS を構成する必要があります。ゲスト OS によっては、追加の制限事項があります。

必要な場合は、特定の仮想マシンについて [sched.mem.maxmemctl] パラメータを設定することによって、vmmemctl が解放するメモリの量を制限できます。このオプションは、仮想マシンから解放できるメモリの最大量をメガバイト (MB) 単位で指定します。仮想マシンの詳細属性の設定 を参照してください。

仮想マシン間でのメモリの共有

多くの ESXi ワークロードでは、複数の仮想マシン間で (単一の仮想マシン内でも) メモリを共有する機会があります。

ESXi のメモリ共有は、時間の経過とともに共有の機会をスキャンするバックグラウンド動作として実行されます。節約されるメモリの量は、時間とともに変動します。ある程度一定のワークロードの場合、共有のすべての機会が利用されるまで、量は一般にゆっくりと増加します。

特定のワークロードについてのメモリ共有の有効性を判定するには、ワークロードを実行してみて、resxtop または esxtop を使用して実際の節約を観察します。その情報は、メモリ ページの対話モードの PSHARE フィールドにあります。

Mem.ShareScanTimeMem.ShareScanGHz の詳細設定を使用すると、メモリ共有の機会を特定するためにシステムがメモリをスキャンする速度を制御できます。

sched.mem.pshare.enable オプションを設定することで、個々の仮想マシンの共有を構成することもできます。

セキュリティ上の懸念があるため、仮想マシン間の透過的なページ共有はデフォルトで無効になっており、ページ共有は仮想マシン内のメモリ共有に制限されます。このため、ページ共有は複数の仮想マシン間で行われることはなく、特定の仮想マシン内でのみ行われます。ソルティングの概念は、システム管理者が透過的なページ共有のセキュリティへの影響について抱く懸念に対処するため、導入されました。ソルティングを使用すると、透過的なページ共有に参加する仮想マシンを、これまでと比べてより高精度で管理できます。新しいソルティング設定では、ページのソルト値と内容が一致する場合に限り、複数の仮想マシンでページを共有できます。ソルティングの有効化または無効化を設定するには、新しいホスト構成オプション Mem.ShareForceSalting を使用します。

詳細オプションを設定する方法については、vSphere における詳細属性を参照してください。

メモリ圧縮

ESXi はメモリ圧縮によるキャッシュ機能を備えているため、メモリのオーバーコミットメントの使用時に仮想マシンのパフォーマンスを向上させます。メモリ圧縮はデフォルトで有効になっています。ホストのメモリがオーバーコミット状態になると、ESXi は仮想ページを圧縮し、メモリに保存します。

圧縮メモリへのアクセスは、ディスクにスワップされたメモリへのアクセスよりも早いため、ESXi でメモリ圧縮を使用すると、パフォーマンスに大きな影響を与えることなくメモリをオーバーコミットできます。仮想ページでスワップが必要な場合、ESXi はまずページを圧縮しようとします。2KB 以下に圧縮できたページは仮想マシンの圧縮用キャッシュに保存されるため、ホストの容量が増加します。

vSphere Client の詳細設定ダイアログ ボックスで、圧縮キャッシュの最大サイズの設定、およびメモリ圧縮の無効化を行うことができます。

メモリ圧縮キャッシュの有効化または無効化

メモリ圧縮はデフォルトで有効になっています。vSphere Client の [システムの詳細設定] を使用して、ホストのメモリ圧縮を有効または無効にできます。

手順

  1. vSphere Client で、ホストを参照して移動します。
  2. [構成] をクリックします。
  3. [システム][システムの詳細設定] を選択します。
  4. Mem.MemZipEnable を探して、[編集] ボタンをクリックします。
  5. メモリ圧縮キャッシュを有効にするには 1 を、無効にするには 0 を入力します。
  6. [OK] をクリックします。

メモリ圧縮キャッシュの最大サイズの設定

ホストの仮想マシン用に、メモリ圧縮キャッシュの最大サイズを設定できます。

圧縮キャッシュのサイズは、仮想マシンのメモリ サイズの割合 (%) で設定します。たとえば、仮想マシンのメモリ サイズが 1,000 MB のときに値 20 を入力した場合、ESXiでは、仮想マシンの圧縮されたページを格納するのに、最大で 200 MB のホスト メモリを使用できます。

圧縮キャッシュのサイズを設定しない場合、ESXiではデフォルト値の 10 % を使用します。

手順

  1. vSphere Clientで、ホストを参照して移動します。
  2. [構成] をクリックします。
  3. [システム][システムの詳細設定] を選択します。
  4. M Mem.MemZipMaxPct を探して、[編集] ボタンをクリックします。
    この属性の値によって、仮想マシンの圧縮キャッシュの最大サイズが決まります。
  5. 圧縮キャッシュの最大サイズを入力します。
    この値は仮想マシンのサイズの割合で、5 ~ 100 % である必要があります。
  6. [OK] をクリックします。

メモリ使用量の測定とタイプの識別

vSphere Client[パフォーマンス] タブに、メモリ使用量の分析に使用できる、いくつかのメトリックが表示されます。

これらのメモリ メトリックには、ゲストの物理メモリを測定するものと、マシン メモリを測定するものがあります。たとえば、パフォーマンス メトリックを使用して検査できるメモリ使用量の 2 つのタイプは、ゲスト物理メモリとマシン メモリです。ゲスト物理メモリを測定するには、与えられたメモリ メトリック (仮想マシンの場合) または共有メモリ (ホストの場合) を使用します。しかし、マシン メモリを測定するには、消費されたメモリ (仮想マシンの場合) または一般共有メモリ (ホストの場合) を使用します。これらのメトリックが何を測定し、これらのメトリックをどのように解釈すべきかを知るためには、これらのタイプのメモリ使用量について、概念上の違いを理解することが重要です。

VMkernel はゲスト物理メモリをマシン メモリにマッピングしますが、必ずしも常に 1 対 1 でマッピングされるわけではありません。ゲスト物理メモリの複数の領域が、マシン メモリの同じ領域にマッピングされることもあれば(メモリ共有の場合)、ゲスト物理メモリの特定の領域がマシン メモリにマッピングされないこともあります(VMkernel がゲスト物理メモリをスワップ アウトするかバルーニングする場合)。そうした状況では、個々の仮想マシンやホストについてのゲスト物理メモリの使用量およびマシン メモリの使用量の計算が異なります。

次図の例を考えてみましょう。これは、1 つのホストで実行中の 2 つの仮想マシンを示しています。各ブロックは 4KB のメモリを表しており、それぞれの色または文字は、ブロック上の異なるデータ セットを表しています。

図 2. メモリ使用量の例

この図は、2 台の仮想マシンのメモリ使用量の例を示しています。

仮想マシンのパフォーマンス メトリックは、次のようにして判別できます。

  • 仮想マシン 1 の与えられたメモリ (マシン メモリにマッピングされたゲスト物理メモリの量) は、マシン メモリへ向かう矢印を持つ、仮想マシン 1 のゲスト物理メモリのブロック数をカウントし、それに 4KB を乗算します。矢印を持つブロックは 5 つあるため、与えられたメモリは 20KB です。
  • 使用されたメモリは、仮想マシンに割り当てられたマシン メモリの量で、共有メモリから差し引かれる量を示しています。最初に、仮想マシン 1 のゲスト物理メモリからの矢印を持つ、マシン メモリ内のブロックの数をカウントします。そのようなブロックは 3 つありますが、1 ブロックは仮想マシン 2 と共有されています。したがって、2 つの完全なブロックと、3 番目のブロックの半分をカウントし、それに 4KB を乗算し、合計 10KB が消費されたメモリになります。
これら 2 つのメトリックの重要な違いは、与えられたメモリがゲスト物理メモリ レベルで矢印を持つブロックの数をカウントし、使用されたメモリはマシン メモリ レベルで矢印を持つブロックの数をカウントすることです。ブロックの数はメモリ共有のために 2 つのレベル間で異なり、そのため与えられたメモリと使用されたメモリに違いが出ます。メモリが共有またはその他の解放の技法によって節約されています。
ホストの共有メモリおよび一般共有メモリの判別でも、同様な結果が得られます。
  • ホストの共有メモリは、各仮想マシンの共有メモリの合計です。共有メモリを計算するには、各仮想マシンのゲスト物理メモリに注目し、マシン メモリ ブロックを指す矢印を持ち、それ自体も複数の矢印で指されているブロックの数を数えます。例では、そのようなブロックが 6 つあるので、このホストの共有メモリは 24KB です。
  • 一般共有メモリは、複数の仮想マシンによって共有されているマシン メモリの量です。一般メモリを判別するには、マシン メモリに注目し、複数の矢印で指されているブロックの数をカウントします。そのようなブロックは 3 つあるので、一般共有メモリは 12KB です。
共有メモリは、ゲスト物理メモリに関するもので、矢印の起点に注目します。一方、一般共有メモリはマシン メモリに関するもので、矢印の宛先に注目します。

ゲスト物理メモリとマシン メモリを測定するメモリ メトリックは、矛盾して見える場合があります。これらのメトリックは、実際には仮想マシンのメモリ使用量の異なる局面を測定しています。これらのメトリックの違いを理解することにより、これらのメトリックをより上手に利用して、パフォーマンスの問題を診断できます。

メモリの信頼性

メモリの信頼性は、error insolation とも呼ばれ、ESXi により、実際に障害が発生した場合同様、障害が発生している可能性があると判断した場合にメモリの一部の使用を停止できる機能です。

特定のアドレスで、訂正済みエラーの報告が十分集まったら、ESXi はこのアドレスの使用を中止し、訂正済みエラーが未訂正エラーになることを防ぎます。

メモリの信頼性は、RAM 内に訂正済みエラーや未訂正エラーがあっても、VMkernel の信頼性を高めます。また、システムが、エラーを含む可能性のあるメモリ ページを使用することを防ぎます。

エラー隔離通知の訂正

メモリの信頼性を使用して、VMkernel は エラー隔離通知を受信するページの使用を中止します。

ユーザーが vSphere Clientでイベントを受信するのは、VMkernel が修正不可のメモリ エラーから復旧したとき、修正可能なエラーが多数あるために VMkernel がシステム メモリのかなりの割合を廃棄するとき、または廃棄できないページが多数あるときです。

手順

  1. ホストとしての使用を中止します。
  2. 仮想マシンを移行します。
  3. メモリー関連のハードウェア テストを実行します。

システム スワップ

システムスワップとは、システム全体の未使用のメモリ リソースを有効に活用するために、メモリを再利用するプロセスです。

システム スワップを使用すると、システムは仮想マシン以外のメモリの利用者からメモリを再要求できます。システム スワップを有効にすると、別のプロセスによるメモリの再利用の影響と、メモリを使用できる仮想マシンにメモリを割り当てる機能とのバランスを調整できます。システム スワップに必要なハード ディスク容量は 1GB です。

メモリからデータを取り出し、バックグラウンド ストレージに書き込むことで、メモリを再利用できます。バックグラウンド ストレージからデータへアクセスする速度は、メモリからデータへアクセスするより遅いため、スワップしたデータの格納場所を慎重に選ぶ必要があります。

ESXi では、システム スワップの格納先が自動的に決定されます。これが、[優先スワップ ファイルの場所] です。格納場所の決定に、特定のオプション セットを指定することができます。この場合、システムは、有効なオプションの中から最適なものを選択します。利用可能なオプションがない場合、システム スワップは有効になりません。

次のオプションを使用できます。

  • データストア: 指定したデータストアを使用できるようにします。vSAN データストアまたは VMware vSphere® Virtual VolumesTM データストアをシステム スワップ ファイル用に指定することはできません。
  • ホスト スワップ キャッシュ: ホスト スワップ キャッシュの一部を使用できるようにします。
  • 優先スワップ ファイルの場所: ホストに構成されている優先スワップ ファイルの場所を使用できるようにします。

システム スワップの構成

システム スワップの場所を決定するオプションをカスタマイズできます。

前提条件

[システム スワップの設定] ダイアログ ボックスの [有効] チェック ボックスをオンにします。

手順

  1. vSphere Clientで、ホストを参照して移動します。
  2. [構成] をクリックします。
  3. [システム][システム スワップ] を選択します。
  4. [編集] をクリックします。
  5. 有効にする各オプションのチェック ボックスを選択します。
  6. [データストア] オプションを選択するには、ドロップダウン メニューからデータストアを選択します。
  7. [OK] をクリックします。