FLEX_COUNTER_TABLE テーブル¶
概要¶
orchagent / syncd に対し、各種ハードウェアカウンタのポーリング有効化と周期、bulk API のチャンクサイズを指定するテーブル1。syncd の FlexCounter モジュールがこのテーブルを購読し、SAI bulk counter API の周期呼び出しスケジュールを切り替える。fast-reboot 時の FLEX_COUNTER_DELAY_STATUS = true で system-ready まで停止可能。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>FLEX_COUNTER_TABLE")]
DM["syncd"]
CDB --> DM
SAI["SAI<br/>sai_*_stats"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<group> は固定の counter グループ名。23 グループ前後が YANG で定義される(下表)。
共通フィールド¶
各グループ共通でとりうる leaf:
| フィールド | 型 | 説明 |
|---|---|---|
FLEX_COUNTER_STATUS |
enum enable/disable |
ポーリング有効化 |
FLEX_COUNTER_DELAY_STATUS |
boolean_type |
system-ready まで起動遅延 |
POLL_INTERVAL |
uint32 (100..2^32-1) [ms] | ポーリング間隔 |
BULK_CHUNK_SIZE |
uint32 (1..2^32-1) | 1 回の bulk API で扱うエントリ数 |
BULK_CHUNK_SIZE_PER_PREFIX |
string | プレフィクス別 bulk チャンクサイズ |
各グループは上記のうち一部のみ持つ(例: PFCWD は FLEX_COUNTER_STATUS と FLEX_COUNTER_DELAY_STATUS のみ)。
主なグループ¶
| グループ | 対象 |
|---|---|
BUFFER_POOL_WATERMARK |
バッファプール watermark |
DEBUG_COUNTER |
drop reason 等のデバッグカウンタ |
ENI |
DASH ENI カウンタ |
DASH_METER / HA_SET |
DASH 関連 |
PFCWD |
PFC watchdog |
PG_DROP / PG_WATERMARK |
priority group ドロップ / watermark |
PORT / PORT_RATES / PORT_BUFFER_DROP / PORT_PHY_ATTR |
ポート系 |
QUEUE / QUEUE_WATERMARK |
キュー系 |
RIF / RIF_RATES |
router-interface 系 |
ACL |
ACL ヒットカウンタ |
FLOW_CNT_TRAP |
host-IF trap flow |
FLOW_CNT_ROUTE |
route flow(FLOW_COUNTER_ROUTE_PATTERN と連携) |
TUNNEL |
tunnel 系 |
WRED_ECN_QUEUE / WRED_ECN_PORT |
WRED/ECN マーキング |
SRV6 |
SRv6 |
SWITCH |
スイッチレベルグローバル |
関連サブテーブル¶
FLOW_COUNTER_ROUTE_PATTERN(key:ip_prefix): default VRF のルートフロー対象パターンmax_match_count(uint32, 1..50): バインドする最大ルート数
FLOW_COUNTER_ROUTE_PATTERNの VRF 版 list (key:vrf_name,ip_prefix): VRF / VNET 名スコープ
購読者¶
syncdのFlexCounter: SAI bulk counter API スケジュールFlexCounterOrch(orchagent 内)pfcwd、watermarkmgr等のカウンタ依存モジュール
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
FLOW_COUNTER_ROUTE_PATTERN、COUNTERS_DB(実カウンタ値の読み出し先) - 関連 CLI:
counterpoll <group> enable/disable、counterpoll <group> interval <ms> - 関連 YANG:
sonic-flex_counter
関連リファレンス¶
- YANG:
sonic-flex_counter - CLI:
counterpoll
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key 形式:
FLEX_COUNTER_TABLE|<group>(PORT / QUEUE / PG_WATERMARK / RIF 等)`。 FLEX_COUNTER_STATUS:enable、POLL_INTERVAL: 1000〜10000ms。
よくある誤設定¶
- POLL_INTERVAL を極端に短く(100ms 等)するとカウンタ集計で CPU が貼り付く。
確認コマンド¶
値依存挙動マトリクス¶
FLEX_COUNTER_STATUS¶
| 値 | グループ | 挙動 |
|---|---|---|
enable |
PORT |
m_port_counter_enabled = true → ポート統計 COUNTER_ID_LIST を投入 |
enable |
PORT_BUFFER_DROP |
m_port_buffer_drop_counter_enabled = true |
enable |
QUEUE |
m_queue_enabled = true → キュー COUNTER_ID_LIST を投入 |
enable |
QUEUE_WATERMARK |
m_queue_watermark_enabled = true |
enable |
PG_DROP |
m_pg_enabled = true |
enable |
PG_WATERMARK |
m_pg_watermark_enabled = true |
enable |
WRED_ECN_PORT |
m_wred_port_counter_enabled = true |
enable |
WRED_ECN_QUEUE |
m_wred_queue_counter_enabled = true |
enable |
RIF |
gIntfsOrch に COUNTER_ID_LIST を渡す |
enable |
BUFFER_POOL_WATERMARK |
gBufferOrch に通知 |
enable |
TUNNEL |
vxlan_tunnel_orch に通知 |
enable |
FLOW_CNT_ROUTE |
m_route_flow_counter_enabled = true |
disable |
全グループ | 対応カウンタを停止。FLOW_CNT_ROUTE は m_route_flow_counter_enabled = false |
| 未設定 | 全グループ | デフォルト disable("counters are disabled for polling by default") |
例外条件・特殊挙動¶
| 条件 | 挙動 |
|---|---|
BUFFER_QUEUE / BUFFER_PG key 形式不正 |
SWSS_LOG_ERROR("Invalid BUFFER_QUEUE key: [%s]") → エントリスキップ |
| queue / PG インデックスが非整数 | std::invalid_argument をキャッチし SWSS_LOG_ERROR → そのポートのカウンタ設定は適用されない |
FLEX_COUNTER_STATUS 未設定 |
デフォルト disable。エントリがなければカウンタ収集は行われない |
create_only_config_db_buffers フラグ読み取りエラー |
SWSS_LOG_ERROR → バッファカウンタ関連設定がデフォルト動作になる可能性 |
POLL_INTERVAL の極端な短縮 |
コード上バリデーションなし。100ms 等ではカウンタ集計で orchagent / syncd CPU が貼り付くリスク |