Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 11 章: Reboot / Warm/Fast/Express/Cold を参照。
裏取りステータス: code-verified
sonic-gnmi master で DPU Proxy(GNMI/GNOI Splitter)が pkg/interceptors/dpuproxy/proxy.go に実装済み(ForwardToDPU / HandleLocally)。Containerz gNOI は gnmi_server/gnoi_containerz.go および gnoi_client/containerz/ に、System.SetPackage 等は pkg/gnoi/system/system.go / gnmi_server/gnoi_system.go に実装。HLD で言及されている主要ハンドラ群は master に取り込み済み。
Smart Switch: DPU 独立アップグレード(gNOI 経路)¶
概要¶
SmartSwitch では NPU 1 台に複数 DPU が接続され、各 DPU は独立した SONiC instance だが Database / GNMI / HA など一部 service を NPU に offload している1。本 HLD は gNOI API 駆動で 1 台ずつ DPU を独立アップグレード する手順を定義し、ネットワーク・他 DPU・NPU への影響を最小化する。前提として DPU と NPU の SONiC Host Services / GNMI が健全 であること(不応答 DPU の復旧用途ではない)。
動作仕様¶
コンポーネント¶
flowchart LR
CLI["External client<br/>gNOI client"]
subgraph NPU["NPU"]
NGMI[NPU GNMI Server]
SPL["GNMI/GNOI Splitter"]
OFFL["Offloader<br/>GNOI client"]
CT["Offloaded containers<br/>(Database / GNMI / HA)"]
end
subgraph DPU["DPU"]
DGMI[DPU GNMI Server]
DHOST[DPU Host Services]
end
CLI -- gNOI --> SPL
SPL -- GNMI --> NGMI
SPL -- GNOI --> DGMI
DGMI --> DHOST
OFFL -- gNOI --> NGMI
NGMI --> CT
NPU 側の GNMI/GNOI Splitter は GNMI 要求を NPU GNMI Server へ、GNOI 要求を DPU GNMI Server へ振り分ける1。NPU 上の Offloader が DPU の代理で offloaded container 群を Containerz 経由で操作する。
Upgrade Sequence¶
sequenceDiagram
participant C as Client
participant N as NPU
participant D as DPU
C->>D: System.SetPackage (新 SONiC image)
C->>D: OS.Activate
C->>N: Containerz.Deploy (新 container image)
C->>D: System.Reboot
D-->>C: System.RebootStatus
C->>N: Containerz.ListImage / StopContainer / StartContainer
Note over C,D: 失敗時は OS.Activate(old) / Containerz.RemoveImage(old)
主要 step とロールバック1:
| Phase | gNOI API | 説明 |
|---|---|---|
| 1. Image 準備 | System.SetPackage, OS.Activate, Containerz.Deploy |
DPU に新 SONiC image を deploy / activate、NPU に offloaded 新 container image を deploy |
| 2. DPU upgrade | System.Reboot, System.RebootStatus |
DPU を再起動し新 image で立ち上げ |
| 2b. Container 切替 | Containerz.ListImage, Containerz.StopContainer, Containerz.StartContainer |
offloaded container を新版で起動 |
| Rollback | OS.Activate(old) / Containerz.RemoveImage(old) |
失敗時の復旧 |
影響範囲¶
- 他 DPU: 影響なし(前提)
- NPU: 該当 DPU 用 offloaded container の停止・起動はあるが NPU 自身は再起動しない
- front panel network: 該当 DPU が処理していたフロー以外には影響しない(前提)
Non-goals¶
- DPU fatal error / 不応答 DPU の復旧(BIOS から image 投入する経路は別 process)
- GNMI 自体の bootstrap
- DPU/NPU image 互換性(client 責任)
- 完全自動化: upgrade と rollback の両方が失敗した場合は 手動介入1
📋 検証エビデンス: sonic-net/SONiC/doc/smart-switch/upgrade/dpu-upgrade-hld.md#L74-L100 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
出典:
sonic-net/SONiC/doc/smart-switch/upgrade/dpu-upgrade-hld.md#L74-L100 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
抜粋:
Prepare Relevant Images: ... GNOI API: 'System.SetPackage', 'OS.Activate', 'Containerz.Deploy'
Upgrade DPU: ... 'System.Reboot', 'System.RebootStatus', 'Containerz.ListImage', 'Containerz.StopContainer', 'Containerz.StartContainer'
判断根拠: gNOI API 系列と各 phase の根拠。
制限事項¶
- DPU / NPU の SONiC Host Services / GNMI が 健全な状態 が前提
- 提案段階(v0.1 Initial)。
Containerz系 gNOI 拡張は upstream で進行中 - 互換性チェックは client 責任
- DPU graceful shutdown HLD(同 SmartSwitch 系)と STATE_DB の race を考慮する必要
干渉する機能¶
- DPU graceful shutdown: 同 STATE_DB
CHASSIS_MODULE_INFO_TABLEに書き込む可能性 - smartswitch HA / hamgrd: HA scope の状態は upgrade 中も維持されるべき
- gNMI / sonic-telemetry: GNMI/GNOI Splitter 経由のため依存
- Offloader / Containerz: NPU 側 container 制御の標準 API
確認コマンド¶
show chassis modules status— DPU/NPU の admin/oper 状態sonic-db-cli STATE_DB hgetall "CHASSIS_MODULE_INFO_TABLE|DPU0"— DPU の運用情報gnoi_client -target <dpu> -rpc System.RebootStatus— gNOI Reboot ステータスgnoi_client -target <dpu> -rpc Containerz.ListImage— DPU 内 container image を列挙
コマンド例¶
DPU 単独アップグレードの進捗を確認する。
show chassis modules status
sudo config chassis modules startup DPU0
show platform inventory
docker exec database redis-cli -n 6 keys 'CHASSIS_MODULE_TABLE|*'