DASH と SmartSwitch の考え方¶
DASH と SmartSwitch は混同されやすい言葉ですが、別レイヤのものです。DASH は 「ENI 単位で VNet / ACL / metering / Service Tunnel を高速にこなす」データプレーン API と SONiC 実装 を指し、SmartSwitch は 「NPU スイッチに複数の DPU をぶら下げ、DASH を含む処理を DPU で動かす」物理 / 制御プラットフォーム を指します。
つまり「DASH を動かす器」が SmartSwitch であり、SmartSwitch 上で動く主役のオーバーレイ処理が DASH です。
DASH は何を解くか¶
DASH は ENI(Elastic Network Interface)という単位を中心に置きます。1 つの ENI は 1 つの VM ないしテナント接続点で、その配下に VNet(VxLAN VNI と underlay)、Outbound / Inbound ルーティング、ACL、metering、Service Tunnel、Private Link 等の設定が紐付きます。コントローラはこれらを DASH_VNET / DASH_ENI / DASH_ROUTE / DASH_ACL_GROUP 等のテーブルとしてプッシュし、DashOrch / DashVnetOrch / DashAclOrch といった orchagent が SAI へ落とします。
DASH 自体はホスト型 SmartNIC でも appliance card でも動く設計ですが、SONiC コミュニティの SmartSwitch では「DPU を SONiC で動かし、その上で DASH を回す」形を取ります。
SmartSwitch の役割分担¶
SmartSwitch は次の 2 つから成ります。
- NPU: 従来の SONiC スイッチ。物理 port、underlay forwarding、ACL、BGP、HA の制御 daemon、DPU 管理を担う。
- DPU: DASH オーバーレイ処理用の SoC。SONiC OS が乗り、
DashOrch系の orchagent と SAI 実装が走る。NPU と midplane で繋がる。
NPU は DPU に対して次を提供します。
- DPU の電源 / リセット / PCIe 制御(PMON)
- 管理 IP の払い出し(midplane bridge 上の DHCP server)
- overlay 設定の中継先 redis(後述)
- HA actor(HAMgrD)
- gNMI / gNOI 経由の外部 API 接続点
DPU は NPU を gateway のように扱い、自身の overlay 状態を NPU 側に置いた redis に書き出します。
NPU 側 DB と DPU overlay DB¶
DPU はメモリが厳しいため、DASH の全オブジェクト(多数の ENI、VNET、ACL、route 等)を DPU 自身の redis に保持するのは現実的ではありません。そこで DPU 用の overlay redis を NPU 上に立てて、DPU から remote 接続させる 構成を取ります。NPU 上には DPU 数だけ独立した database container(redisdpu0 / redisdpu1 …)が動き、それぞれ別 redis インスタンスとして DPU 1 つに対応します。
この設計の利点は次の通りです。
- DPU 側の RAM 圧迫を避ける
- コントローラは NPU 側に書くだけで DPU を意識せず済む(API 表面が単純化)
- multi-ASIC と同じ daemon (
featured) で機構を再利用できる
ENI ベース転送と VIP¶
NPU から DPU へのトラフィック振り分け方式は 2 つあります。
| 方式 | 振り分けの単位 | VIP 消費 | 拡張性 |
|---|---|---|---|
| VIP ベース | DPU ごとに別 VIP | DPU 数だけ消費 | 小規模向け |
| ENI ベース転送 | スイッチ単位 VIP + ENI 単位 ACL リダイレクト | 1 cluster 1 VIP | SmartSwitch を跨いだ ENI 配置が可能 |
SmartSwitch では ENI ベース転送が採用され、NPU 上で ENI_REDIRECT 型 ACL が ENI 宛パケットをローカル DPU またはリモート DPU の tunnel nexthop へ落とします。これを生成するのが DashEniFwdOrch です。
HA の考え方¶
SmartSwitch HA は「DPU レベルで active / standby のペアを作り、フェイルオーバーは NPU 側の HAMgrD が駆動する」モデルです。HAMgrD は NPU 側の actor で、DPU の状態、peer DPU との同期、SAI HA セッションを管理します。DPU 自体は自分の HA 状態を knows しますが、誰と誰がペアか・どちらが active かは NPU 側で決めます。
用語の整理¶
| 用語 | 意味 |
|---|---|
| DASH | ENI 単位で VNet / ACL / metering を扱うオーバーレイデータプレーン API |
| ENI | Elastic Network Interface。テナント / VM 接続点の論理単位 |
| DPU | DASH 処理をこなす SoC。SONiC OS が動く |
| NPU | 従来の SONiC スイッチ部分。DPU を抱える親 |
| SmartSwitch | NPU + 複数 DPU から成る物理プラットフォーム |
| midplane bridge | NPU と DPU を繋ぐ内部 L2 / 管理ネットワーク(169.254.200.254 系) |
| HAMgrD | NPU 側 HA actor daemon |
has_per_dpu_scope |
FEATURE テーブルの leaf。DPU 数分の instance を起動するかを示す |
まず読み手の質問に答える¶
この機能はそもそも何か¶
DASH は「VM / コンテナ単位のオーバーレイ処理を、ホスト CPU ではなく専用ハードウェア(DPU や appliance)に下ろすための SONiC データプレーン API」です。SmartSwitch は「その DPU を 1 〜数台ぶら下げた物理スイッチを SONiC として制御する箱」です。前者がソフトウェア契約、後者が箱の話です。
エンドユーザー視点では、「テナント単位の VNet ルーティング・ACL・metering・Service Tunnel をパブリッククラウド規模(数万 ENI 級)で 1 装置にまとめたい」というニーズに応えます。これを SONiC ノースバウンド API(gNMI / Redis)で投入すると、ノースバウンド側は DPU を意識せず、SmartSwitch 内部の NPU/DPU 分担は SONiC 側が引き受けます。
何を解決するか¶
従来の VxLAN gateway や software ロードバランサで「テナント数が増えると CPU が詰まる / フロー数が増えると state table が破綻する」問題が起きていました。DASH は次のように分解して解決します。
- ENI ごとの per-tenant 状態(VNet route、ACL、metering)を DPU の専用テーブル に積み、線形にスケールさせる
- VxLAN / NSH / Service Tunnel の encap/decap を DPU のパケット処理パイプライン に固定し、CPU 経由を回避する
- スイッチ単位の VIP で受けて ENI 単位で DPU に振り分ける(ENI ベース転送)ことで、テナント追加に伴う VIP 消費を抑える
SONiC 全体での位置¶
DASH は オーバーレイ転送のスキーマ拡張、SmartSwitch は 箱の構成プロファイル という関係です。
| 層 | 関係する SONiC コンポーネント | 役割 |
|---|---|---|
| ノースバウンド | gNMI / Redis CONFIG_DB / DASH_* テーブル |
テナント / ENI / VNet 設定の投入口 |
| NPU 制御面 | swss、bgpd(FRR)、HAMgrD、pmon、featured |
underlay 経路、DPU 管理、HA actor |
| NPU データ面 | syncd、SAI、ACL(ENI Redirect)、midplane bridge |
ENI ベース転送、underlay VxLAN |
| DPU 制御面 | DPU 側 SONiC OS、DashOrch 系 |
DASH オブジェクトの SAI への落とし込み |
| DPU データ面 | DASH 対応 SAI 実装(ベンダー)、DPU パイプライン | overlay encap/decap、ACL、metering |
| ストレージ | NPU 上の redisdpu0..N container |
DPU 用 overlay DB の host |
用語定義(章内で繰り返し出るもの)¶
- ENI: Elastic Network Interface。テナント/VM の接続点を表す論理単位。1 ENI = 1 MAC + (任意の) VNet 紐付き。
- VNet: VxLAN VNI で識別されるテナント仮想 L3 ネットワーク。
DASH_VNETテーブルが定義する。 - DPU: Data Processing Unit。DASH パイプラインを持つ SoC ないし SmartNIC。
- NPU: Network Processing Unit。従来の SONiC スイッチ ASIC。
- midplane bridge: NPU と DPU を繋ぐ内部 L2 ネットワーク(
169.254.200.x系)。管理 IP、HA、redis 通信に使う。 redisdpuN: NPU 上に立つ DPU 専用 redis container。DPU は自分の overlay 状態をここに書く。- ENI ベース転送: スイッチ単位の VIP で受け、ACL の
ENI_REDIRECT型で ENI 別 DPU に振る方式。 - HAMgrD: NPU 側に立つ HA actor。DPU ペアの active/standby を駆動する。
has_per_dpu_scope:FEATUREテーブルの leaf。trueの feature は DPU 数だけ instance を起動する。- Service Tunnel / Private Link: テナントが Azure 系の SaaS や PrivateLink endpoint に抜けるための named tunnel 機能。
- Outbound / Inbound 方向: ENI を中心に「VM → 外」が Outbound、「外 → VM」が Inbound。ルーティングテーブルが別建て。
典型シーン¶
sequenceDiagram
participant CTRL as Controller (gNMI)
participant NPU as NPU CONFIG_DB
participant ROUT as DashOrch (NPU/DPU)
participant RDPU as redisdpuN (on NPU)
participant DPU as DPU SAI
participant LB as ENI Redirect ACL
CTRL->>NPU: DASH_VNET / DASH_ENI / DASH_ROUTE 投入
NPU->>ROUT: subscribe 通知
ROUT->>RDPU: ASIC_DB 相当を DPU 用 redis に書く
RDPU->>DPU: SAI 経由でパイプラインに反映
ROUT->>LB: ENI_REDIRECT ACL を NPU に投入
Note over LB: VIP 宛パケットを ENI 単位で<br/>local/remote DPU の nexthop へ
LB->>DPU: トラフィック到着
DPU-->>LB: encap/ACL/metering 適用後 egress
ポイントは「制御は NPU 側 redis を一意の入口にする」「データプレーンの分岐は NPU 上 ACL で済ます」の二段で、ノースバウンドからは DPU の存在が透けて見えにくい点です。
似ているが別物のもの¶
| 比較対象 | DASH / SmartSwitch との違い |
|---|---|
| 通常の SONiC VxLAN / EVPN ゲートウェイ(03 章) | テナント数・per-ENI state が増えると CPU/TCAM が破綻する。DASH は per-ENI state を DPU 側に押し込む |
| Multi-ASIC chassis(12 章) | 複数 ASIC を 1 装置に積む点は似るが、Multi-ASIC は単一スイッチング機能、SmartSwitch は NPU + 別役割の DPU |
| 単体 SmartNIC(DPU 単独) | SmartNIC は server NIC 側に DPU を載せる発想。SmartSwitch は ToR 側に集約 |
| ホストベースの仮想 router(OVS / VPP) | CPU 上で動かす分柔軟だが、per-flow CPU コストが線形に効く。DASH はパイプライン処理 |
| MPLS / SRv6 ベース L3VPN(17 章) | DASH は ENI 単位の policy / metering まで含む。MPLS / SRv6 はラベル経路提供が主 |
読了後にできるようになること¶
- HLD のどれが「DASH スキーマ側」でどれが「SmartSwitch 物理側」なのかを切り分けて読める
DASH_*テーブルやredisdpuNcontainer の役割を見て「どのレイヤの問題か」を判定できる- HA や DPU 障害時の駆動主体が NPU 側(HAMgrD)であることを前提に 運用 を組める
- 他社 SmartSwitch / DPU 製品との比較で SONiC / DASH 採用範囲を質問できる
関連ページ¶
- SONiC-DASH アーキテクチャ概観
- Smart Switch のデータベース構成
- SmartSwitch ENI Based Forwarding
- DASH 関連カテゴリ
- SmartSwitch 関連カテゴリ
この章の前提知識¶
この章を読み進める前に、次の章を押さえておくと迷子になりにくい。