裏取りステータス: code-verified
sonic-swss/orchagent/crmorch.h / crmorch.cpp に CrmOrch 実装、sonic-yang-models/yang-models/sonic-crm.yang に CONFIG_DB CRM スキーマ。fdborch.cpp / routeorch.cpp / srv6orch.cpp 等から CRM カウンタ更新が呼ばれることを grep で確認(verified at: 2026-05-10)。
Critical Resource Monitoring(CRM・SAI 表枯渇のしきい値監視)¶
なぜ必要なのか¶
ASIC 側の各種リソース(route 表、neighbor、ACL counter、FDB、NAT 等)は ハードウェアサイズで上限がある。上限到達で運用中に突然パケットドロップやプログラム失敗が起きるため、CRM は使用量をポーリングして しきい値超えで WARN / CRITICAL を syslog に出す ことで障害前検知を狙う1。
ねらい:
- 表枯渇を 障害発生前に 通知
crm showで使用量・上限値を常時可視化- しきい値の
percentage/used/freeモード、high/lowの双方を扱う
監視対象の resource¶
- L3:
IPV4_ROUTE/IPV6_ROUTE/IPV4_NEIGHBOR/IPV6_NEIGHBOR/IPV4_NEXTHOP/IPV6_NEXTHOP - L3 group:
NEXTHOP_GROUP/NEXTHOP_GROUP_MEMBER - L2:
FDB_ENTRY - ACL:
ACL_TABLE/ACL_GROUP/ACL_ENTRY/ACL_COUNTER - NAT / multicast:
DNAT_ENTRY/SNAT_ENTRY/IPMC_ENTRY - Tunnel / SRv6 等は後発で追加
どう動くのか¶
flowchart LR
CFG[CONFIG_DB.CRM] --> CO[CrmOrch]
CO --> SAI[(SAI object availability API)]
CO --> CDB[(COUNTERS_DB.CRM)]
CO --> SYS[syslog WARN/CRITICAL]
CLI[crm show] --> CDB
しきい値モード1:
- percentage: 上限の % で
high_threshold/low_threshold - used: 絶対使用量
- free: 残量
high 超えで WARN/CRIT、low を下回ると clear(free モードはその逆)。周期は polling_interval。
CONFIG_DB / CLI¶
| Key | 説明 |
|---|---|
CRM\|Config |
polling_interval、各 resource ごとに <r>_threshold_type / <r>_high_threshold / <r>_low_threshold |
| Command | 用途 |
|---|---|
crm config polling interval <n> |
周期 |
crm config thresholds <r> type <p\|u\|f> |
mode |
crm config thresholds <r> high <n> / low <n> |
しきい値 |
crm show resources [all\|ipv4 route\|...] |
残量 / 使用量 |
crm show thresholds |
現行しきい値 |
制限事項¶
- SAI 側 availability API が必要。vendor 未対応 resource は値が出ない
- WARN/CRIT は syslog のみで 自動 recovery アクションは無い
- 多 resource を高頻度ポーリングすると ASIC SDK 負荷増
ACL_COUNTER/FDB_ENTRYは SDK query が高コストになることがあり、長めの polling 推奨
干渉する機能¶
generic SAI extension CRM(新 resource 追加枠組み) / system health monitor(critical 集約) / NAT / mux / SRv6 / multi-asic(resource 種別を増やす側)。
トラブルシューティング¶
crm showがN/A→ SAI vendor の object_availability 実装の有無- 通知が来ない →
polling_interval、syslog rate-limit、threshold mode 確認 - counter が振動する → 周期と使用量変動の解像度差を再検討
コマンド例¶
CRM カウンタの現在値と閾値を確認する。
関連 Topics¶
- 07-acl-copp-mirror: ACL リソース消費
- 20-swss-sai-redis: orchagent と SAI の関係
既知の問題¶
monit サービスが設定した閾値を超えるとプロセスを強制終了するため、回帰テストで失敗が多発する問題(sonic-buildimage#4019)¶
monit サービスが設定した閾値を超えるとプロセスを強制終了するため、回帰テストで失敗が多発する問題。テスト環境では monit の閾値設定を緩和するか、テスト中は monit を一時停止することを推奨
SNMP subagent の MIBUpdater が `loc_chassis_data not subscript(sonic-buildimage#4230)¶
SNMP subagent の MIBUpdater が loc_chassis_data not subscriptable 例外でクラッシュする問題。LLDP データが未取得の状態で MIB アップデートが実行されると発生
monit/snmp テストが master イメージで失敗する問題(sonic-buildimage#5502)¶
monit/snmp テストが master イメージで失敗する問題。monit が snmp_subagent を監視対象として設定しており、起動タイムアウトで kill している場合がある
lldpmgrd が test_iface_namingmode テスト中にクラッシュする問題(sonic-buildimage#5697)¶
lldpmgrd が test_iface_namingmode テスト中にクラッシュする問題。インターフェース名前空間の切り替え中に lldpmgrd が不正なインターフェース名を受け取る
monit が bgpcfgd/bgpmon/lldpmgrd のステータスエラーを報告する問題(sonic-buildimage#5864)¶
monit が bgpcfgd/bgpmon/lldpmgrd のステータスエラーを報告する問題。サービスが動作していても monit の監視設定と実際の状態が一致しないことがある
teamd 再起動後に orchagent がエラーログを大量出力する問題(sonic-buildimage#5971)¶
teamd 再起動後に orchagent がエラーログを大量出力する問題。teamd が再起動されると PortChannel メンバーの状態が一時的に不定になる
supervisorctl status コマンドが exit code 3 を返す問題(sonic-buildimage#6028)¶
supervisorctl status コマンドが exit code 3 を返す問題。すべてのサービスが RUNNING 状態であっても exit code 3 を返すことがある。スクリプトでは出力テキストを解析すること
Platform system health において ASIC キーが適切に処理されない問題(sonic-buildimage#6343)¶
Platform system health において ASIC キーが適切に処理されない問題。show system-health detail の ASIC エントリを確認すること
BRCM Th3 Z9332 で SER (Single Error Recovery) が注入されたメモリの修正システ(sonic-buildimage#6392)¶
BRCM Th3 Z9332 で SER (Single Error Recovery) が注入されたメモリの修正システムが正しく動作しない問題。ECC エラー監視の設定を確認すること
show system-health detail コマンドが動作しない問題(sonic-buildimage#6463)¶
show system-health detail コマンドが動作しない問題。sudo systemctl status system-health で状態確認すること
show system-health コマンドが動作しない問題(sonic-buildimage#6641)¶
show system-health コマンドが動作しない問題。sudo systemctl status system-health で確認し、必要に応じて再起動すること