Cisco IOS XR Modular Quality of Service Configuration Guide for the Cisco CRS-1 Router
Configuring Modular QoS Congestion Avoidance
Downloads: This chapterpdf (PDF - 457.0KB) The complete bookPDF (PDF - 3.31MB) | Feedback

Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

Table Of Contents

Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

Contents

Prerequisites for Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

Information About Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

Random Early Detection and TCP

Weighted Random Early Detection for Preferential Traffic Handling

Average Queue Size for WRED

Tail Drop and the FIFO Queue

How to Configure Modular QoS Congestion Avoidance on Cisco IOS XR Software

Configuring Non-weighted Random Early Detection

Configuring Weighted Random Early Detection

Restrictions

Configuring Tail Drop

Restrictions

Where to Go Next

Additional References

Related Documents

Standards

MIBs

RFCs

Technical Assistance


Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software


Congestion avoidance techniques monitor traffic flow in an effort to anticipate and avoid congestion at common network bottlenecks. Avoidance techniques are implemented before congestion occurs as compared with congestion management techniques that control congestion after it has occurred.

Congestion avoidance is achieved through packet dropping. Cisco IOS XR software supports the following quality of service (QoS) congestion avoidance techniques that drop packets:

Random early detection (RED)

Weighted random early detection (WRED)

Tail drop

The module describes the concepts and tasks related to these congestion avoidance techniques.


Note For additional conceptual information about QoS in general and complete descriptions of the QoS commands listed in this module, see the "Related Documents" section of this module. To locate documentation for other commands that might appear in the course of executing a configuration task, search online in the Cisco IOS XR software master command index.


Feature History for Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

Release
Modification

Release 2.0

This feature was introduced on the Cisco CRS-1.

Release 3.0

No modification.

Release 3.2

No modification.

Release 3.3.0

No modification.

Release 3.4.0

No modification.

Release 3.5.0

No modification

Release 3.6.0

The default queue limit and WRED thresholds was based on the guaranteed service rate of the queue.

Release 3.7.0

No modification.

Release 3.8.0

No modification.

Release 3.9.0

Removed the restriction about configuring either the shape average, bandwidth, or bandwidth remaining percent commands in the user defined policy map class for the random-detect command to take effect (CSCsl69571).


Contents

Prerequisites for Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

How to Configure Modular QoS Congestion Avoidance on Cisco IOS XR Software

Where to Go Next

Additional References

Prerequisites for Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

The following prerequisite is required for configuring QoS congestion avoidance on your network:

You must be in a user group associated with a task group that includes the proper task IDs. The command reference guides include the task IDs required for each command. If you suspect user group assignment is preventing you from using a command, contact your AAA administrator for assistance.

Information About Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software

To configure QoS congestion avoidance techniques in this document you must understand the following concepts:

Random Early Detection and TCP

Weighted Random Early Detection for Preferential Traffic Handling

Tail Drop and the FIFO Queue

Random Early Detection and TCP

The RED congestion avoidance technique takes advantage of the congestion control mechanism of TCP. By randomly dropping packets prior to periods of high congestion, RED tells the packet source to decrease its transmission rate. Assuming the packet source is using TCP, it decreases its transmission rate until all packets reach their destination, indicating that the congestion is cleared. You can use RED as a way to cause TCP to slow transmission of packets. TCP not only pauses, but it also restarts quickly and adapts its transmission rate to the rate that the network can support.

RED distributes losses in time and maintains normally low queue depth while absorbing traffic bursts. When enabled on an interface, RED begins dropping packets when congestion occurs at a rate you select during configuration.

Weighted Random Early Detection for Preferential Traffic Handling

WRED provides the ability to define multiple RED profiles within a single class, based on certain match criteria (DSCP, discard class and so on), so that different drop precedences can be configured based on the relative importance of packets. WRED can selectively discard lower priority traffic when the interface begins to get congested and provide differentiated performance characteristics for different classes of service. You can configure WRED to ignore IP precedence when making drop decisions so that nonweighted RED behavior is achieved.

WRED makes early detection of congestion possible and provides for multiple classes of traffic. It also protects against global synchronization. For these reasons, WRED is useful on any output interface in which you expect congestion to occur.

However, WRED is usually used in the core routers of a network, rather than at the edge of the network. Edge routers assign IP precedences to packets as they enter the network. WRED uses these precedences to determine how to treat different types of traffic.

WRED provides separate thresholds and weights for different IP precedences, allowing you to provide different qualities of service in regard to packet dropping for different traffic types. Standard traffic may be dropped more frequently than premium traffic during periods of congestion.

WRED treats non-IP traffic as precedence 0, the lowest precedence. Therefore, non-IP traffic, in general, is more likely to be dropped than IP traffic.

WRED is useful only when the bulk of the traffic is TCP/IP traffic. With TCP, dropped packets indicate congestion, so the packet source reduces its transmission rate. With other protocols, packet sources may not respond or may resend dropped packets at the same rate. Thus, dropping packets does not decrease congestion.

Figure 1 illustrates how WRED works.

Figure 1 Weighted Random Early Detection

Average Queue Size for WRED

The router automatically determines the parameters to use in the WRED calculations. The average queue size is based on the previous average and current size of the queue. The formula is:

average = (old_average * (1-2 -x)) + (current_queue_size * 2 -x)

where x is the exponential weight factor.

For high values of x, the previous average becomes more important. A large factor smooths out the peaks and lows in queue length. The average queue size is unlikely to change very quickly, avoiding a drastic change in size. The WRED process is slow to start dropping packets, but it may continue dropping packets for a time after the actual queue size has fallen below the minimum threshold. The slow-moving average accommodates temporary bursts in traffic.


Note If the value of x gets too high, WRED does not react to congestion. Packets are sent or dropped as if WRED were not in effect.


For low values of x, the average queue size closely tracks the current queue size. The resulting average may fluctuate with changes in the traffic levels. In this case, the WRED process responds quickly to long queues. Once the queue falls below the minimum threshold, the process stops dropping packets.

If the value of x gets too low, WRED overreacts to temporary traffic bursts and drops traffic unnecessarily.

Tail Drop and the FIFO Queue

Tail drop is a congestion avoidance technique that drops packets when an output queue is full until congestion is eliminated. Tail drop treats all traffic flow equally and does not differentiate between classes of service. It manages the packets that are unclassified, placed into a first-in, first-out (FIFO) queue, and forwarded at a rate determined by the available underlying link bandwidth.

See the "Default Traffic Class" section of the "Configuring Modular Quality of Service Packet Classification on Cisco IOS XR Software" module.

How to Configure Modular QoS Congestion Avoidance on Cisco IOS XR Software

This section contains instructions for the following tasks:

Configuring Non-weighted Random Early Detection (required)

Configuring Weighted Random Early Detection (required)

Configuring Tail Drop (required)

Configuring Non-weighted Random Early Detection

You can configure non-weighted Random Early Detection (RED) by not specifying IP precedence or any other match criteria. In this way, a single RED profile is applied to all packets matching the class.

This configuration task is similar to that used for WRED except that the random-detect precedence command is not configured and the random-detect command with the default keyword must be used to enable RED.

SUMMARY STEPS

1. configure

2. policy-map policy-name

3. class class-name

4. random-detect {cos value | default | discard-class value | dscp value | exp value | precedence value | min-threshold [units] max-threshold [units] }

5. bandwidth {bandwidth [units] | percent value}

6. bandwidth remaining percent value

7. shape average {percent percentage | value [units]}

8. exit

9. exit

10. interface type interface-path-id

11. service-policy {input | output} policy-map

12. end
or
commit

DETAILED STEPS

 
Command or Action
Purpose

Step 1 

configure

Example:

RP/0/RP0/CPU0:router# configure

Enters global configuration mode.

Step 2 

policy-map policy-name

Example:

RP/0/RP0/CPU0:router(config)# policy-map policy1

Enters policy map configuration mode.

Creates or modifies a policy map that can be attached to one or more interfaces to specify a service policy.

Step 3 

class class-name

Example:

RP/0/RP0/CPU0:router(config-pmap)# class class1

Enters policy map class configuration mode.

Specifies the name of the class whose policy you want to create or change.

Step 4 

random-detect {cos value | default | discard-class value | dscp value | exp value | precedence value | min-threshold [units] max-threshold [units] }

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# random-detect default

Enables RED with minimum and maximum thresholds.

Step 5 

bandwidth {bandwidth [units] | percent value}

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# bandwidth percent 30

(Optional) Specifies the bandwidth allocated for a class belonging to a policy map.

Step 6 

bandwidth remaining percent value

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# bandwidth remaining percent 20

(Optional) Specifies how to allocate leftover bandwidth to various classes.

Step 7 

shape average {percent percentage | value 
[units]}
Example:

RP/0/RP0/CPU0:router(config-pmap-c)# shape average percent 50

(Optional) Shapes traffic to the specified bit rate or a percentage of the available bandwidth.

Step 8 

exit

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# exit

Returns the router to policy map configuration mode.

Step 9 

exit

Example:

RP/0/RP0/CPU0:router(config-pmap)# exit

Returns the router to global configuration mode.

Step 10 

interface type interface-path-id

Example:

RP/0/RP0/CPU0:router(config)# interface pos 0/2/0/0

Enters configuration mode and configures an interface.

Step 11 

service-policy {input | output}policy-map

Example:

RP/0/RP0/CPU0:router(config-if)# service-policy output policy1

Attaches a policy map to an input or output interface to be used as the service policy for that interface.

In this example, the traffic policy evaluates all traffic leaving that interface.

Step 12 

end

or

commit

Example:

RP/0/RP0/CPU0:router(config-cmap)# end

or

RP/0/RP0/CPU0:router(config-cmap)# commit

Saves configuration changes.

When you issue the end command, the system prompts you to commit changes:

Uncommitted changes found, commit them before 
exiting(yes/no/cancel)? 
[cancel]:
 
        

Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Configuring Weighted Random Early Detection

WRED drops packets selectively based on IP precedence. Edge routers assign IP precedences to packets as they enter the network. WRED uses these precedences to determine how to treat different types of traffic.

When a packet arrives, the following actions occur:

The average queue size is calculated.

If the average queue size is less than the minimum queue threshold, the arriving packet is queued.

If the average queue size is between the minimum queue threshold for that type of traffic and the maximum threshold for the interface, the packet is either dropped or queued, depending on the packet drop probability for that type of traffic.

If the average queue size is greater than the maximum threshold, the packet is dropped.

Restrictions

You cannot configure WRED in a class that has been set for priority queueing (PQ).

You cannot use the random-detect command in a class configured with the priority command.

SUMMARY STEPS

1. configure

2. policy-map policy-name

3. class class-name

4. random-detect dscp dscp-value min-threshold [units] max-threshold [units]

5. bandwidth {bandwidth [units] | percent value}

6. bandwidth remaining percent value

7. shape average {percent | value [units]}

8. exit

9. interface type interface-path-id

10. service-policy {input | output} policy-map

11. end
or
commit

DETAILED STEPS

 
Command or Action
Purpose

Step 1 

configure

Example:

RP/0/RP0/CPU0:router# configure

Enters global configuration mode.

Step 2 

policy-map policy-name

Example:

RP/0/RP0/CPU0:router(config)# policy-map policy1

Enters policy map configuration mode.

Creates or modifies a policy map that can be attached to one or more interfaces to specify a service policy.

Step 3 

class class-name

Example:

RP/0/RP0/CPU0:router(config-pmap)# class class1

Enters policy map class configuration mode.

Specifies the name of the class whose policy you want to create or change.

Step 4 

random-detect dscp dscp-value min-threshold [units] max-threshold [units]

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# random-detect dscp af11 1000000 bytes 2000000 bytes

Changes the minimum and maximum packet thresholds for the DSCP value.

Enables RED.

dscp-value—Number from 0 to 63 that sets the DSCP value. Reserved keywords can be specified instead of numeric values.

min-threshold—Minimum threshold in the specified units. The value range of this argument is from 512 to 1073741823. When the average queue length reaches the minimum threshold, WRED randomly drops some packets with the specified DSCP value.

max-threshold—Maximum threshold in the specified units. The value range of this argument is from the value of the min-threshold argument to 1073741823. When the average queue length exceeds the maximum threshold, WRED drops all packets with the specified DSCP value.

units—Units of the threshold value. This can be bytes, gbytes, kbytes, mbytes, ms (milliseconds), packets, or us (microseconds). The default is packets.

This example shows that for packets with DSCP AF11, the WRED minimum threshold is 1,000,000 bytes and maximum threshold is 2,000,000 bytes.

Step 5 

bandwidth {bandwidth [units] | percent value}

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# bandwidth percent 30

(Optional) Specifies the bandwidth allocated for a class belonging to a policy map.

This example guarantees 30 percent of the interface bandwidth to class class1.

Step 6 

bandwidth remaining percent value

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# bandwidth remaining percent 20

(Optional) Specifies how to allocate leftover bandwidth to various classes.

The remaining bandwidth of 70 percent is shared by all configured classes.

In this example, class class1 receives 20 percent of the 70 percent.

Step 7 

shape average {percent percentage | value 
[units]}
Example:

RP/0/RP0/CPU0:router(config-pmap-c)# shape average percent 50

(Optional) Shapes traffic to the specified bit rate or a percentage of the available bandwidth.

Step 8 

exit

Example:

RP/0/RP0/CPU0:router(config-pmap)# exit

Returns the router to global configuration mode.

Step 9 

interface type inteface-path-id

Example:

RP/0/RP0/CPU0:router(config)# interface pos 0/2/0/0

Enters configuration mode and configures an interface.

Step 10 

service-policy {input | output} policy-map

Example:

RP/0/RP0/CPU0:router(config-if)# service-policy output policy1

Attaches a policy map to an input or output interface to be used as the service policy for that interface.

In this example, the traffic policy evaluates all traffic leaving that interface.

Step 11 

end

or

commit

Example:

RP/0/RP0/CPU0:router(config-cmap)# end

or

RP/0/RP0/CPU0:router(config-cmap)# commit

Saves configuration changes.

When you issue the end command, the system prompts you to commit changes:

Uncommitted changes found, commit them before 
exiting(yes/no/cancel)? 
[cancel]:
 
        

Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Configuring Tail Drop

Packets satisfying the match criteria for a class accumulate in the queue reserved for the class until they are serviced. The queue-limit command is used to define the maximum threshold for a class. When the maximum threshold is reached, enqueued packets to the class queue result in tail drop (packet drop).

The queue-limit value uses the guaranteed service rate (GSR) of the queue as the reference value for the queue_bandwidth. If the class has bandwidth percent associated with it, the queue-limit is set to a proportion of the bandwidth reserved for that class.

If the GSR for a queue is zero, use the following to compute the default queue-limit:

1 percent of the interface bandwidth for queues in a nonhierarchical policy

1 percent of minimum parent shape and interface rate for queues within a hierarchical policy.

The default queue-limit is set as follows:

default queue limit (in bytes) = (<200|100|10> ms * queue_bandwidth kbps) / 8


Note You can configure tail drop in more than one priority class. Also, you can configure the queue limit in all the priority classes. From Release 3.8.0 on, the highest queue-limit (among all the high-priority classes) is programmed in the high priority queue.


Restrictions

When configuring the queue-limit command in a class, you must configure one of the following commands: priority, shape average, bandwidth, or bandwidth remaining, except for the default class.

SUMMARY STEPS

1. configure

2. policy-map policy-name

3. class class-name

4. queue-limit value [units]

5. priority

6. class class-name

7. bandwidth remaining percent value

8. exit

9. exit

10. interface type interface-path-id

11. service-policy {input | output} policy-map

12. end
or
commit

DETAILED STEPS

 
Command or Action
Purpose

Step 1 

configure

Example:

RP/0/RP0/CPU0:router# configure

Enters global configuration mode.

Step 2 

policy-map policy-name

Example:

RP/0/RP0/CPU0:router(config)# policy-map policy1

Enters policy map configuration mode.

Creates or modifies a policy map that can be attached to one or more interfaces to specify a service policy.

Step 3 

class class-name

Example:

RP/0/RP0/CPU0:router(config-pmap)# class class1

Enters policy map class configuration mode.

Specifies the name of the class whose policy you want to create or change.

Step 4 

queue-limit value [units]

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# queue-limit 1000000 bytes

Specifies or modifies the maximum the queue can hold for a class policy configured in a policy map. The default value of the units argument is packets.

In this example, when the queue limit reaches 1,000,000 bytes, enqueued packets to the class queue are dropped.

Step 5 

priority

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# priority

Specifies priority to a class of traffic belonging to a policy map.

Step 6 

class class-name

Example:

RP/0/RP0/CPU0:router(config-pmap)# class class2

Specifies the name of the class whose policy you want to create or change.

In this example, class2 is configured.

Step 7 

bandwidth remaining percent value

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# bandwidth remaining percent 20

(Optional) Specifies how to allocate leftover bandwidth to various classes.

This example allocates 20 percent of the leftover interface bandwidth to class class2.

Step 8 

exit

Example:

RP/0/RP0/CPU0:router(config-pmap-c)# exit

Returns the router to policy map configuration mode.

Step 9 

exit

Example:

RP/0/RP0/CPU0:router(config-pmap)# exit

Returns the router to global configuration mode.

Step 10 

interface type interface-path-id

Example:

RP/0/RP0/CPU0:router(config)# interface pos 0/2/0/0

Enters configuration mode, and configures an interface.

Step 11 

service-policy {input | output} policy-map

Example:

RP/0/RP0/CPU0:router(config-if)# service-policy output policy1

Attaches a policy map to an input or output interface to be used as the service policy for that interface.

In this example, the traffic policy evaluates all traffic leaving that interface.

Step 12 

end

or

commit

Example:

RP/0/RP0/CPU0:router(config-cmap)# end

or

RP/0/RP0/CPU0:router(config-cmap)# commit

Saves configuration changes.

When you issue the end command, the system prompts you to commit changes:

Uncommitted changes found, commit them before 
exiting(yes/no/cancel)? 
[cancel]:
 
        

Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Where to Go Next

To configure traffic congestion techniques, see the "Configuring Modular QoS Congestion Avoidance on Cisco IOS XR Software" module.

To configure traffic classification techniques, see the "Configuring Modular Quality of Service Packet Classification on Cisco IOS XR Software" module.

To read Cisco IOS XR QoS overview information, see the "Modular Quality of Service Overview on Cisco IOS XR Software" module.

Additional References

The following sections provide references related to implementing QoS congestion avoidance on Cisco IOS XR software.

Related Documents

Related Topic
Document Title

Cisco IOS XR QoS commands: complete command syntax, command modes, command history, defaults, usage guidelines, and examples

Cisco IOS XR Modular Quality of Service Command Reference for the Cisco CRS-1 Router.

Packet classification

Configuring Modular QoS Packet Classification on Cisco IOS XR

Cisco IOS XR getting started material

Cisco IOS XR Getting Started Guide for the Cisco CRS-1 Router

Information about user groups and task IDs

Configuring AAA Services on Cisco IOS XR Software module of Cisco IOS XR System Security Configuration Guide

Cisco IOS XR QoS overview information

Modular Quality of Service Overview on Cisco IOS XR Software


Standards

Standards
Title

No new or modified standards are supported by this feature, and support for existing standards has not been modified by this feature.


MIBs

MIBs
MIBs Link

To locate and download MIBs using Cisco IOS XR software, use the Cisco MIB Locator found at the following URL and choose a platform under the Cisco Access Products menu: http://cisco.com/public/sw-center/netmgmt/cmtk/mibs.shtml


RFCs

RFCs
Title

No new or modified RFCs are supported by this feature, and support for existing RFCs has not been modified by this feature.


Technical Assistance

Description
Link

The Cisco Technical Support website contains thousands of pages of searchable technical content, including links to products, technologies, solutions, technical tips, and tools. Registered Cisco.com users can log in from this page to access even more content.

http://www.cisco.com/techsupport