DSCP_TO_PG_MAP テーブル¶
このテーブルは SONiC に存在しない
DSCP_TO_PG_MAP という CONFIG_DB テーブルは SONiC master ブランチに存在しない。DSCP 値から Priority Group (PG) へのマッピングは 2 段構成 で実現される。
概要¶
SONiC の QoS アーキテクチャでは DSCP 値を PG に直接マッピングするテーブルを持たない。実際の経路は以下のとおり:
DSCP (0-63)
──→ Traffic Class (DSCP_TO_TC_MAP テーブル)
──→ Priority Group (TC_TO_PRIORITY_GROUP_MAP テーブル)
PORT_QOS_MAP テーブルの dscp_to_tc_map leaf と tc_to_pg_map leaf を組み合わせることで、入口ポートの DSCP 値が最終的に ingress buffer priority group へ到達する。
実際のアーキテクチャ¶
データフロー¶
flowchart LR
PKT["受信パケット<br/>DSCP 0-63"]
D2T[("CONFIG_DB<br/>DSCP_TO_TC_MAP")]
T2P[("CONFIG_DB<br/>TC_TO_PRIORITY_GROUP_MAP")]
PORT[("CONFIG_DB<br/>PORT_QOS_MAP")]
ORC["QosOrch"]
SAI["SAI<br/>sai_qos_map_api"]
PORT -->|dscp_to_tc_map| D2T
PORT -->|tc_to_pg_map| T2P
D2T --> ORC
T2P --> ORC
ORC --> SAI
PKT -->|ingress| SAI
段階 1 — DSCP → Traffic Class¶
DSCP_TO_TC_MAP|<name> テーブルに DSCP 値(0-63)→ Traffic Class 値(0-7)のエントリを定義する。PORT_QOS_MAP.<port>.dscp_to_tc_map から参照される。qosorch が SAI_QOS_MAP_TYPE_DSCP_TO_TC オブジェクトを生成する。
詳細: DSCP_TO_TC_MAP
段階 2 — Traffic Class → Priority Group¶
TC_TO_PRIORITY_GROUP_MAP|<name> テーブルに TC 値(0-7)→ PG 値(0-7)のエントリを定義する。PORT_QOS_MAP.<port>.tc_to_pg_map から参照される。qosorch が SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP オブジェクトを生成する。
コード証拠¶
qosorch.cpp:80-96 の m_qos_maps 初期化リストには以下のテーブルが登録されているが、DSCP_TO_PG_MAP は含まれない1:
type_map QosOrch::m_qos_maps = {
{CFG_DSCP_TO_TC_MAP_TABLE_NAME, ...}, // "DSCP_TO_TC_MAP"
{CFG_TC_TO_PRIORITY_GROUP_MAP_TABLE_NAME, ...}, // "TC_TO_PRIORITY_GROUP_MAP"
// DSCP_TO_PG_MAP に対応するエントリはない
...
};
qosorch.cpp:1329,1342 の handler 登録でも対応なし:
m_qos_handler_map.insert(qos_handler_pair(CFG_DSCP_TO_TC_MAP_TABLE_NAME, &QosOrch::handleDscpToTcTable));
m_qos_handler_map.insert(qos_handler_pair(CFG_TC_TO_PRIORITY_GROUP_MAP_TABLE_NAME, &QosOrch::handleTcToPgTable));
// DSCP_TO_PG_MAP ハンドラは存在しない
sonic-buildimage/src/sonic-yang-models/yang-models/ には sonic-dscp-pg-map.yang も存在しない2。
暗黙デフォルト・コード由来挙動¶
DSCP_TO_PG_MAP テーブル自体が存在しないため、フィールドデフォルトは定義されない。2 段マッピングを構成する各テーブルのデフォルトは以下のとおり:
DSCP_TO_TC_MAP のデフォルト(段階 1)¶
| フィールド | デフォルト有無 | 内容 |
|---|---|---|
name |
プラットフォーム依存 | ストレージバックエンドプラットフォームのみ qos_config.j2 が AZURE / AZURE_UPLINK という名前のマップを自動注入する |
dscp (key) |
なし | 0-63 の値を明示的に設定する必要あり |
tc |
なし | 0-7 の Traffic Class 値を明示的に設定する必要あり |
qos_config.j2 フォールバック AZURE マップのデフォルト値(抜粋):
| DSCP | TC | 備考 |
|---|---|---|
| 3, 4 | 3, 4 | lossless クラス |
| 8 | 0 | CS1: best-effort |
| 46 | 5 | EF: expedited forwarding |
| 48 | 6 | CS6: network control |
| その他 | 1 | 低優先度デフォルト |
TC_TO_PRIORITY_GROUP_MAP のデフォルト(段階 2)¶
| フィールド | デフォルト有無 | 内容 |
|---|---|---|
name |
プラットフォーム依存 | qos_config.j2 の generate_tc_to_pg_map() マクロが platform 別に生成 |
tc (key) |
なし | 0-7 の Traffic Class 値を明示的に設定する必要あり |
pg |
なし | pattern "[0-7]?" — 0-7 または空文字を許可する YANG 制約 |
qosorch.cpp:895 では (uint8_t)stoi(fvValue(*i)) で pg 値を変換しており、例外処理なし。非整数文字列が CONFIG_DB に書き込まれると std::invalid_argument が伝播する。
Evidence:
qosorch.cpp:80-96(m_qos_maps 初期化),qosorch.cpp:1329,1342(handler 登録),qosorch.cpp:880-910(TcToPgMapHandler),sonic-port-qos-map.yang:85-91,129-134(leafref)
制約¶
DSCP_TO_PG_MAPテーブルは存在しないため、このキー名で CONFIG_DB に書き込んでもqosorchは無視する- 実際の DSCP → PG 経路を設定するには
DSCP_TO_TC_MAP、TC_TO_PRIORITY_GROUP_MAP、PORT_QOS_MAPの 3 テーブルを適切に設定する必要がある
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
DSCP_TO_TC_MAP、TC_TO_PRIORITY_GROUP_MAP、PORT_QOS_MAP - 関連 CLI:
config qos - 関連 YANG:
sonic-dscp-tc-map、sonic-tc-priority-group-map
引用元¶
関連ページ¶
-
QosOrch m_qos_maps 初期化:
sonic-swss/orchagent/qosorch.cpp:80-96. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/qosorch.cpp ↩ -
YANG モデル一覧:
sonic-buildimage/src/sonic-yang-models/yang-models/. https://github.com/sonic-net/sonic-buildimage/tree/master/src/sonic-yang-models/yang-models ↩