DPDK で VM ネットワークが速くなる理由は、単にネットワーク機能を追加するからではありません。Linux kernel の通常のネットワーク経路を通る処理を減らし、userspace の dataplane で packet forwarding を処理することで、割り込み、コピー、スケジューリングの影響を小さくできるからです。
ただし、DPDK は VM を何でも速くする魔法ではありません。NFV、仮想ルーター、仮想ファイアウォール、高 pps の packet processing には向きますが、一般的な Web サーバーや管理系 VM では、CPU polling、HugePages、NUMA、監視、ライブマイグレーション制約の方が重くなることがあります。
この記事では、DPDK、kernel bypass、vhost-user、SR-IOV、PCI Passthrough の違いを、VM ネットワーク設計の入口として確認します。
この記事の結論
- DPDK は kernel bypass によって userspace dataplane でパケットを処理するための技術である
- VM ネットワークでは OVS-DPDK、vhost-user、NFV と一緒に語られることが多い
- 高速化の代わりに CPU polling、HugePages、NUMA 設計、運用監視の負担が増える
- 一般的な VM では vhost-net や virtio-net で十分なことも多い
- 採用判断は平均スループットではなく、pps、遅延、決定性、運用制約で見る
DPDK は何を速くするのか
DPDK は Data Plane Development Kit の略で、NIC から受け取るパケットを userspace 側で高速に処理するための仕組みです。通常の Linux networking では、NIC、kernel network stack、bridge、iptables/nftables、Open vSwitch、QEMU、guest virtio など複数の層を通ります。
DPDK を使う構成では、パケット処理を kernel の一般的なネットワーク処理から切り離し、userspace の dataplane が polling で処理します。この設計により、パケットごとの割り込みや kernel scheduling の影響を減らしやすくなります。
| 観点 | 通常の VM ネットワーク | DPDK dataplane |
|---|---|---|
| 処理場所 | kernel network stack、bridge、Open vSwitch などを通る | userspace dataplane が中心になる |
| 割り込み | 割り込みと kernel scheduling の影響を受ける | polling により割り込み依存を減らす |
| CPU 使用率 | 負荷に応じて変動しやすい | 待機中でも CPU を使いやすい |
| 運用性 | Linux 標準ツールで見やすい | 専用の理解と監視設計が必要になる |
| 向く用途 | Web、DB、管理系 VM | NFV、仮想ルーター、仮想 FW、高 pps dataplane |
vhost-net、vhost-user、SR-IOV との違い
VM ネットワーク高速化では、DPDK だけでなく vhost-net、vhost-user、SR-IOV、PCI Passthrough が同時に出てきます。これらは同じ高速化の話に見えますが、効かせている場所が違います。
| 方式 | 主な狙い | DPDK との関係 |
|---|---|---|
| vhost-net | virtio-net の処理を kernel 側で支援する | 通常の KVM 構成で使いやすい。DPDK なしでも成立する |
| vhost-user | QEMU と userspace dataplane を接続する | OVS-DPDK などと組み合わせて使われやすい |
| SR-IOV | NIC の VF を VM に直接近い形で渡す | hypervisor の software switch を迂回しやすい。DPDK inside VM と組み合わせることもある |
| PCI Passthrough | 物理デバイスを VM に専有させる | 性能は出しやすいが、共有性や移動性は下がる |
| DPDK | userspace dataplane で packet processing を行う | ホスト側、VM 側、または両方で採用されることがある |
ざっくり言えば、vhost-net は kernel 側の支援、vhost-user は userspace dataplane との接続、SR-IOV / PCI Passthrough はデバイスを VM へ近づける方式、DPDK は userspace で packet processing を行うための基盤です。
DPDK を支える前提
HugePages
DPDK は大量の packet buffer を扱うため、HugePages を前提にすることが多いです。通常の小さなページよりも TLB miss を減らしやすく、メモリ管理の予測性も上げやすくなります。
CPU polling
DPDK は polling によってパケットを取りに行くため、割り込み待ちのコストを減らせます。その代わり、待機中でも CPU を使います。CPU 使用率が高く見えること自体は異常ではなく、専有に近い CPU 設計と合わせて考える必要があります。
NUMA と CPU pinning
NIC、CPU、メモリが別 NUMA node に分かれていると、DPDK の利点は簡単に薄れます。NIC に近い CPU とメモリを使う、vCPU と PMD thread の配置を合わせる、dataplane thread と汎用処理を混ぜない、といった設計が重要になります。
ホスト側で確認すること
DPDK を検討する前に、CPU、NUMA、HugePages、NIC、Open vSwitch の状態を確認します。構造が見えていない状態で DPDK だけを入れても、性能問題の原因が分からなくなります。
lscpu
numactl --hardware
grep -i huge /proc/meminfo
ip link show
ovs-vsctl showこの段階では、DPDK を有効にすることよりも、ホストが DPDK を活かせる形になっているかを見る方が重要です。特に NUMA node、NIC の位置、HugePages の割り当て、VM の vCPU 配置は一緒に確認します。
DPDK が向く用途
DPDK は、パケット数が多く、遅延や jitter を抑えたい dataplane に向きます。VM の中で動く一般的なアプリケーションを少し速くしたい、という用途ではなく、パケット処理そのものが主役になる用途で検討します。
- 仮想ルーター
- 仮想ファイアウォール
- NFV / VNF
- 高 pps の packet forwarding
- 低遅延が要求される dataplane
- OVS-DPDK を使う仮想ネットワーク基盤
DPDK が難しい理由
DPDK は性能を出せる一方で、運用の自由度を下げる面があります。CPU を polling に使うため、CPU 使用率だけで正常・異常を判断しにくくなります。HugePages や NUMA の設計が崩れると、期待した性能が出ません。
- CPU を常時使いやすく、通常の CPU 使用率監視と相性が悪い
- HugePages の確保が必要になる
- NUMA 配置が性能に強く影響する
- ライブマイグレーションや柔軟な配置と相性が悪くなる場合がある
- Linux 標準のネットワーク確認だけでは見えにくい箇所が増える
採用判断の考え方
DPDK を採用するかどうかは、平均スループットだけで決めない方がよいです。見るべきなのは、pps、遅延、jitter、CPU 専有を許容できるか、運用監視を作れるか、障害時に切り戻せるかです。
| 判断軸 | DPDK が合いやすい | DPDK なしを優先しやすい |
|---|---|---|
| 用途 | NFV、仮想ルーター、仮想 FW | Web、DB、管理系 VM |
| 性能指標 | pps、低遅延、jitter | 平均帯域、一般的なレスポンス |
| CPU | 専有に近い設計を許容できる | CPU を柔軟に共有したい |
| 運用 | 専用監視と切り分けを用意できる | Linux 標準ツール中心で運用したい |
| 移動性 | 固定配置でもよい | ライブマイグレーションや柔軟な再配置を重視する |
VM ネットワークで DPDK を使うということは、単に高速化オプションを入れることではありません。packet processing をどこで処理し、どの CPU とメモリを専有に近い形で使い、どの運用制約を受け入れるかを決める設計です。
書籍
CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の実行モデルを低レイヤから理解する参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。

