FLEX_COUNTER_TABLE SRV6 (SRv6 カウンタ)¶
概要¶
SRv6 MySID エントリごとのパケット / バイトカウンタを収集するための CONFIG_DB 設定エントリ1。
FLEX_COUNTER_TABLE|SRV6 に書き込むことで、orchagent 内の Srv6Orch がカウンタ収集の有効 / 無効を切り替え、SAI カウンタ API 経由でパケット数とバイト数を COUNTERS_DB に蓄積する。
SRV6_MY_SIDS テーブルで定義された各 MySID エントリに対応する SAI_OBJECT_TYPE_COUNTER オブジェクトが自動的に生成・登録される。実際のカウンタ値は sonic show srv6 コマンドで参照できる。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>FLEX_COUNTER_TABLE|SRV6")]
OA["orchagent<br/>(Srv6Orch / FlexCounterOrch)"]
FCB[("FLEX_COUNTER_DB<br/>FLEX_COUNTER_TABLE|SRV6_STAT_COUNTER|oid")]
SD["syncd<br/>(FlexCounter)"]
SAI["SAI<br/>sai_counter_api"]
CNTDB[("COUNTERS_DB<br/>COUNTERS_SRV6_NAME_MAP")]
CDB --> OA
OA --> FCB
FCB --> SD
SD --> SAI
SD --> CNTDB
凡例
CONFIG_DB の FLEX_COUNTER_TABLE|SRV6 が orchagent → FLEX_COUNTER_DB → syncd → SAI の経路でカウンタポーリングを制御する。収集値は COUNTERS_DB の COUNTERS_SRV6_NAME_MAP と COUNTERS:<oid> に格納される。
key 構造¶
固定キー。サブキーなし。
フィールド¶
| フィールド | 型 | 説明 |
|---|---|---|
FLEX_COUNTER_STATUS |
enum enable / disable |
カウンタポーリング有効化 |
FLEX_COUNTER_DELAY_STATUS |
boolean (true / false) |
system-ready まで遅延 |
POLL_INTERVAL |
uint32 (100..4294967295) [ms] | ポーリング間隔 |
BULK_CHUNK_SIZE / BULK_CHUNK_SIZE_PER_PREFIX は SRV6 グループには定義されない(YANG にも orchagent にも実装なし)。
収集されるカウンタ¶
FLEX_COUNTER_STATUS = enable 時、orchagent は SRV6_MY_SIDS に登録された各 MySID エントリに対して SAI_OBJECT_TYPE_COUNTER オブジェクトを作成し、以下 2 stat を収集する2:
| SAI stat | 意味 |
|---|---|
SAI_COUNTER_STAT_PACKETS |
当該 MySID にヒットしたパケット数 |
SAI_COUNTER_STAT_BYTES |
当該 MySID にヒットしたバイト数 |
カウンタは COUNTERS_DB の COUNTERS_SRV6_NAME_MAP(SID → counter OID マッピング)と COUNTERS:<oid> ハッシュに格納される。
購読者¶
FlexCounterOrch(orchagent 内):FLEX_COUNTER_STATUS変化を検知しgSrv6Orch->setCountersState(enable)を呼び出す3。Srv6Orch(orchagent 内): MySID ごとの SAI カウンタオブジェクトの生成・登録・削除を管理。syncdのFlexCounter:FLEX_COUNTER_DBのSRV6_STAT_COUNTER_ID_LIST(SRV6_COUNTER_ID_LIST)を参照し SAI bulk counter API を周期呼び出し。
関連リファレンス¶
- FLEX_COUNTER_TABLE テーブル — 全グループ共通フィールドの詳細
- SRV6_MY_SIDS テーブル — カウンタ対象 MySID エントリ定義
- SRV6_MY_LOCATORS テーブル — ロケータ設定
- YANG:
sonic-flex_counter - CLI:
counterpoll srv6 enable/disable/interval
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key:
FLEX_COUNTER_TABLE|SRV6 FLEX_COUNTER_STATUS:enable(デフォルトdisable)POLL_INTERVAL:10000ms(デフォルト・推奨値)
確認コマンド¶
# カウンタポーリング状態確認
counterpoll show
# SRv6 MySID カウンタ表示
sonic-clear srv6
show srv6
# CONFIG_DB 直接確認
sonic-db-cli CONFIG_DB hgetall 'FLEX_COUNTER_TABLE|SRV6'
よくある誤設定¶
enableを設定しても SAI がSAI_MY_SID_ENTRY_ATTR_COUNTER_IDをサポートしない ASIC では、カウンタが常にゼロのまま。"SRv6 counters are not supported on this platform"ログを確認すること。- MySID エントリが
SRV6_MY_SIDSに存在しない状態で enable にしても COUNTERS_DB にエントリは現れない(SID 追加後に自動登録される)。
値依存挙動マトリクス¶
FLEX_COUNTER_STATUS¶
| 値 | 挙動 |
|---|---|
enable |
FlexCounterOrch が gSrv6Orch->setCountersState(true) を呼び出し。プラットフォームが SAI 対応の場合、既存の全 MySID エントリに SAI カウンタオブジェクトを作成・登録し FLEX_COUNTER_DB に SRV6_COUNTER_ID_LIST を書き込む |
disable |
setCountersState(false) — 全 MySID の SAI カウンタを削除、FLEX_COUNTER_DB からエントリを消去。COUNTERS_DB の蓄積値は残る |
| 未設定 | デフォルト disable(FlexCounterManager コンストラクタ enabled=false、init_cfg に SRV6 エントリなし) |
POLL_INTERVAL¶
| 値 | 挙動 |
|---|---|
| 未設定 | orchagent が起動時に SRV6_STAT_COUNTER_POLLING_INTERVAL_MS = 10000 ms を syncd に設定 |
| 設定済み (1000〜30000 ms) | 次回ポーリングから新しい間隔で収集。YANG 定義上は 100〜4294967295 ms だが、CLI は 1000〜30000 ms に制限 |
例外条件・特殊挙動¶
| 条件 | 挙動 |
|---|---|
| プラットフォームが SAI 未対応 | queryMySidCountersCapability() 失敗 → m_mysid_counters_supported = false。enable を書いても "Ignoring SRv6 counters state change as they are not supported" ログでスキップ |
| MySID 追加後に初めてカウンタ OID が登録される | SAI カウンタ作成後、m_pending_counters に積まれ SRV6_FLEX_COUNTER_UPDATE_TIMER(1 秒)ごとに syncd へ登録。瞬時には反映されない |
| MySID 削除時 | removeMySidCounter() が SAI カウンタを削除し FLEX_COUNTER_DB からエントリを消去 |
gSrv6Orch が null の場合 |
FlexCounterOrch の null チェックにより setCountersState が呼ばれず、enable が silent drop される |
FLEX_COUNTER_DELAY_STATUS |
Srv6Orch コード内では参照なし。syncd 側のみ参照。通常起動では影響なし |
暗黙デフォルト・コード由来挙動 (Phase A)¶
FLEX_COUNTER_STATUS の暗黙デフォルト¶
YANG に default 宣言なし。以下のコードパスがデフォルト disable を確定する:
Srv6OrchのFlexCounterManagerコンストラクタ引数enabled=false(srv6orch.cpp:108) — syncd への初期送信状態がdisable。m_mysid_counters_enabled = false(srv6orch.h:267) — ヘッダのメンバ変数デフォルト値。counterpoll/main.py:841:srv6_info.get("FLEX_COUNTER_STATUS", DISABLE)— CONFIG_DB にエントリなしの場合disableを表示。init_cfg.json.j2に SRV6 グループのエントリなし — ビルド時デフォルト書き込みなし。
暗黙デフォルト: disable(カウンタ収集なし)
POLL_INTERVAL の暗黙デフォルト¶
| ソース | 値 |
|---|---|
SRV6_STAT_COUNTER_POLLING_INTERVAL_MS = 10000 (srv6orch.cpp:27) |
10000 ms — FlexCounterManager 初期化時に syncd へ送信 |
counterpoll CLI ソフトデフォルト DEFLT_10_SEC = "default (10000)" (counterpoll/main.py:19) |
10000 ms — counterpoll show 表示上のデフォルト |
CLI 入力範囲: click.IntRange(1000, 30000) (counterpoll/main.py:695) |
1000〜30000 ms |
| YANG range | 100〜4294967295 ms(CLI より広い) |
ハードコードデフォルト: 10000 ms
FLEX_COUNTER_DELAY_STATUS の暗黙デフォルト¶
YANG に default なし。Srv6Orch コード内に FLEX_COUNTER_DELAY_STATUS 参照なし。syncd 側でのみ参照される(fast-reboot 連携用)。通常起動では遅延なし(即時)。
SRV6_COUNTER_ID_LIST の固定 stat リスト¶
FlowCounterHandler::getGenericCounterStatIdList() (flow_counter_handler.cpp:43-48) が SAI_COUNTER_STAT_PACKETS / SAI_COUNTER_STAT_BYTES の 2 stat のみを返す。この 2 stat は固定でユーザー変更不可。
プラットフォーム能力チェック(起動時一回限り)¶
Srv6Orch::initializeCounters() → queryMySidCountersCapability() が起動時に一度だけ sai_query_attribute_capability() を呼び出す。失敗時はカウンタ機能全体が無効化され、CONFIG_DB への enable 書き込みは以降すべて無視される。再起動なしに状態を変えることはできない。
遅延登録メカニズム(1 秒タイマー)¶
MySID 追加後、SAI カウンタ OID は m_pending_counters キューに積まれ、SRV6_FLEX_COUNTER_UPDATE_TIMER = 1 秒のタイマーで処理される。m_pending_counters が空になるとタイマーが自動停止する。FLEX_COUNTER_DB への登録(= syncd によるポーリング開始)は MySID 設定から最大 1 秒遅延する。
-
YANG 定義:
sonic-flex_counter.yangcontainer SRV6. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-flex_counter.yang#L465 ↩ -
FlowCounterHandler::getGenericCounterStatIdList()が返す stat リスト (SAI_COUNTER_STAT_PACKETS,SAI_COUNTER_STAT_BYTES)。sonic-swss/orchagent/flex_counter/flow_counter_handler.cpp:12-13. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/flex_counter/flow_counter_handler.cpp ↩ -
FlexCounterOrch::doTask—key == SRV6_KEY時にgSrv6Orch->setCountersState(value == "enable")を呼び出す。sonic-swss/orchagent/flexcounterorch.cpp:337. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/flexcounterorch.cpp ↩