コンテンツにスキップ

WRED_PROFILE テーブル

概要

Weighted Random Early Detection (WRED) と ECN マーキングの設定プロファイルを定義する。QUEUE テーブルの wred_profile から名前で参照される3orchagentQosOrchCONFIG_DB を購読し、SAI WRED オブジェクトに変換する。

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

flowchart LR
  CDB[("CONFIG_DB<br/>WRED_PROFILE")]
  DM["QosOrch"]
  CDB --> DM
  SAI["SAI<br/>sai_wred_api"]
  DM --> SAI

凡例

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

key 構造

WRED_PROFILE|<name>

<name> は 1〜32 文字、英数字始まり。

主要フィールド

フィールド 既定 説明
green_min_threshold / yellow_min_threshold / red_min_threshold uint64 (bytes) - カラー別の WRED 開始閾値
green_max_threshold / yellow_max_threshold / red_max_threshold uint64 (bytes) - カラー別の最大閾値 (この値で全 drop)
green_drop_probability / yellow_drop_probability / red_drop_probability uint64 (0..100) 100 最大 drop 確率 [%]
wred_green_enable / wred_yellow_enable / wred_red_enable boolean false カラー別 WRED 有効化
ecn enum ecn_none ECN マーキング対象色: ecn_none/ecn_green/ecn_yellow/ecn_red/ecn_green_yellow/ecn_green_red/ecn_yellow_red/ecn_all

制約

  • 各色の max_threshold >= min_thresholdmust 制約で強制
  • drop 確率は 0..100 の uint64 (パーセント単位)

購読者

  • orchagent (QosOrch): CONFIG_DBSAI WRED → QUEUE への bind

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: QUEUESCHEDULER
  • 関連 CLI: config qos clear、テンプレート起点の生成 (buffers.json.j2)
  • 関連 YANG: sonic-wred-profile

値依存挙動マトリクス

フィールド 実挙動
ecn ecn_none SAI_ECN_MARK_MODE_NONE。ECN マーキングなし(デフォルト)
ecn ecn_green SAI_ECN_MARK_MODE_GREEN。緑パケットのみ ECN マーク
ecn ecn_yellow SAI_ECN_MARK_MODE_YELLOW。黄パケットのみ ECN マーク
ecn ecn_red SAI_ECN_MARK_MODE_RED。赤パケットのみ ECN マーク
ecn ecn_green_yellow SAI_ECN_MARK_MODE_GREEN_YELLOW。緑・黄をマーク
ecn ecn_green_red SAI_ECN_MARK_MODE_GREEN_RED。緑・赤をマーク
ecn ecn_yellow_red SAI_ECN_MARK_MODE_YELLOW_RED。黄・赤をマーク
ecn ecn_all SAI_ECN_MARK_MODE_ALL。全色 ECN マーク(DCQCN 等で推奨)
wred_*_enable true 指定色の WRED ドロップを有効化
wred_*_enable false 無効(デフォルト)。閾値設定があっても drop しない
wred_*_enable "true"/"false" 以外 SWSS_LOG_ERROR("Invalid input specified") でエントリ破棄
*_drop_probability 0 min threshold 到達時もドロップなし(ECN マーキングのみ使用する場合)
*_drop_probability 100 min〜max 間で線形ドロップ、max で全ドロップ(デフォルト)
*_min_threshold bytes 値 この Queue 深さからランダムドロップ開始
*_max_threshold bytes 値 この Queue 深さで全パケットドロップ(100% drop)
*_max_threshold < min_threshold YANG must 違反で reject

閾値変更の 2 フェーズ適用

orchagentWredMapHandler は閾値更新時に min/max の一時的な逆転を防ぐため、現在値と新値の比較から順序を決定して 2 段階で SAI に適用する(qosorch.cpp)。

例外条件・特殊挙動

  • 名前パターン (YANG): pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})'、長さ 1〜32 文字 — 違反は "Invalid length for wred profile name." エラー2
  • max >= min 制約 (YANG): 各色の max threshold が min 以上である must 制約 — 違反は "Yellow/Green/Red max threshold must be >= min threshold" エラーで reject2
  • convertBool エラー: wred_green_enable 等に "true" / "false" 以外の文字列が来た場合 SWSS_LOG_ERROR("Invalid input specified") を記録してエントリを破棄する1
  • threshold 2 フェーズ適用 (旧 SAI 互換): WredMapHandler は閾値変更時に「現在 min > 新 max」または「現在 max < 新 min」となる属性を deferred リストに後回しにし、残りを先に SAI に適用してから deferred を適用する。一部ベンダー SAI での順序エラーを回避するための特殊処理1
  • デフォルト補完 (YANG):
  • ecn: default ecn_none2
  • wred_*_enable: default false2
  • *_drop_probability: default 100(100%)2

ecn 値別挙動

YANG 定義 8 値 (sonic-wred-profile.yang)、default ecn_none。 実装 ecn_map (qosorch.cpp:36-44) → SAI_WRED_ATTR_ECN_MARK_MODE (qosorch.cpp:743)。 不正値 (ecn_map.at()std::out_of_range) → エントリ破棄。

SAI マッピング マーキング対象色 evidence
ecn_none (既定) SAI_ECN_MARK_MODE_NONE なし。ECN マーキング全無効 qosorch.cpp:37, YANG:128
ecn_green SAI_ECN_MARK_MODE_GREEN Green のみ。Yellow/Red は WRED drop のみ qosorch.cpp:38, YANG
ecn_yellow SAI_ECN_MARK_MODE_YELLOW Yellow のみ。Green/Red は WRED drop のみ qosorch.cpp:39, YANG
ecn_red SAI_ECN_MARK_MODE_RED Red のみ。Green/Yellow は WRED drop のみ qosorch.cpp:40, YANG
ecn_green_yellow SAI_ECN_MARK_MODE_GREEN_YELLOW Green + Yellow。Red は WRED drop のみ qosorch.cpp:41, YANG
ecn_green_red SAI_ECN_MARK_MODE_GREEN_RED Green + Red。Yellow は WRED drop のみ qosorch.cpp:42, YANG
ecn_yellow_red SAI_ECN_MARK_MODE_YELLOW_RED Yellow + Red。Green は WRED drop のみ qosorch.cpp:43, YANG
ecn_all SAI_ECN_MARK_MODE_ALL 全色 (Green + Yellow + Red) ECN マーキング有効 qosorch.cpp:44, YANG:123

ロスレス運用

RoCE / ロスレストラフィックでは ecn_all + wred_*_enable=true が典型設定。ecn_none では ECN 通知が発生しないためロスレス保証ができない。

複合条件

  1. ecn_none + wred_*_enable=true — WRED drop は発生するが ECN マーキングなし。ベストエフォートの確率的 drop のみ。
  2. ecn_all + wred_*_enable=false — ECN モードは設定されるが WRED 閾値に到達しない。実質 ECN 無効と同じ。
  3. ecn_green + wred_yellow_enable=true — Yellow パケットは確率的に drop されるが ECN マーキングなし。Green パケットのみ ECN 通知。
  4. threshold 2 フェーズ適用: 閾値変更時に「現在 min > 新 max」または「現在 max < 新 min」の属性は deferred リストに退避して後回し。ecn 変更と閾値変更が同時の場合、適用順序が通常と異なる (qosorch.cpp:WredMapHandler)。

値別 grep カバレッジ

hit 数 証跡
ecn_none 3 qosorch.cpp:37, yang(enum), yang(default)
ecn_green 2 qosorch.cpp:38, yang
ecn_yellow 2 qosorch.cpp:39, yang
ecn_red 2 qosorch.cpp:40, yang
ecn_green_yellow 2 qosorch.cpp:41, yang
ecn_green_red 2 qosorch.cpp:42, yang
ecn_yellow_red 2 qosorch.cpp:43, yang
ecn_all 2 qosorch.cpp:44, yang:123

全 8 値 hit。0 hit なし。

関連リファレンス

引用元

関連 Topics

運用ヒント

典型値

  • key 形式: WRED_PROFILE|<name>
  • ecn: ecn_all / ecn_green / ecn_none
  • *_min_threshold / *_max_threshold / *_drop_probability

よくある誤設定

  • min > max に設定すると SAI がエラーを返し、profile が hardware に下りない。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'WRED_PROFILE|AZURE_LOSSY'
show wred