Custom Queueing
Custom Queueing (CQ) is one of Cisco's most popular
queueing strategies. CQ was originally implemented to address the clear
shortcomings of PQ. It lets you configure how many queues are to be used, what
applications will use which queues, and how the queues will be serviced. Where
PQ has only four queues, CQ allows you to use up to 16. And, perhaps most
importantly, it includes a separate system queue so that user application data
cannot starve critical network control traffic.
CQ is implemented as a round-robin queueing algorithm. The
router takes a certain predetermined amount of data from each queue on each
pass. You configure this as a number of bytes. This allows you to specify
approximately how much of the bandwidth each queue will receive. For example, if
you have four queues, all set to the same number of bytes per pass, you will
expect to send roughly equal amounts of data for all of these applications.
Since the queues are only used when the network link is congested, this means
that each of the four applications will receive roughly one quarter of the
available bandwidth.
However, it is important to remember that the router will
always take data one packet at a time. So if, for example, you have a series of
1500 byte packets sitting in a particular queue, and you have configured the
router to take 100 bytes from this queue on each pass, it will actually transmit
one entire packet each time, and not one every 15 times. This is important
because it can mean that your calculations of the relative amounts of bandwidth
allocated to each queue might be different from what the router actually
sends.
This difference tends to disappear as you increase the number
of bytes taken each time the queues are serviced. But you don't want to let the
number get too large, or you will cause unnecessary latency and jitter problems
for your applications. For example, if the byte count for each of your four
queues is 10,000 bytes, and all of the queues are full, the router will send
10,000 bytes from the first queue, then 10,000 bytes from the second queue, and
so on. From the time it finished servicing the first queue until the time that
it returns to service it again, it will have sent 30,000 bytes. It takes roughly
160 ms to send this much data through a T1 link. But the gap between the
previous two packets in this queue was effectively zero. Variations in latency
like this are called jitter, and they can cause serious problems for many
real-time applications.
So, as with all of the other queueing algorithms we have
discussed, Custom Queueing has some important advantages and disadvantages. Chapter 11
contains recipes to implement all of the queueing varieties we have discussed.
You need to select the one that matches your network requirements best. None of
them is perfect in all situations.