28.4. KVM でオーバーコミット

KVM hypervisor は CPU とメモリーの両方のオーバーコミットをサポートします。 オーバーコミットとは、システム上に存在する物理的リソース以上に仮想 CPU や 仮想メモリーを割り当てることです。CPU のオーバーコミットでは、低レベル設備の 仮想化サーバーやデスクトップがより少ない物理サーバー上で実行できるため、電力と 経費を節約します。

重要

CPU オーバーコミットは Xen hypervisor にはサポートされていません。Xen hypervisor での CPU のオーバーコミットはシステムの不安定性の原因及び、ホストと仮想化ゲストのクラッシュの 原因となります。
メモリーのオーバーコミット

ほとんどのオペレーティングシステムとアプリケーションは利用可能な RAM を常に 100% 使用することはありません。この状況を KVM で活用して使用物理メモリー 以上の仮想メモリーを仮想化ゲスト用に使用することが出来ます。

KVM の使用に於いては、仮想マシンは Linux プロセスです。KVM hypervisor 上のゲストは それに割り当てられた物理 RAM 集合を持っておらず、代わりにプロセスとして機能する わけです。各プロセスはより多くのメモリーを要求するとメモリーが割り当てられます。 KVM はこれを利用してゲストオペレーティングシステムのメモリー要求が上下する時に、 ゲスト用のメモリーを割り当てます。ゲストは、仮想化オペレーティングシステムが使用 すると見える量よりも少しだけ多く物理メモリーを使用します。
物理メモリーがほとんど全面的に使用されている時や、プロセスがしばらく休止している時は、 Linux はプロセスのメモリーをスワップに移動します。スワップは通常、ハードディスク、又は ソリッドステートドライブ上のパーティションであり、これを Linux が仮想メモリーを拡張する為に 使用します。スワップは RAM よりも確実に遅くなります。
KVM 仮想マシンは Linux プロセスであるため、仮想化ゲストで使用されるメモリーは、 ゲストが遊休時や低負荷の時にはスワップに移動されます。メモリーはスワップと 物理 RAM の合計サイズに対してコミット出来ます。これは、仮想化ゲストがそれらの全ての RAM を使用する時には問題の原因となります。pdflush プロセスに スワップされる仮想マシンのプロセス用に十分なスワップスペースが無いと、クリーンアッププロセスが スタートします。pdflush は、プロセスをキルしてメモリーを開放して、 システムがクラッシュしないようにします。pdflush はファイルシステムエラーの 原因になったり仮想化ゲストを起動不可にする可能性のある、仮想化ゲスト又は他のシステムのプロセスを 破棄します。

警告

十分なスワップが使用できない場合は、ゲストオペレーティングシステムは 強制的にシャットダウンされます。これによりゲストは運用不能になります。 これを回避するには、決して使用可能なスワップ以上のメモリーをオーバーコミット しないことです。
スワップパーティションは、メモリーのパフォーマンスを高速化するために低使用の メモリーをハードドライブにスワップするために使用します。スワップパーティションの デフォルトサイズは RAM のサイズとオーバーコミット率から算出されます。KVM を 使用してメモリーをオーバーコミットする計画があれば、スワップパーティションは 大きめにすることが推奨されます。推薦オーバーコミット率は 50% (0.5) です。 その数式は以下のようになります:
(0.5 * RAM) + (overcommit ratio * RAM) = Recommended swap size
Red Hat Knowledgebase はスワップパーティションのサイズを決定する 安全性と効率についての記事を収納しています。
システム内の物理 RAM サイズに対して仮想化ゲスト数の10倍のオーバーコミット率で 稼働することも可能です。これは特定のアプリケーション負荷状況でのみ機能できます (例えば、100% 以下の使用率のデスクトップ仮想化)。オーバーコミット率をセット することは厳格な数式ではありません。ご使用の環境に応じた率をテストしてカスタマイズ する必要があります。
仮想化 CPU のオーバーコミット

KVM hypervisor は仮想化 CPU のオーバーコミットをサポートします。仮想化 CPU は 仮想化ゲストが許容する負荷限度までオーバーコミットが可能です。但し、100% 近くの負荷は 要求の未処理や、使用に適しない反応時間の原因になるため、VCPU のオーバーコミットには 注意が必要です。

仮想化 CPU は、仮想化ゲストが1つの VCPU のみを持つ時に最善のオーバーコミットと なります。Linux スケジューラはこのタイプの負荷で非常に効率良くなります。KVM は 5 VCPU の率で 100% 以下の負荷を持つゲストを安全にサポートするはずです。
対称型のマルチプロセッシングゲストは物理プロセッシングコアの数以上にオーバーコミット することは出来ません。例えば、4 VCPU を持つゲストは、デュアルコアプロセッサを持つ ホスト上では実行すべきではありません。物理プロセッシングコアの数に対して対称型 マルチプロセッシングゲストをオーバーコミットすると、深刻なパフォーマンス低下の 原因になります。
ゲスト VCPU を物理コアの数まで割り当てることが適切であり、それが期待どおりに 動作します。例えば、4 VCPU を持つ仮想化ゲストを4連コアのホストで実行することです。 100% 以下の負荷を持つゲストはこのセットアップで効率的に機能するはずです。

重要

徹底的なテスト無しでは、実稼働環境でのメモリーと CPU のオーバーコミットはしないで 下さい。100% のメモリーやプロセッシングリソースを使用するアプリケーションは オーバーコミット環境では使用不能になる可能性があります。導入する前にテストを 実行すべきです。