データプレーン周り
SDNという広いレイヤーだけどデータプレーン周りも含めていい感じにまとめてくれてる。
P4
dataplane処理をプログラマブルに記述できる言語。OSS。文法はc like。
p4は様々なハードウェアに対応していて、CPU,NPU,FPGAに対応してバイナリへコンパイル可能。
プログラマブルにデータプレーン処理を記述できるので、各環境に最適なL4LBやプロトコル処理の実装ができる。
P4の動き
大きく分けて次のような流れでパケット処理を行う。
Parser -> Ingress Match-Action -> Traffic Manager -> Egress Match-Action -> Deparser
Parserでパケットのヘッダ等々のパースをおこない、Ingress でchecksumの検証、またパケット状態に応じたアクションを行う。その後ルーティング処理等をしてEgress で同様にchecksumを更新、またパケット状態に応じたアクションを行う。最後にパケットとしてヘッダを付けてカプセル化して送信を行う。
Parser
全てのパーサーはstart,accept,rejectの3つのstateとユーザー定義のstateを持つ。
また各stateから別のstateへは自由に遷移することができる。stateがループするような構成も作れる。
Match-Action
P4ではMatch-Actionを行う際にTableという概念のPipline処理を使う。
何がマッチするか、またどんな処理をするかを表現したruleがあり、それが連なったものをTableと表現している。
Tableにはkey,Action,Action Dataの3つで構成される。
p4ではライブラリ側でいくつか定義済みのtable, Actionがある。
DPDK(Data Plane Developjment Kit
DPDKはlinuxでカーネル処理をバイパスしてユーザーランド(アプリケーション)で直接処理するための技術。 カーネル側でやっていた前処理をアプリケーション側で処理することになるが、必要最低限の処理だけをして高速なパケット処理を実現したり、独自の機構をいれることができる。