VMwareからKVMに移行する人のための機能比較 Vol.3 メモリ編
背景と目的
商用サービス向けに VMwareを利用しているユーザーがKVMへの移行を検討する際、特にミッションクリティカルなシステムであればあるほど、「VMwareからKVMに移行する際のリスクは何か?」という点が大きな関心事となります。
VMwareはエンタープライズ向けに最適化されており、内部的に多数の性能・安定性向上の工夫が組み込まれています。こうした仕組みを把握せずに移行した場合、それがリスクとして顕在化することなく移行計画から漏れてしまい、運用開始後に致命的な性能劣化や障害を引き起こす可能性もあります。
今回はメモリ仮想化の仕組みに焦点をあてて取り上げます。
おさらい
前回の記事「VMwareからKVMに移行する人のための機能比較 Vol.2 CPU編」で
「仮想化基盤の内部構造」についてCPU 仮想化の仕組みに焦点をあてて解説しました。
CPU仮想化におけるアーキテクチャを図解すると、VMware(vSphere)とKVMは類似した構造を持っていますが実際の動作面では異なる点も多く注意が必要と解説しました。
VMwareとKVMにおけるメモリの仮想化
(1)メモリ割り当ての基本動作
・仮想マシンを作成する際に「メモリサイズ(例:4GB)」を指定します。
・この時点で 仮想マシンに割り当てられる論理的なメモリサイズが決まります。
・ただし、仮想マシンの起動時に必ずしも指定した分の物理メモリが即時に確保されるわけではありません。仮想マシンが実際にそのメモリ領域にアクセスしたときに初めて物理メモリを割り当てます。
この挙動はVMware、KVMともに同様であり、これによりメモリのオーバーコミットが可能になります。
VMwareとKVMでは、メモリアドレス変換の実装方式や、KVM におけるカーネルモードとユーザーモード間のモード切替の有無により、KVM の方が相対的にオーバーヘッドが発生しやすい特徴がありますが、オーバーコミットを行わない通常利用における性能差は小さいと考えられます。
一方で、オーバーコミット環境下では VMware と KVM の実装や機能差により、性能差が顕著になる可能性があります。
(2)メモリのオーバーコミットを可能にするメモリの回収プロセス
VMware、KVM ともに、仮想マシンのメモリサイズ合計をホスト物理メモリ容量以上に設定することが可能です。これをメモリのオーバーコミットと呼びます。
この仕組みを成立させるために、ホストはアイドル状態の仮想マシンからメモリを回収し、より多くのメモリを必要とする仮想マシンへ割り当てる制御を行います。
・VMware の場合
メモリ回収手段として「Transparent Page Sharing(TPS)」「バルーニング」「メモリ圧縮」「ホストスワップ」があり、性能への影響が小さい順に自動的に発動します。
・KVM の場合
同様の機能(Kernel Samepage Merging(KSM), virtio-balloon, zswap, ホストスワップ)が Linux カーネル機能や QEMU を組み合わせる形で提供されます。ただし VMware のように一体化/最適化されているわけではなく、個別に設定・チューニングが必要です。
結果として、VMware は製品として高度に最適化されているため管理負担が小さく、KVM は柔軟性がある一方でチューニング不足では高負荷や性能劣化の可能性があります。
VMwareとKVMのメモリ仮想化におけるアーキテクチャの違い
(1)VMware(vSphere)
①カーネル・ハイパーバイザ:VMKernel
ESXiホストで動作する中核コンポーネントです。
②VMM(Virtual Machine Monitor)
仮想マシンごとに論理的に1つのVMMが存在しゲスト物理メモリとホスト物理メモリのマッピングを行います。
③Transparent Page Sharing(TPS)
同一仮想マシン内で内容が同じメモリページを1つにまとめて共有する仕組みです。これにより、重複ページ分の物理メモリ消費を削減できます。
④バルーンメモリ/バルーンドライバ
仮想マシン内のバルーンドライバが未使用メモリを確保してVMkernelに返却し、他の仮想マシンに再利用させる仕組みです。これにより、ホストのメモリ不足時に効率的なメモリ再配分が可能になります。
⑤メモリ圧縮
④のバルーンメモリの処理でもメモリ不足が解消しない場合、メモリページを圧縮しスワップ発動を遅らせる機能です。これにより、スワップI/Oによる性能劣化を軽減できます。
⑥ホストスワップ
⑤のメモリ圧縮でもメモリ不足が解消しない場合、仮想マシンに割当済みのメモリページをディスク上にスワップアウトし空きメモリを確保する機能です。
これにより、メモリ不足を回避する最終手段として動作しますが、性能劣化が大きいのが特徴です。なぜならば、このスワップ処理は仮想マシンが関係しないレイヤーで実行されるため、アクティブなメモリがスワップアウトされる可能性があるからです。
(2)Red Hat KVM
①カーネル:RHEL Kernel
RHEL ホスト OS 上で動作する中核コンポーネントであり、KVM モジュールを含む Linux カーネルです。
②エミュレータ:QEMU(Quick Emulator)
仮想マシンごとに 1つのQEMUプロセスが生成され、仮想マシンに割り当てるメモリ領域を確保します。これらのQEMUプロセスはOSのユーザー空間で動作し、仮想マシンの命令をKVMに対して実行要求します。
③ハイパーバイザ:KVM(Kernel-based Virtual Machine)
QEMUと連携して仮想マシンを動作させるための Linux カーネルモジュールであり、OS のカーネル空間で動作します。仮想マシンから見える「ゲスト物理メモリ」をホストの物理メモリへとマッピングします。
④Kernel Samepage Merging(KSM)
複数の仮想マシンやプロセスが保持している内容が同一のメモリページを検出し、1つの物理ページとしてまとめる仕組みです。これにより、重複ページ分のメモリ消費を削減し、オーバーコミット環境での効率的なメモリ利用が可能になります。
VMwareのTPSは同一仮想マシンに閉じて動作するのに対し、KSMは全ての仮想マシンをまたいで動作するためセキュリティ上の懸念がある可能性に注意が必要です。
⑤バルーンメモリ/バルーンドライバ
仮想マシン内のバルーンドライバが未使用メモリを確保しQEMUを介してホストに返却する仕組みです。これにより、ホストのメモリ不足時に効率的なメモリ再配分が可能になります。
⑥メモリ圧縮(zswap)
スワップアウトされるページをディスクに書き出す前に物理メモリ上で圧縮してキャッシュする仕組みです。これにより、スワップI/Oを削減し、仮想マシンを含むホスト全体の性能を改善できます。
VMwareのメモリ圧縮は仮想マシン毎に圧縮が可能なのに対し、zswapは全ての仮想マシンをまたいで動作するため仮想マシン毎の細かな制御はできません。
⑦ホストスワップ
ホストKernelが物理メモリ不足時にQEMUプロセスのメモリページをスワップデバイスへ退避する仕組みです。これにより、全仮想マシンをまたいでメモリを解放し、システムの動作を維持します。
VMware は仮想化専用に最適化されており、仮想マシン単位でのスワップ管理・制御が可能なのに対し、KVM はLinux OSの通常のスワップを利用するため、全仮想マシンをまたがってプロセス単位で動作するため重要な仮想マシンが予期せずスワップアウトされる可能性があります。
(3)VMwareからKVMに移行する際の主な考慮点
VMwareとKVMはメモリの仮想化の基本アーキテクチャは類似しており、メモリのオーバーコミットを可能にするための機能も両者に実装されています。
ただし、発動の制御方式(自動/個別チューニング)や制御単位(仮想マシン単位/ホスト全体)といった点に違いがあります。
VMwareは仮想化専用に最適化されており基本的に自動制御の恩恵を受けられますが、KVMでは利用者が仕組みを理解したうえで適切にチューニングを行うことが求められます。
まとめ
性能要件が厳しいシステムでは、メモリのオーバーコミット(物理リソース以上の割当)を避け、必要な物理メモリを事前に確保することが望ましいです。
関連記事
VMwareからKVMに移行する人のための機能比較 Vol.1 アーキテクチャ編
VMwareからKVMに移行する人のための機能比較 Vol.2 CPU編
参考資料
①仮想化の設定および管理 | Red Hat Enterprise Linux | 9 | Red Hat Documentation
18.7.8. Kernel Same-Page Merging の有効化と無効化
②書籍:平初・森若和雄・鶴野隆一郎・まえだこうへい『KVM徹底入門 Linuxカーネル仮想化基盤 構築ガイド』翔泳社、2013年出版
③書籍:今井悟志『VMware vSphere7 インテグレーションガイド』インプレス、2021年出版
④書籍:ヴイエムウェア株式会社 Broadcom『VMware vSphere徹底入門』翔泳社、2025年出版
⑤VMware vSphere 8.0

NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。