プログラマブルデータプレーン (P4) & ネットワーク オペレーションスタック Okinawa Open Days 2017 Forum 海老澤健太郎 @ Ponto Networks, Inc. ebiken@pontonetworks.com プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 1
Ponto Networks, Inc. Delaware C corp, established Dec 2015 PontOS Dataplane agnostic Network Operation System + Stack providing performance, programmability, openness, scalability and modularity leveraging multiple hardware accelerated dataplanes like programmable silicon powered WhiteBox switches, NPU/FPGA powered SmartNICs and more. Headquarters San Diego, California (USA) Development Tokyo (Japan) + San Jose (USA) Investors Ex-executives of Internet and Mobile industry プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 2
データプレーン とは? イーサネットヘッダを解析 宛先アドレスを KEY に MAC テーブルを参照 学習済みポートへ転送 ヘッダ解析 (Parse) テーブル参照 (Match) 変更 転送 (Action) パケット処理パイプライン プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 3
最も柔軟な データプレーン とは? CPU どんな処理も実装できる ( プログラマブル ) プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 4
ハードウェア データプレーン (ASIC) を使う利用 ピーク性能 Gbps 単価 CPU 300Gbps 10,000 円 ASIC 6.5Tbps 461 円 数字は概算 ( 桁感の例 ) です CPU/ASIC 1 個搭載のサーバー / スイッチ価格を 300 万円として比較 CPU: XEON PLATINUM 8180 (PCIe 3 x 48 = 300Gbps) ASIC: Barefoot Tofino (100GbE x 65 port) を Layer 2/3 switch として利用 数字は概算 ( 桁感の例 ) です CPU/ASIC 1 個搭載のサーバー / スイッチ価格を 300 万円として比較 プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 5
ハードウェア データプレーン (ASIC) を使う利用 機能追加時に必要な開発体制とコスト CPU ASIC ピーク性能 300Gbps 6.5Tbps Gbps 単価 10,000 円 461 円 開発体制 数人 数十人 開発コスト ( 人件費除く ) 数百万円 数億円 ASIC 作り直し 数字は概算 ( 桁感の例 ) です CPU/ASIC 1 個搭載のサーバー / スイッチ価格を 300 万円として比較 プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 6
ASIC のスケーラビリティ + CPU の開発コスト CPU ASIC プログラマブル ASIC ピーク性能 300Gbps 6.5Tbps 6.5Tbps Gbps 単価 10,000 円 461 円 461 円 開発体制 数人 数十人 数人 開発コスト ( 人件費除く ) 数百万円 数億円 数百万円 数字は概算 ( 桁感の例 ) です CPU/ASIC 1 個搭載のサーバー / スイッチ価格を 300 万円として比較 プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 7
プログラマブル データプレーン の登場 イノベーションがスケールする時代に 試作 試行コストが小さくなる サーバーで起きたイノベーションをネットワークへコスト & 性能の良いプラットフォームでイノベーションが実現 個人で開発への参加が可能 オープンな活動の活性化より多くの人が新しい試みに参加できるように プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 8
プログラマブル データプレーン で プログラム できること ヘッダフォーマットの定義パースグラフの構築 マッチフィールドの定義テーブルタイプの定義 (Exact / Masked) MAC address IPv4 address proto + TCP ports ( any header fields ) アクションの定義フィールド操作ロジック drop copy forward push / pop add(+) sub(-) multiple(*) bit shift (<<) (>>) ヘッダ解析 (Parse) テーブル参照 (Match) 変更 転送 (Action) プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 9
プログラマブル データプレーン ( ハードウェア ) の現在 メーカー 製品名称タイプ開発環境 Cavium XPliant ASIC XDK Barefoot Tofino ASIC P4 製品出荷実績多数 ( クラウド事業者 ) OEM:Arista, Brocade 大規模事業者を中心とした限定出荷検証 開発用筐体は一般入手可能 Netronome NFP NPU C-based SmartNIC 1 枚から広く入手可能 OEM 多数 ( 非公開 アプライアンス製品等 ) NetFPGA (Xilinx) FPGA SDNet NetFPGA は研究 教育目的が中心 Xilinx FPGA 搭載ボード (+SDNet) としても入手可能 代表的な製品のみ記載 他多数のメーカーもプログラマブル ASIC/NPU/FPGA リリースを予定している プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 10
プログラマブル データプレーンの課題 (1) メーカー 製品名称タイプ開発環境 Cavium XPliant ASIC XDK Barefoot Tofino ASIC P4 Netronome NFP NPU C-based NetFPGA (Xilinx) FPGA SDNet 自由にプログラム からは やや遠い 言語もツールも異なる過去の学習が生かされない SDK 入手に別途契約が必要な場合も プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 11
P4: 汎用データプレーン プログラミング言語の登場 Programming Protocol-Independent Packet Processors P4 Source Code P4 Compiler Target (P4 対応 Dataplane) パケット処理パイプラインの定義パーサーやテーブル アクション など P4 を Target 上で実行可能な形式にコンパイル Target 毎に提供される P4 Dataplane runtime に従いパケットを処理 Hardware: ASIC, NPU, FPGA Software: CPU プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 12
ヘッダ定義パーサー定義テーブル定義 P4 プログラム ( 例 ) パイプライン定義 C 構造体のようにプロトコルヘッダを定義 パーサー テーブル パイプラインを簡単な構文で記述可能 プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 13
プログラマブル データプレーンを用いたアプリケーション検討のワーキンググループ発足 (2017 年 11 月 ) https://p4.org/members/announcing-the-p4-applications-working-group/ プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 14
p4alu Arithmetic Logic Unit written in P4 Source Code on GitHub https://github.com/ebiken/p4sandbox/tree/master/p4alu Generic P4 information in Japanese ( 日本語 ) How to Run P4 Behavior Model v2 (JAPANESE) https://www.slideshare.net/kentaroebisawa/how-to-run-p4-bmv2 プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 15
ALU Integer Operand Integer Operand opcode op1 result op2 Integer Result プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 16
p4alu header format Integer Operand Integer Operand opcode op1 result op2 Integer Result プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 17
P4 parser プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 18
P4 action プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 19
P4 table & control プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 20
Setup netns based hosts BMv2 running p4alu プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 21
Compile and Run on BMv2 プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 22
Configure Tables via runtime_cli Forward Packet from/to port#0 <-> port#1 Apply action based on opcode opcode: 1 => p4alu_add opcode: 2 => p4alu_sub BMv2 Runtime CLI command format プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 23
Packet Format (sending from host0) opcode: 0x01 => p4alu_add opcode: 0x02 => p4alu_sub プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 24
CuiShark by @slankdev https://github.com/slankdev/cuishark packets after going through p4alu op2 result op1 opcode プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 25
CuiShark by @slankdev https://github.com/slankdev/cuishark packets after going through p4alu op2 result op1 opcode プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 26
プログラマブル データプレーンの課題 データプレーンをどうコントロールするか? プログラマブル データプレーン時代に必要な ネットワーク オペレーション スタック とは? プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 27
プログラマブル データプレーン時代の ネットワーク オペレーション スタック に何が求められるか? 1. 異なるデータプレーン ハードウェアへの対応 2. パケット処理パイプラインの管理 (Match/Action Table) 3. プロトコル エージェントの入れ替え 4. ユーザーアプリケーションの動作 シェルアクセス サーバー同様の開発ツールチェイン 5. アプリケーションのための API 都度コンパイルでなく grpc/rest 等 API で制御可能 User Applications Modular Protocol Agents Dataplane Abstraction API Config Manager Pipeline Profile Dataplane (ASIC, NPU, FPGA, CPU) CLI プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 28
PontOS² コンセプト & アーキテクチャ External Apps Mngment System Operator Application Friendly API ネットワークプログラマビリティを実現するアプリケーション フレンドリーな開発環境 Management Plane User User Apps Apps SDK (Language API) REST API (WebAPI) Linux shell (CLI as an Application) オープンソースにより構成されたビルディング ブロック Flexible Data plane プロファイル選択により入れ替え可能なパケット処理エンジン Native Applications Native Native Applications Applications Modular Modular Routing Routing Agents Agents FEA (Forwarding Engine Abstraction) Flex ASIC (XPliant etc.) Data Plane Flexible Data Plane Linux Kernel Network Stack Config Broker (data store) Data Path Profile Manager P4 (SmartNIC, NPU, FPGA) プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 29
プログラマブル ASIC デモ GTP Parser & Match/Action + Stats on Cavium XPliant Computex Taipei 台湾 台北... 2017 年 6 月 Open Compute Project サンノゼ... 2017 年 3 月 RAN EPC SGi Internet Service Functions enodeb SGW PGW GW GTP-U Tunnel GTP-U Tunnel VLAN, etc. プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 30
GTP TEID match/action & statistics ( デモ構成図 ) GTP トラフィック生成用サーバー (VM) host1 host2 10.0.40.1/24 10.0.40.2/24 Mngmnt Port デモ GUI (Web ブラウザ ) 100GbE 100GbE REST API GTP Traffic (TEID=100/200/300/400) XPliant スイッチ (White Box) Parse GTP Header Match/Action based on GTP TEID stats via REST API Mngmnt Port = IP Interface プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 31
PontOS² Implementation ( 実装 ) Zebra 2.0 Open Source Network Stack Fresh rewrite of Zebra/Quagga Data Plane agnostic NetOS Stack PontOS² Seamless integration with multiple Proprietary Data Plane platforms Performance and quality control for service providers Management Plane User User Apps Apps Native Applications Native Native Applications Applications Modular Modular Routing Routing Agents Agents REST API (WebAPI) FEA (Forwarding Engine Abstraction) Flex ASIC (XPliant etc.) Data Plane External Apps Mngment System SDK (Language API) Flexible Data Plane Linux Kernel Network Stack Operator Linux shell (CLI as an Application) Config Broker (data store) Data Path Profile Manager P4 (SmartNIC, NPU, FPGA) プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 32
Zebra 2.0 on GitHub!! https://github.com/coreswitch/zebra https://github.com/coreswitch/openconfigd Zebra 2.0 Installation Install openconfigd $ go get github.com/coreswitch/openconfigd/openconfigd Install CLI $ go get github.com/coreswitch/openconfigd/cli_command $ cd $GOPATH/src/github.com/ coreswitch /openconfigd/cli $./configure; make $ sudo make install $ cd $GOPATH/src/github.com/coreswitch/openconfigd/bash_completion.d $ sudo cp cli /etc/bash_completion.d/ Install zebra $ go get github.com/coreswitch/zebra/rib/ribd プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 33
Written from scratch in Go openconfigd configuration system yang model CLI (Junos like) etcd for scalability zebra/ribd dataplane management (ex: FIB) zebra/fea multiple dataplane support link/port, bridge domain etc. New bgpd/ospfd multi-core support quaggad & zebra protocol for backward compatibility Zebra 2.0 Architecture openconfigd quagga quaggad bgpd / ospfd Tap interface vtysh grpc (yang model) zebra proto Linux dataplane netlink プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 34 CLI openconfigd grpc ribd grpc fea zebra grpc JSON grpc etcd bgpd/ospfd HW API (SAI, XDK etc.) Hardware dataplane
Zebra 2.0 アーキテクチャの特徴 オープンかつモジュラーなアーキテクチャ 例 :openconfigd 部分だけを利用して他製品に組み込み Lagopus Router https://github.com/lagopus/vsw 新しい技術のユースケース確認が身近に 例 :SRv6 対応 (2017 年 11 月 ) オープン & オープンソースのデータプレーン管理プラットフォーム プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 35
Zebra2.0 SRv6 on Linux dataplane https://github.com/coreswitch/zebra/blob/master/docs/srv6.md プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 36
Zebra2.0 + OpenConfigd + Quagga ospfd/bgpd On LXC Containers https://github.com/coreswitch/zebra/blob/master/docs/quagga-lxc.md プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 37
Basic routing/switching features (ACL, NAT etc.) New Protocol Support SRv6 Network Programming Forwarding Engine Abstraction ASIC support (via SAI) P4 dataplane (via SAI or P4-PI) New Protocol Agents BGP, OSPFv2, OSPFv3, IS-IS Zebra 2.0 (future roadmap) プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 38
プログラマブル データプレーン時代に目指すもの データプレーンに自由を スケーラブルなデータプレーンを 個人 がプログラムできる時代に プログラマブルデータプレーン (P4)& ネットワーク オペレーションスタック OkinawaOpenDays フォーラム 2017/12/07 39