SCHEDULER テーブル¶
概要¶
キュー / ポートに適用するスケジューラ(DWRR / WRR / STRICT)と dual-rate token bucket policer (CIR / PIR / CBS / PBS) のプロファイルを保持する1。qosorch が SAI scheduler を生成、QUEUE.scheduler から leafref で参照される。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>SCHEDULER")]
DM["QosOrch"]
CDB --> DM
SAI["SAI<br/>sai_scheduler_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
フィールド一覧¶
| フィールド | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
name (key) |
string | ✅ | - | スケジューラ名 |
type |
enum DWRR/WRR/STRICT |
- | WRR |
スケジューリングアルゴリズム |
weight |
uint8 (1..100) | - | 1 |
重み(DWRR/WRR で使用) |
priority |
uint8 (0..9) | - | - | 優先度 |
meter_type |
enum packets/bytes |
- | bytes |
meter 単位 |
cir |
uint64 | - | - | committed information rate(Bps or Pps) |
pir |
uint64 | - | - | peak information rate。cir > 0 必須、pir >= cir |
cbs |
uint32 | - | - | committed burst size。cir > 0 必須 |
pbs |
uint32 | - | - | excess/peak burst size。pir > 0 必須、pbs >= cbs |
制約 (must)¶
pir単独設定禁止(cir必須・cir > 0)pir >= circbs単独設定禁止(cir必須)pbs単独設定禁止(pir必須)、pbs >= cbs
購読者¶
qosorch: SAI scheduler を生成
関連 CONFIG_DB / YANG / CLI¶
関連リファレンス¶
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key 形式:
SCHEDULER|<name>(例scheduler.0)。 type:STRICT/DWRR/WRR。weight: 1..100。meter_type/pir(shaping 用)。
よくある誤設定¶
type: STRICTを全 queue に設定すると低優先 queue が永遠に starve。
確認コマンド¶
値依存挙動マトリクス¶
type 値別挙動¶
| 値 | SAI 変換 | 挙動 |
|---|---|---|
DWRR |
SAI_SCHEDULING_TYPE_DWRR |
重み付きデフキュー方式。weight フィールドを帯域比率として使用。 |
WRR |
SAI_SCHEDULING_TYPE_WRR |
重み付きラウンドロビン。weight フィールドを使用。 |
STRICT |
SAI_SCHEDULING_TYPE_STRICT |
厳格優先。weight は無視。上位優先度 queue が常に先処理。全 queue に設定すると低優先が starve。 |
| その他 | なし | SWSS_LOG_ERROR("Unknown scheduler type value:%s") → task_invalid_entry。エントリ破棄、SAI 非反映。 |
meter_type 値別挙動¶
| 値 | SAI 変換 | 挙動 |
|---|---|---|
packets |
SAI_METER_TYPE_PACKETS |
CIR/PIR の単位をパケット数として解釈。 |
bytes |
SAI_METER_TYPE_BYTES |
CIR/PIR の単位をバイト数として解釈(デフォルト)。 |
例外条件・特殊挙動¶
- type フィールドが未知の値:
typeがDWRR/WRR/STRICT以外の場合SWSS_LOG_ERROR("Unknown scheduler type value:%s")を出してtask_invalid_entryを返す。エントリは破棄されて SAI には反映されない。2 - SAI scheduler profile 作成失敗:
sai_scheduler_api->create_scheduler()が失敗した場合SWSS_LOG_ERROR("Failed to create scheduler profile")で処理中断。2 - SAI scheduler profile 削除失敗: QUEUE から参照されている SCHEDULER プロファイルを削除しようとすると SAI が EBUSY 等を返し
SWSS_LOG_ERROR("Failed to remove scheduler profile")となる。CONFIG_DB からは削除されても ASIC には古いプロファイルが残留する。2 - weight のオーバーフロー:
weightフィールドはuint8にキャストされるため 0-255 の範囲外は暗黙に切り捨てられる(バリデーションなし)。2 - QUEUE 参照がある間は削除不可: QUEUE が参照している SCHEDULER を削除すると SAI レイヤで失敗する。QUEUE の参照を先に外してから削除する必要がある。2
-
YANG 定義:
sonic-scheduler.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-scheduler.yang ↩ -
qosorch 実装:
sonic-swss/orchagent/qosorch.cpp. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/qosorch.cpp ↩↩↩↩↩