BUFFER_QUEUE テーブル¶
概要¶
ポートの egress queue ごとにバッファプロファイルを割り当てる1。non-VOQ 用と VOQ シャーシ用で list が分かれる。buffermgrd が APPL_DB に転送、orchagent BufferOrch が SAI 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:
VOQ chassis:
<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_type が voq 以外、または未指定。
フィールド一覧 (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が未存在の場合、orchagentはtask_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_type が voq 以外(未設定含む) |
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)。 |
購読者¶
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
BUFFER_PROFILE、BUFFER_POOL、PORT、DEVICE_METADATA、QUEUE、SCHEDULER - 関連 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 になり、計画値と乖離。