Home » QoS » CBWFQ and LLQ


Class Based Weighted Fair Queueing – CBWFQ

CBWFQ is a modern congestion management technique and it is not advised for Voice and Video traffic, since both of them need strict priorities.  CBWFQ uses the Cisco MQC command structure. With CBWFQ you can define traffic classes and assign guaranteed amount of  minimum bandwidth, these classes can get more bandwidth if its available, but they always get the minimum bandwidth assigned to them.

CBWFQ will be used with Low Latency Queuing (LLQ) to deploy voice and video traffic to give strict priorities.

In the Software Queue there is a WFQ Scheduler, and you define the traffic classes using the class-maps where each traffic class (Queue) will get its minimum guaranteed bandwidth. However within each of this Queue  the packets are forwarded using the FIFO approach. There is also a Class-Default which is the default class, this class has any traffic which does not fall into any of the user defined classes. Within this Default Class Queue you can do FIFO approach or  WFQ. Dropping at the end of Queue the default action is tail drop, but it can be configured to WRED.

In CBWFQ the weights are defined as Bandwidth Reservation. Bandwidth Reservation can be defined as one of the following approaches:
1. In Kbps
2. Percentage of Bandwidth
3. Percentage of remaining Bandwidth.
Available Bandwidth Calculation
Available Bandwidth = Bandwidth * Max_Reserve – SUM(All Fixed guarantees)

Max_Reserv is the Maximum Reservable Bandwidth.
The Max_Reserve is always 75% of the interface bandwidth but this can be changed by the command max-reserved-bandwidth

Note: You need to be consistent in what approach you take to assign bandwidth- you cannot mix the approaches for reserving bandwidths. That is if you use Kbps you have to use Kbps consistently across all traffic classes and same goes for percentage.

In Policy map structure use the bandwidth command with Kbps or percentage or remaining bandwidth, optionally you can also specify the queue size with queue-limit command.

bandwidth { bandwidth-kbps | remaining percentage | percentage }
queue-limit <limit>

This class gets WFQ treatment by default. If you use the bandwidth command in the class-default then it will no longer do the WFQ, but FIFO within this class (queue)

Monitoring CBWFQ
# show policy-map interface

1. Define Class Maps
class-map http
match protocol http
class-map telnet
match protocol telnet

2. Define Policy Maps
policy-map Example
class http
bandwidth 2000
class telnet
bandwidth 500
class class-default
bandwidth 1000

3. Apply to the Interface:
interface S0/0/0
service-policy output Example

Low Latency Queuing (LLQ)

This is a modern congestion management technique, which is extending CBWFQ to support Voice and Video or mission critical traffic.

LLQ is  adding Priority Queueing to the CBWFQ. The Priority Queue is used only for Voice / Video or mission critical traffic, without having the Queue Starvation for other Queues.  The starvation is avoided using the policing, the traffic  in Priority Queue is policed and the Queue can get to whatever the bandwidth it was assigned. It can however go over the assigned bandwidth if there is no congestion. The strict policing applies only in times of congestion and that too to the traffic in the Priority Queue so it does not starve other queues.

The mission critical traffic gets the bandwidth it is assigned and other queues get what ever minimum  bandwidth they were assigned, plus if there is no congestion all the queues can go over their assigned bandwidth if needed.

The  Voice traffic is handled by the PQ Scheduler and the remaining traffic is handled by the WFQ handler. The policed bandwidth for traffic in PQ is only during the time of congestion, if there is no congestion then the traffic in PQ (typically voice) can go over the bandwidth assigned to it.

Use the priority command instead of the bandwidth keyword in the policy-map.

Priority can be assigned in any of these two approaches
priority <bandwidth> [burst]
priority percent <percentage> [burst]

Note: There is going to be only one priority Queue with LLQ which is a policed bandwidth amount.

1. Define Class Maps
class-map http
match protocol http
class-map telnet
match protocol telnet
class-map match-any voice
match protocol rtp
match ip dscp ef
class-map voice-signalling
match ip dscp cs3

2. Define Policy Maps
policy-map Example1
class http
bandwidth percent 20

class telnet
bandwidth percent 10

class voice-signalling
bandwidth percent 5

class voice
priority percent 50

class class-default

3. Apply to the Interface:
interface S0/0/0
service-policy output Example1

End-to-End QoS Network Design: Quality of Service for Rich-Media & Cloud Networks (2nd Edition) (Networking Technology)


Incoming search terms for the article:

One thought on “CBWFQ and LLQ

Leave a Reply