QoS / Buffer の発展トピック¶
QoS / Buffer / PFC の基本(scheduler、queue map、PG、watermark)を押さえた後は、PFC の運用整合性と buffer pool の設計が次の論点になる。本ページでは、章本文で扱った機能の延長と、他章 (Dual-ToR / 02 BGP / VOQ) との境界を整理する。
ハンドオフ¶
- 概念とアーキテクチャは本章の concept / architecture と area HLD sonic-qos-scheduler-and-shaping, watermark-counters-in-sonic に集約されている。
- 設定とリファレンスは reference/cli の
config qos/config buffer/show buffer pool系、reference/config_db/BUFFER_*,SCHEDULER,PORT_QOS_MAPに集約されている。 - 本ページは、scheduler / buffer の基本パスを押さえた読者に対し、Asymmetric PFC, 動的 buffer model, PFC watchdog のチューニング、headroom pool 設計などの発展領域だけを扱う。
動的 buffer model の運用詳細¶
動的 buffer model (buffermgrd が dynamic) では、BUFFER_PROFILE を手書きせず alpha (dynamic threshold) と pool size のみ指定する。alpha は ASIC の SAI_BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH に直接マップされ、共有 pool 残量に応じて per-PG/queue の使用上限が自動調整される。alpha = 1/8 を基準に、congestion 多めの ToR では alpha を大きくして burst 吸収を優先し、tail-drop 厳しめの構成では小さくする。
ポートアップ / ダウン時には buffermgrd が BUFFER_PG, BUFFER_QUEUE を再計算し、speed, cable-length の変化を pg_lossless_<speed>_<cable>_profile という profile キーで参照する。pg-headroom 計算式は headroom = 2 * (delay * BW + MTU) ベース。手動上書きは原則しない。
PFC watchdog のチューニング¶
PFC_WD_TABLE|GLOBAL の POLL_INTERVAL と DETECTION_TIME / RESTORATION_TIME は per-queue 単位で個別に上書き可能 (PFC_WD_TABLE|<port>)。短すぎる detection (100ms) は legitimate な burst を storm と誤検知し、長すぎる (1s 超) と head-of-line block が広がる。fabric 規模が大きいほど、detection を 200ms, restoration を 200ms 程度に揃え、storm 確定後は forward ではなく drop action にして局所封じ込め、を推奨する。
発展トピック¶
- Asymmetric PFC: 上流と下流で PFC enable bitmap を非対称に運用するモデル。lossless TC を一方向だけ pause 対象とする使い方で、
PORT_QOS_MAP|<port>.pfc_to_queue_mapと peer ToR の設定整合が要点。 - 動的 buffer model: 旧来の static buffer profile から、
BUFFER_POOLの thresholds と alpha (dynamic threshold) を ASIC レベルで決める動的モデルへの移行。buffermgrdがBUFFER_PROFILEを auto 計算する。 - PFC watchdog の per-queue 詳細化: storm 検出窓 / restore 窓を queue ごとにチューニングし、不要な polling load を減らす。
PFC_WD_TABLEのパラメータ調整。 - Tunnel DSCP remap: standby ToR → active ToR の bounce-back を別 PG/queue に逃がす設定。詳細は 05 Dual-ToR と相互参照。
- Headroom pool: PFC pause 受信中に必要な headroom buffer を共有 pool で確保する設計。port shutdown 時に headroom が解放される動作の理解が必要。
- WRED / ECN の細分化: green / yellow / red の閾値別ドロップ確率と、ECN-marking 閾値を queue ごとに調整。CSE 系 telemetry と組み合わせて congestion 兆候を捕捉する。
- Watermark の align-with-port-config: port admin down 時に watermark を 0 に clear する整合性改善で、運用 dashboard の誤検知を減らす。
既知の制約と回避方法¶
- buffer profile の手書きと auto 計算の混在: 一部 SKU で
pg_lossless_*_profile.jsonを手書き、別 SKU で動的計算を使うと、deployment yaml が SKU ごとに分岐する。SKU 単位で auto / manual を統一する。 - PFC storm 中の watermark 異常値: storm で queue depth が暴れると watermark API の peak が過大になる。
sonic-clear queue watermarkを保守時に発行して baseline を取り直す。 - scheduler weight と shaper の同時設定:
SCHEDULERのweightとpir/cirを両方設定すると ASIC によって解釈が違う。WFQ + shaping の組合せは platform docs と SAI sample で必ず確認する。 - ECN-only deployment: PFC を無効にして ECN だけで lossless を狙う構成は、congestion 検出が遅れて queue が膨らむと drop に至る。host TCP stack の DCTCP 設定とセットで運用する。
将来計画 / ロードマップ¶
align-watermark-flow-with-port-configurationHLD が port lifecycle と watermark の整合を扱い、これを起点に counter の reset 周りが整理される方向。- Dynamic buffer model の telemetry 統合が長期テーマで、buffer pool の utilization を OpenConfig schema で export する話が継続。
- SAI 側で
SAI_BUFFER_POOL_ATTR_XOFF_SIZEや per-queue headroom counter の attribute が拡張されており、SONiC 側 schema 追随が見込まれる。
関連 RFC / 仕様書¶
- IEEE 802.1Qbb — PFC
- IEEE 802.1Qaz — ETS (Enhanced Transmission Selection)
- RFC 3168 — ECN
- RFC 8257 — DCTCP
- RFC 7567 — AQM Recommendations (WRED 議論)
- RFC 2474 — DSCP
upstream 開発の最新動向¶
sonic-buildimage配下のbuffermgrdで動的 buffer model のチューニング PR が継続。alpha 値の自動計算ロジックが SKU 別に分岐していくため、platform 依存が増える傾向。sonic-swssのqosorchで WRED profile attribute 更新と PFC watchdog の storm detection 改善 PR が定期的に入る。- Streaming telemetry 側 (10 gNMI) で
COUNTERS_DBの watermark / queue / PG 数値を export する設定例が拡張中。
トラブルシュート観点¶
- lossless TC で drop が出る場合、(1)
BUFFER_PGの headroom が不足、(2) PFC watchdog のforwardaction で storm を素通りさせている、(3) peer 側で PFC を送出していない、の 3 つを順に切り分ける。show pfc countersで peer から PFC frame を受信しているかを確認。 - buffer pool exhaust は
sonic-clear watermark queue+sonic-clear watermark pgで baseline を取り直し、show buffer poolのXOFF usedを観察する。 - WRED が機能しない場合、
SCHEDULERのtypeがWRR/DWRRであり、queue に WRED profile が bind されていることをQUEUEtable で確認する。WRED_PROFILEのecn設定 (ecn_all,ecn_none) も要点。
検証パスとラボ要件¶
- PFC end-to-end の検証は
sonic-mgmtのqos/test_qos_sai.pyで行う。SAI 側 attribute と Redis 設定の整合確認が含まれる。 - 動的 buffer model の alpha チューニングは、合成 burst (microburst injector) を流して
BUFFER_POOL_WATERMARK_STAT_COUNTERの peak を観察する手順が標準。
関連ページ (追補)¶
- Asymmetric PFC test plan
- Dynamically headroom calculation
- Align watermark flow with port configuration HLD
- Egress outer DSCP change table
- WRED and ECN statistics
- Watermark counters in SONiC
- SONiC QoS scheduler and shaping
- Configurable drop counters in SONiC
- DSCP remapping for tunnel traffic
- Distributed forwarding in a VOQ architecture
- DASH ACL tags
- 05 Dual-ToR: tunnel decap と DSCP の組合せ
- 12 Multi-ASIC / VOQ: chassis 全体の buffer 設計
- 09 Telemetry / SNMP: watermark / drop telemetry の配信
- 07 ACL / CoPP / Mirror: ACL action と PFC/QoS の交差
- Egress mirroring support and ACL action capability check
- Enhancements on show acl commands
- Everflow test plan (mirror counter 観点)