Day5 では、virtio-net が標準的な仮想 NIC であり、QEMU、virtqueue、割り込み、コピー、ホスト側 datapath が性能に影響することを整理しました。
Day6 では、その処理を QEMU からどこへ逃がすかを考えます。vhost-net は virtio の処理をカーネル側へ寄せる方式で、vhost-user はユーザー空間 dataplane へ接続する方式です。
重要なのは、vhost-net が速い、vhost-user が速いという単純な序列ではありません。どの datapath に責任を持たせ、どのレイヤを迂回し、どの運用制約を受け入れるかです。
virtio-net の限界を振り返る
通常の virtio-net では、ゲスト OS の virtio-net ドライバ、virtqueue、QEMU、ホストカーネル、物理 NIC という経路を通ります。この経路では QEMU が重要な橋渡し役になります。
- QEMU スレッドにパケット処理が集まりやすい
- ユーザー空間とカーネル空間の往復が増える
- pps が増えると CPU コストが見えやすい
- 割り込みや virtqueue 更新が高頻度に発生する
- ホスト側 datapath の状態にも性能が左右される
vhost 系の技術は、この QEMU 中心の処理を減らすために使われます。
vhost-net は virtio 処理をカーネル側へ寄せる
vhost-net は、virtio-net の一部処理を QEMU からホストカーネル側の vhost thread へ移す仕組みです。これにより、QEMU が直接処理する範囲を減らし、ホストカーネル側でより効率的にパケットを扱えるようにします。
| 観点 | vhost-net の意味 |
|---|---|
| 処理場所 | QEMU からホストカーネル側へ寄せる |
| 目的 | QEMU の負荷と context switch を減らす |
| datapath | Linux kernel network stack を通る |
| 相性 | Linux bridge、kernel OVS、通常の仮想ネットワーク |
| 制約 | kernel datapath の制約は残る |
vhost-net は、標準的な VM ネットワークを大きく崩さずに性能を改善しやすい方式です。運用性を保ったまま QEMU の負荷を下げたい場合に向きます。
vhost-net で残る制約
vhost-net は QEMU の負荷を減らしますが、Linux kernel datapath を完全に迂回するわけではありません。Linux bridge、tap、OVS kernel datapath、softirq、qdisc などのレイヤは残ります。
- kernel network stack を通る
- softirq や IRQ 配置の影響を受ける
- host 側の bridge / OVS 設計に依存する
- CPU / NUMA 配置の問題は残る
- 高 pps や NFV 用途ではさらに短い datapath が必要になる場合がある
つまり、vhost-net は標準構成の改善であり、kernel bypass そのものではありません。
vhost-user はユーザー空間 dataplane へ接続する
vhost-user は、virtio の処理をユーザー空間の dataplane と接続する仕組みです。代表的には OVS-DPDK や DPDK アプリケーションと組み合わせて使われます。
vhost-user では、QEMU と dataplane プロセスが UNIX domain socket などを通じて連携し、実際のパケット処理はユーザー空間 dataplane 側で行われます。
| 観点 | vhost-user の意味 |
|---|---|
| 処理場所 | ユーザー空間 dataplane 側へ寄せる |
| 目的 | kernel datapath を迂回し、高速 dataplane と接続する |
| 代表例 | OVS-DPDK、DPDK dataplane、NFV |
| 利点 | 高 pps、低遅延用途に向く |
| 制約 | CPU コア専有、HugePages、運用設計が必要 |
kernel bypass は速さだけの話ではない
kernel bypass は、Linux kernel network stack をできるだけ通らずにパケットを処理する考え方です。DPDK はその代表例です。
kernel bypass により、softirq、qdisc、通常の NIC ドライバ処理などを避けられるため、高 pps の処理に向きます。一方で、カーネルが提供していた機能や可観測性、標準的な運用手順も迂回することになります。
- 高速化できるが、CPU コアを専有しやすい
- HugePages や NIC バインドが必要になる場合がある
- 標準的な Linux ネットワークツールで見えにくくなる
- 障害切り分けの責任境界が変わる
- ライブマイグレーションや柔軟な運用に制約が出やすい
vhost-user は DPDK 必須ではないが、DPDK と組み合わされやすい
vhost-user は仕組みとしてはユーザー空間 dataplane との接続方式であり、DPDK そのものではありません。ただし、実運用では OVS-DPDK や DPDK ベースの dataplane と組み合わせられることが多くなります。
そのため、vhost-user を使う場合は、vhost-user の設定だけでなく、dataplane プロセス、HugePages、CPU ピニング、NUMA、NIC の扱いまで含めて設計する必要があります。
virtio-net / vhost-net / vhost-user の比較
| 方式 | datapath | 向く用途 | 主な制約 |
|---|---|---|---|
| virtio-net | QEMU 中心 | 汎用 VM、運用性重視 | 高 pps で QEMU 負荷が見えやすい |
| vhost-net | kernel datapath | 標準構成の高速化 | kernel datapath の制約は残る |
| vhost-user | ユーザー空間 dataplane | NFV、DPDK、低遅延、高 pps | 運用設計と専用リソースが必要 |
この比較で重要なのは、速さの順番ではなく、どの処理をどのレイヤへ移すかです。運用性を残すなら virtio-net / vhost-net、dataplane を専用化するなら vhost-user / DPDK へ進むことになります。
設計時の確認ポイント
vhost 系の方式を選ぶときは、次の観点を確認します。
- QEMU が本当にボトルネックになっているか
- 問題は bandwidth なのか pps なのか latency なのか
- kernel datapath を残してよいか
- ユーザー空間 dataplane の運用を持てるか
- CPU ピニング、NUMA、HugePages と合わせて設計しているか
- 標準的な監視や障害切り分けをどこまで失うか
まとめ
vhost-net と vhost-user は、virtio-net の処理を QEMU から逃がすための方式です。vhost-net はカーネル側へ寄せ、vhost-user はユーザー空間 dataplane へ接続します。
vhost-net は、標準的な仮想ネットワークの運用性を保ちながら QEMU の負荷を下げやすい方式です。一方、vhost-user は DPDK や OVS-DPDK のような高速 dataplane と組み合わせることで、高 pps や NFV 用途に向きます。
ただし、高速化するほど、CPU、NUMA、HugePages、監視、移動性、障害切り分けの制約が増えます。Day7 では、さらに仮想化レイヤを迂回する SR-IOV / PCI Passthrough を整理します。
書籍
作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ
ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
VM パフォーマンスシリーズ
- VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークの設計ハブ
- VM パフォーマンス Day1 – VM の性能ボトルネックとは何か
- VM パフォーマンス Day2 – CPU 最適化と NUMA / CPU ピニングの考え方
- VM パフォーマンス Day3 – メモリ最適化と HugePages / TLB / NUMA の考え方
- VM パフォーマンス Day4 – ストレージ I/O 最適化と virtio / raw / qcow2 / io_uring の考え方
- VM パフォーマンス Day5 – virtio-net の構造と仮想 NIC の性能特性
- VM パフォーマンス Day7 – SR-IOV / PCI Passthrough による仮想化の迂回
- VM パフォーマンス Day8 – DPDK による高速 dataplane と NFV の基本
関連記事
- VyOS VPP 導入検討 – 実運用ルーターに VPP をそのまま適用する難しさ
- パブリッククラウド上で NFV 型 NF は成立するのか – アンダーレイ / オーバーレイ / 帯域制約で考える
- Ubuntu 22.04 OVS-DPDK 構築失敗



