# Stratum
Stratum は [[Open Networking Foundation]] のオープンソースプロジェクトであり、Google が提供した本番品質のコードを出発点とする。[[Open Network Linux (ONL)]] の上で動く **Thin Switch OS** と呼ばれ、「薄い(thin)」という形容が本質的である。実装そのものは事実上 API シムにすぎず、価値の中心はそのシムが公開するインターフェース群にある。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 5 Switch OS]] ch.5 §5.1)
## 公開する3つのノースバウンドインターフェース
Stratum は3つの主要なノースバウンドインターフェース(NBI)を公開する。(1) [[P4Runtime]] — スイッチのフォワーディング挙動を制御する、(2) [[gNMI]] — スイッチを構成する、(3) gNOI — その他の運用変数にアクセスする。いずれも gRPC サービスであり、対応する Protocol Buffers 定義を持つ。protobuf と gRPC を使うことで、Stratum はフォーマット・信頼性・後方互換性・セキュリティといった、[[OpenFlow]] を含む従来のプロトコルが長年頭を悩ませてきた課題群に煩わされずに済む。(Source: ch.5 §5.1)
## 下層のアーキテクチャ
Stratum の下層には2つの構成要素がある。1つはオンボードのスイッチングチップ向け SDK であり、スイッチベンダーが提供する。[[Broadcom]] の場合これは概ね[[OF-DPA]]レイヤーに相当し、Barefoot は [[Intel Tofino]] 向けに同様の SDK を提供する。これらの SDK はデバイスドライバに近く、対応するチップ上のメモリ位置を間接的に読み書きするために使われる。もう1つは ONL Platform (ONLP) であり、ハードウェアカウンタ・モニタ・ステータス変数などにアクセスする Platform API を公開する。(Source: ch.5 §5.1)
Stratum 内部の残りの構成要素は、主に Stratum をベンダー非依存にするために設計されている。Tofino のようなプログラム可能チップの場合、Stratum はほぼパススルーとして機能し、上位から来た P4Runtime 呼び出しは Barefoot SDK へ直接渡される。Tomahawk のような固定機能チップの場合、Stratum は P4Runtime 呼び出しを対応する Broadcom SDK 呼び出しへ変換するために必要なランタイム状態を保持する。固定機能チップと programmable チップの両方をサポートするために、Stratum は「programmable チップにはほぼパススルー、固定機能チップには変換レイヤーを挟む」という非対称な実装戦略を採る。(Source: ch.5 §5.1)
## SONiC との関係
Stratum と [[SONiC]] は同じ需要(ベンダー非依存な Switch OS)を満たそうとしている。SONiC が [[SAI (Switch Abstraction Interface)]] を土台に最大公約数的なフォワーディングへのアプローチを取るのに対し、Stratum は P4 と P4Runtime による programmable なフォワーディングパイプラインをサポートする点が主な違いである。両者を統合しようとする取り組みは PINS (P4 Integrated Network Stack) と呼ばれる。(Source: ch.5 §5.4)
## 第3章(Basic Architecture)での位置づけ
*Software-Defined Networks: A Systems Approach* 第3章は、Stratum をスタック概観図(図15)の右側に置かれる例示コンポーネントの一つとして最初に導入する。§3.3 では Stratum を「Thin Switch OS」と呼び、P4Runtime・gNMI・gNOI という3つの API を公開するという第5章と同じ骨子を、より抽象的なレベルで先取りして説明する。第1章が導入した「制御(Control)対構成設定(Configuration)」の区別に対し、ch.3 は P4Runtime を Control API、gNMI/gNOI の組み合わせを Configuration API(伝統的な OAM インターフェースの現代版)として対応づける——この対応づけは第5章の Stratum 解説には明示的に繰り返されない、ch.3 固有の整理である。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 3 Basic Architecture]] ch.3 §3.1, §3.3)
## 関連
- [[P4Runtime]] / [[gNMI]] — Stratum が公開する主要ノースバウンドインターフェース
- [[Open Network Linux (ONL)]] — Stratum の基盤 OS
- [[SONiC]] — 同じ需要を別アプローチで満たす Switch OS。PINS で統合が模索されている
- [[Open Networking Foundation]] — Stratum の開発元
- [[Broadcom]] / [[Intel Tofino]] / [[OF-DPA]] — Stratum が下層で扱うベンダー SDK・固定機能パイプライン
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 5 Switch OS]]
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 3 Basic Architecture]]
## 出典
- Peterson, Cascone, O'Connor, Vachuska, and Davie, *Software-Defined Networks: A Systems Approach*, 2021, Chapter 5: Switch OS, §5.1, §5.4. https://sdn.systemsapproach.org/stratum.html
- Peterson, Cascone, O'Connor, Vachuska, and Davie, *Software-Defined Networks: A Systems Approach*, 2021, Chapter 3: Basic Architecture, §3.1, §3.3. https://sdn.systemsapproach.org/arch.html