Congestion management: CBWFQ, LLQ, bandwidth remaining and hierarchical policies
In short: CBWFQ gives each class a guaranteed minimum share of a congested link. LLQ adds one strict priority queue for voice that is always served first but is policed to its configured rate, so it cannot starve other classes. Use bandwidth remaining for relative shares, and a parent shaper whenever the real bottleneck is not the physical interface.
Queuing only works when the queue fills
Congestion management decides the order in which waiting packets leave an interface. When a link is not busy, packets leave immediately and queuing tools do nothing. When it is busy, the router places packets into several software queues and a scheduler decides which queue to serve next. Older methods included priority queuing (PQ), custom queuing and flow-based weighted fair queuing. Today you will almost always meet two: CBWFQ and LLQ.
CBWFQ: guaranteed minimums
Class-based weighted fair queuing (CBWFQ) creates one queue for each class in a policy map and gives each a guaranteed minimum bandwidth during congestion. A class that does not use its share leaves it for the others, so the guarantees are minimums, not limits. Traffic that matches no class uses class-default, where fair-queue shares the space fairly between flows so one large download cannot hog it.
LLQ: a priority queue with a limit
Low latency queuing (LLQ) is CBWFQ plus one strict priority queue, configured with the priority command. Packets in it are always sent before any other queue, so voice gets minimal delay and jitter. To stop it taking everything, the priority queue has a built-in policer: during congestion, traffic above the configured rate is dropped. Old-style PQ had no such limit, and a busy high-priority queue could starve lower queues completely. With LLQ, the risk moves to the voice class itself: if you size it too small, excess voice packets are dropped and every call suffers. Size it from the number of calls times the bandwidth per call, including overhead.
Recent platforms also allow two priority levels (priority level 1 and priority level 2), for example voice and then interactive video.
Bandwidth versus bandwidth remaining
bandwidth 10000orbandwidth percent 20: an absolute guarantee, measured against the interface or shaper rate.bandwidth remaining percent 30: a relative share of whatever is left after the priority class and any absolute guarantees. This adapts better when the priority class is busy.
Most platforms do not let you mix the two styles in the same policy. Older IOS releases also reserved only 75% of the interface for configured classes by default (the max-reserved-bandwidth setting), which surprised people whose percentages added up to 100.
policy-map WAN-QUEUING
class VOICE
priority percent 15
class VIDEO
bandwidth remaining percent 40
class BUSINESS
bandwidth remaining percent 35
class class-default
bandwidth remaining percent 25
fair-queue
Sub-interfaces and hierarchical QoS
A queuing policy only acts when its interface is congested. Suppose a router has a 1 Gbps port to a provider, but the service is 100 Mbps, or the port has VLAN sub-interfaces to different sites. The physical port never looks busy, so the queues never fill; the provider drops the excess instead, with no regard for your classes. The fix is hierarchical QoS: a parent policy shapes to the real rate, creating artificial congestion, and a child policy queues inside it.
policy-map SHAPE-100M
class class-default
shape average 100000000
service-policy WAN-QUEUING
interface GigabitEthernet0/0.200
encapsulation dot1Q 200
service-policy output SHAPE-100M
Check the results with show policy-map interface, watching drops and queue depth per class.
Real-world example: two sites on one port
A housing association connected its head office to two branch offices over a provider's Ethernet service, using two VLAN sub-interfaces on one 1 Gbps router port. Each branch had a 50 Mbps service. Staff at the branches reported poor call quality, yet the head office router showed no drops at all. The provider's equipment was dropping traffic over 50 Mbps per branch, including voice. The engineer applied a parent policy shaping each sub-interface to 48 Mbps, slightly under the contract, with a child LLQ policy for voice and video. The drops moved into the router, where low-priority traffic was dropped first, and calls became clear.
Practice
Why does the LLQ priority queue have a built-in policer?
What is the difference between bandwidth percent and bandwidth remaining percent?
Why does a queuing policy on a sub-interface often need a parent shaper?
Key takeaways
- CBWFQ guarantees each class a minimum share during congestion; unused share is lent to others.
- LLQ adds a strict priority queue that is policed to its rate during congestion.
- Size the priority queue for the real number of calls, or voice itself will be dropped.
- bandwidth gives absolute guarantees; bandwidth remaining gives relative shares.
- Use a parent shaper with a child queuing policy when the bottleneck is downstream.
Original content written by Mohamed Fayas for FM TecHub. © 2026 FM TecHub. You're welcome to share a link to this page; please don't copy the text elsewhere without permission.