TC_TO_QUEUE_MAP テーブル¶
概要¶
Traffic Class (TC) を egress queue インデックスへマップする1。DSCP_TO_TC_MAP で TC 化された値が、このマップで物理キューに振り分けられる。qosorch が SAI map (SAI_QOS_MAP_TYPE_TC_TO_QUEUE) を生成し、PORT_QOS_MAP.tc_to_queue_map で各ポートに適用する。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>TC_TO_QUEUE_MAP")]
DM["QosOrch"]
CDB --> DM
SAI["SAI<br/>sai_qos_map_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<name> は 1..32 文字、<tc> は tc_type (0..7)。
フィールド一覧¶
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name (key) |
string (1..32) | ✅ | マップ名 |
tc (key) |
tc_type (0..7) |
✅ | TC |
qindex |
string (0..9) | - | egress queue index |
購読者¶
関連 CONFIG_DB / YANG / CLI¶
関連リファレンス¶
引用元¶
関連 Topics¶
値依存挙動マトリクス¶
tc / qindex は enum 型ではなく数値 / 文字列型。
| フィールド | 値 | 挙動 |
|---|---|---|
tc |
0..7 |
有効な Traffic Class インデックス |
qindex |
"0".."9" |
対応する egress queue インデックスにマッピング |
qindex |
空文字列 / 数字以外 | stoi() 例外 → task_invalid_entry(エントリ破棄) |
| マップ全体 | PORT_QOS_MAP から参照中に DEL | DEL 保留 (m_pendingRemove=true)。参照解放まで待機 |
| マップ全体 | PORT_QOS_MAP 参照なし + DEL | SAI remove_qos_map() を即時呼び出し |
例外条件・特殊挙動¶
- 参照中のエントリは DEL 保留: ポートに割り当てられているマップを DEL しようとすると
"Can't remove object <name> due to being referenced"を LOG_NOTICE してm_pendingRemove = trueをセット、task_need_retryを返す。参照が外れるまで削除は保留される。 - pending remove 中の SET はリトライ: DEL 保留中のエントリへの SET は
task_need_retryを返し、参照解放後に再処理される。 - SAI create/modify 失敗:
sai_qos_map_api->create_qos_map()失敗時に"Failed to create tc_to_queue map. status:%d"を LOG_ERROR してtask_failedを返す。既存マップの変更失敗時も"Failed to set [TC_TO_QUEUE_MAP:<name>]"を LOG_ERROR してtask_failedを返す。 - 存在しない object への DEL: SAI オブジェクトが未作成のエントリを DEL しようとすると
"Object with name:<name> not found."を LOG_ERROR してtask_invalid_entryを返す(エントリはキューから除去される)。 - フィールド値の型変換失敗: TC 値または queue_index が整数として解釈できない場合、
stoi()が例外を投げtask_invalid_entryを返す。
運用ヒント¶
典型値¶
- key 形式:
TC_TO_QUEUE_MAP|<name>(例AZURE)。 - 値:
0:0,1:1,3:3,4:4等。
よくある誤設定¶
- TC→queue を 0..7 範囲外に書くと SAI が拒否し、マップ全体が install されない。