手当たり次第に書くんだ

飽きっぽいのは本能

VM パフォーマンス Day8 – DPDK による高速 dataplane と NFV の基本

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 networkingDPDK
処理場所カーネル中心ユーザー空間 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-userDPDK dataplane と VM を接続する代表的な方式
SR-IOVVM や DPDK アプリへ NIC の VF を渡す方式
PCI Passthrough物理デバイスを専用 dataplane へ渡す方式
OVS-DPDKOpen 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 最適化の中でも最も専用性が高い領域です。

領域主な設計要素
CPUCPU ピニング、NUMA、emulatorpin、IRQ
メモリHugePages、TLB、NUMA ローカリティ
ストレージ I/Ovirtio、raw / qcow2、io_uring、passthrough
ネットワーク I/Ovirtio-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 パフォーマンス Day8 – DPDK による高速 dataplane と NFV の基本

コメントを残す

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

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

トップへ戻る