🚀
ONF Stratum v22.06
更新(2022年7月24):SONiC CLI のどの方式を採用するか?についてSlackでのコメントを追記
ONF Stratum v22.06 がリリースされた。解説ウェビナー "Stratum Techinar on July 19th" YouTube & Slide(pdf) の情報を元に、新機能や今後の動向に関するトピックスをまとめる。(なお、Stratumのリリースサイクルは3ヶ月のため次はv22.09の予定)
- 雑感
- Open Source で P4Runtime と gNMI/gNOI を提供する Stratum は、ベンダ依存を極力さけるために Switch OS を開発する際には利用を検討したいレベルまで充実してきている。
- SmartNIC型のIPU/DPUサポートが確実になったため、少なくとも全体設計(アーキテクチャ)デザインとどのように動作するかを理解しておく事が、今後数年間のデータプレーンプログラミングやオフロード技術を理解するのに必須な実装になってきた。
- やはり SONiC を深く理解していないとこの分野は深堀できない。
Stratum とは?
Stratum とは、主に White Box Switch 上で動作し、P4RT, gNMI, gNOI といった API (North Bound Interface) を提供する Switch OS で、ONOS等の SDN Controller から直接操作可能なAPIを提供する。また、BGP/OSPF等が動作する高機能な Switch OS の一部としても利用可能。現在 Target として Broadcom や Intel Tofino 等の Switch ASIC をサポートしており、DPDK (CPU) や IPU (SmartNIC) 等にも拡張が続けられている。
- Stratum リリース時の解説記事:Publickey: ネットワークスイッチをプログラマブルでgRPC対応にする「Stratum」をONFが発表。ホワイトボックススイッチのリファレンス実装に、Googleがオープンソース提供 (2018年3月19日)
- 技術詳細解説スライド(PDFの公開資料あり):JANOG46: 次世代SDNスイッチStratumとONOSコントローラーを使ったパケット制御(2020年8月27日)
Stratum Community への参加方法
- mailing list (stratum-dev)
- Slack (ONF Community Slack) => 参加方法
- GitHub Stratum Repo
- Stratum を試す:Next-Gen SDN Tutorial (GitHub)
Stratum v22.06 の主な変更点と考察
- ターゲット毎のステータス。np4intelの開発が停止されている事から、やはり SmartNIC型のTargetは IPU にフォーカスが移動している様子。
- Intel Tofino ... Stable : Active に開発が継続中
- Broadcom StrataXGS ... Stable : メンテナンスも継続中
- BMv2 (CPU) ... Stable : メンテナンスも継続中
- np4intel (N3000等のFPGA) ... PoC品質でかつ開発停止
- stratum-bf から stratum-bfrt へ移行 ... BFRT == BFRuntime (gRPC)
- 最新の P4Studio (SDE) 9.9.0 をサポート ... SDE9.9.0に同胞されるswitch.p4でSRv6をサポートしているので嬉しいニュース。9.7.x, 9.8.0 も継続サポート。
Stratum Techinar でのトピック
解説ウェビナー "Stratum Techinar on July 19th" YouTube & Slide(pdf) では、新しい v22.06 リリースについてだけでなく今後の方向性などについても解説されていた。
Stratum on IPU/DPU (SmartNIC)
- Stratum はいわゆるサーバ上では動作せず、今後もサポートしない方針。背景としては、現在サーバ上で動作しているアプリやコンテナはオーバレイネットワークで動作するため、データプレーンを制御するStratumとはマッチしないため。
- 逆に、IPU/DPU (SmartNIC) 上では動作するように開発が進められている。背景としては、現在の IPU/DPUを用いたSmartNICは物理的にはサーバ上に設置されているものの、サーバCPUからは独立して動作し、I/Oを制御するのに利用されているためStratumとマッチするため。
- 具体的には、TDI (Table Driven Interface) という API 経由で操作可能なよう、実装が進められている。
TDI (Table Driven Interface)
- https://github.com/p4lang/tdi
- Key, Action, DATA, Attributes, Operations を含むテーブルへの抽象的なAPIを提供する。
- IPUの他に、CPU(DPDK)やASIC(Tofino) もサポートしている。
- P4ベースのデータプレーンとの相性が良いが、P4でなくてもテーブルとして抽象化されたデータプレーンであれば利用可能。
- 2022年後半には、stratum_tdi をリリースする予定:P4-DPDK, IPU, Tofino をサポート
- 将来的には FPGA や他の Switch ASIC をサポートする予定だが時期は未定
- TDIのBFRTに対する優位性は?
- 両方 Table Driven Interface という点は共通している
- TDIは Open Source Community にフォーカスされたAPI Standard である。
- そのため、TDIは今後数年で他のチップベンダがサポートする可能性もある。
- 逆に、BFRTはIntel独自のAPIであり続ける(と予想される)
- 将来的には stratum_bfrt のサポートを停止し stratum_tdi へ移行してしまうのか?
- BFRTは現時点で最も標準的(Canonical)なインターフェース
- まさにチームで議論されている内容だが、今のところTDIとBFRTは並列してサポートされ続けられる。
SONiC をベースOSとして採用
次の Stratum v22.09 より、Stratum のデフォルトのベースOSを従来のONLからSONiCに移行する予定。
GitHub Stratum Repo: PR#932: Use SONiC as Stratum base OS
- ONLのメンテナンス状況が悪いので、ONLPに依存するといつか壊れる可能性が高い。
- 現時点でも、WedgeではONLを使う場合でもBSPは(ONLPではなく) Intel P4Studio (SDE) 付属のものを使っている。
- あくまでも SONiC をベースOSとして利用するだけなので、 control plane service は disable されている。
- ONLからSONiCへのマイグレーションガイドは用意されるのか?
- インストレーションガイドは必ず作成する予定。
- マイグレーションに関しては、そもそも「マイグレーション」する何かが必要かは分からないので、現時点では予定が無い。もし必要性やニーズがあるなら、GitHubでPRを登録して欲しい。
- 将来的にはSONiC CLIでStratumを操作できるようにしたい(設定やPort Stats表示など)
- SONiC には Click と Klish ベースの2種類のCLIがあるが、どちらを使うのか? ⇒ Slack (onf-community.slack.com | stratum-dev) で質問したところ、まだ未定であり、"両方" "より価値の高いほう" "簡単に実装できるほう" のいずれも有り得るとのコメント有り。
Discussion
CLIはどちらでもあまり関係なくて(最終的にconfig_dbに書き込むだけなので)、SONiC servicesを利用できるようにする場合はSAI→gNMI/gNOI変換とSAIの想定する機能を実装したP4プログラムの用意が必要と考えています。host interfaceのあたりはLinuxのTUN/TAPの実装も必要そうです。