手当たり次第に書くんだ

飽きっぽいのは本能

SR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方 – 仮想化レイヤを迂回する設計

SR-IOV と PCI Passthrough は、VM のネットワーク I/O から仮想化レイヤの処理をできるだけ外し、物理デバイスに近い形で処理させるための方式です。低遅延や高 pps を狙いやすい一方で、共有性、移動性、運用性を失いやすい方式でもあります。

違いを先に言うと、SR-IOV は物理 NIC から作成した Virtual Function を VM に割り当てる方式で、PCI Passthrough は物理デバイスを丸ごと VM に専有させる方式です。どちらも速さだけで選ぶものではなく、どこまで仮想化基盤の抽象化を迂回するかで判断します。

この記事では、SR-IOV、PCI Passthrough、IOMMU、VFIO、NUMA、DPDK、vhost-user の関係を、VM ネットワーク設計の観点で確認します。

この記事の結論

  • SR-IOV は NIC の VF を VM に割り当て、物理 NIC に近い I/O を使わせる方式である
  • PCI Passthrough は物理デバイスを VM に丸ごと渡すため、専有度と制約がさらに強くなる
  • どちらも software switch や hypervisor の処理を減らしやすいが、移動性と柔軟性は下がる
  • DPDK / vhost-user は userspace dataplane の話で、SR-IOV / PCI Passthrough は物理デバイスを VM に近づける話である
  • 採用判断では性能だけでなく、IOMMU、NUMA、driver、firmware、物理ネットワーク制約を見る

SR-IOV は NIC を仮想的に分割して VM に渡す

SR-IOV は Single Root I/O Virtualization の略で、1 つの物理 NIC が複数の Virtual Function を生成し、それを VM に割り当てる仕組みです。VM から見ると、より物理 NIC に近いデバイスとして扱えるため、software switch を経由する通常の仮想 NIC よりも低遅延、高 pps を狙いやすくなります。

SR-IOV では、Physical Function が物理デバイス全体を管理し、Virtual Function が VM に割り当てられます。VM は VF を直接に近い形で使うため、hypervisor や仮想スイッチの処理を減らせます。

PCI Passthrough はデバイスを丸ごと VM に渡す

PCI Passthrough は、物理 PCIe デバイスを VM に専有させる方式です。NIC を渡す場合、その VM は物理 NIC をほぼ専用デバイスとして扱います。性能や制御の面では強力ですが、共有性は大きく下がります。

SR-IOV は 1 つの NIC から複数の VF を作れるため、複数 VM で分けやすい方式です。一方、PCI Passthrough はデバイス単位で専有するため、構成は単純でもリソース利用の柔軟性は低くなります。

観点SR-IOVPCI Passthrough
割り当て単位VF 単位物理デバイス単位
共有性複数 VM で VF を分けやすい基本的に 1 VM が専有する
性能低遅延、高 pps を狙いやすい物理デバイスに最も近い形で使いやすい
移動性通常の仮想 NIC より制約が強いライブマイグレーションと相性が悪い
運用PF / VF / driver / firmware を管理するデバイス専有と障害影響を管理する

仮想スイッチを迂回する意味

通常の VM ネットワークでは、guest の virtio-net、QEMU、host kernel、bridge、Open vSwitch、物理 NIC など複数の層を通ります。この経路は柔軟ですが、高 pps や低遅延を狙う場合には overhead が問題になることがあります。

SR-IOV や PCI Passthrough は、この software path を短くします。その代わり、仮想スイッチで実現していた policy、overlay、monitoring、migration、traffic steering の一部を別の方法で扱う必要があります。

vhost-user / DPDK との違い

方式主な狙い違い
vhost-netvirtio-net の処理を host kernel 側で支援する通常の仮想 NIC 経路を効率化する
vhost-userQEMU と userspace dataplane を接続するOVS-DPDK などの dataplane との接続が中心
DPDKuserspace で packet processing を行うhost 側や VM 側の dataplane 技術として使う
SR-IOVVF を VM に割り当てる物理 NIC の機能を VM に近づける
PCI Passthrough物理デバイスを VM に専有させる仮想化基盤の抽象化を最も強く迂回する

DPDK と SR-IOV は競合する技術ではありません。VM に SR-IOV の VF を割り当て、その VM の中で DPDK を使う構成もあります。ただし、その場合は性能を狙える一方で、CPU、NUMA、NIC、driver、firmware の制約も強くなります。

IOMMU と VFIO は必須の前提

SR-IOV や PCI Passthrough では、VM がデバイスへ直接近い形でアクセスします。そのため、device access を分離する IOMMU と、device を VM に安全に渡す VFIO の理解が重要です。

IOMMU が無効なままでは、デバイス割り当ての安全性や分離が成立しません。SR-IOV の VF が見えることと、VM に安全に割り当てられることは別の確認です。

NUMA と PCIe 配置を合わせる

SR-IOV や PCI Passthrough では、NIC が接続されている PCIe root complex、NUMA node、VM の vCPU、メモリ配置が性能に強く影響します。NIC と VM の CPU / memory が遠い NUMA node にあると、せっかく仮想化レイヤを迂回しても latency が増えます。

lspci | grep -i ethernet
find /sys/class/net -name sriov_totalvfs -print
find /sys/class/net -name sriov_numvfs -print
lscpu
numactl --hardware
virsh nodedev-list --tree

採用判断の軸

判断軸SR-IOV / PCI Passthrough が合いやすい通常の仮想 NIC が合いやすい
用途仮想ルーター、仮想 FW、NFV、高 pps dataplaneWeb、DB、管理系 VM、一般的な業務 VM
性能要件低遅延、低 jitter、高 pps を重視する平均帯域や扱いやすさを重視する
配置特定 host / NIC への固定を許容できる柔軟な VM 配置を重視する
運用driver、firmware、物理 switch まで含めて管理できる仮想化基盤の標準運用を優先する
移動性ライブマイグレーション制約を受け入れられる移動性、HA、再配置を重視する

向いている用途

  • 仮想ルーター
  • 仮想ファイアウォール
  • NFV / VNF
  • 高 pps の packet forwarding
  • 低遅延が必要な network appliance
  • 物理 NIC の機能を明示的に使いたい VM

向いていない用途

  • 柔軟なライブマイグレーションを重視する VM
  • 仮想スイッチや overlay network の機能を強く使う VM
  • host をまたいで自由に再配置したい VM
  • driver や firmware 依存を運用に持ち込みたくない環境
  • 通常の virtio-net / vhost-net で性能が足りている VM

まとめ

SR-IOV と PCI Passthrough は、VM ネットワークの仮想化レイヤを迂回し、物理デバイスに近い形で I/O を処理するための方式です。性能面では強力ですが、同時に物理 NIC、driver、firmware、NUMA、IOMMU、物理ネットワークの制約を VM 運用へ持ち込みます。

速さだけを見て採用するのではなく、どの抽象化を手放すのか、どの運用制約を受け入れるのかを先に決めることが重要です。一般的な VM では virtio-net / vhost-net を優先し、NFV や高 pps dataplane で必要な場合に SR-IOV / PCI Passthrough を検討します。

関連する記事
SR-IOV / PCI Passthrough で VM ネットワークを高速化する考え方 – 仮想化レイヤを迂回する設計

コメントを残す

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

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

トップへ戻る