VM の CPU 最適化は、vCPU 数を増やすことではありません。重要なのは、vCPU がどの物理 CPU で実行され、どの NUMA ノードのメモリを使い、QEMU の emulator thread や IRQ がどこで処理されるかです。
CPU 性能が不安定な VM では、CPU が不足しているのではなく、スケジューリング待ち、NUMA 越え、キャッシュミス、割り込み処理の分散、CPU オーバーコミットが原因になっていることがあります。
Day2 では、CPU ピニング、NUMA、emulatorpin、IRQ、CPU オーバーコミットを、単なるチューニングではなく VM の配置設計として整理します。
CPU 最適化で見るべきもの
VM の CPU は、ゲスト OS から見ると自分専用の CPU に見えます。しかし実際には、vCPU はハイパーバイザーによって物理 CPU 上にスケジュールされます。この対応関係が安定しないと、レイテンシやスループットが揺れます。
| 観点 | 見る内容 | 問題が出る例 |
|---|---|---|
| vCPU と pCPU | vCPU がどの物理 CPU で実行されるか | 高負荷時に vCPU が実行待ちになる |
| CPU ピニング | vCPU を特定 CPU に固定するか | キャッシュが毎回捨てられ性能が揺れる |
| NUMA | CPU とメモリが同じ NUMA ノードにあるか | CPU は速いがメモリアクセスが遅い |
| emulatorpin | QEMU の補助スレッドをどこで動かすか | I/O 処理だけ別 NUMA へ飛ぶ |
| IRQ | 割り込み処理がどの CPU で処理されるか | vCPU と IRQ が離れてレイテンシが増える |
CPU ピニングは専用化の設計である
CPU ピニングは、vCPU を特定の物理 CPU に固定する設定です。これにより、ハイパーバイザーのスケジューラが vCPU をあちこちの CPU に移動させることを抑え、実行場所を安定させます。
CPU ピニングの主な効果は、CPU 使用率を下げることではありません。実行待ち、キャッシュ再構築、NUMA 越え、レイテンシの揺れを減らすことです。
- vCPU の実行場所を固定する
- CPU キャッシュの再利用性を高める
- スケジューリングによる揺れを減らす
- 高負荷時のレイテンシを安定させる
- 性能測定時の再現性を高める
ただし、CPU ピニングは万能ではありません。ピニングした CPU を他の VM やホスト処理と取り合っていれば効果は落ちます。また、CPU だけ固定してもメモリ、IRQ、emulator thread が別 NUMA に散っていれば、期待した性能にはなりません。
CPU オーバーコミットをどう扱うか
CPU オーバーコミットは、物理 CPU 数より多くの vCPU を VM に割り当てる設計です。一般的なサーバー統合では有効ですが、性能を安定させたい VM では慎重に扱う必要があります。
オーバーコミットが問題になるのは、平均使用率が高いときではなく、複数 VM が同時に CPU を必要としたときです。このとき vCPU は物理 CPU に乗るまで待たされ、レイテンシが増えます。
- 低負荷 VM が多い環境ではオーバーコミットは有効
- 高性能 VM や低遅延 VM では専有に近い設計が必要
- 性能保証したい VM と一般 VM を同じ CPU プールに混ぜない
- 平均 CPU 使用率だけでなく、実行待ちやレイテンシを見る
NUMA を跨ぐと CPU が速くても遅くなる
NUMA は、CPU ソケットとメモリが近い組み合わせを持つ構造です。CPU が同じ NUMA ノード上のメモリへアクセスする場合は速く、別 NUMA ノードのメモリへアクセスする場合は遅くなります。
VM では、vCPU をある NUMA ノードに固定しても、メモリが別 NUMA ノードに確保されると性能が崩れます。特に高性能 VM では、CPU とメモリの配置をセットで考える必要があります。
- vCPU を同じ NUMA ノード内の CPU に配置する
- VM メモリも同じ NUMA ノードへ寄せる
- HugePages の予約も NUMA ノード単位で考える
- SR-IOV や NVMe passthrough は PCIe デバイスの NUMA も確認する
- NUMA を跨ぐ VM は、CPU 数が多くても性能が安定しにくい
emulatorpin と IRQ を無視しない
KVM / QEMU の VM では、vCPU 以外にも処理を担うスレッドがあります。代表的なのが emulator thread です。I/O やデバイスエミュレーションに関わる処理が、vCPU と離れた CPU や NUMA ノードで動くと、I/O レイテンシが悪化することがあります。
また、NIC やストレージの割り込み処理がどの CPU で処理されるかも重要です。vCPU、emulator thread、IRQ、メモリ、PCIe デバイスの NUMA をそろえることで、処理経路が短くなります。
| 対象 | 配置の考え方 |
|---|---|
| vCPU | VM が実行する CPU に固定する |
| emulatorpin | 対象 VM の vCPU と近い CPU に寄せる |
| IRQ | I/O を処理する CPU と VM の配置を合わせる |
| メモリ | vCPU と同じ NUMA ノードに寄せる |
| PCIe デバイス | SR-IOV / NVMe の接続 NUMA を確認する |
CPU 最適化は運用制約を生む
CPU ピニングや NUMA 固定は、性能を安定させる一方で、VM の配置自由度を下げます。これは単なるチューニングではなく、VM の運用条件を変える設定です。
- VM を別ホストへ移すと同じ CPU 配置を再現できない場合がある
- ホスト上の CPU を専有するため集約率が下がる
- HugePages や SR-IOV と組み合わせると移動性がさらに下がる
- メンテナンス時に配置計画を考える必要がある
- 性能保証 VM と一般 VM を分けた運用設計が必要になる
CPU 最適化を入れるなら、その VM は通常の汎用 VM とは別のサービスとして扱うべきです。性能を保証する代わりに、配置、移動、復旧、監視の前提が変わります。
設計時の確認ポイント
CPU 最適化を行う前に、次の観点を確認すると整理しやすくなります。
- その VM は本当に低遅延や高性能が必要か
- vCPU 数は物理 CPU と NUMA ノードに収まっているか
- CPU ピニング対象の CPU は他用途と競合していないか
- メモリと HugePages は同じ NUMA ノードに確保されているか
- emulatorpin と IRQ の配置を確認しているか
- 性能改善と引き換えに失う移動性を許容できるか
まとめ
VM の CPU 最適化は、vCPU 数を増やすことではなく、vCPU、pCPU、NUMA、メモリ、emulator thread、IRQ を一貫した配置にすることです。
CPU ピニングは強力ですが、単体で完結する技術ではありません。NUMA 配置、HugePages、I/O デバイス、割り込み処理と合わせて考えなければ、期待した性能は出ません。
また、CPU 最適化は運用制約を生みます。性能を安定させる VM は、通常の汎用 VM とは違うサービス定義になると考えるべきです。Day3 では、この CPU 配置と密接に関係するメモリ最適化と HugePages を整理します。
書籍
作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ
ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
VM パフォーマンスシリーズ
- VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークの設計ハブ
- VM パフォーマンス Day1 – VM の性能ボトルネックとは何か
- VM パフォーマンス Day3 – メモリ最適化と HugePages / TLB の考え方
- VM パフォーマンス Day4 – ストレージ I/O 最適化と virtio / raw / qcow2 の考え方
- VM パフォーマンス Day5 – virtio-net の構造と仮想 NIC の性能特性
- VM パフォーマンス Day6 – vhost-net / vhost-user と kernel bypass の考え方
- VM パフォーマンス Day7 – SR-IOV / PCI Passthrough による仮想化の迂回
- VM パフォーマンス Day8 – DPDK による高速 dataplane と NFV の基本
関連記事
- CPU ピニングを外した瞬間、それはもう別のサービスである
- VyOS VPP 導入検討 – 実運用ルーターに VPP をそのまま適用する難しさ
- パブリッククラウド上で NFV 型 NF は成立するのか – アンダーレイ / オーバーレイ / 帯域制約で考える



