"David S. Miller" wrote:
> 
> BTW, if all of your analysis is second hand, can the person who does
> "know" that we are broken elaborate his analysis here so I can fix the
> problem?  I believe we are doing delayed ACK and cwnd advancement
> correctly.

>From what I've been told, Jacobson's original 1988 SIGCOMM paper talked
about ACKed packets; rfc2001 counts ACKs but assumes that typically
every other segment is ACKed.  For practical reasons, Linux counts ACKs
instead of ACKed packets.  However, there is *some* kind of ACK-related
bug in Linux (see http://www.icase.edu/coral/LinuxTCP.html) which goes
away when immediate ACKs are forced.  Therefore, *something* is not
being done correctly, particularly since people have *not* had a similar
problem with other implementations of Unix.

Sincerely,
Josip

P.S. Linux also keeps cwnd in segments while rfc2001 keeps cwnd in bytes
(in multiples of MSS).  Perhaps this messes things up with small
packets.  If my interpretation is correct, we should be able to send 36
small TCP packets (1-byte payload each) when cwnd=1; instead, Linux
kernel 2.2.2 allows only 1 packet to be sent.  Here is a calculation:

cwnd=1 (measured in segments)
1-byte payload => 41 byte TCP packet
36*41=1476 bytes < MSS=1500 bytes (the initial congestion window)

So rfc2001 would allow 36 tiny packets to be sent when cwnd=1, but Linux
2.2.2 test reads

 if(tcp_packets_in_flight(tp) >= tp->snd_cwnd)

and since 36 >= 1, Linux would not allow this.  In fact, Linux would
allow at most a single packet to be in flight when cwnd=1.
  
-- 
Dr. Josip Loncaric, Senior Staff Scientist        mailto:[EMAIL PROTECTED]
ICASE, Mail Stop 132C                       http://www.icase.edu/~josip/
NASA Langley Research Center             mailto:[EMAIL PROTECTED]
Hampton, VA 23681-2199, USA    Tel. +1 757 864-2192  Fax +1 757 864-6134

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to