手当たり次第に書くんだ

飽きっぽいのは本能

VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークを設計で見る

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 / NUMAvCPU と pCPU、CPU pinning、NUMA node、メモリ配置CPU / NUMA / pinning の基本
virtio / vhostvirtio-net、vhost-net、vhost-user、kernel bypassvhost-net / vhost-user で VM ネットワークを高速化する考え方
デバイス直結SR-IOV、PCI Passthrough、IOMMU、VFIO、移動性とのトレードオフSR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方
userspace dataplaneDPDK、OVS-DPDK、NFV、packet forwardingDPDK で 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-netvirtio 処理を host kernel 側で支援する比較的少ない
vhost-userQEMU と userspace dataplane を接続する専用 dataplane の監視と運用
SR-IOVNIC の VF を VM に直接近い形で渡す仮想スイッチの柔軟性、移動性
PCI Passthrough物理デバイスを VM に専有させる共有性、ライブマイグレーション、ホスト管理性
DPDKuserspace で packet processing を専用化するCPU polling、HugePages、NUMA 設計

高速化の方向は、抽象化を減らす方向でもあります。経路を短くするほど性能は出しやすくなりますが、仮想化基盤としての柔軟性や見通しは下がります。

最適化はサービス定義を変える

CPU pinning、HugePages、SR-IOV、PCI Passthrough、DPDK は、単なるチューニングではなく、サービス特性そのものを変えることがあります。best effort な VM と、低遅延・高 pps・決定性を求める VM では、採用すべき設計が違います。

特に NFV 的なワークロードでは、性能が出るかどうかだけでなく、その性能をどの程度安定して提供できるかが重要です。共有実行でよいのか、専有に近い実行モデルが必要なのかを先に決める必要があります。

VM ネットワーク高速化の記事

関連する設計記事

参考書籍

参考
書籍
参考書籍
作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ

ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

まとめ

VM パフォーマンス最適化は、個別の設定値を増やす作業ではなく、CPU、NUMA、メモリ、I/O、ネットワークの経路を設計として見る作業です。性能が必要なほど、抽象化を減らす選択肢が出てきますが、その分だけ共有性、移動性、運用性を失いやすくなります。

まずは virtio / vhost-net の標準的な構成を理解し、必要に応じて vhost-user、SR-IOV、PCI Passthrough、DPDK へ進む、という順序で見ると、VM ネットワーク高速化の全体像を整理しやすくなります。

VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークを設計で見る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る