【えっくすでぃーぴー】

XDP(eXpress Data Path) とは?

最終更新:
💡 受信の早い段階で、パケットの行き先を選ぶ

Linuxで受信パケットにeBPFプログラムを適用する仕組み。ドライバーで動くnativeモードなどがあり、破棄・転送・通常のネットワークスタックへの引き渡しを選べます。性能と対応は環境に依存します。

📌 このページのポイント
XDP:受信パケットの処理を選ぶ受信パケットXDPのeBPFプログラムnative:対応ドライバー内で処理XDP_PASS通常のスタックへXDP_DROP破棄するXDP_TX受信したIFから送信XDP_REDIRECT指定した対象へ転送代表的な選択肢。すべて同時に行うわけではない
IFはインターフェースです。PASSは通常のスタックへ渡し、TXは受信したIFから送信しますが必ず元の送信者への応答ではありません。対応モード・機器・プログラムで動作や性能が変わります。
ひよこ ひよこ
XDPは何をするの?
ペンギン先生 ペンギン先生
Linuxで受信パケットにeBPFプログラムを適用し、次の処理を選ぶ仕組みだよ。nativeモードでは対応するネットワークドライバー内で早い段階に処理できるんだ。
ひよこ ひよこ
全部のパケットが通常の処理を飛ばす?
ペンギン先生 ペンギン先生
違うよ。XDP_PASSなら通常のネットワークスタックへ引き渡す。XDP_DROPならそこで破棄する。不要な通信を早く捨てるなど、選んだアクションによって後の処理が変わるんだ。
ひよこ ひよこ
送り返すこともできる?
ペンギン先生 ペンギン先生
XDP_TXは受信したインターフェースから送信する。XDP_REDIRECTはヘルパーやマップなどで指定するインターフェースや対象へ転送する。TXが必ず元の送信者への応答になるわけではなく、ヘッダーなどの処理も必要だよ。
ひよこ ひよこ
どのLinuxでも同じ速度?
ペンギン先生 ペンギン先生
モードとドライバーの対応が違うよ。native、generic(skb)、対応機器へのオフロードを区別する。genericはnativeより後の段階で動き、性能もパケットの大きさ、プログラム、NIC、CPUなどで変わるんだ。
ひよこ ひよこ
実際の用途は?
ペンギン先生 ペンギン先生
MetaのKatranでは、XDPを使うeBPFプログラムでL4の負荷分散を行っているよ。フィルターにも使えるけど、上流の通信帯域が詰まる攻撃まで解決する保証はない。処理量だけでなく遅延や取りこぼしも確認しよう。
もっと詳しく知りたい人へ

AF_XDPと同じもの?

AF_XDPは、XDPからリダイレクトしたパケットをユーザー空間のアプリで扱うためのソケットです。XDPそのものとは区別します。ドライバーやモードによりコピー方式・ゼロコピー対応などが異なります。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「XDP」って出てきたら「受信パケットを早い段階でeBPFプログラムから処理する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「eXpress Data Path」 = 高速なデータ処理経路
💬 受信パケットを早い段階で処理する仕組みの名前です。「最速」や特定の倍率を保証する言葉ではありません。

参考資料

← 用語集にもどる