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 へ割り当てます。
| 用語 | 意味 |
|---|---|
| PF | Physical Function。物理 NIC 本体に相当する管理側の機能 |
| VF | Virtual Function。PF から作成され、VM や Pod に割り当てられる機能 |
| SR-IOV | 1 つの PCIe デバイスを複数の機能として見せる仕組み |
| IOMMU | device 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-user | QEMU と userspace dataplane を接続する | OVS-DPDK などの dataplane との接続が中心 |
| DPDK | userspace で packet processing を行う | SR-IOV と組み合わせることもあるが、役割は別 |
| PCI Passthrough | 物理デバイスを VM に専有させる | SR-IOV より専有度が高く、共有性は低くなる |
| SR-IOV | VF を 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 dataplane | Web、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 を選ぶときは、性能だけでなく、その物理制約を運用できるかまで含めて判断します。
書籍
CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の実行モデルを低レイヤから理解する参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。

