Dave,

I was careful to say fq_codel, not just codel.
I was assuming the scenario that fq_codel is most pitched for; a home gateway or modem.

On Wed, 11 Dec 2013, Dave Taht wrote:
> >> In the event of a link going completely idle, and staying
> >> idle, there is hysteresis built into the code so it will retain that
> >> drop rate for a few
> >> hundred milliseconds (it's 8*interval in some versions of the code,
> >> 4 in others), before resetting count to 1 and the resulting estimation
> >> window to interval.

For fq_codel, new queues for new flows are coming and going all the time, with instances of CoDel coming and going as each queue comes and goes...

> >> [1] on fq_codel the values are cached, too, but… well… I will try to explain
> >> later. yes, more work is needed in this area.

An explanation would be useful because I admit I couldn't unpick the code enough to understand how the learning by one Codel instance in one queue can be picked up by another Codel instance in another queue...

Whatever, passing learning from one queue to another won't help whenever the whole link goes idle. And an access link is idle for the vast majority of the time. The average percent utilisation of a customer's link /during the peak hour/ is in the low single digits (ie 1-3%). The link is constantly idle for periods a lot longer than 8*interval (about a second) even when a user is actively using it, e.g. for browsing, and even streaming is only active in bursts (assuming HAS).

> >> As debussy said: "Music is the *space* between the notes".

So, in the case that fq_codel is most targeted for, the algorithm will start from scratch at the start of the vast majority of new flows, which means it will delay the first drop signal by 200ms. For TCP flows, this means slow-start will tend to cause tail drop and overshoot before fq_codel has hardly started to train. Further, thin flows constantly re-start so they will constantly experiencing this problem when their idle periods are outside CoDel's brief caching time.

In the rarer case that a flow is long enough (or enough other flows are present) for fq_codel to have trained...

> >> After that approximation of ideal drop/mark rate is obtained, the algorithm > >> goes quiescent until the next time the target delay is consistently exceeded, > >> at which point it schedules the next drop at a little more than the stored > >> previous drop rate. It then continually seeks around that point up and down.

I believe "consistently exceeded" means "exceeded for 'interval'" (100ms default). So for a long flow, the signalling delay after crossing threshold from below is not 200ms + RTT, but it is:
        100ms + RTT + previous drop delay + a little.
Even if the previous drop delay is tiny, the 100ms interval still makes it very sluggish. E.g. if RTT = 20ms, signalling delay = 120ms = 6 round trips. Am I right?

That doesn't matter for a bulk transfer within its own fq_codel queue. But it does matter for a thin stream using TCP where the delay of each message within the stream matters. And it does matter for a r-t stream.

Further, these long flows are rare. So, given the link frequently goes inactive, the learning from one will rarely still be cached when another comes along. Which is why the rate of increase in drop frequency during training is important to get right (that's my other thread with Van & Kathie, which is still unanswered).

___________
I'm not saying Codel / fq_codel is particularly worse than other AQMs in respect of this signalling delay. My point was that all AQMs have to introduce some signalling delay if they use loss as a signal, but not if they use ECN. I'm just responding on CoDel / fq_codel in particular because that's where Jim took this conversation, which you picked up.


Bob

At 22:51 11/12/2013, Ilpo Järvinen wrote:
On Wed, 11 Dec 2013, Dave Taht wrote:

> On Wed, Dec 11, 2013 at 1:11 PM, Ilpo Järvinen
> <[email protected]> wrote:
> >
> > What this means in terms of TCP:
> >
> > The network/or you fq-queue (in case of fq_codel if you so want) won't be
> > all that busy according to CoDel once CoDel kindly "coddled" the TCPs,
> > that's the whole point of CoDel I'm told :-). This is because the queue
> > happens to be "under control" only if TCP backs off to below 5ms + RTT
> > level of utilization. ...Now remember the effect of beta here. If the
> > network remains more than "5ms busy", CoDel thinks that the queue is not
> > in control and keeps shooting again and until eventually the network is no
> > longer "busy". The worst case beta * (5ms + RTT) is quite small
> > utilization and it takes time for a TCP to recover network busyness.
>
> You are trying to explain something to me in RED terms that doesn't
> happen in the real world.

??? This has nothing to with RED. I really don't know where you got that
one. It's all what TCP is doing, sawtooth etc. (I know Linux uses Cubic
so no need to point that out).

> packets get smoothed into the "RTT" which serves as inflight storage.

That's exactly the point here. When RTT >> threshold, you take MD beta
hit, the inflight storage will be affect as well.

> Go take a measurement please. Supplying a packet
> capture would help explain whatever you are seeing. tell us
> what kernel you are using and follow the guidelines.

That particular text snippet didn't come from any particular test, just
the algorithms (both TCP and CoDel) running in my head.

> >> In the event of a link going completely idle, and staying
> >> idle, there is hysteresis built into the code so it will retain that
> >> drop rate for a few
> >> hundred milliseconds (it's 8*interval in some versions of the code,
> >> 4 in others), before resetting count to 1 and the resulting estimation
> >> window to interval.
> >
> > True, however, it only means that you'll overshoot more or the time was
> > too short to retain the trained count in memory (and in that case CoDel
> > forgets it like you admit). Or do you think that the magic number applied
> > to count on the recall (was it "-2") works for all traffic?
>
> You are not looking at the current as-shipped code.

Heh, it was somewhat unfair to call me on that one considering how many
different variants of that particular recall have existed ;-). But you're
right, it's not exactly what would happen with that variant.


--
 i.

________________________________________________________________
Bob Briscoe, BT
_______________________________________________
aqm mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/aqm

Reply via email to