Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
P4 ちょっと調べてみた
Search
Masaru OKI
March 20, 2018
Technology
4
2.7k
P4 ちょっと調べてみた
プログラマブルASICを中心に汎用なパケット処理プログラミングを提供するP4言語 (
https://p4.org/
) について、少し調べてみたことをまとめてみました。
Masaru OKI
March 20, 2018
Tweet
Share
More Decks by Masaru OKI
See All by Masaru OKI
SONiCを自前でビルドする話
imasaruoki
1
740
Ansible把握した 1日目
imasaruoki
0
250
NPLによるデータプレーンプログラミング
imasaruoki
8
2.2k
SONiC近況報告 2019/Fall
imasaruoki
1
1.2k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.2k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.1k
SONICイントロダクション
imasaruoki
1
420
SONiCをはじめてみよう
imasaruoki
4
1.6k
SONiCで設定するFRRouting
imasaruoki
0
1.4k
Other Decks in Technology
See All in Technology
運用改善、不都合な真実 / 20240722-ssmjp-kaizen
opelab
17
8k
【基調講演】変える、今ここから ― IoTとAIで紡ぐ未来
soracom
PRO
0
310
ゆめみのアクセシビリティの現在地と今後
ryokatsuse
3
290
データベース研修 分析向けSQL入門【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
110
LINE WORKSへ簡単通知!Incoming Webhookアプリの紹介
mmclsntr
0
110
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
エンジニア向け会社紹介資料
caddi_eng
14
220k
サーバーレスAPI(API Gateway+Lambda)とNext.jsで 個人ブログを作ろう!
shuntaka
PRO
0
560
AWSでRAGを作る法方
sonoda_mj
1
140
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.6k
コンテナ・K8s研修 - 前半 コンテナ基礎・ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
How GitHub (no longer) Works
holman
305
140k
Build The Right Thing And Hit Your Dates
maggiecrowley
28
2.2k
Gamification - CAS2011
davidbonilla
78
4.9k
What's in a price? How to price your products and services
michaelherold
239
11k
Music & Morning Musume
bryan
43
5.9k
Debugging Ruby Performance
tmm1
71
11k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Statistics for Hackers
jakevdp
792
220k
Making the Leap to Tech Lead
cromwellryan
127
8.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Transcript
P4 ちょっと調べてみた Mar 20, 2018 Masaru OKI @masaru0714
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等
ASICは万能ではない • 集積回路を設計して試作、テスト、修正、試作、テストの繰り返し。 • 完成までに相当の時間とコストがかかる。数年、数億円。 • かかわる人数も大きい。数人でできるものではない。 • 大量に長期供給することによってコストを回収する。 •
設計変更は簡単ではない。ソフトウェアのような感覚では変更できない。 • つまり設計段階で盛り込んだ機能以外のことはできない。 カスタムデータプレーンを実現するには通常の ASICでは力不足
プログラマブルなパケット処理ハードウェア • 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を採用したネットワークスイッチ製品がある。
プログラマブル、何が嬉しい? • 典型的なパケット処理(L2,L3,ACL,QoS)でいいなら、従来の製品でいい。 • 多機能なものは高価格になるし使わない機能もあってコスト効率が悪い。 ◦ ある特殊な機能だけ使いたいときに、他の機能を含めたお金を払うことに。 →従来のASICでは、処理できないパケットはどうやったって処理できない。 • 新しいトンネルプロトコルに対応できない
(数年前のVXLANのような状況)。 ◦ 最近で言えば、例えば SRv6 • CPU回しにすれば、一応、処理できるが、遅くて実用にならない。 • 特殊なアクションは実行できない。 CPU回しにすれば(以下同文) プログラマブルなら、処理を書き足せば、すぐ対応できる!
どうやってプログラムを入れる? • それぞれの製品ごとに用意されている手段で書き込む。 互換性はない。 ◦ ツールで書き込む、アプリケーション起動時に書き込む、等。 ◦ 書き込み専用の USB接続が別途必要なハードウェアもある。 •
エンドユーザができるのは、 (できたとして)何を書き込むかを選ぶ程度。 CPU ASIC メモリ ストレージ PHY PHY PHY PHY 管理用NIC
プログラム開発の手段 • FPGA: OpenCL等で記述して(HDL中間出力を介して)回路データに変換 • FPGA: VerilogなどのHDL(ハードウェア記述言語)を直接書いて変換 • Smart NIC:
製品ごとのSDKを用いて(主にC/C++言語で記述して)コンパイル • プログラマブルASIC: 製品ごとのSDKを用いて(同上)コンパイル 問題点 • ターゲットが変わるたびに一から学習する必要がある • 成果物の、ターゲット間の再利用ができない • 特定ベンダーの特定製品に依存することになる • 技術情報を共有できない(SDKがNDAベースで提供されるため) • 成果物をオープンにできない
ターゲット非依存の開発手段: 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に加入。
P4を使ったデータプレーン開発と、その設定 P4で定義できるもの • parser • match field • action •
table • pipeline テーブルへのエントリ設定方法は各自で用意。 OpenFlowのmatchやaction, pipelineの仕様を自分で定義 できる(自分で作らないといけ ない) OpenFlow Protocolのような標 準の設定プロトコルはないので 製品ごとに違う
P4でデータプレーンをプログラムする • ソースは共通(例外あり)。 • コンパイラはターゲット別。 • バイナリも。 • ASICへの投入も別(でした)。 •
設定も別。 CPU ASIC メモリ ストレージ PHY PHY PHY PHY 管理用NIC P4ソースコー ド P4 コンパイラ ターゲット用 バイナリ
P4でデータプレーンをプログラムする(PIを使用) • ソースは共通(例外あり)。 • コンパイラはターゲット別。 • バイナリも。 • ASICへの投入は共通! •
設定も共通! CPU ASIC メモリ ストレージ PHY PHY PHY PHY 管理用NIC P4ソースコー ド P4 コンパイラ ターゲット用 バイナリ
• 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 コンパイ ラ ターゲット用 バイナリ
すぐ試せるソフトウェア実装: 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ベースのソフトウェアスイッチ
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
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になったばかりなので今すぐには使えない。
P4も万能ではない? • QoSはデバイスにより機能やパラメータが様々で、P4で標準化されていない ◦ meterとしてcolorをつけることまではできる。 • パケットのfragmentationやreassembleはできず、パケット生成機能はない • fast path,
slow pathといった帯域の割り当てはできない • テーブルサイズ(最大エントリ数)の指定はターゲット依存パラメータ • タイマーは用意されていない ベンダーによって違うが、独自パッケージとして提供していて(あるいは他の言語を使ってユーザが開発可能)、そのパッ ケージをP4を介して呼び出せるようにすることで解決できることがある。 • 例1 Netronome: C/C++で作成した機能とP4をSmartNIC内で接続できる • 例2 Mellanox: L2/L3機能は従来のASICのロジックが提供され利用可能
まとめ • P4を使うとベンダ非依存のデータプレーンのプログラミングができる • P4Runtimeが使えるようになると、設定なども標準化できる • PSAが普及すると開発がよりいっそう楽になる • 現在普及しているのはP4-14 •
P4-16への対応が今後の普及の鍵 • bmv2(ソフトウェア実装)を使えば、手元で試せる 誰もがカスタムデータプレーンを作れる時代がやってくる! (かもしれない)
参考資料 • プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック • P4のはなし • Announcing P4Runtime •
P4-based Dataplane with DPDK • P4/CによるSmartNICファームウェア開発の取組み