コンテンツにスキップ

clear counters サブコマンド群(詳細)

概要

sonic-clearsonic-utilities の click グループ clear/main.py:cli)には カウンタ系のリセット用サブコマンドが多数定義されており、いずれも外部の C++/Python ユーティリティを -c または -C フラグ付きで起動する薄いラッパ。本ページはそれらの一覧と内部挙動を整理する。clear グループ全体の俯瞰は clear (sonic-clear) コマンド を参照。

カウンタクリア系コマンドの実装対応

CLI コマンド 起動コマンド 対象
sonic-clear counters portstat -c ポート (COUNTERS_PORT_NAME_MAP) の RX/TX バイト・パケット・エラー
sonic-clear rifcounters [<intf>] intfstat -c [-i <intf>] Routed Interface (L3 SVI / sub-interface) の RX/TX
sonic-clear queuecounters queuestat -c + queuestat -c --voq キュー単位カウンタ。Supervisor 上では VoQ のみ
sonic-clear pfccounters pfcstat -c PFC pause パケットカウンタ
sonic-clear dropcounters dropstat -c clear DEBUG_COUNTER 系の drop カウンタ
sonic-clear tunnelcounters tunnelstat -c tunnel encap/decap カウンタ
sonic-clear srv6counters srv6stat -c SRv6 SID 別カウンタ
sonic-clear switchcounters switchstat -c スイッチレベル global カウンタ
sonic-clear fabriccountersqueue fabricstat -C -q fabric キューカウンタ
sonic-clear fabriccountersport fabricstat -C fabric ポートカウンタ

定義箇所はすべて clear/main.py 内のシンプルな @cli.command()1

「クリア」の実態 = スナップショット保存

ここで言う「クリア」は COUNTERS_DB の値を 0 に戻すわけではなくportstat 等が「前回 clear 時の値」をディスク上のスナップショットファイル(/tmp/portstat-<uid> 等)に書き出して、次回表示時の差分計算用ベースラインとして使う、という意味2

つまり:

  1. sonic-clear countersportstat -c/tmp/portstat-<uid> を現在の COUNTERS_DB 値で上書き。
  2. show interfaces countersCOUNTERS_DB の現在値 − スナップショットの差分を表示。

スイッチ ASIC 側 SAI カウンタや orchagent のカウンタリングは触らないため、sonic-clear counters を打っても SAI レイヤから見た累計値は残り続ける

queuecounters の VoQ 二段呼び出し

queuecounters は通常スイッチでは queuestat -c を呼び、その後 常に queuestat -c --voq も追加で呼ぶ。Supervisor デバイス (device_info.is_supervisor() が True) の場合は前者をスキップし VoQ のみ。Supervisor は line card 側でしか通常 queue を持たないため。

@cli.command()
def queuecounters():
    """Clear queue counters"""
    if(device_info.is_supervisor()):
        print("INFO: On Supervisor, only Aggregate VOQ counters will be cleared")
    else:
        run_command(["queuestat", "-c"])
    run_command(["queuestat", "-c", "--voq"])

fabric 系 (-C 大文字)

fabricstat だけは大文字 -C を clear フラグに使う。これは fabricstat のオプション設計が他統計ツール (-c) と微妙にずれているため。-q でキュー側を指定する。

watermark / persistent-watermark 系(参考)

カウンタとは別に、priority-group watermark / queue watermark / headroom-pool watermark のようなウォーターマーク系も watermarkstat -c [-p] -t <type> で同じスナップショット方式でリセットする。root 権限が必要で、非 root で実行するとサブグループ起動時点で sys.exit("Root privileges are required for this operation") で落ちる。

詳細は clear (sonic-clear) コマンド のコマンドツリー節を参照。

CONFIG_DB との接点

なし。COUNTERS_DB を直接書き換えるのではなく、/tmp 配下のスナップショットファイルだけが書き換わる。

既知の動作・今後の変更予定

switch ingress drop monitoring はデフォルト無効 (issue #3923)

switch ingress drop のモニタリング(sonic-clear dropcounters で管理する drop counter のデフォルト有効化)は HLD PR#1912 で「デフォルト有効にすべき」と提案されているが、2026年5月時点では実装されていない。現在はユーザーが明示的に drop counter を設定・有効化する必要がある。

データフロー (手動作成)

flowchart LR
  CLI["sonic-clear counters / *counters"]
  UT["portstat / queuestat / pfcstat<br/>dropstat / tunnelstat / etc. (-c)"]
  CNT[("COUNTERS_DB<br/>カウンタ値・LAST_CLEAR")]
  CLI --> UT
  UT --> CNT

凡例

clear 系 (CLI → ユーティリティ → COUNTERS_DB) のミニ図。CONFIG_DB を直接介さないコマンドのため手動で記述。

関連リファレンス

  • (関連リンクなし)

引用元


  1. counters / rifcounters / queuecounters / pfccounters / dropcounters / tunnelcounters / srv6counters / switchcounters / fabriccountersqueue / fabriccountersport の定義は clear/main.py L167-L235。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/clear/main.py#L167 

  2. portstat のスナップショット方式は scripts/portstat 参照(COUNTER_TABLE_PREFIX を読んで STATS_TEMP_FILE に保存)。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/scripts/portstat