手当たり次第に書くんだ

飽きっぽいのは本能

DPDK とは何か – 高速化ではなくパケット処理の場所を変える技術

DPDK は、ネットワークを単純に速くする追加機能ではありません。DPDK の本質は、Linux kernel の通常のネットワークスタックで処理していたパケットを、userspace の dataplane で扱えるようにすることです。

そのため、DPDK を理解するときは「高速化技術」という言葉だけで見ない方がよいです。大事なのは、パケットをどこで受け取り、どの CPU で処理し、Linux kernel のどの機能を使わなくなるのかです。

この記事では、DPDK、kernel bypass、Poll Mode Driver、HugePages、CPU 専有、OVS-DPDK や vhost-user との関係を、VM パフォーマンス設計の入口として確認します。

この記事の結論

  • DPDK は kernel bypass により userspace dataplane でパケットを処理するための技術である
  • 割り込みを待つのではなく polling でパケットを取りに行くため、CPU の使い方が通常の Linux と変わる
  • HugePages、NUMA、CPU pinning、NIC の配置を合わせないと利点を出しにくい
  • OVS-DPDK、vhost-user、NFV、仮想ルーター、仮想ファイアウォールの文脈で使われることが多い
  • 一般的な Web サーバーや管理系 VM では、DPDK より virtio-net / vhost-net の通常経路で十分な場合も多い

通常の Linux ネットワーク処理

通常の Linux サーバーでは、NIC に届いたパケットは NIC driver を通じて Linux kernel に渡されます。kernel network stack は、IP、routing、firewall、socket、bridge、Open vSwitch などの処理を担当します。

  • Ethernet frame の受信
  • IP header の処理
  • routing 判断
  • firewall 処理
  • bridge や Open vSwitch による転送
  • socket を通じたアプリケーションへの受け渡し

この経路は汎用性が高く、標準ツールで見やすく、運用しやすいことが大きな利点です。一方で、packet forwarding のように大量の小さなパケットを処理する用途では、割り込み、データコピー、context switch、kernel scheduling の影響が目立ちます。

Linux kernel 経由の何が重いのか

kernel network stack は多くの用途を支えるために汎用的に作られています。Web サーバーや DB サーバーではその汎用性が利点になりますが、仮想ルーターや仮想ファイアウォールのような dataplane では、パケットごとの処理コストが積み上がります。

要素通常経路で起きること高 pps での影響
割り込みNIC からの通知を受けて処理するパケット数が多いと割り込み処理が増える
context switchkernel と userspace の境界をまたぐ小さい処理が大量に発生すると効きやすい
データコピー層の間で buffer を扱うcopy の回数が性能に影響する
汎用処理routing、firewall、socket などを扱う専用 dataplane では不要な処理も通りやすい

DPDK は何をするのか

DPDK は、NIC から受け取ったパケットを userspace のアプリケーションが直接扱いやすくするためのライブラリとドライバ群です。Linux kernel の通常の network stack を主経路にせず、userspace の dataplane が packet processing を担当します。

この考え方を kernel bypass と呼びます。kernel を完全に不要にするという意味ではなく、パケット処理の hot path から通常の kernel network stack を外す、という意味で捉えると分かりやすいです。

Poll Mode Driver という考え方

DPDK では、割り込みを待つのではなく、CPU が NIC の receive queue を polling してパケットを取りに行きます。この仕組みは Poll Mode Driver と呼ばれます。

polling は低遅延で大量パケットを扱いやすい一方、待機中でも CPU を使います。そのため、DPDK の CPU 使用率が高く見えること自体は異常とは限りません。監視では、CPU 使用率だけでなく、pps、drop、latency、queue、NUMA 配置を合わせて見る必要があります。

DPDK で得られるもの

  • 高 pps の packet forwarding に向いた dataplane を作りやすい
  • 割り込み依存を減らし、遅延や jitter を抑えやすい
  • userspace で packet buffer と queue を制御しやすい
  • OVS-DPDK や VPP など、専用 dataplane と組み合わせやすい

DPDK で失うもの

DPDK は性能上の利点がある一方で、Linux 標準の見え方や運用のしやすさを一部手放します。kernel network stack を主経路にしないため、通常の iptablesnftablestcpdump、interface 統計だけでは見えにくい箇所が増えます。

  • CPU を専有に近い形で使いやすい
  • HugePages の確保が必要になりやすい
  • NUMA 配置の影響を強く受ける
  • 標準的な Linux ネットワーク運用と見え方が変わる
  • ライブマイグレーションや柔軟な VM 配置と相性が悪くなる場合がある

HugePages が必要になる理由

DPDK は大量の packet buffer を扱うため、HugePages を使う構成が一般的です。HugePages を使うことで TLB miss を減らし、メモリアクセスの予測性を上げやすくなります。

ただし、HugePages は確保しただけで速くなるものではありません。NIC、CPU、メモリが同じ NUMA node に近い形で配置され、DPDK の process や PMD thread が適切な CPU で動いていることが重要です。

CPU core を専有するという考え方

DPDK では、dataplane 用の CPU core を専有に近い形で使うことがあります。これは無駄に見えるかもしれませんが、packet processing の遅延や jitter を抑えるための設計です。

逆に言えば、CPU を柔軟に共有したい環境や、VM を頻繁に移動したい環境では、DPDK の前提が運用と衝突することがあります。平均帯域だけでなく、CPU 専有を許容できるかも採用判断に含めます。

DPDK はどこで使われるのか

用途DPDK が関係しやすい理由
OVS-DPDKOpen vSwitch の datapath を userspace 側へ寄せる
vhost-userQEMU と userspace dataplane を接続する
NFV / VNF仮想ルーターや仮想ファイアウォールで高 pps を扱う
VPPuserspace packet processing を中心にした dataplane を作る
5G / telecom低遅延で packet processing を安定させたい

ホスト側で確認すること

DPDK を検討するときは、機能名だけを見るのではなく、ホストの CPU、NUMA、HugePages、NIC、Open vSwitch の状態を先に確認します。

lscpu
numactl --hardware
grep -i huge /proc/meminfo
ip link show
ovs-vsctl show

DPDK は常に必要なのか

DPDK は、すべての VM ネットワークに必要な技術ではありません。一般的な Web サーバー、DB、管理系 VM では、virtio-net と vhost-net の通常経路で十分なことが多いです。

DPDK が向くのは、packet forwarding そのものが主役で、pps、遅延、jitter、drop を厳しく見たい用途です。性能だけでなく、CPU 専有、HugePages、NUMA、監視、障害時の切り分けを受け入れられるかで判断します。

まとめ

DPDK は、単にネットワークを速くする機能ではありません。Linux kernel の通常経路から userspace dataplane へパケット処理の場所を移し、polling、HugePages、NUMA、CPU 専有を前提に packet processing を作る技術です。

DPDK を選ぶかどうかは、速そうだからではなく、どの dataplane を作りたいのかで決めます。通常の VM ネットワークなら virtio-net / vhost-net を先に確認し、NFV や高 pps の userspace dataplane が必要な場合に DPDK、OVS-DPDK、vhost-user を検討するのが現実的です。

関連する記事
DPDK とは何か – 高速化ではなくパケット処理の場所を変える技術

コメントを残す

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

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

トップへ戻る