Subject: Re: high latency with TCP connections

From: Stephen Hemminger <[email-masked]>
Date: Thu, 31 Aug 2006 20:23:09 -0700

On Thu, 31 Aug 2006 16:57:01 -0700 (PDT)
David Miller <[email-masked]> wrote:

> From: Alexey Kuznetsov <[email-masked]>
> Date: Fri, 1 Sep 2006 03:29:23 +0400
> 
> > > 2) a way to take delayed ACKs into account for cwnd growth
> > 
> > This part is OK now, right?
> 
> This part of ABC is not on by default, and was broken until last week
> :-)
> 
> Test in tcp_slow_start() used to be:
> 
> 	tp->bytes_acked > 2*tp->mss_cache
> 
> but now it is the correct:
> 
> 	tp->bytes_acked >= 2*tp->mss_cache
> 
> It allows to make two congestion window increases from one ACK, when
> noticing delayed ACK.
> 
> Non-ABC code did not do this, but could figure this kind of thing
> out while scanning retransmit queue.
> 
> > > 1) protection against ACK division
> > 
> > But Linux never had this problem... Congestion window was increased
> > only when a whole skb is ACKed, flag FLAG_DATA_ACKED. (TSO could
> > break this, but should not). Otherwise, this ACK just advanced snd_una
> > and nothing more.
> 
> Ugh, I missed this. :-/
> 
> The TSO code is carefuly to only trim TSO skbs on proper boundaries,
> and this ensures proper setting of FLAG_DATA_ACKED too.  So no
> problems here.
> 
> > The only problem of kind "too-aggressive" with Linux was that we could
> > develop large cwnd sending small segments, and then switch to sending
> > mss-sized segments. It does not look scary, to be honest. :-)
> 
> Agreed.
> 
> > Linux had troubles with slow start even before ABC. Actually,
> > some of applications can suffer of the same syndrome even if ABC disabled.
> > With ABC it becomes TROUBLE, cwnd has no chances to develop at all.
> 
> I've discussed that very issue here before, some time ago, with
> John Heffner.  It was in response to a user reporting a similar
> problem.  The problem is really at the receiver because we only
> ACK every other full sized frame.  I had the idea to ACK every 2
> frames, regardless of size, but that might have other problems.
> 
> There is an assymetry between how we do congestion control on
> sending (packet counting) and our ACK policy on receive (packet
> sized based).
> 
> > Probably, aspect 1 of ABC just should be disabled. And the first my
> > suggestion looks working too.
> 
> I'm ready to rip out ABC entirely, to be honest.  Or at least
> turn it off by default.

Turn it off for 2.6.18, by default then evaluate more for 2.6.19