第7章 KVM でのオーバーコミット

7.1. はじめに

KVM ハイパーバイザーは、CPU およびメモリーのオーバーコミットに対応しています。システム上に実際に存在する物理的なリソースの容量を超える仮想化 CPU または仮想化メモリーを割り当てるのがオーバーコミットです。CPU のオーバーコミットを行うことで、使用率の低い仮想化サーバーやデスクトップをより少数のサーバーで実行することができるため、リソースとしてのシステム数が節約でき、節電効果や冷却効果、サーバーのハードウェアに対する投資効果などの実質的な効果を得ることができます。
ほとんどのプロセスで割り当てられたメモリーを常に 100% 必要とすることはありません。KVM ではこの性質を利用することで、ホスト物理マシンに実際にある物理的なメモリー以上のメモリーをゲスト仮想マシンに割り当てることができます。これをリソースのオーバーコミットと呼びます。

重要

オーバーコミットがあらゆるメモリー関連の問題に対する理想的なソリューションとなるわけではありません。メモリー不足に対処するための推奨される方法は、すべてのゲストのメモリー (およびホスト OS の 4GB) の合計がホスト物理マシンの物理的なメモリーより少なくなるよう、ゲストに少な目のメモリーを割り当てることです。ゲスト仮想マシンにさらに多くのメモリーが必要な場合は、ゲスト仮想マシンの swap 領域を増やします。それでもなお、オーバーコミットを採用する場合には慎重に行なうようにしてください。
KVM ハイパーバイザーで実行しているゲスト仮想マシン群には、そのマシン群専用に割り当てられた物理的な RAM ブロックはありません。代わりに、各ゲスト仮想マシンはホスト物理マシンの Linux プロセスとして動作します。つまり、メモリーが要求された場合にのみホスト物理マシンの Linux カーネルによってメモリーが割り当てられます。また、ホスト物理マシンのメモリー管理機能により、物理的なメモリーと swap 領域間でゲスト仮想マシンのメモリーを移動させることができます。オーバーコミットを採用する際は、すべてのゲスト仮想マシンだけでなく物理ホストのプロセスも処理できるよう、ホスト物理マシン上に十分な swap 領域を配分する必要があるのはこのためです。原則として、ホスト物理マシンのオペレーティングシステムには最大 4GB のメモリーと最小 4GB の swap 領域が必要となります。詳細は、例7.1「メモリーのオーバーコミット例」 を参照してください。
Red Hat ナレッジベース には、swap パーティションのサイズを安全かつ効率的に確定する方法について記載されています。

注記

以下の例は、swap を設定する方法のみを説明するために提供されています。記載されている設定がご使用の環境には適さない場合もありますので注意してください。

例7.1 メモリーのオーバーコミット例

この例では、オーバーコミットに必要な swap 領域を計算する方法について説明しています。簡単に見えるかもしれませんが、オーバーコミットによる影響を無視しないようにしてください。先に進む前に、まず 重要 をご覧ください。
ExampleServer1 に物理 RAM が 32GB あるとします。このシステムは 50 ゲスト仮想マシンを実行するように設定されています。各ゲストには 1GB の仮想化メモリーが必要になります。前述のように、ホスト物理マシンのシステム自体にも最大 4GB のメモリー (ゲスト仮想マシンのメモリーとは別) と swap 領域が最小でも 4GB が追加で必要になります。
swap 領域は以下のように計算します。
  • すべてのゲスト仮想マシンに必要なメモリーの合計量を計算します。この例では、50 ゲスト仮想マシン * 1GB メモリー (1 ゲスト仮想マシンあたり) = 50GB になります。
  • ホスト物理マシンのオペレーティングシステムおよびホスト物理マシンの最小 swap 領域に必要なメモリー量に、ゲスト仮想マシンメモリー量を加えます。この例では、50GB ゲスト仮想マシンメモリー + 4GB ホスト物理マシン OS + 4GB swap 最小サイズ = 58GB になります。
  • この値からシステム上にある物理 RAM の容量を引きます。この例では、58GB - 32GB = 26GB になります。
  • 算出される値は割り当てる必要のある swap 領域になります。この例では、26GB になります。

注記

オーバーコミットはすべてのゲスト仮想マシンで役に立つわけではありませんが、集中的なメモリー使用が最小限となるデスクトップ仮想化の設定や、同一の設定の複数のゲスト仮想マシンを KSM で実行する場合などに機能することが明らかになっています。swap やメモリーのオーバーコミットの設定は、それぞれの環境や設定が異なるため、プラグインのように簡単に採用できるものではなく、また設定の際に決まった定形があるわけでもありません。 設定を変更する前に慎重に検討し、ご使用の環境や設定を完全に理解した上で変更を行なってください。
KSM およびオーバーコミットについての詳細は、8章KSM を参照してください。