Upgrade to Pro — share decks privately, control downloads, hide ads and more …

P4 ちょっと調べてみた

Masaru OKI
March 20, 2018

P4 ちょっと調べてみた

プログラマブルASICを中心に汎用なパケット処理プログラミングを提供するP4言語 (https://p4.org/) について、少し調べてみたことをまとめてみました。

Masaru OKI

March 20, 2018
Tweet

More Decks by Masaru OKI

Other Decks in Technology

Transcript

  1. P4
    ちょっと調べてみた
    Mar 20, 2018
    Masaru OKI @masaru0714

    View full-size slide

  2. P4の前にASICの話
    ● ASIC - Application Specific Integrated Circuit 特定用途向け集積回路。
    ● ネットワーク機器向けのASICは、ハードウェアでパケット処理する
    LSI。
    ● パケット転送やVLAN処理などはASICで。BGPなど複雑な処理はCPUで。
    ● CPUを使わずASICだけで処理すると高速。CPUを介すると低速。
    CPU
    ASIC
    メモリ
    ストレージ
    PHY
    PHY
    PHY
    PHY
    管理用NIC
    設定、運用
    ・ユーザートラフィック
    ・BGP, OSPF等

    View full-size slide

  3. ASICは万能ではない
    ● 集積回路を設計して試作、テスト、修正、試作、テストの繰り返し。
    ● 完成までに相当の時間とコストがかかる。数年、数億円。
    ● かかわる人数も大きい。数人でできるものではない。
    ● 大量に長期供給することによってコストを回収する。
    ● 設計変更は簡単ではない。ソフトウェアのような感覚では変更できない。
    ● つまり設計段階で盛り込んだ機能以外のことはできない。
    カスタムデータプレーンを実現するには通常の
    ASICでは力不足

    View full-size slide

  4. プログラマブルなパケット処理ハードウェア
    ● FPGA - Field Programmable Gate Array
    ○ 外部から回路情報を流し込んで回路を作れる LSI。試作や少量生産向け。
    ○ FPGA自体はとくにネットワーク向けに特化というわけではない。
    ○ FPGAを搭載したNICがある。
    ● Smart NIC
    ○ 定義があいまい だが、ここではCPUを介さず複雑な処理ができる NICの総称とする。
    ○ FPGA内蔵NIC、ARM内蔵NIC、NPU搭載NIC、あるいは単に多機能な NIC。
    ○ 基本的にPCやサーバに取り付けて使う。
    ○ 価格はピンキリ。
    ● プログラマブルASIC
    ○ ネットワーク向け ASICであるが、機能を外部からプログラミングできる製品。
    ○ パケット処理ロジック (ヘッダフィールドの値が xxだったら書き換る、等 )を記述可能。
    ○ ソフトウェア開発のように設計変更が可能。
    ○ プログラマブルASICを採用したネットワークスイッチ製品がある。

    View full-size slide

  5. プログラマブル、何が嬉しい?
    ● 典型的なパケット処理(L2,L3,ACL,QoS)でいいなら、従来の製品でいい。
    ● 多機能なものは高価格になるし使わない機能もあってコスト効率が悪い。
    ○ ある特殊な機能だけ使いたいときに、他の機能を含めたお金を払うことに。
    →従来のASICでは、処理できないパケットはどうやったって処理できない。
    ● 新しいトンネルプロトコルに対応できない
    (数年前のVXLANのような状況)。
    ○ 最近で言えば、例えば SRv6
    ● CPU回しにすれば、一応、処理できるが、遅くて実用にならない。
    ● 特殊なアクションは実行できない。
    CPU回しにすれば(以下同文)
    プログラマブルなら、処理を書き足せば、すぐ対応できる!

    View full-size slide

  6. どうやってプログラムを入れる?
    ● それぞれの製品ごとに用意されている手段で書き込む。
    互換性はない。
    ○ ツールで書き込む、アプリケーション起動時に書き込む、等。
    ○ 書き込み専用の USB接続が別途必要なハードウェアもある。
    ● エンドユーザができるのは、
    (できたとして)何を書き込むかを選ぶ程度。
    CPU
    ASIC
    メモリ
    ストレージ
    PHY
    PHY
    PHY
    PHY
    管理用NIC

    View full-size slide

  7. プログラム開発の手段
    ● FPGA: OpenCL等で記述して(HDL中間出力を介して)回路データに変換
    ● FPGA: VerilogなどのHDL(ハードウェア記述言語)を直接書いて変換
    ● Smart NIC: 製品ごとのSDKを用いて(主にC/C++言語で記述して)コンパイル
    ● プログラマブルASIC: 製品ごとのSDKを用いて(同上)コンパイル
    問題点
    ● ターゲットが変わるたびに一から学習する必要がある
    ● 成果物の、ターゲット間の再利用ができない
    ● 特定ベンダーの特定製品に依存することになる
    ● 技術情報を共有できない(SDKがNDAベースで提供されるため)
    ● 成果物をオープンにできない

    View full-size slide

  8. ターゲット非依存の開発手段: P4
    https://p4.org/
    ● P4 is a high-level language for programming network switches.
    ● 命名由来: Programming Protocol-Independent Packet Processors
    ● ネットワークスイッチをプログラムするための高級言語。
    ● プロトコル非依存、ターゲット非依存。
    ● FPGA、Smart NIC、プログラマブルASIC、ソフトウェアの実装がある。
    ● 代表的な対応製品はBarefoot Tofino (プログラマブルASIC)。
    ● https://github.com/p4lang で仕様書やサンプルコードなど公開中。
    ● P4 Language Consosiumは2018年3月、ONFとLinux Foundationに加入。

    View full-size slide

  9. P4を使ったデータプレーン開発と、その設定
    P4で定義できるもの
    ● parser
    ● match field
    ● action
    ● table
    ● pipeline
    テーブルへのエントリ設定方法は各自で用意。
    OpenFlowのmatchやaction,
    pipelineの仕様を自分で定義
    できる(自分で作らないといけ
    ない)
    OpenFlow Protocolのような標
    準の設定プロトコルはないので
    製品ごとに違う

    View full-size slide

  10. P4でデータプレーンをプログラムする
    ● ソースは共通(例外あり)。
    ● コンパイラはターゲット別。
    ● バイナリも。
    ● ASICへの投入も別(でした)。
    ● 設定も別。
    CPU
    ASIC
    メモリ
    ストレージ
    PHY
    PHY
    PHY
    PHY
    管理用NIC
    P4ソースコー

    P4
    コンパイラ
    ターゲット用
    バイナリ

    View full-size slide

  11. P4でデータプレーンをプログラムする(PIを使用)
    ● ソースは共通(例外あり)。
    ● コンパイラはターゲット別。
    ● バイナリも。
    ● ASICへの投入は共通!
    ● 設定も共通!
    CPU
    ASIC
    メモリ
    ストレージ
    PHY
    PHY
    PHY
    PHY
    管理用NIC
    P4ソースコー

    P4
    コンパイラ
    ターゲット用
    バイナリ

    View full-size slide

  12. ● P4Runtime Protocolを使い設定を投入する
    ● バイナリ投入も
    ● CLIも用意される
    ● https://github.com/p4lang/PI
    ○ Protocol Independent APIの略
    ● 普及はこれから?
    switch
    PI (P4Runtime)
    ASIC
    OS (driver)
    P4Runtime
    gRPC server
    P4Runtime
    Controller
    C言語で用意されたライブラリ
    を呼び出して作成する
    (あるいはベンダが提供する )
    P4Runtime Protocol
    アプリケーション フロントエンド
    P4ソー
    スコー

    P4
    コンパイ

    ターゲット用
    バイナリ

    View full-size slide

  13. すぐ試せるソフトウェア実装: bmv2
    https://github.com/p4lang/behavioral-model
    ● bmはBehaviorial Modelの略。
    ● bmをターゲットにしたP4コンパイラはP4を入力とし、JSONを出力する。
    ● bmv2はJSONを読み込んで、P4で書かれたとおりの振る舞いを実行する。
    ● 実用的な速度では動作しないので機能検証用。
    他のソフトウェア実装
    ● P4@ELTE/p4c DPDKを使うバイナリを出力する
    P4コンパイラ
    ● BMAcc (リンク先はPDF) DPDKを使ってBMv2を高速化したという発表
    ● PISCES P4によるカスタマイズが可能な
    OVSベースのソフトウェアスイッチ

    View full-size slide

  14. P4-14とP4-16の二つの仕様
    P4-14
    header_type ethernet_t {
    fields {
    dstAddr : 48;
    srcAddr : 48;
    etherType : 16;
    }
    }
    add_to_field(ipv4.ttl, -1)
    P4-16
    typedef bit<48> macAddr_t;
    header ethernet_t {
    macAddr_t dstAddr;
    macAddr_t srcAddr;
    bit<16> etherType;
    }
    modify_field(ipv4.ttl, ipv4.ttl - 1)
    書式が全然違っていて互換性がない!
    P4対応を謳っている製品の多くが対応しているのは P4-14

    View full-size slide

  15. Portable Switch Architecture (PSA)
    ● https://p4.org/p4-spec/docs/PSA-v1.0.0.html
    ● P4における標準ライブラリの仕様。
    ○ C言語に例えるとlibcに相当するもの。
    ● リファレンス実装まで提供されているわけではない模様。
    ● 各ベンダーが? PSAのpackageを提供すると、開発が楽になる。
    ● P4-16用。
    ● 2018年3月に仕様が1.0になったばかりなので今すぐには使えない。

    View full-size slide

  16. P4も万能ではない?
    ● QoSはデバイスにより機能やパラメータが様々で、P4で標準化されていない
    ○ meterとしてcolorをつけることまではできる。
    ● パケットのfragmentationやreassembleはできず、パケット生成機能はない
    ● fast path, slow pathといった帯域の割り当てはできない
    ● テーブルサイズ(最大エントリ数)の指定はターゲット依存パラメータ
    ● タイマーは用意されていない
    ベンダーによって違うが、独自パッケージとして提供していて(あるいは他の言語を使ってユーザが開発可能)、そのパッ
    ケージをP4を介して呼び出せるようにすることで解決できることがある。
    ● 例1 Netronome: C/C++で作成した機能とP4をSmartNIC内で接続できる
    ● 例2 Mellanox: L2/L3機能は従来のASICのロジックが提供され利用可能

    View full-size slide

  17. まとめ
    ● P4を使うとベンダ非依存のデータプレーンのプログラミングができる
    ● P4Runtimeが使えるようになると、設定なども標準化できる
    ● PSAが普及すると開発がよりいっそう楽になる
    ● 現在普及しているのはP4-14
    ● P4-16への対応が今後の普及の鍵
    ● bmv2(ソフトウェア実装)を使えば、手元で試せる
    誰もがカスタムデータプレーンを作れる時代がやってくる!
    (かもしれない)

    View full-size slide

  18. 参考資料
    ● プログラマブル・データプレーン時代に向けた
    ネットワーク・オペレーションスタック
    ● P4のはなし
    ● Announcing P4Runtime
    ● P4-based Dataplane with DPDK
    ● P4/CによるSmartNICファームウェア開発の取組み

    View full-size slide