VM の性能は、vCPU を増やす、HugePages を有効にする、SR-IOV や DPDK を導入するといった個別設定だけでは判断できません。ホストの物理資源をどの VM と共有するのか、NUMA をまたぐのか、I/O がどの処理経路を通るのかを確認する必要があります。
このガイドは、VM パフォーマンス関連記事を、測定、CPU、メモリ、ストレージ I/O、ネットワーク I/O、仮想化レイヤの迂回という順序で読むための入口です。症状を測定せずに高度な機能へ進まず、ボトルネックと運用上の制約を確定してから設計を変更します。
書籍
CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能を低レイヤから理解する参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
測定してから変更する
| 領域 | 最初に見る指標 | 判断したいこと |
|---|---|---|
| CPU | 使用率、run queue、steal、vCPU 待ち時間 | CPU が不足しているか、スケジューリング待ちか |
| NUMA / メモリ | NUMA locality、page fault、swap、メモリ帯域 | 遠隔 NUMA アクセスやメモリ不足があるか |
| ストレージ | latency、IOPS、throughput、queue depth | 媒体、キャッシュ、形式、キューのどこが詰まるか |
| ネットワーク | packet rate、drop、再送、queue、CPU 使用率 | 帯域不足か、パケット処理経路の限界か |
| アプリケーション | 処理時間、tail latency、同時実行数 | 基盤変更で改善すべき症状か |
- 変更前後で同じワークロードと測定時間を使う
- 平均値だけでなく p95 / p99、jitter、drop、再送を見る
- ホストとゲストの両方で測定する
- 複数項目を同時に変更せず、差分と効果を対応付ける
- 性能だけでなく、可搬性、冗長化、保守性、障害復旧への影響も記録する
全体像とボトルネックを確認する
- VM の性能ボトルネックを見分ける
CPU、メモリ、ストレージ、ネットワークのどこが詰まるかを確認します。 - VM パフォーマンスを設計全体から見る
NUMA、CPU、I/O、ネットワークを一つの設計として確認する解説記事です。
CPU / vCPU / NUMA
vCPU 数は、VM が使える処理能力だけでなく、ホストスケジューラが同時に実行すべき単位を増やします。物理コア数、SMT、NUMA、オーバーコミット、他 VM との競合を確認してから割り当てます。
- 単一 VM の vCPU はどこまで割り当てるべきか
物理コア、NUMA、SMT、オーバーコミットから vCPU 数を判断します。 - CPU / NUMA / pinning で性能を安定させる
vCPU とホスト CPU の配置、NUMA locality、CPU pinning を扱います。 - CPU ピニングを外すと何が変わるのか
専有実行から共有実行へ戻す時の性能と運用の変化を確認します。
メモリ / HugePages / TLB
HugePages は TLB miss を減らす手段ですが、メモリ不足や不適切な NUMA 配置を解消する機能ではありません。予約量、ゲストメモリ、NUMA node、起動順序、他ワークロードへの影響を合わせて見ます。
- HugePages / TLB / NUMA でメモリ性能を確認する
ページサイズ、TLB、NUMA 配置、予約メモリの関係を扱います。
ストレージ I/O
ストレージ性能は、raw / qcow2 の形式だけでは決まりません。virtio-blk / virtio-scsi、キャッシュ、discard、I/O engine、ホストファイルシステム、バックエンドストレージまで処理経路を確認します。
- VM ストレージ I/O の設計
virtio、raw、qcow2、cache mode、discard、io_uring の判断基準を確認します。
ネットワーク I/O の処理経路
ネットワーク高速化は、virtio-net、vhost-net、vhost-user、SR-IOV、DPDK の順に置き換えればよい話ではありません。処理経路を短くするほど性能を得られる場合がある一方、ライブマイグレーション、可観測性、Firewall、QoS、HA、ハードウェア依存の制約が増えます。
| 方式 | 主な処理場所 | 向いている場面 | 主な制約 |
|---|---|---|---|
| virtio-net | QEMU とホスト kernel | 一般的な VM | 標準経路の CPU 負荷と queue 設計 |
| vhost-net | ホスト kernel | virtio の処理を効率化したい | kernel 内の処理とチューニング |
| vhost-user | userspace dataplane | OVS-DPDK などと連携する | 構成、ソケット、NUMA、運用の複雑化 |
| SR-IOV / Passthrough | 物理 NIC または VF | 低遅延と高 packet rate | 物理 NIC、IOMMU、移行性、可観測性 |
| DPDK | userspace dataplane | NFV や専用パケット処理 | 専有 CPU、HugePages、NUMA、運用設計 |
- VM ネットワーク I/O と virtio-net
標準的な仮想 NIC の処理経路を確認します。 - vhost-net と vhost-user の違い
kernel と userspace dataplane の境界を確認します。 - SR-IOV とは何か
物理 NIC の制約、VF、IOMMU、運用上の境界を確認します。 - SR-IOV / PCI Passthrough の設計
仮想化レイヤを迂回する実装とトレードオフを扱います。 - DPDK とは何か
パケット処理を userspace へ移す意味と必要な資源を確認します。 - DPDK で VM ネットワークはなぜ速くなるのか
kernel bypass、NFV、dataplane の処理経路を詳しく扱います。
Ubuntu / KVM で確認する
このカテゴリは判断基準と処理経路を中心に扱います。Ubuntu 26.04 / KVM で VM を作成し、HugePages、virtio、io_uring などを確認する手順は、次の記事へ接続します。
- Ubuntu 26.04 KVM VM の作成
libvirt / KVM で VM を作成する手順です。 - Ubuntu 26.04 KVM VM パフォーマンス確認
ゲスト定義と実行状態から性能関連の設定を確認します。 - Ubuntu 26.04 KVM HugePages の設定
ホスト側の HugePages と VM への割り当てを確認します。
読む順序
| 段階 | 読むテーマ | 判断すること |
|---|---|---|
| 1 | ボトルネック | 症状と制約を測定できているか |
| 2 | vCPU / NUMA | 実行待ち、配置、共有資源に問題があるか |
| 3 | メモリ / HugePages | TLB と NUMA locality を改善する必要があるか |
| 4 | ストレージ I/O | 形式、キュー、キャッシュ、バックエンドのどこが詰まるか |
| 5 | virtio / vhost | 標準的な仮想 I/O 経路で要件を満たせるか |
| 6 | SR-IOV / DPDK | 可搬性と運用性を手放しても迂回が必要か |
| 7 | 再測定 | 変更による改善と副作用を説明できるか |
設計時に残す記録
- 変更前後のワークロード、測定条件、主要指標
- ホスト CPU topology、NUMA node、メモリ配置、VM の vCPU / memory 定義
- ストレージとネットワークの処理経路
- pinning、HugePages、IOMMU、VF、専有 CPU などの予約資源
- ライブマイグレーション、バックアップ、監視、障害復旧への影響
- 変更を戻す条件と設定バックアップ
まとめ
VM パフォーマンス設計では、最初に症状を測定し、CPU、NUMA、メモリ、ストレージ、ネットワークのどこが制約かを確定します。設定を増やすことではなく、物理資源の共有範囲と I/O の処理経路を説明できることが重要です。
一般的な VM は virtio と共有資源で要件を満たせる場合があります。pinning、HugePages、SR-IOV、DPDK は、測定結果と要件から必要性を説明できる時に導入し、性能と引き換えに増える可搬性・保守性・障害復旧の制約まで確認します。

