<p dir="ltr">> However there are many other objectives that need to be met also - keeping the pipe filled and utilization high for starters. The ideal buffer length is 1 packet, all the time, no idle periods. trying to smooth out bursts. being resistant to attacks. etc. THIS STUFF IS HARD!</p>
<p dir="ltr">It's not hard. It's impossible - as long as we only have this one bit per RTT per flow signalling capacity. Which is why I came up with ELR.</p>
<p dir="ltr">Until we get ELR, we'll have to put up with oscillating congestion window sizes, and the inherent trade-off between utilisation and peak queue depth they imply. ConEx and DCTCP don't solve that either; they just allow different amounts of downward pressure at the upper end.</p>
<p dir="ltr">Even Codel implicitly acknowledges this oscillation in its design. Someone described it recently as a self-adjusting bang-bang controller, and that's basically fair; it has distinct "on" and "off" phases with some hysteresis between them, just like your refrigerator. It works well for the given conditions, but it too is inherently incapable of providing perfectly smooth control.</p>
<p dir="ltr">And then there's the vastly different dynamics of slow start versus congestion avoidance. Codel with ECN and either Westwood+ or CUBIC are actually pretty good in the congestion avoidance phase. Slow start behaves entirely differently, but it's hard to detect the optimal point at which it should be told to back off, without risking being too aggressive at signalling to congestion avoidance.</p>
<p dir="ltr">An observation: 50 simultaneous slow start flows with IW10 is equivalent to one slow start flow with IW500.</p>
<p dir="ltr"> - Jonathan Morton<br>
</p>