VM の性能は、個別の設定を足し算するだけでは安定しません。vCPU、NUMA、メモリ、ストレージ I/O、仮想 NIC、vhost、SR-IOV、DPDK はそれぞれ独立した話に見えますが、実際には host の物理資源を VM にどう見せ、どこまで仮想化レイヤを通すかという一つの設計問題です。
このページでは、VM パフォーマンス関連記事を読む順序とテーマ別の入口として整理します。まず全体像を見てから、CPU / メモリ / I/O / ネットワークの各論へ進む構成にしています。
まず読む記事
- VM の性能ボトルネックを見分ける考え方
CPU、メモリ、ストレージ I/O、ネットワークのどこが詰まるかを見る入口です。 - VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークを設計で見る
VM パフォーマンスを個別設定ではなく、設計全体として見るための整理記事です。
CPU / vCPU / NUMA
- 単一 VM の vCPU はどこまで割り当てるべきか
単一 VM に vCPU をどこまで割り当てるかを、物理コア、SMT、NUMA、overcommit から整理します。 - CPU / NUMA / pinning で VM パフォーマンスを安定させる考え方
CPU pinning、NUMA 配置、vCPU と host CPU の対応を扱います。 - CPU ピニングを外すと何が変わるのか
CPU pinning を外すことを、専有実行から共有実行へ戻す設計変更として整理します。
メモリ / HugePages
- HugePages / TLB / NUMA で VM メモリ性能を安定させる考え方
HugePages、TLB、NUMA を、VM メモリ性能の安定化という観点で整理します。
ストレージ I/O
- VM ストレージ I/O を最適化する考え方
virtio-blk / virtio-scsi、raw / qcow2、cache mode、discard、io_uring を整理します。
ネットワーク I/O
- VM ネットワーク I/O を理解する考え方
virtio-net、virtqueue、QEMU、tap、bridge / OVS を、標準的な仮想 NIC の入口として整理します。 - vhost-net / vhost-user で VM ネットワークを高速化する考え方
virtio-net の次に見る vhost-net / vhost-user を、kernel bypass と dataplane の入口として整理します。 - SR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方
SR-IOV / PCI Passthrough によって仮想化レイヤを迂回する設計を扱います。 - DPDK で VM ネットワークを高速化する考え方
DPDK、NFV、user space dataplane を、VM ネットワーク高速化の発展形として整理します。
Ubuntu / KVM 実装側の記事
この VM パフォーマンスカテゴリは設計・考え方を中心にしています。実際の Ubuntu 26.04 / KVM 環境で確認する手順は、次の記事に接続します。
- Ubuntu 26.04 KVM VM の作成
libvirt / KVM で VM を作成する実装側の記事です。 - Ubuntu 26.04 KVM VM パフォーマンス確認
virtio、HugePages、io_uring などを実環境で確認する記事です。 - Ubuntu 26.04 KVM HugePages の設定
Ubuntu 26.04 で HugePages を設定する手順です。
読み進める順序
| 順序 | 読む記事 | 目的 |
|---|---|---|
| 1 | VM の性能ボトルネックを見分ける考え方 | まず VM のどこが詰まるのかを分けて見る |
| 2 | 単一 VM の vCPU はどこまで割り当てるべきか | vCPU 数、物理コア、SMT、overcommit を整理する |
| 3 | CPU / NUMA / pinning で VM パフォーマンスを安定させる考え方 | CPU / NUMA / pinning の配置を見る |
| 4 | HugePages / TLB / NUMA で VM メモリ性能を安定させる考え方 | HugePages / TLB / NUMA でメモリ側を確認する |
| 5 | VM ストレージ I/O を最適化する考え方 | ストレージ I/O のレイヤと形式を整理する |
| 6 | VM ネットワーク I/O を理解する考え方 | 仮想 NIC と virtio-net の標準経路を見る |
| 7 | vhost-net / vhost-user で VM ネットワークを高速化する考え方 | vhost-net / vhost-user で仮想 NIC の処理経路を短くする |
| 8 | SR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方 | SR-IOV / PCI Passthrough で仮想化レイヤを迂回する |
| 9 | DPDK で VM ネットワークを高速化する考え方 | DPDK / NFV / dataplane 設計へ進む |
設計上の見方
- 平均性能だけでなく、latency、jitter、tail latency、packet loss を見る
- vCPU 数を増やす前に、物理コア、SMT、NUMA、他 VM との競合を確認する
- CPU pinning は高速化設定ではなく、実行資源の扱いを変える設計として見る
- HugePages はメモリ性能だけでなく、NUMA 配置と合わせて考える
- raw / qcow2、virtio-blk / virtio-scsi、cache mode は運用要件と一緒に決める
- virtio-net で足りない場合に、vhost、SR-IOV、DPDK の順に仮想化レイヤをどこまで迂回するかを考える
参考書籍
書籍
ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
まとめ
VM パフォーマンスは、CPU、メモリ、ストレージ、ネットワークを別々に調整するだけでは安定しません。どの物理資源を、どの VM に、どの程度専有させるのか。どこまで仮想化レイヤを通し、どこから迂回するのか。この設計を明確にすることが重要です。
一般的な VM では virtio、共有 CPU、qcow2 でも十分な場合があります。一方で、NFV、低遅延処理、高 packet rate、I/O intensive な VM では、NUMA、pinning、HugePages、vhost、SR-IOV、DPDK まで踏み込む必要があります。まずは全体像を押さえ、必要な箇所だけ深く見るのが現実的です。


