手当たり次第に書くんだ

飽きっぽいのは本能

DPDK で VM ネットワークはなぜ速くなるのか – kernel bypass と NFV dataplane

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、管理系 VMNFV、仮想ルーター、仮想 FW、高 pps dataplane

vhost-net、vhost-user、SR-IOV との違い

VM ネットワーク高速化では、DPDK だけでなく vhost-netvhost-user、SR-IOV、PCI Passthrough が同時に出てきます。これらは同じ高速化の話に見えますが、効かせている場所が違います。

方式主な狙いDPDK との関係
vhost-netvirtio-net の処理を kernel 側で支援する通常の KVM 構成で使いやすい。DPDK なしでも成立する
vhost-userQEMU と userspace dataplane を接続するOVS-DPDK などと組み合わせて使われやすい
SR-IOVNIC の VF を VM に直接近い形で渡すhypervisor の software switch を迂回しやすい。DPDK inside VM と組み合わせることもある
PCI Passthrough物理デバイスを VM に専有させる性能は出しやすいが、共有性や移動性は下がる
DPDKuserspace 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、仮想ルーター、仮想 FWWeb、DB、管理系 VM
性能指標pps、低遅延、jitter平均帯域、一般的なレスポンス
CPU専有に近い設計を許容できるCPU を柔軟に共有したい
運用専用監視と切り分けを用意できるLinux 標準ツール中心で運用したい
移動性固定配置でもよいライブマイグレーションや柔軟な再配置を重視する

VM ネットワークで DPDK を使うということは、単に高速化オプションを入れることではありません。packet processing をどこで処理し、どの CPU とメモリを専有に近い形で使い、どの運用制約を受け入れるかを決める設計です。

関連する記事
DPDK で VM ネットワークはなぜ速くなるのか – kernel bypass と NFV dataplane

コメントを残す

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

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

トップへ戻る