Weighted random early detection

From HandWiki
Short description: Network queueing discipline for congestion avoidance

Weighted random early detection (WRED) is a queueing discipline for a network scheduler suited for congestion avoidance.[1] It is an extension to random early detection (RED) where a single queue may have several different sets of queue thresholds. Each threshold set is associated to a particular traffic class.

For example, a queue may have lower thresholds for lower priority packet. A queue buildup will cause the lower priority packets to be dropped, hence protecting the higher priority packets in the same queue. In this way quality of service prioritization is made possible for important packets from a pool of packets using the same buffer.[2]

It is more likely that standard traffic will be dropped instead of higher prioritized traffic.

Restrictions

On Cisco switches WRED is restricted to

  • TCP/IP traffic. Only this kind of traffic indicates congestion to the sender to enable a reduction of the transmission rate.

Non-IP traffic will be dropped more often than TCP/IP traffic because it is treated with the lowest possible precedence.

Functional Description

WRED proceeds in this order when a packet arrives:

  • Calculation of the average queue size.
  • The arriving packet is queued immediately if the average queue size is below the minimum queue threshold.
  • Depending on the packet drop probability the packet is either dropped or queued if the average queue size is between the minimum and maximum queue threshold.
  • The packet is automatically dropped if the average queue size is greater than the maximum threshold.

Calculation of average queue size

The average queue size depends on the previous average as well as the current size of the queue. The calculation formula is given below:

[math]\displaystyle{ avg= o*(1-2^{-n}) + c*(2^{-n})\,\! }[/math]

where [math]\displaystyle{ n }[/math] is the user-configurable exponential weight factor, [math]\displaystyle{ o }[/math] is the old average and [math]\displaystyle{ c }[/math] is the current queue size. The previous average is more important for high values of [math]\displaystyle{ n }[/math]. Peaks and lows in queue size are smoothed by a high value. For low values of [math]\displaystyle{ n }[/math], the average queue size is close to the current queue size.

References