Day5 から Day7 では、virtio-net、vhost-net / vhost-user、SR-IOV / PCI Passthrough を見てきました。Day8 では、その流れの終点として DPDK を整理します。
DPDK は、仮想化専用の技術ではありません。NIC を Linux kernel network stack から切り離し、ユーザー空間の dataplane アプリケーションが高速にパケットを処理するための基盤です。
VM パフォーマンスの文脈では、DPDK は vhost-user、SR-IOV、NFV、仮想ルーター、仮想 Firewall、OVS-DPDK などと結びつきます。ただし、DPDK は単なる高速化設定ではなく、OS が持っていたネットワーク処理の責任をアプリケーション側へ移す設計です。
DPDK は仮想化固有の技術ではない
DPDK は Data Plane Development Kit の略で、高速パケット処理を行うためのライブラリ群です。ベアメタルでも、VM でも、コンテナでも利用できます。
- ベアメタル上の物理 NIC を DPDK アプリが扱う
- VM に SR-IOV / PCI Passthrough で渡した NIC を扱う
- vhost-user を通じて OVS-DPDK と VM を接続する
- NFV / CNF の dataplane として使う
つまり、DPDK の本質は仮想化を高速化することではなく、Linux kernel network stack を通らない dataplane を作ることです。仮想化環境では、その dataplane を VM や仮想ネットワークとどう接続するかが問題になります。
通常の Linux networking と DPDK の違い
通常の Linux networking では、NIC、kernel driver、softirq、qdisc、TCP/IP stack、socket、application という経路を通ります。この経路は汎用性が高く、管理しやすく、標準ツールで観測しやすい構造です。
DPDK では、NIC を VFIO などのユーザー空間向けドライバへバインドし、DPDK PMD が NIC の queue を扱います。パケット処理はユーザー空間アプリケーション側で行われます。
| 観点 | Linux networking | DPDK |
|---|---|---|
| 処理場所 | カーネル中心 | ユーザー空間 dataplane |
| I/O モデル | 割り込み中心 | polling 中心 |
| メモリ | 通常のカーネル管理 | HugePages を利用しやすい |
| 観測 | 標準ツールで見やすい | アプリ側の統計や専用ツールが重要 |
| 運用 | 汎用性が高い | 専用設計が必要 |
DPDK を支える基盤技術
HugePages
DPDK は大量のパケットバッファを高速に扱うため、HugePages を利用します。これにより、ページ管理の負荷を下げ、TLB 効率を高めます。Day3 で扱った HugePages は、DPDK のような dataplane で特に重要になります。
VFIO / UIO
DPDK アプリケーションが NIC を扱うには、NIC を通常の kernel driver から切り離し、VFIO や UIO のようなユーザー空間向けの仕組みへバインドします。実運用では、IOMMU による分離を含めて VFIO を前提に考えることが多くなります。
Polling
DPDK は割り込みではなく polling を中心にパケットを処理します。専用スレッドが NIC の queue を継続的に確認するため、割り込み処理の揺れを減らしやすくなります。一方で、CPU コアを専有しやすいという制約があります。
CPU ピニングと NUMA
DPDK では、CPU コア、NIC、HugePages、NUMA の整合性が非常に重要です。NIC が接続されている NUMA ノードと、DPDK thread、HugePages、VM の配置がずれると、期待した性能は出にくくなります。
DPDK が高速になりやすい理由
DPDK が高速になりやすいのは、単にライブラリが速いからではありません。パケット処理の構造そのものを変えるからです。
- kernel network stack を通らない datapath を作る
- 割り込みではなく polling で処理を安定させる
- HugePages でパケットバッファを効率的に扱う
- NIC queue をユーザー空間 dataplane が直接扱う
- CPU コアを専用化し、処理の揺れを減らす
ただし、これらはすべて運用制約でもあります。DPDK は、CPU コア、メモリ、NIC、アプリケーションを専用の dataplane として設計する技術です。
virtio / vhost / SR-IOV と DPDK の関係
DPDK は、Day5 から Day7 で扱った技術と競合するものではなく、組み合わせて使われます。
| 構成 | DPDK との関係 |
|---|---|
| virtio-net | 標準的な仮想 NIC。DPDK とは別の標準 datapath |
| vhost-user | DPDK dataplane と VM を接続する代表的な方式 |
| SR-IOV | VM や DPDK アプリへ NIC の VF を渡す方式 |
| PCI Passthrough | 物理デバイスを専用 dataplane へ渡す方式 |
| OVS-DPDK | Open vSwitch の datapath を DPDK 化する構成 |
たとえば、VM 側は virtio-net に見えていても、ホスト側の dataplane は OVS-DPDK と vhost-user で構成されることがあります。逆に、SR-IOV で VF を VM に渡し、ゲスト内で DPDK アプリを動かす構成もあります。
DPDK が向く用途
DPDK は、すべての VM に必要な技術ではありません。むしろ、汎用 VM には過剰です。DPDK が向くのは、ネットワーク I/O がサービスの中心であり、pps や latency が重要な用途です。
- 仮想ルーター
- 仮想 Firewall
- ロードバランサー
- NFV / CNF dataplane
- パケット処理アプライアンス
- OVS-DPDK による高性能仮想スイッチ
一方、通常の Web サーバー、DB、一般的な業務サーバーでは、virtio-net や vhost-net で十分なことが多いです。DPDK を入れる前に、本当にネットワーク dataplane がボトルネックなのかを確認する必要があります。
DPDK が難しい理由
DPDK の難しさは、設定項目が多いことではありません。Linux が通常担っているネットワーク機能を、dataplane アプリケーションや周辺設計が引き受けることにあります。
- IP forwarding や routing を誰が持つか
- Firewall や ACL をどこで処理するか
- 監視統計をどこから取得するか
- 障害時に packet drop や queue 詰まりをどう見るか
- CPU コア専有をどう設計するか
- HugePages、NUMA、NIC binding をどう維持するか
DPDK アプリを自作する必要は、多くのインフラ運用ではありません。重要なのは、DPDK を利用する製品や基盤が、どの dataplane を持ち、どの責任を OS から引き受けているかを理解することです。
DPDK を採用する前に確認すること
DPDK を使うかどうかは、性能要件だけでなく運用要件で判断します。
- 問題は bandwidth か、pps か、latency か
- virtio-net / vhost-net / SR-IOV では足りないのか
- CPU コア専有を許容できるか
- HugePages と NUMA を固定して運用できるか
- 標準的な Linux networking の観測性を手放せるか
- dataplane アプリケーション側の監視と復旧手順を持てるか
VM パフォーマンスシリーズのまとめ
このシリーズでは、VM の性能を CPU、メモリ、ストレージ I/O、ネットワーク I/O の順に整理しました。Day8 の DPDK は、ネットワーク I/O 最適化の中でも最も専用性が高い領域です。
| 領域 | 主な設計要素 |
|---|---|
| CPU | CPU ピニング、NUMA、emulatorpin、IRQ |
| メモリ | HugePages、TLB、NUMA ローカリティ |
| ストレージ I/O | virtio、raw / qcow2、io_uring、passthrough |
| ネットワーク I/O | virtio-net、vhost、SR-IOV、DPDK |
VM の性能最適化は、設定を足して速くする作業ではありません。どのレイヤを短くし、どの抽象化を残し、どの運用制約を受け入れるかを決める設計作業です。
まとめ
DPDK は、Linux kernel network stack を通らない高速 dataplane を作るための技術です。HugePages、VFIO、polling、CPU ピニング、NUMA 設計を組み合わせることで、高 pps や低遅延のパケット処理に向きます。
一方で、DPDK は汎用 VM の標準構成ではありません。CPU コアを専有し、標準的な Linux networking の観測性や運用性を一部手放し、dataplane アプリケーション側に責任を移します。
DPDK を理解することは、仮想化ネットワークの高速化だけでなく、NFV、OVS-DPDK、VPP、クラウド上の高性能 NF を評価するための基礎になります。
書籍
作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ
ハイパーバイザ、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 パフォーマンス Day6 – vhost-net / vhost-user と kernel bypass の考え方
- VM パフォーマンス Day7 – SR-IOV / PCI Passthrough による仮想化レイヤの迂回
関連記事
- VyOS VPP 導入検討 – 実運用ルーターに VPP をそのまま適用する難しさ
- パブリッククラウド上で NFV 型 NF は成立するのか – アンダーレイ / オーバーレイ / 帯域制約で考える
- AWS EC2 は帯域確保サービスの基盤として使えるのか – baseline / burst / flow 制約で考える
- Ubuntu 22.04 OVS-DPDK 構築失敗



