注:赤=カーネル空間,青=ユーザ空間
kernel, (k):カーネルデータパス.datapath_type=system
user, (u):ユーザランドデータパス.datapath_type=netdev
- Linux bridge
- 基本的なL2 SW機能で要件を充足するのであれば,これが最もシンプル.
- 実装:linux/net/bridge
- OVS(kernel)
- Linux brでは機能が不足する場合に使用.高機能な分,相対的にオーバヘッドは大きい.
- 実装:linux/net/openvswitch と ovs
- OVS(user)
- DPDKなどの実装用に開発.このまま使用するとパケット処理の都度システムコールを実行しコンテキストスイッチが頻発してしまう.
- 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)
- vhost
- vhost-user
- vhostのkernel側処理をユーザランドで実行.ユーザランドデータパス使用時にこちらを選択.
- OVSでは,旧タイプのvhost-userと新タイプのvhost-user-clientの2つが存在する.(DPDK vHost User Ports — Open vSwitch 3.5.90 documentation)
参考文献
DPDK / AF_XDPについて
-
Open vSwitch with AF_XDP — Open vSwitch 3.5.90 documentation
-
https://dl.acm.org/doi/10.1145/3452296.3472914
- ページ内下部,Conference Presentation Videoにて,OVSの各データパスについて分かりやすくまとめられている.
- https://builders.intel.com/docs/networkbuilders/af-xdp-sockets-high-performance-networking-for-cloud-native-networking-technology-guide.pdf
-
仮想アプライアンスの提案で直面する致命的な課題とその対策 (DPDKに代表されるネットワークパフォーマンス改善手法) - 後編 - | ネットワンシステムズ
-
https://www2.matlab.nitech.ac.jp/docs/slides/2019/NS2019-Asada.pdf