手当たり次第に書くんだ

飽きっぽいのは本能

SR-IOV とは何か – 高速化ではなく物理 NIC の制約を設計する技術

SR-IOV は、単に NIC を高速化するための機能ではありません。SR-IOV の本質は、物理 NIC が持つ PCIe デバイスの性質を、Virtual Function として VM や Pod に直接近い形で割り当てることです。

そのため、SR-IOV を使うということは、仮想スイッチや hypervisor の抽象化を一部迂回し、PF / VF、driver、firmware、NUMA、物理ネットワーク側の制約をワークロードへ持ち込むという意味になります。

この記事では、SR-IOV、PF / VF、PCI Passthrough、DPDK、vhost-user、Kubernetes Device Plugin の関係を、VM パフォーマンス設計の入口として確認します。

この記事の結論

  • SR-IOV は 1 つの PCIe デバイスを複数の VF として見せる技術である
  • 高速化の代わりに、物理 NIC、driver、firmware、NUMA、ネットワーク設計の制約が強くなる
  • vhost-user や DPDK は userspace dataplane の話で、SR-IOV は物理デバイスを VM や Pod に近づける話である
  • PCI Passthrough より共有しやすいが、通常の virtio-net より運用の自由度は下がる
  • Kubernetes で使う場合は Device Plugin、CNI、node 配置、物理ネットワークの整合性まで見る必要がある

SR-IOV とは何をする技術か

SR-IOV は Single Root I/O Virtualization の略です。1 つの PCIe デバイスを、複数の仮想的な PCIe 機能として見せる仕組みです。ネットワークカードで使う場合、物理 NIC の機能を複数に分割し、VM や Pod へ割り当てます。

用語意味
PFPhysical Function。物理 NIC 本体に相当する管理側の機能
VFVirtual Function。PF から作成され、VM や Pod に割り当てられる機能
SR-IOV1 つの PCIe デバイスを複数の機能として見せる仕組み
IOMMUdevice access を分離し、VM への安全な割り当てを支える仕組み

高速化技術とだけ呼ぶことの問題

SR-IOV は、software switch や hypervisor の処理を減らしやすいため、低遅延や高 pps を狙いやすくなります。しかし、速くなる部分だけを見ると設計を誤ります。

VF を VM に渡すと、その VM はより物理 NIC に近いデバイスを扱います。これは性能上の利点である一方、物理 NIC の数、VF 数、driver、firmware、switch port、VLAN、bonding、NUMA などの制約が、仮想化基盤の上位レイヤまで上がってくるということでもあります。

SR-IOV で得るものと失うもの

観点得るもの失うもの
性能低遅延、高 pps、software switch 迂回通常の仮想 NIC より構成依存が強くなる
抽象化物理 NIC に近い性能特性仮想スイッチ、overlay、policy の適用が難しくなる場合がある
運用専用 dataplane に近い割り当てライブマイグレーションや柔軟な再配置と相性が悪くなる
障害対応データパスが短くなる物理 NIC、firmware、driver まで切り分け対象になる

VF が見えることと使えることは違う

SR-IOV では、VF が OS から見えるだけでは十分ではありません。VF を作成できること、IOMMU が有効であること、VM や Pod に安全に割り当てられること、物理ネットワーク側で VLAN や routing が成立することを別々に確認します。

lspci | grep -i ethernet
ip link show
find /sys/class/net -name sriov_totalvfs -print
find /sys/class/net -name sriov_numvfs -print
lscpu
numactl --hardware

この確認は、SR-IOV を有効化する手順そのものではありません。どの NIC が SR-IOV に対応し、どの NUMA node に近く、現在いくつの VF を扱えるのかを把握するための入口です。

driver と firmware は設計要素である

SR-IOV では、driver と firmware の組み合わせが性能や安定性に影響します。PF 側 driver、VF 側 driver、guest OS、NIC firmware、host kernel の組み合わせがずれると、VF は見えていても期待した動作にならないことがあります。

通常の virtio-net では隠れていた物理 NIC 依存が表に出てくるため、OS の標準設定だけでなく、NIC vendor の制約、firmware 更新、driver compatibility も運用対象になります。

DPDK / vhost-user / PCI Passthrough との違い

方式主な狙いSR-IOV との違い
virtio-net / vhost-net通常の VM ネットワークを効率化する物理 NIC を VM に直接近づけるわけではない
vhost-userQEMU と userspace dataplane を接続するOVS-DPDK などの dataplane との接続が中心
DPDKuserspace で packet processing を行うSR-IOV と組み合わせることもあるが、役割は別
PCI Passthrough物理デバイスを VM に専有させるSR-IOV より専有度が高く、共有性は低くなる
SR-IOVVF を VM や Pod に割り当てる性能と引き換えに物理 NIC 制約を上位へ持ち込む

Kubernetes で SR-IOV を使う場合

Kubernetes で SR-IOV を使う場合、VM よりさらに抽象化レイヤが増えます。node に存在する VF を Pod へ割り当てるには、Device Plugin、CNI、node selector、resource request、物理ネットワーク側の設計が必要です。

  • SR-IOV 対応 NIC がある node を識別する
  • VF をどの resource name として公開するかを決める
  • Pod が要求する resource と node 配置を合わせる
  • CNI と IPAM の役割を決める
  • 物理 switch、VLAN、routing、MTU を合わせる

Kubernetes の抽象化に SR-IOV を持ち込むと、Pod は移動しやすいという前提が弱くなります。物理 NIC を持つ node、VF 数、NUMA、物理ネットワークの制約を受けるため、通常の Pod と同じ感覚では扱えません。

よくある誤解

  • SR-IOV を有効にすればすべての VM ネットワークが速くなる、というわけではない
  • VF が見えていれば設計が完了している、というわけではない
  • DPDK と SR-IOV は同じ技術ではなく、組み合わせることがある別のレイヤである
  • Kubernetes で使えば物理制約が消える、というわけではない
  • PCI Passthrough より扱いやすい場合はあるが、通常の仮想 NIC と同じ自由度ではない

採用判断の考え方

SR-IOV を採用するかどうかは、平均帯域だけでは判断しません。低遅延、高 pps、CPU overhead の削減が本当に必要か、そして物理 NIC 由来の制約を運用で受け入れられるかを見ます。

判断軸SR-IOV が合いやすい通常の仮想 NIC を優先しやすい
用途仮想ルーター、仮想 FW、NFV、高 pps dataplaneWeb、DB、管理系 VM、一般的な業務 VM
配置特定 node や特定 NIC への固定を許容できる柔軟な VM / Pod 配置を重視する
運用driver、firmware、物理 switch まで含めて管理できる仮想化基盤側の抽象化を活かしたい
移動性ライブマイグレーションや再配置の制約を受け入れられる移動性と回復性を重視する

まとめ

SR-IOV は、NIC を速くするだけの機能ではありません。物理 NIC の機能を VF として VM や Pod に割り当て、仮想化基盤の抽象化を一部迂回する技術です。

その代わり、PF / VF、driver、firmware、NUMA、物理ネットワーク、Kubernetes Device Plugin など、通常の仮想 NIC では隠れていた設計要素が表に出ます。SR-IOV を選ぶときは、性能だけでなく、その物理制約を運用できるかまで含めて判断します。

関連する記事
SR-IOV とは何か – 高速化ではなく物理 NIC の制約を設計する技術

コメントを残す

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

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

トップへ戻る