VM の性能は、CPU を増やす、メモリを増やす、NIC を速くする、といった単純な足し算だけでは決まりません。仮想化では、CPU scheduling、NUMA、HugePages、virtio、vhost、SR-IOV、DPDK などが重なり、どの層が律速しているかを見誤ると、対策の方向もずれます。
このページでは、VM パフォーマンス最適化を設計テーマごとに整理します。個別のチューニング手順というより、どの記事から読めばよいか、どの技術がどの層を扱っているかを見通すためのハブです。
VM パフォーマンスを見る前提
VM の性能問題は、単一の設定値だけで解決するとは限りません。CPU、メモリ、I/O、ネットワークは互いに影響し、特に NUMA と PCIe 配置が絡むと、見た目のリソース量と実際の性能が一致しないことがあります。
- vCPU がどの pCPU で動くのか
- VM のメモリがどの NUMA node に確保されるのか
- NIC / NVMe / HBA がどの PCIe / NUMA node に接続されているのか
- virtio、vhost、SR-IOV、DPDK のどの I/O パスを通っているのか
- 性能要件が best effort なのか、低遅延・高 pps・決定性を求めるものなのか
設計テーマ別の読み方
| テーマ | 主な論点 | 読む記事 |
|---|---|---|
| CPU / NUMA | vCPU と pCPU、CPU pinning、NUMA node、メモリ配置 | CPU / NUMA / pinning の基本 |
| virtio / vhost | virtio-net、vhost-net、vhost-user、kernel bypass | vhost-net / vhost-user で VM ネットワークを高速化する考え方 |
| デバイス直結 | SR-IOV、PCI Passthrough、IOMMU、VFIO、移動性とのトレードオフ | SR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方 |
| userspace dataplane | DPDK、OVS-DPDK、NFV、packet forwarding | DPDK で VM ネットワークを高速化する考え方 |
CPU / NUMA / メモリはセットで見る
VM に割り当てる vCPU 数だけを見ても、性能は判断できません。vCPU がどの物理 CPU で動き、メモリがどの NUMA node に確保され、NIC や NVMe がどの PCIe root complex にぶら下がっているかを見る必要があります。
CPU pinning や HugePages は、単なる高速化設定というより、VM の実行場所とメモリ配置を安定させるための設計要素です。NFV や高 pps dataplane のように決定性が必要な場合、CPU / NUMA / HugePages はまとめて考えます。
ネットワーク I/O は経路を短くするほど制約も増える
VM ネットワークの高速化には複数の方向があります。vhost-net は通常の virtio-net を kernel 側で効率化し、vhost-user は userspace dataplane へ接続し、SR-IOV / PCI Passthrough は仮想化レイヤを迂回して物理デバイスへ近づけます。
| 方式 | 何をするか | 増えやすい制約 |
|---|---|---|
| vhost-net | virtio 処理を host kernel 側で支援する | 比較的少ない |
| vhost-user | QEMU と userspace dataplane を接続する | 専用 dataplane の監視と運用 |
| SR-IOV | NIC の VF を VM に直接近い形で渡す | 仮想スイッチの柔軟性、移動性 |
| PCI Passthrough | 物理デバイスを VM に専有させる | 共有性、ライブマイグレーション、ホスト管理性 |
| DPDK | userspace で packet processing を専用化する | CPU polling、HugePages、NUMA 設計 |
高速化の方向は、抽象化を減らす方向でもあります。経路を短くするほど性能は出しやすくなりますが、仮想化基盤としての柔軟性や見通しは下がります。
最適化はサービス定義を変える
CPU pinning、HugePages、SR-IOV、PCI Passthrough、DPDK は、単なるチューニングではなく、サービス特性そのものを変えることがあります。best effort な VM と、低遅延・高 pps・決定性を求める VM では、採用すべき設計が違います。
特に NFV 的なワークロードでは、性能が出るかどうかだけでなく、その性能をどの程度安定して提供できるかが重要です。共有実行でよいのか、専有に近い実行モデルが必要なのかを先に決める必要があります。
VM ネットワーク高速化の記事
- vhost-net / vhost-user で VM ネットワークを高速化する考え方
virtio-net、vhost-net、vhost-user の違いを、kernel bypass と userspace dataplane の観点で整理します。 - SR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方
NIC の VF や PCI デバイスを VM に渡すことで、仮想化レイヤを迂回する設計を整理します。 - DPDK で VM ネットワークを高速化する考え方
userspace dataplane、NFV、高 pps packet forwarding の観点から DPDK を整理します。
関連する設計記事
- EC2 は帯域確保サービスの基盤として使えるのか
baseline / burst / flow 制約を、NFV や閉域接続の観点で整理します。 - Ubuntu 22.04 OVS-DPDK 構築失敗
OVS-DPDK が単純な高速化機能ではなく、dataplane 設計そのものだと分かる実験記事です。
参考書籍
書籍
ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
まとめ
VM パフォーマンス最適化は、個別の設定値を増やす作業ではなく、CPU、NUMA、メモリ、I/O、ネットワークの経路を設計として見る作業です。性能が必要なほど、抽象化を減らす選択肢が出てきますが、その分だけ共有性、移動性、運用性を失いやすくなります。
まずは virtio / vhost-net の標準的な構成を理解し、必要に応じて vhost-user、SR-IOV、PCI Passthrough、DPDK へ進む、という順序で見ると、VM ネットワーク高速化の全体像を整理しやすくなります。


