Friday, November 13, 2020

Why do most queue management algorithms do "tail drop"?

There are lots of queue management algorithms (Blue, tail drop, WRED, RRED, SFQ etc.).

They all seem to drop packets on entry to the queue (ie. the tail), rather than dropping a packet about to be transmitted (ie. the head of the queue).

This seems suboptimal - if a packet has to be dropped, you would rather it be one about to be forwarded, because then the remote endpoint gets information about the drop as soon as possible. That then allows the transmission rate to be adjusted as soon as possible.

The extreme example of this is in bufferbloat - if a home router has a massive buffer, for example 4 megabytes on a 8 Mbit ADSL connection, then it takes a full 4+ seconds for the dropped packet to reach the far end, the ACK (or rather lack of) to get back, and for the transmitter to slow down to avoid more losses. If the router had dropped the head of its massive buffer, then the slowdown would be much faster, preventing more loss for not only this flow, but all other flows sharing the same network link.



No comments:

Post a Comment