手当たり次第に書くんだ

飽きっぽいのは本能

VM パフォーマンス Day7: ネットワーク最適化 – SR-IOV / PCI Passthrough

はじめに

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-IOVPCI 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 で扱います。

VM パフォーマンス Day7: ネットワーク最適化 – SR-IOV / PCI Passthrough

コメントを残す

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

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

トップへ戻る