Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 07 章: ACL / CoPP / Mirror を参照。
裏取りステータス: Code-verified(基本構成のみ)
現行 master の sonic-swss/orchagent/debugcounterorch.cpp で DebugCounterOrch クラスと STATE_DEBUG_COUNTER_CAPABILITIES テーブル登録 (debugcounterorch.cpp:31) を確認。sonic-utilities 側に config dropcounters install/... (config/main.py:8163-)、show dropcounters persistent_drops (show/dropcounters.py) が存在し、v1.1 の persistent drop monitoring まで取り込み済み。sonic-yang-models/yang-models/sonic-debug-counter.yang も存在。詳細属性は元 HLD 参照(verified at: 2026-05-09)。
設定可能な Drop Counter(DEBUG_COUNTER と SAI debug counter)¶
概要¶
SAI debug counter を活用し、ユーザがドロップ理由(drop reason)の組み合わせを動的に定義してカウントできるようにする機能1。STAT_IF_IN_DISCARDS のような単一カウンタを「期待ドロップ」と「異常ドロップ」に切り分けるフィルタ用途や、即時デバッグ・常設アラートの 4 用途を想定する。
v1.1(2024-09)で persistent drop counter monitoring が追加された1。
動作仕様¶
CONFIG_DB¶
DEBUG_COUNTER|<name>
type = "PORT_INGRESS_DROPS" | "PORT_EGRESS_DROPS" | "SWITCH_INGRESS_DROPS" | "SWITCH_EGRESS_DROPS"
desc = "<description>" ; OPTIONAL
group = "<reason group>" ; OPTIONAL
DEBUG_COUNTER_DROP_REASON|<name>:<reason>
(presence = drop reason の有効化)
<reason> の例: SMAC_EQUALS_DMAC / IP_HEADER_ERROR / L3_ANY 等(プラットフォーム依存)。
STATE_DB / Capability Discovery¶
ユーザは show dropcounters capabilities で何が使えるかを事前に確認できる。
COUNTERS_DB¶
各 debug counter のカウント値はライブで COUNTERS:oid:* に流れる(flexcounter ベース)。
モジュールフロー¶
flowchart LR
CLI[config dropcounters install] --> CDB[(CONFIG_DB DEBUG_COUNTER*)]
CDB --> DCO[DebugCounterOrch]
DCO --> SAI[(SAI: debug_counter create)]
SAI -.->|capability| SDB[(STATE_DB DEBUG_COUNTER_CAPABILITIES)]
SAI -->|flex counter polling| CNT[(COUNTERS_DB)]
SHOW[show dropcounters counts] --> CNT
v1.1 拡張: persistent drop counter¶
v1.1 で persistent drop counter monitoring が追加され、特定 drop reason のドロップが継続発生したときにアラート可能なモニタが定義される(具体的なテーブル名・ロジックは HLD 当該節を参照)1。
設定¶
関連する CONFIG_DB¶
| Table | 説明 |
|---|---|
DEBUG_COUNTER |
counter 自体(型と説明) |
DEBUG_COUNTER_DROP_REASON |
counter にひも付ける drop reason 集合 |
関連する CLI¶
show dropcounters capabilities
config dropcounters install <name> <type> <reasons-csv> [-d <desc>] [-g <group>]
config dropcounters add-reasons <name> <reasons-csv>
config dropcounters remove-reasons <name> <reasons-csv>
config dropcounters delete <name>
show dropcounters configuration [-g <group>]
show dropcounters counts [-g <group>] [-t <type>]
sonic-clear dropcounters
関連する YANG¶
HLD に YANG モデルの記述は無い。
設定例¶
show dropcounters capabilities
sudo config dropcounters install EXPECTED_DROPS PORT_INGRESS_DROPS \
SMAC_EQUALS_DMAC,IP_HEADER_ERROR -d "expected drops"
show dropcounters counts
制限事項¶
- カウンタ数・サポート reason はプラットフォーム依存(
DEBUG_COUNTER_CAPABILITIESで公開)。 - ASIC ASIC が SAI debug counter API を実装していない場合は機能しない。
- v1.1 の persistent monitoring 拡張は最近の追加で、現行 master の取り込み状況は別途裏取り。
- 詳細フロー / SAI 属性マッピング / Open Questions は HLD
doc/drop_counters/drop_counters_HLD.mdを参照。
干渉する機能¶
- STAT_IF_IN_DISCARDS / STAT_IF_OUT_DISCARDS: 既存集約カウンタ。debug counter で「期待ドロップ」を計上し、両者の差分で異常を検知する用途。
- CRM: debug counter のスロット消費は CRM の resource 監視に乗らない(HLD で明記なし、要確認)。
- Watermark / PFC: 別系統のカウンタ。drop counter とは独立。
トラブルシューティング¶
installが失敗する →show dropcounters capabilitiesで残スロットと reason サポートを確認。- counts が増えない → 該当 reason に該当する drop が起きていない/ASIC が当該 reason を SAI で公開していない可能性。
show dropcounters configurationが空 → CONFIG_DB のDEBUG_COUNTERテーブルに entry があるかをredis-cli -n 4 keys 'DEBUG_COUNTER|*'で確認。
確認コマンド例:
# drop counter capabilities, 設定, 値をひととおり確認
show dropcounters capabilities
show dropcounters configuration
show dropcounters counts
redis-cli -n 4 keys 'DEBUG_COUNTER|*'
redis-cli -n 4 keys 'DEBUG_COUNTER_DROP_REASON|*'