コンテンツにスキップ

BUFFER_QUEUE テーブル

概要

ポートの egress queue ごとにバッファプロファイルを割り当てる1。non-VOQ 用と VOQ シャーシ用で list が分かれる。buffermgrdAPPL_DB に転送、orchagent BufferOrchSAI egress queue buffer profile を反映する。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>BUFFER_QUEUE")]
  DM["buffermgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_BUFFER_QUEUE_TABLE")]
  DM --> APPDB
  SYNCD["syncd"]
  APPDB --> SYNCD
  SAI["SAI<br/>sai_buffer_api"]
  SYNCD --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

VOQ:

BUFFER_QUEUE|<port>|<qindex>

VOQ chassis:

BUFFER_QUEUE|<hostname>|<asic_name>|<port>|<qindex>

<qindex>0..15 または範囲表現 (0-3 等)。

フィールド一覧 (非 VOQ: BUFFER_QUEUE_LIST)

フィールド 必須 デフォルト 説明
port (key) leafref PORT.name - 対象ポート
qindex (key) string (1[0-5]|[0-9])((-)(1[0-5]|[0-9]))? - Q-index または範囲
profile leafref BUFFER_PROFILE.name - 0 関連付ける buffer profile

when 条件: DEVICE_METADATA.localhost.switch_typevoq 以外、または未指定。

フィールド一覧 (VOQ: VOQ_BUFFER_QUEUE_LIST)

フィールド 必須 説明
hostname (key) hostname VOQ シャーシのホスト名
asic_name (key) asic_name ASIC インスタンス名
port (key) string (1..128) リニアカード上のポート名
qindex (key) string Q-index
profile leafref BUFFER_PROFILE.name - buffer profile

when 条件: switch_type = voq

例外条件・特殊挙動

  • key フォーマット不正 → スキップ: key が <port>|<queue_range> の 2 トークンでない場合、初期化時にエラーログを出力しそのエントリをスキップする。
  • プロファイル参照未解決 → retry: profile フィールドに参照する BUFFER_PROFILE が未存在の場合、orchagenttask_need_retry を返す。
  • プロファイル変更なし → SAI 呼び出しスキップ: プロファイルが変更なく m_partiallyAppliedQueues にもキーがない場合はスキップ (冪等)。
  • queue インデックス範囲外 → task_invalid_entry: 指定インデックスがポートのキュー数を超える場合 task_invalid_entry を返す。VoQ も同様。
  • queue ロック中 → retry + partiallyApplied: port.m_queue_lock[ind] == true の場合 task_need_retry を返し m_partiallyAppliedQueues に登録。ロック解除後に再適用される。
  • zero profile (_zero_ 含む名前) → flexcounter 登録スキップ: プロファイル名に _zero_ が含まれる場合、カウンタの追加・削除は行わない。zero profile はトラフィックなしを意味する。

値依存挙動マトリクス

このテーブルに enum フィールドはない。ただし DEVICE_METADATA.switch_type および参照プロファイルの値によって挙動が変わる。

条件 挙動
switch_typevoq 以外(未設定含む) BUFFER_QUEUE_LIST が有効。key は <port>\|<qindex> の 2 トークン形式。
switch_type = voq VOQ_BUFFER_QUEUE_LIST が有効。key に <hostname>\|<asic_name> が付加される。
参照プロファイルの packet_discard_action = drop egress queue buffer profile として制限なく適用可能。
プロファイル名に _zero_ を含む flex counter の追加・削除をスキップ(traffic なしを意味する zero profile 扱い)(bufferorch.cpp:1017, 1020)。

購読者

  • buffermgrd: APPL_DB へ転送
  • orchagent BufferOrch: SAI egress queue buffer profile を反映

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: BUFFER_PROFILEBUFFER_POOLPORTDEVICE_METADATAQUEUESCHEDULER
  • 関連 CLI: なし
  • 関連 YANG: sonic-buffer-queue

関連リファレンス

引用元

関連 Topics

運用ヒント

典型値

  • key 形式: BUFFER_QUEUE|<port>|<queue-range> (例 0-2, 3-4, 5-6)。
  • profile: q_lossy_profile 等。

よくある誤設定

  • queue 範囲が抜けると当該 queue が default profile になり、計画値と乖離。

確認コマンド

sonic-db-cli CONFIG_DB keys 'BUFFER_QUEUE|Ethernet0|*'
show buffer queue