以下の内容はhttps://tamasan238.hatenablog.com/entry/2025/06/15/223817より取得しました。


Linux上で動かす仮想L2スイッチまとめ (Linux br, OVS)

  ドライバ ネットワークスタック
アプリケーション
Linux bridge Kernel Kernel-br QEMU
OVS(kernel) Kernel OVS-br(k) QEMU
OVS(user) Kernel OVS-br(u) QEMU
OVS(user)+DPDK DPDK PMD OVS-br(u) w/DPDK QEMU
OVS(user)+AF_XDP Kernel w/XDP OVS-br(u) w/libbpf QEMU

注:赤=カーネル空間,青=ユーザ空間
kernel, (k):カーネルデータパス.datapath_type=system
user, (u):ユーザランドデータパス.datapath_type=netdev

  • Linux bridge
    • 基本的なL2 SW機能で要件を充足するのであれば,これが最もシンプル.
    • 実装:linux/net/bridge
  • OVS(kernel)
  • OVS(user)
  • OVS(user)+DPDK
    • この中では(多くの場合)最も高速.ただし,NIC・CPUコア・HugePageを占有し続ける.
    • Kernelのネットワークスタックを完全にバイパスするため,既存の開発系ツールを一切使用できない.
    • 構成によっては完全にゼロコピー(ポインタ渡し)で動作する
  • OVS(user)+AF_XDP
    • Kernelの機能を拡張して使用するため,他のアプリケーションと共存できる.ユースケースによってはDPDKより高速な場合もある.
    • 構成によっては完全にゼロコピー(ポインタ渡し)で動作する

性能比較

出典:Revisiting the Open vSwitch Dataplane Ten Years Later

vNICドライバに関する補足

vNICドライバとしてvirtioの代わりにvhost, vhost-userを使用することで,qemuをスキップしてネットワークスタックからVMへ直接パケットデータを送ることが可能.

  • virtio (virtio-net)
    • 基礎的な実装.qemu - VM間共有メモリで転送.
  • vhost
    • QEMUのバックエンドをkernel内で実行.kernel - VM間共有メモリで転送.
  • vhost-user
    • vhostのkernel側処理をユーザランドで実行.ユーザランドデータパス使用時にこちらを選択.
    • OVSでは,旧タイプのvhost-userと新タイプのvhost-user-clientの2つが存在する.(DPDK vHost User Ports — Open vSwitch 3.5.90 documentation)
      • vhost-userはクライアント-サーバモデルのアーキテクチャで構成されている.
      • 旧タイプはOVSがサーバ,VM(QEMU)がクライアントとして機能するため,OVSがひとたび停止すると,すべてのVMを再起動しなければならない.すでに非推奨とされており,ドキュメントにて将来削除予定であることが示されている.古いページではこちらを紹介しているものもあるため,要注意.
      • 新タイプではVM(QEMU)がサーバ,OVSがクライアントとして機能する.したがって,OVSが停止しても再びOVSを立ち上げ直すだけで通信を復旧できる.

参考文献

DPDK / AF_XDPについて

vNICドライバについて




以上の内容はhttps://tamasan238.hatenablog.com/entry/2025/06/15/223817より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14