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.
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.
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.
overhead-compensation 12 show qos