手当たり次第に書くんだ

飽きっぽいのは本能

vhost-net と vhost-user は何が違うのか – virtio と userspace dataplane の基本

vhost-netvhost-user は、どちらも virtio-net の VM ネットワークを高速化するときに出てくる名前です。ただし、同じものではありません。vhost-net は host kernel 側で virtio 処理を支援する仕組みで、vhost-user は QEMU と userspace dataplane を接続する仕組みです。

この違いを分けて見ないと、通常の KVM VM を速くしたい話と、OVS-DPDK や NFV のような userspace dataplane を作りたい話が混ざります。この記事では、virtio-net、vhost-net、vhost-user、DPDK、SR-IOV の関係を VM ネットワーク設計の入口として確認します。

この記事の結論

  • virtio-net は VM に効率的な仮想 NIC を見せるための基本方式である
  • vhost-net は virtio-net の処理を host kernel 側で支援する
  • vhost-user は QEMU と OVS-DPDK などの userspace dataplane を接続する
  • vhost-user は vhost-net の単純な上位互換ではなく、前提となる dataplane が違う
  • 一般的な VM では vhost-net、NFV や高 pps dataplane では vhost-user を検討する

virtio-net だけではどこが重くなるのか

virtio-net は、VM に仮想 NIC を見せるための標準的な方式です。完全なデバイスエミュレーションより効率がよく、KVM / QEMU の通常構成ではまず virtio-net を使うのが基本になります。

ただし、VM が大量のパケットを処理する場合、guest、QEMU、host kernel、bridge / Open vSwitch、物理 NIC の間で、コンテキストスイッチ、データコピー、割り込み処理が増えます。この部分が packet forwarding 系ワークロードでは性能上の制約になりやすくなります。

vhost-net は kernel 側で virtio 処理を支援する

vhost-net は、virtio-net の一部処理を QEMU プロセスから host kernel 側へ移す仕組みです。QEMU がすべてを処理するよりも、kernel 側で virtqueue を扱えるため、VM ネットワークのオーバーヘッドを減らしやすくなります。

一般的な KVM の VM であれば、まず virtio-net と vhost-net の組み合わせで十分なことが多いです。Web サーバー、DB、管理系 VM、通常の業務 VM では、DPDK や SR-IOV を考える前に、この通常経路がきちんと使われているかを確認する方が現実的です。

vhost-user は userspace dataplane へ接続する

vhost-user は、QEMU と userspace dataplane を接続するための仕組みです。代表例は OVS-DPDK のように、Open vSwitch の datapath を DPDK 側へ寄せる構成です。

vhost-user では、packet processing を host kernel の通常ネットワーク経路から外し、userspace 側の dataplane と VM をつなぎます。そのため、NFV、仮想ルーター、仮想ファイアウォール、仮想ロードバランサのような高 pps ワークロードで選択肢になります。

vhost-net と vhost-user の違い

観点vhost-netvhost-user
処理場所host kernel 側userspace dataplane 側
典型構成KVM / QEMU / virtio-netQEMU + OVS-DPDK など
主な狙いQEMU 経由のオーバーヘッドを減らすkernel network stack を迂回して dataplane を専用化する
運用性Linux 標準構成に近く扱いやすい専用設計と専用監視が必要になりやすい
向く用途一般的な VM ネットワーク高速化NFV、高 pps、低遅延 dataplane

vhost-user は vhost-net の置き換えではありません。vhost-net は通常の VM ネットワークを効率化する方向で、vhost-user は userspace dataplane を前提に VM ネットワークの構造自体を変える方向です。

DPDK / OVS-DPDK との関係

DPDK は、userspace で packet processing を行うための技術です。OVS-DPDK は Open vSwitch の datapath を DPDK 側へ寄せる構成で、VM と OVS-DPDK をつなぐ場面で vhost-user が使われます。

このため、DPDK を使う VM ネットワークでは、virtio-netvhost-user、HugePages、NUMA、PMD thread、CPU pinning をまとめて考える必要があります。単に vhost-user に変えれば速くなるという話ではなく、host 側 dataplane 全体の設計が必要です。

SR-IOV / PCI Passthrough との違い

SR-IOV や PCI Passthrough は、物理 NIC の機能を VM に直接近い形で渡す方向の技術です。software switch や host 側 dataplane を迂回しやすく、性能を出しやすい一方で、共有性、移動性、運用の柔軟性は下がりやすくなります。

方式狙い注意点
vhost-net通常の virtio-net 経路を効率化するkernel 側の通常運用に近いが、専用 dataplane ではない
vhost-userQEMU と userspace dataplane をつなぐOVS-DPDK などの前提設計が必要になる
SR-IOVNIC の VF を VM に割り当てる物理 NIC 依存と移動性の制約が増える
PCI Passthrough物理デバイスを VM に専有させる共有性が下がり、構成変更の影響も大きい

現在の VM で確認すること

VM ネットワークの方式を検討する前に、現在の interface、QEMU / libvirt の設定、vhost module、Open vSwitch の状態を確認します。いきなり DPDK を有効にするのではなく、VM がどの仮想 NIC を使い、host 側でどの datapath を通っているかを見ることが先です。

ip link show
lsmod | grep vhost
virsh domiflist vm-name
virsh dumpxml vm-name
ovs-vsctl show

採用判断の考え方

一般的な VM ネットワーク性能改善であれば、まず virtio-net と vhost-net の通常経路を確認します。ここで十分であれば、DPDK や SR-IOV を入れる必要はありません。

一方で、仮想ルーター、仮想ファイアウォール、NFV、低遅延 packet forwarding のように、packet processing そのものが主役になる場合は、vhost-user と OVS-DPDK のような userspace dataplane を検討します。その場合は、CPU polling、HugePages、NUMA、監視、障害時の切り分けまで含めて設計します。

判断軸vhost-net を優先しやすいvhost-user を検討しやすい
用途Web、DB、管理系 VM、一般的な業務 VMNFV、仮想ルーター、仮想 FW、高 pps dataplane
dataplaneLinux kernel 側の通常経路OVS-DPDK などの userspace dataplane
CPU柔軟に共有したい専有に近い CPU 設計を許容できる
運用Linux 標準ツール中心で見たい専用監視と切り分けを用意できる
移動性VM の柔軟な再配置を重視する固定配置や制約を受け入れられる

まとめ

vhost-netvhost-user は、どちらも virtio-net の VM ネットワーク性能に関係しますが、役割は違います。vhost-net は host kernel 側で通常の VM ネットワークを効率化する仕組みです。vhost-user は QEMU と userspace dataplane を接続し、OVS-DPDK や NFV のような構成で使われます。

通常の VM を速くしたいのか、userspace dataplane を作りたいのか。この前提を分けるだけで、vhost-net、vhost-user、DPDK、SR-IOV の選び方はかなり明確になります。

関連する記事
vhost-net と vhost-user は何が違うのか – virtio と userspace dataplane の基本

コメントを残す

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

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

トップへ戻る