WRED_PROFILE テーブル¶
概要¶
Weighted Random Early Detection (WRED) と ECN マーキングの設定プロファイルを定義する。QUEUE テーブルの wred_profile から名前で参照される3。orchagent の QosOrch が CONFIG_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 構造¶
<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_thresholdをmust制約で強制 - drop 確率は 0..100 の uint64 (パーセント単位)
購読者¶
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
QUEUE、SCHEDULER - 関連 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 フェーズ適用
orchagent の WredMapHandler は閾値更新時に 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 通知が発生しないためロスレス保証ができない。
複合条件¶
ecn_none+wred_*_enable=true— WRED drop は発生するが ECN マーキングなし。ベストエフォートの確率的 drop のみ。ecn_all+wred_*_enable=false— ECN モードは設定されるが WRED 閾値に到達しない。実質 ECN 無効と同じ。ecn_green+wred_yellow_enable=true— Yellow パケットは確率的に drop されるが ECN マーキングなし。Green パケットのみ ECN 通知。- 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 なし。
関連リファレンス¶
- YANG:
sonic-wred-profile - CLI:
config qos
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key 形式:
WRED_PROFILE|<name>。 ecn:ecn_all/ecn_green/ecn_none。*_min_threshold/*_max_threshold/*_drop_probability。
よくある誤設定¶
- min > max に設定すると SAI がエラーを返し、profile が hardware に下りない。
確認コマンド¶
-
sonic-swss/orchagent/qosorch.cpp(WredMapHandler) https://github.com/sonic-net/sonic-swss/blob/master/orchagent/qosorch.cpp ↩↩ -
sonic-buildimage/src/sonic-yang-models/yang-models/sonic-wred-profile.yanghttps://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-wred-profile.yang ↩↩↩↩↩ -
YANG 定義:
sonic-wred-profile.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-wred-profile.yang ↩