コンテンツにスキップ

Topics で読み物として読む

この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 11 章: Reboot / Warm/Fast/Express/Cold を参照。

裏取りステータス: code-verified

各 namespace の swss / syncd の協調 shutdown 順序が現行スクリプトでどうなっているかは未確認。

Verifier 注記(2026-05-10)

実コード裏取り: sonic-utilities/scripts/warm-reboot に namespace 横断の execute_in_namespaces ロジック(scope=all で global namespace と各 ASIC namespace に対して並列実行)を確認。multi-asic warm reboot の協調制御は本 script 経由で実装されている。

Multi-ASIC warm reboot(namespace 横断の協調 shutdown / boot)

概要

multi-ASIC platform では各 ASIC が 独自の swss / syncd / FRR インスタンス を持つ。warm reboot を成立させるには、namespace を跨いだ協調 shutdown / boot が必要1

ポイント:

  • すべての namespace で 同時に GR を有効化、WARM_RESTART_TABLE を更新する
  • syncd warm shutdown は per-namespace に走り、/host/warmboot/sai-warmboot.bin 系のファイルも namespace ごとに分離する
  • BGP は host namespace の bgpcfgd / FRR と各 asic namespace の FRR の両方で GR
  • internal BGP(BGP_INTERNAL_NEIGHBOR)の hold time にも warm reboot を完走させるマージンを持たせる

動作仕様(going down 順序)

flowchart LR
    BGP[host BGP + asicN BGP\nGR enable] --> TEAM[teamd 全 namespace 停止]
    TEAM --> SWSS["swss@asicN 全停止\nMAC learn off / orchagent freeze"]
    SWSS --> DUMP[per-namespace Redis dump]
    DUMP --> SYNCD["syncd@asicN 全 warm shutdown\nsai-warmboot.bin per-namespace"]
    SYNCD --> DB[per-namespace database 停止]
    DB --> KEXEC[kexec\nSONIC_BOOT_TYPE=warm]

going up は逆順を namespace ごとに走らせ、orchagent compare 完了後に bgp / teamd を起動する。

制約と注意点1

  • per-namespace の同期: ある namespace だけ早く落ちると ASIC 間 internal BGP がフラップする
  • CPU / disk の負荷スパイク: namespace 数 × Redis dump / syncd shutdown が同時に走るためリソースに余裕が必要
  • internal link: shutdown 中も internal link は up のままにする(forwarding は SAI state に従う)
  • ファイル配置: /host/warmboot/<ns>/dump.rdb のように namespace 識別子で分離する設計

関連 CLI

Command 用途
sudo warm-reboot 多くは host から実行(実装が namespace を順に処理)
show warm_restart 各 namespace の warm restart state

干渉する機能

  • system-wide warmboot: シングル ASIC 設計の上位互換。共通点が多い
  • fast-reboot: 同じスクリプト基盤を共有
  • multi-asic single-json: warm restart 設定を per-asic に flatten する場合の互換性
  • internal BGP: hold timer / GR timer の整合
  • chassis VoQ: 章レベルで別カテゴリ(chassis-wide warm reboot)。考え方は近い

トラブルシューティング

  • 全 namespace が同時に落ちず data plane が断 → script の同期 barrier 確認、/host/warmboot/<ns>/ のファイル時刻
  • internal BGP がフラップ → hold timer、GR negotiation の成功確認
  • 一部 ASIC だけ syncd 復元失敗 → per-namespace sai-warmboot.bin の有無と vendor SAI ログ

コマンド例

multi-ASIC warm-reboot 状態を ASIC ごとに確認する。

show warm-restart state
show platform summary
for n in 0 1 2 3; do sonic-db-cli -n asic$n STATE_DB keys 'WARM_RESTART_TABLE|*'; done
sudo warm-reboot -v

制限事項

  • multi-asic 環境では namespace ごとに warm-restart timer が独立しており、最も遅い ASIC に律速される。
  • chassis 内の internal fabric (CPU<->LC fabric) を warm-restart 対象外とする実装が一部に存在し、本 HLD どおりに無瞬断とはならない場合がある。
  • multi-asic + Multi-DUT MLAG 同時運用の warm-reboot は組み合わせ検証が不十分で、慎重な事前検証を推奨。

引用元

実装フェーズ境界

本ページは monitor: partially_implemented のため、HLD 記載どおり master に取り込み済 (実装済) の範囲と、現行 master との差分が未確認 (未実装相当) の範囲を Phase 別に切り分けて示す。詳細は本文・[実装との乖離 / 補足] 節および各引用元 HLD を参照。

Phase 実装済 未実装
Phase 1: 単一 namespace warm-reboot 実装済(既存 warm-reboot フロー流用)
Phase 2: namespace 間 shutdown 順序 swss / syncd の協調 shutdown 順序の現行スクリプト挙動は未確認・未実装の可能性
Phase 3: BGP graceful restart 跨 ASIC 連動 single ASIC 相当は実装済 クロス ASIC の TLV 同期は未実装

実装との乖離 / 補足

  • 裏取りステータスを code-verified から discrepancy-foundmonitor: partially_implemented)に降格 (2026-05-13)。各 namespace の swss / syncd の協調 shutdown 順序が現行スクリプトでどうなっているかは本文で「未確認」と明示している。
  • 本文に残る「未確認 / 要確認 / 要追跡 / TBD」等の hedge 表現は HLD と実装の差分が未特定であることを示し、後続の裏取り対象。

関連 Topics


  1. sonic-net/SONiC doc/warm-reboot/Multi_ASIC_warm_reboot.md @ 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06