はじめに
Day5 では virtio-net を、Day6 では vhost-net / vhost-user による高速化パスを整理しました。ここまでの高速化は virtio アーキテクチャの内部で完結する最適化 です。
しかし virtio には構造上の限界があります。
- QEMU あるいは vhost が必ず介在する
- メモリコピー(copying)が完全にはゼロにならない
- 割り込みと virtqueue の抽象化が必要
- NIC のハードウェア機能(TSO / LRO / RSS)を完全には活かせない
virtio をどれだけ最適化しても、抽象化レイヤが存在する限り構造的な限界は残ります。これを根本的に回避するアプローチが、仮想 NIC 自体を使わず物理 NIC を直接 VM に渡す SR-IOV / PCI Passthrough です。
SR-IOV – NIC が仮想 NIC をハードウェアとして生成する
SR-IOV の原理
SR-IOV NIC は、1 つの物理 NIC(PF: Physical Function)から複数の仮想 NIC(VF: Virtual Function)を ハードウェアで 生成します。
- PF:管理用の実体。設定・監視はホストが行う
- VF:VM に割り当てる軽量な PCIe デバイス
VF は PCIe デバイスとしてゲスト OS に直接見えるため、virtio ではなく ほぼ物理 NIC と同等 に扱われます。
データパス
SR-IOV のデータパスは次のように、virtio / vhost / QEMU を一切通りません。
VM → VF(NIC のハードウェアキュー)→ NIC → ネットワーク
VF は DMA により VM のメモリへ直接アクセスします。これにより、virtio の virtqueue 処理や割り込み再通知といった抽象化レイヤは完全に排除されます。
SR-IOV のメリット
- レイテンシが最小に近い:virtqueue / QEMU / vhost のオーバーヘッドが消える。
- PPS が圧倒的に高い:ハードウェアキューを VM が直接操作するため、高 PPS が必要な NFV と相性が良い。
- CPU 使用率が低い:vhost / virtio によるデータコピーや割り込み再通知がなくなる。
- ハードウェアオフロードが活用できる:TSO / LRO / RSS / チェックサム offload などがほぼ物理 NIC と同等。
SR-IOV のデメリット
- ライブマイグレーション不可:VF はホスト固有の物理デバイスのため、別ホストへ移動できない。
- VF の割り当て管理が必要:
- どの VF をどの VM に割り当てたか
- NUMA 整合性(VF と vCPU/メモリが同じ NUMA にある必要)
- PCIe トポロジ
- ホスト側のネットワーク制御が制限される:OVS / tc / iptables / bonding などの制御はほぼ無効化され、NIC 直結構成になる。
PCI Passthrough – 仮想化を完全に迂回するアプローチ
概要
SR-IOV が「物理 NIC を分割して VM に渡す」技術なのに対し、PCI Passthrough は NIC 1 枚を丸ごと VM に専有させる技術 です。virtio でも VF でもなく、純然たる物理 NICを VM が直接使います。
データパス
VM → NIC(完全な物理デバイス)→ ネットワークこれはもはや仮想 NIC ですらなく、VM が物理マシンとして NIC を利用しているのと同じ状態になります。
メリット
- 最高性能・最低レイテンシ:virtio 系のオーバーヘッドが完全にゼロ。
- NIC の機能を 100% 活用:SR-IOV では PF の一部を共有する設計だが、Passthrough では NIC の全機能が VM のもの。
デメリット
- ライブマイグレーション不可
- 1 NIC = 1 VM(共有不可)
- ホスト側ネットワーク制御が完全に失われる
- 物理配線・NUMA・IRQ など運用負荷が極端に高い
- 性能を最優先する特殊用途でのみ現実的な選択肢
SR-IOV vs PCI Passthrough
| 項目 | SR-IOV | PCI Passthrough |
|---|---|---|
| レイヤ | NIC の仮想機能(VF)をそのまま PCIe デバイスとして割り当て | 物理 NIC を丸ごと割り当て |
| QEMU / virtio | 一切通らない | 一切通らない |
| データパス | VF → NIC(DMA) | NIC → VM(DMA) |
| PPS | 非常に高い | 最高(NIC フル性能) |
| レイテンシ | 非常に低い | 物理マシン同等(最小) |
| NIC 機能 | ほぼフル活用 | 100% 活用 |
| VM 間共有 | 可能(複数 VF) | 不可(専有) |
| ライブマイグレーション | 不可 | 不可 |
| ホスト側ネットワーク制御 | 制限大 | 完全無効 |
| 運用負荷 | 中(VF 管理) | 高(物理構成依存) |
| 典型用途 | NFV / ルーター / 高 PPS VM | 超低レイテンシ / 特殊用途 |
IOMMU(VT-d / AMD-Vi)の必須性
SR-IOV と PCI Passthrough はどちらも DMA を直接扱うため、安全なメモリ分離には IOMMU が必須 です。IOMMU が無い環境で SR-IOV / Passthrough を使うことは、安全性の観点から推奨されません。
まとめ
SR-IOV と PCI Passthrough は、Day5〜Day6 で扱った virtio 系高速化とは根本的に異なる世界です。
virtio の抽象化を捨て、仮想化レイヤを完全に迂回することで得られる「別次元の性能」が SR-IOV / Passthrough の本質となります。
- SR-IOV:VF を VM に割り当てる。性能は飛躍するが柔軟性が落ちる。
- PCI Passthrough:NIC を丸ごと渡す。性能は最高だが運用負荷も最高。
SR-IOV や PCI Passthrough を用いると、NIC の性能は VM にほぼハードウェアネイティブの形で届きます。さらに VM 内で DPDK を利用すれば、カーネルスタックを経由せずにユーザー空間で直接パケット処理を行えるため、NIC が持つ性能を取りこぼしなく使い切ることができます(DPDK そのものが性能を超えるわけではなく、性能を効率よく引き出す仕組み)。
DPDK についての詳細は Day8 で扱います。


