<p dir="ltr">> > Which yields you the classic tail-drop FIFO, whose faults are by now well documented.  If you have the opportunity to do something better than that, you probably should.  The simplest improvement I can think of is a *head*-drop FIFO, which gets the congestion signal back to the source quicker.  It *should* I think be possible to do Codel at 10G (if not 40G) by now; whether or not it is *easy* probably depends on your transistor budget.<br>

><br>
> Caveat: this is probably the best strategy for networks that consist solely of long lived, non service critical, TCP flows - for the rest of networking requirements think carefully. There are several, real world, scenarios where this is not the best strategy and, where you are looking to make any form of "safety" case (be it fiscal or safety of life) it does create new performance related attack vectors. We know this, because we've been asked this and we've done the analysis.</p>

<p dir="ltr">That sounds like you're talking about applications where reliable packet delivery trumps latency. In which case, go ahead and build big buffers and use them; build the hardware so that AQM can be switched off. I happen to believe that AQM has the more common applications, so it should still be built into hardware whenever practical to do so.</p>

<p dir="ltr">Speaking of which, here are a couple more ideas for hardware-simple AQM strategies:</p>
<p dir="ltr">RANDOM qdisc, which has no queue head or tail. On dequeue, it delivers a random packet from the queue. On enqueue to a full buffer, it drops random packets from the queue until the new packet will fit. Your primary congestion signal is then packets arriving out of order and with delay jitter, which increases with the average fill of the queue. As a backup, it will revert to dropping packets in an approximately fair manner.</p>

<p dir="ltr">HALF MARK qdisc, which is essentially a head-drop FIFO, but when the queue is half-full it begins marking all ECN capable packets (on dequeue) and dropping the rest (according to ECN RFC). I know, it's theoretically inferior to RED, but it's far more deployable. It is also capable of giving a congestion signal without dropping packets, as long as everything supports ECN. Easily generalised into HIGH WATER MARK qdisc where the ECN threshold is not necessarily at half-full.</p>

<p dir="ltr">You may also notice that RANDOM and HALF MARK can be implemented simultaneously on the same queue. This is generally true of any two AQM strategies which respectively target packet ordering and packet marking exclusively. You could thus also have RANDOM+Codel or similar.</p>

<p dir="ltr"> - Jonathan Morton</p>