NTT DATA TECH
💻

VMwareからKVMに移行する人のための機能比較 Vol.2 CPU編

背景と目的

商用サービス向けに VMwareを利用しているユーザーがKVMへの移行を検討する際、特にミッションクリティカルなシステムであればあるほど、「VMwareからKVMに移行する際のリスクは何か?」という点が大きな関心事となります。
 リスクを特定するための方法として、Fit & Gap 分析を行うのが有効です。具体的には、以下の手順を想定します。
 ①自システムが VMware 上で利用している機能を抽出する
 ②KVM側において、上記機能に相当する機能の有無や、機能差(乖離)を特定する
 ③その乖離が商用サービスの提供にどのような影響を及ぼすかを評価する
 この方法であれば、自分たちが“意識的に利用している”機能を基に分析できるため、現場にとって取り組みやすく、また想定外の事象が起きてもあらかじめ認識している分、致命的なトラブルに発展しにくいと考えられます。
 一方で、このアプローチでは見落とされがちなリスクがあります。
 それは、VMwareのユーザーが直接操作するのではなく、「意識せずに恩恵を受けている内部機能」に関するものです。VMwareはエンタープライズ向けに最適化されており、内部的に多数の性能・安定性向上の工夫が組み込まれています。こうした仕組みを把握せずに移行した場合、それがリスクとして顕在化することなく移行計画から漏れてしまい、運用開始後に致命的な性能劣化や障害を引き起こす可能性もあります。
 そこで本記事では、VMware や KVM を利用する際にあまり意識されにくい「仮想化基盤の内部構造」について解説します。今回はその中でも CPU 仮想化の仕組みに焦点をあてて取り上げます。

おさらい

前回の記事「VMwareからKVMに移行する人のための機能比較 Vol.1 アーキテクチャ編」で
 VMwareとKVMの主要なコンポーネントについて解説しました。
 VMware(vSphere)では仮想マシンを動作させる機能がVMKernelに一体的に統合されています。
 一方でKVMでは仮想マシンの実行にあたって、KVMモジュールとQEMUプロセスが連携して処理を行います。これにより、設計上のオーバーヘッドが発生しやすいという特徴があります。その結果、VMwareからKVMへ移行する際には、パフォーマンス面への配慮が求められます。
 こうした違いは、両者のアーキテクチャを比較することで理解できます。

VMwareとKVMのCPU仮想化におけるアーキテクチャの違い

(1)VMware(vSphere)

①カーネル・ハイパーバイザ:VMKernel
 ESXiホストで動作する中核コンポーネントです。
②VMM(Virtual Machine Monitor)
 仮想マシンごとに論理的に1つのVMMが存在しvCPUごとにスレッドが生成されます。VMMのスレッドはVMKernelのカーネル空間上で動作し、仮想マシンの命令を仮想化しながら物理CPU上で実行する役割を担います。
 なお、仮想マシン上のvCPUは、ホスト側ではスレッドとして実装されます。
③CPUスケジューリング
 ・VMMのスレッドは、VMkernelによって物理CPUにスケジューリングされ、タイムスライス方式により順次実行されます。
 ・Relaxed Co-Scheduling
  仮想マシンに複数のvCPUが割り当てられている場合、本来は全てのvCPUを同時にスケジューリングする必要がありますが、Relaxed Co-Schedulingによって一部のvCPUの実行遅延を許容する設計が採用されています。オーバーコミット環境では、物理CPUの数よりも多くのvCPUが存在するため、全てのvCPUに同時に物理CPUを割り当てることができない場合があります。このとき、すべてのvCPUが揃うまで待機するのではなく、先に実行可能なvCPUから順に実行することで、CPUリソースの無駄を防ぎます。
  ただし、処理の進行に差が生じた場合は、進行が早いvCPUを一時停止させ、同期を取る仕組みが組み込まれています。
  これにより、マルチスレッドアプリケーションでも整合性を保ちつつ、効率のよい CPU スケジューリングが可能となります。
④NUMA(Non-Uniform Memory Access)
 ESXiはNUMAアーキテクチャを認識し、仮想マシンのvCPUとメモリの物理ノード間の配置を自動的に最適化します。
 これにより、CPU が「ローカルノードメモリ」へアクセスするようにスケジューリングされ、レイテンシを低減しパフォーマンスを最大化します。
 参考:NUMAとは
    複数のCPUソケットがそれぞれ専用のメモリに接続される構成です。CPUが自ノードのメモリにアクセスする場合は高速ですが、他ノードのメモリにアクセスするとレイテンシが高くなります。

(2)Red Hat KVM

①カーネル:RHEL Kernel
 RHEL ホスト OS 上で動作する中核コンポーネントであり、KVM モジュールを含む Linux カーネルです。
②エミュレータ:QEMU(Quick Emulator)
 仮想マシンごとに 1つのQEMUプロセスが生成され、vCPUごとにスレッドが生成されます。これらのQEMUプロセスとスレッドはOSのユーザー空間で動作し、仮想マシンの命令をKVMに対して実行要求します。
 なお、仮想マシン上のvCPUは、ホストOS側ではQEMUのスレッドとして実装されます。
③ハイパーバイザ:KVM(Kernel-based Virtual Machine)
 QEMUと連携して仮想マシンを動作させるための Linux カーネルモジュールであり、OS のカーネル空間で動作します。KVMは、CPUの仮想化支援機能(Intel VT-x / AMD-V)を利用して、ゲストの命令を物理CPU上で実行し、必要に応じてQEMUに制御を戻します。
④CPUスケジューリング
 QEMUのvCPUスレッドはLinuxのスケジューラによって物理CPUにスケジューリングされ、タイムスライス方式により順次実行されます。
 なお、vSphereにおけるRelaxed Co-SchedulingのようなvCPU同期スケジューリング機構はKVMには備わっていません。
⑤NUMA(Non-Uniform Memory Access)
 NUMAを使用する場合はnumactlをインストールする必要があります。自動方式か手動方式か設定します。

(3)VMwareからKVMに移行する際の主な考慮点

CPU仮想化におけるアーキテクチャを図解すると、VMware(vSphere)とKVMは類似した構造を持っています。しかし、実際の動作面では異なる点も多く、注意が必要です。
 VMware(vSphere)でも、RHELと同様に各VMMスレッドはタイムスライス方式に基づいて物理CPUにスケジューリングされますが、Red Hat KVM のように定周期割り込みによって一律に強制スイッチされるのではなく、VMware(vSphere)では同期条件や実行状態に応じた柔軟な切り替えが行われます。
 この違いにより、CPUが実行中のタスクを中断して別のタスクに切り替える「コンテキストスイッチ」の発生頻度は、KVMの方が多くなりやすく、結果としてオーバーヘッドが大きくなる傾向があります。
 また、VMkernelはカーネル空間のみで動作する一体型のアーキテクチャであるのに対し、KVMではカーネル空間(KVMモジュール)とユーザー空間(QEMUプロセス)が分離して動作するため、カーネルモードとユーザーモード間のモード切替が頻繁に発生し、その分のオーバーヘッドも追加されます。
 以上を踏まえ、性能要件の厳しいシステムを VMwareからKVM に移行する際には、以下の点を考慮することが推奨されます。
①仮想マシンに必要最小限の vCPU を割り当てる
 → コンテキストスイッチの発生を抑制し、CPUリソースの効率的利用を図ります。
②CPU のオーバーコミットを避ける
 → vCPU スレッド間の進行差を最小限に抑え、処理の整合性とパフォーマンスを向上させます。
③I/O専用のIOThreadを導入する
 → vCPU が I/O 待ちでブロックされることを防ぎ、並列性を向上させます。
④ NUMA を考慮した配置設計を行う
 → vCPUとメモリを同一 NUMAノードに配置することで、メモリアクセスのレイテンシを低減します。

まとめ

VMwareからKVMに移行する際のリスクの一つとして、KVM 環境で対象システムの性能要件を確実に満たせるかどうかが不透明である点が挙げられます。
 VMware(vSphere)では、Relaxed Co-Scheduling の仕組みや NUMA設定の自動最適化など、ユーザーが意識しなくても性能が安定する仕組みが組み込まれており、それらの恩恵を無自覚に受けていた可能性もあります。
 そのため、KVM移行後に性能劣化が発生するリスクを排除できない場合は、机上の設計だけで判断せず、事前に技術検証(PoC)を実施することが重要です。

関連記事

VMwareからKVMに移行する人のための機能比較 Vol.1 アーキテクチャ編

参考資料

仮想化の設定および管理 | Red Hat Enterprise Linux | 9 | Red Hat Documentation
 18.7.1. vCPU のオーバーコミットメント
 18.6.4. 専用の IO スレッドの設定
 18.7.4. 仮想マシンでの NUMA の設定
②書籍:平初・森若和雄・鶴野隆一郎・まえだこうへい『KVM徹底入門 Linuxカーネル仮想化基盤 構築ガイド』翔泳社、2013年出版
③書籍:今井悟志『VMware vSphere7 インテグレーションガイド』インプレス、2021年出版
④書籍:ヴイエムウェア株式会社『VMware徹底入門』翔泳社、2016年出版
VMware vSphere 8.0

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています