P4によるプログラマブルデータプレーン
スイッチの転送ロジックを固定機能ASICの外へ解き放ち、パケット処理そのものをコンパイル対象にする発想が腑に落ちる。パーサ・テーブル・デパーサという処理モデルからインネットワークコンピューティングまで原理で理解できる。
- 1.P4はスイッチの転送ロジックをプログラムとして記述する言語で、パーサ・マッチアクションパイプライン・デパーサという処理モデルをターゲットのASIC/FPGA/ソフトウェアへコンパイルする。
- 2.固定機能ASICは対応プロトコルとテーブル構成が製造時に固定されるが、P4搭載スイッチ(PISA)はヘッダ定義からテーブル段数まで自由に組み替えられ、新プロトコルをファームウェア更新なしに追加できる。
- 3.パケットがスイッチ内で完結するインネットワークコンピューティング(集約・テレメトリ・ロードバランシング等)により、サーバー側の処理をオフロードして遅延と負荷を削減できる。
転送ロジックを製造後に書き換える
従来のスイッチASICは、対応するヘッダ形式(Ethernet、IPv4、VLANなど)とテーブルの構成が製造時点で固定されています。新しいカプセル化方式やカスタムヘッダを扱いたければ、ASIC自体を作り直すかベンダーのファームウェア更新を待つしかありませんでした。転送ロジックがハードウェアに焼き込まれている以上、ネットワークオペレータ自身がパケット処理の中身を変える余地はほぼありません。
P4(Programming Protocol-independent Packet Processors) は、この制約を取り払うために設計されたドメイン固有言語です。「どのヘッダをどう解釈し、どのテーブルでどう照合し、どう書き換えて送り出すか」をプログラムとして記述し、それをターゲットのチップ(P4対応ASIC、FPGA、汎用CPU上のソフトウェアスイッチ)向けにコンパイルします。プロトコルの知識がASICの回路ではなくコンパイル対象のプログラムとして表現される、これがP4の核心です。
P4名称中のProtocol-independentは「特定プロトコルを前提にしない言語設計」を指します。IPv4やEthernetをあらかじめ知っている必要はなく、任意のヘッダ構造をP4プログラム内で定義できます。ベンダーがASICに焼き込む対象は「P4を実行できる汎用パイプライン」であり、個々のプロトコル対応はソフトウェアの領域に移ります。
PISA:パーサ・マッチアクション・デパーサ
P4が想定する処理モデルは PISA(Protocol Independent Switch Architecture) と呼ばれ、パケットは3段階を順に通過します。
| 段階 | 役割 | P4での記述対象 |
|---|---|---|
| パーサ | バイト列からヘッダを抽出し構造体へ展開 | ヘッダ定義とステート遷移(パーサFSM) |
| マッチアクションパイプライン | 抽出済みヘッダをテーブルで照合し処理を適用 | テーブル定義、キー、アクション本体 |
| デパーサ | 処理後のヘッダ構造体をバイト列へ再構成 | 出力ヘッダの並びと書き出し順 |
パーサは状態機械として記述され、「Ethernetヘッダを読み、EtherTypeが0x0800ならIPv4ヘッダへ遷移」のように、次に読むべきヘッダをフィールド値から決めます。任意の深さのカプセル化(トンネル内トンネルなど)もステート遷移として素直に表現できます。パース後、各ヘッダはメタデータとともに**PHV(Packet Header Vector)**というオンチップのレジスタ群に展開され、以降の段はバイト列ではなくこの構造化データを扱います。
生パケット ─Parser─> PHV(構造化ヘッダ集合)
│
▼
Match-Action Stage 1
Match-Action Stage 2
…
Match-Action Stage N
│
▼
Deparser ─> 出力パケット
マッチアクションテーブルはP4処理の中心で、テーブルごとに「どのフィールドの組をキーにするか(マッチキー)」と「一致時にどのアクションを実行するか」を定義します。マッチの種類には完全一致、最長プレフィックス一致、範囲一致、三項一致(TCAMによるワイルドカード)があり、ルーティングテーブルならプレフィックス一致、ACLなら三項一致、というように用途に応じて選べます。アクションは「特定の出力ポートへ転送」「TTLをデクリメント」「カプセル化ヘッダを追加」など、PHV上のフィールドを読み書きするプリミティブの組み合わせです。テーブルはパイプライン上に複数段並び、あるステージの出力(書き換えたPHVやメタデータ)が次のステージの入力になります。
最後のデパーサはPHVを実際のバイト列へ書き戻します。あるヘッダを削除したければデパーサでその出力を省略するだけでよく、逆に新しいヘッダを追加する処理もパーサ・テーブル・デパーサの組み合わせで表現できます。
P4プログラムが定めるのはテーブルの「形」(キーの構成、アクションの種類、段数)であり、テーブルの「中身」(個々のエントリ)はコントロールプレーンがランタイムAPI(P4Runtimeなど)経由で挿入します。コンパイル時に決まるパイプライン構造と、実行時に書き換わるテーブルエントリの分離が、P4スイッチの柔軟性の設計上の要です。
固定機能ASICとの違い
固定機能ASICでは、ヘッダ解析ロジックとテーブルの段数・キー幅がすべてハードウェア設計時に決まっています。VXLANのような新しいカプセル化に対応するには、そのヘッダを解釈する回路が最初から用意されているか、ベンダーが用意するまで待つしかありません。P4対応スイッチでは、同じチップ(PISAを実装したASIC、代表例がTofinoのようなプログラマブルスイッチングASIC)の上で、P4プログラムを差し替えるだけでヘッダ形式・テーブル構成・処理の順序そのものを変更できます。
| 観点 | 固定機能ASIC | P4プログラマブルASIC |
|---|---|---|
| 対応ヘッダ | 製造時に固定 | P4プログラムで自由に定義 |
| 新プロトコル追加 | ハードウェア更新待ち | P4を書いてコンパイル・再ロード |
| テーブル構成 | 固定の段数・キー幅 | パイプラインをプログラムで設計 |
| 性能特性 | 専用回路で高いPPS | プログラム次第だが同等の回線速度を狙える設計 |
| デバッグ・可視化 | ベンダー提供機能のみ | 独自テレメトリをプログラムに埋め込み可能 |
処理速度の面でも、P4対応ASICはパイプラインの各ステージを固定サイクルで通過させるアーキテクチャを採用し、プログラム可能でありながら回線速度でのパケット処理を狙う設計になっています。ただし全ての段が有限のマッチアクションステージ数とPHV幅という物理的な資源制約の中に収まる必要があり、任意に複雑なプログラムが無制限に載るわけではありません。
インネットワークコンピューティングへの応用
転送ロジックをプログラムできるということは、パケットがスイッチを通過する過程そのものに計算を仕込めることを意味します。これがインネットワークコンピューティング(In-Network Computing)の基盤です。代表的な応用は次のとおりです。
- インバンドテレメトリ(INT): パケットが通過するたびに各スイッチが自分のキュー長・タイムスタンプ・ECMPの選択結果などをヘッダに追記していく仕組みで、経路上の詳細なテレメトリをパケット自身が運んで戻ってきます。専用の監視トラフィックを別途流さずに、実トラフィックに相乗りしてネットワーク内部の状態を可視化できます。
- インネットワーク集約: 分散機械学習の勾配集約のように、複数サーバーからの値をスイッチ内で合算してから次段へ送ることで、ロードバランサを経由するより手前でトラフィック量そのものを減らします。
- スイッチ内ロードバランシング・輻輳検知: テーブルのアクションとしてハッシュベースの負荷分散ロジックを実装したり、キュー長の変化をヘッダに埋め込んで送信元へフィードバックしたりできます。
スイッチのマッチアクションステージは、汎用CPUのような分岐やループを自由に書ける計算モデルではありません。各ステージで使える演算は限られた算術・論理プリミティブとテーブル参照であり、ステージ数もチップ設計で上限があります。「なんでもスイッチに寄せられる」わけではなく、パケットごとに一定サイクルで完了できる処理だけがオフロードの対象になります。
(1)PISAの3段(パーサ・マッチアクションパイプライン・デパーサ)とPHVの役割を押さえる。(2)P4プログラムが決めるのはテーブルの形、エントリはP4Runtime等でランタイムに挿入される。(3)固定機能ASICとの違いは「新プロトコル対応にハードウェア更新が要るか、プログラム再ロードで済むか」。(4)インネットワークコンピューティングはパケット処理の資源制約(有限ステージ・PHV幅)の範囲内で成立する。
まとめ
P4は、スイッチの転送ロジックを固定回路からコンパイル対象のプログラムへ移した言語です。パケットはパーサでヘッダを構造化データ(PHV)へ展開され、マッチアクションパイプラインの各ステージでテーブル照合とアクション適用を受け、デパーサで再びバイト列へ組み立てられます。固定機能ASICが対応プロトコルとテーブル構成を製造時に固定するのに対し、P4対応スイッチはヘッダ定義からパイプライン構造までプログラムで指定でき、新プロトコルの追加にハードウェア更新を要しません。この柔軟性は、インバンドテレメトリやインネットワーク集約のようにパケット処理そのものに計算を埋め込むインネットワークコンピューティングの土台にもなっています。ただし計算資源は有限のステージ数とPHV幅に縛られており、万能の計算機ではなく「回線速度で完了できる処理に特化したプログラマブル転送」である点が、P4を理解するうえでの現実的な境界線です。
ネットワーク Article
P4によるプログラマブルデータプレーンを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
P4
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 6
導入後に効く点
固定機能ASICは対応プロトコルとテーブル構成が製造時に固定されるが、P4搭載スイッチ(PISA)はヘッダ定義からテーブル段数まで自由に組み替えられ、新プロトコルをファームウェア更新なしに追加できる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「P4 / プログラマブルデータプレーン」に近いか確認する。
- 強みである「P4はスイッチの転送ロジックをプログラムとして記述する言語で、パーサ・マッチアクションパイプライン・デパーサという処理モデルをターゲットのASIC/FPGA/ソフトウェアへコンパイルする。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。