コンテンツにスキップ

BUFFER_POOL テーブル

概要

ASIC 上の共有 / 専用バッファプールを CONFIG_DB で定義するテーブル。BUFFER_PROFILE.pool から leafref で参照される。bufferorch (orchagent) または buffermgrd (dynamic buffer model) が CONFIG_DB を購読し、SAI BUFFER_POOL に変換する1

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

flowchart LR
  CDB[("CONFIG_DB<br/>BUFFER_POOL")]
  DM["buffermgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_BUFFER_POOL_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 構造

BUFFER_POOL|<name>

慣用名: ingress_lossless_poolingress_lossy_poolegress_lossless_poolegress_lossy_pool

主要フィールド

フィールド 必須 説明
type enum ingress/egress/both yes プールの方向
mode enum static/dynamic yes 閾値モード
size uint64 (bytes) no プールサイズ。percentage と排他
xoff uint64 (bytes) no (default 0) xoff 閾値 (lossless ingress 用)
percentage uint8 no 利用可能バッファに対する割合 (dynamic buffer model 限定)

制約

  • percentagesize と同時設定できない (must 制約)
  • percentageDEVICE_METADATA.localhost.buffer_model = 'dynamic' のときのみ有効

購読者

  • traditional buffer model: orchagentBufferOrch
  • dynamic buffer model: buffermgrd (docker-swss) が CONFIG_DBAPPL_DB に展開し、bufferorchSAI 反映
  • ベンダ固有のテンプレ (buffers_*.json.j2) でハードウェア依存初期値が生成される

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: BUFFER_PROFILEBUFFER_PGBUFFER_QUEUEDEVICE_METADATA
  • 関連 CLI: config buffermmuconfig
  • 関連 YANG: sonic-buffer-poolsonic-buffer-profile

関連リファレンス

引用元

関連 Topics

運用ヒント

典型値

  • key 形式: BUFFER_POOL|<pool-name> (ingress_lossless_pool / egress_lossless_pool / egress_lossy_pool 等)。
  • size: ASIC 別の SDK 値(例 100G TOR で 12766208)。
  • type: ingress / egress
  • mode: dynamic / static

よくある誤設定

  • size を ASIC 上限超過で入れると bufferorch が SAI_STATUS_NO_MEMORY を返し、すべての buffer 設定が止まる。
  • mode: dynamic を ASIC 未対応のまま使うと PFC で head-of-line を起こす。traditional プラットフォームでは static

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'BUFFER_POOL|ingress_lossless_pool'
show buffer pool

値依存挙動マトリクス

type (enum: ingress/egress/both)

SAI 属性 備考
ingress SAI_BUFFER_POOL_TYPE_INGRESS ingress 方向のみ。xoff 設定は ingress pool でのみ有効
egress SAI_BUFFER_POOL_TYPE_EGRESS egress 方向のみ
both SAI_BUFFER_POOL_TYPE_BOTH 双方向プール (一部 ASIC のみ)

bufferorch.cpp:443-453 で SAI API に渡される。

mode (enum: static/dynamic)

SAI 属性 動作モード percentage フィールド
static SAI_BUFFER_POOL_THRESHOLD_MODE_STATIC size (bytes) で固定閾値 無効
dynamic SAI_BUFFER_POOL_THRESHOLD_MODE_DYNAMIC Alpha 値で動的閾値 有効 (DEVICE_METADATA.buffer_model=dynamic のとき)

bufferorch.cpp:474-480 で SAI API に渡される。

type × mode の組み合わせと xoff

type mode xoff 典型 pool 名
ingress static 有効 (lossless 用) ingress_lossless_pool
ingress dynamic 無効 ingress_lossy_pool
egress static 無効 egress_lossless_pool
egress dynamic 無効 egress_lossy_pool

例外条件・特殊挙動

条件 挙動 ソース
xoff フィールドが ingress_lossless_pool 以外のプールに設定 Field xoff is supported for %s only を LOG_ERROR → xoff は ignored、他フィールドは処理 buffermgrdyn.cpp L2625
xoff 値が MMU サイズを超過 Invalid xoff %s, exceeding the mmu size を LOG_ERROR → xoff 無視、pool size は更新 buffermgrdyn.cpp L757
SHP 設定が変化なし updated without change, skipped → APPL_DB への書き込みをスキップ buffermgrdyn.cpp L2614
同一 pool に複数の zero profile 登録 Multiple zero profiles detected for pool %s, takes the former and ignores the latter を LOG_ERROR buffermgrdyn.cpp L338
Buffer pools が未準備の状態でプロファイル設定 pending → プロファイル適用を遅延 buffermgrdyn.cpp L894
共有バッファプールが未設定 headroom 計算をスキップ (No shared buffer pool configured) buffermgrdyn.cpp L684
task_invalid_entry (static モード main loop) Failed to process invalid entry, drop it → エントリを破棄 buffermgr.cpp L585
既存プロファイルが存在する場合の pool 作成 // check if profile already exists - if yes - skip creation buffermgr.cpp L246