Skip to content

Hierarchical QoS

QoS is built from three objects: a queue profile is the scheduler discipline only and carries no rate; a subscriber profile owns the rate plus an optional local priority and points at a queue profile; an assignment binds a prefix to a subscriber profile.

Resolution order

A subscriber’s effective QoS resolves as: a matching assignment by longest prefix, giving its subscriber profile’s rate, priority and queue profile; else the RADIUS rate on the per-service default queue profile (PPPoE versus IPoE); else the service default at the port rate. show qos bindings reports the resolved result per subscriber with its source.

Building a plan

References resolve against the running config, so commit a queue profile before a subscriber profile that names it, and a subscriber profile before the assignment that binds it.

cli
qos queue-profile add res-fq fq_codel qsize 4096 \
    target 5ms interval 100ms ecn on
qos subscriber-profile add res-100 rate-down 100M rate-up 100M \
    queue-profile res-fq
commit
qos assign add 100.64.10.0/24 subscriber-profile res-100
commit
save

Live retune instead of restart

A queue profile’s discipline, qsize and AQM layout are fixed when a port is built, so the daemon keeps parallel scheduler generations. After editing and saving, qos retune builds a new generation alongside the running one: new sessions bind immediately, existing sessions keep forwarding and migrate gradually. The old generation is freed once nothing references it, and only one retune runs at a time.

cli
commit ; qos retune ; save
show qos generations

Overhead compensation

A shaper counts the full L1/L2 frame plus PPPoE, but a speed test measures TCP payload — so a 300M pipe reads around 268M. Overhead compensation shapes each pipe a set percentage above plan so goodput matches the plan: roughly 8–12%, nearer 12 for PPPoE and 8 for IPoE, with 0 meaning exact plan.

cli
overhead-compensation 12
show qos