Subject: Re: NFS transport
To: <>
From: David Laight <david@l8s.co.uk>
List: tech-kern
Date: 07/29/2002 20:08:38
On Thu, Jul 25, 2002 at 04:03:13PM +0200, der Mouse wrote:
> >> None of the acks get onto the lan until it is idle, by which time 11
> >> are queued and all go out as back to back frames.
> > Under what OS?  That's certainly not how the BSD network stack works.
> > In BSD, tcp_input() will call tcp_output() when it decides it needs
> > to send an ACK, which will transmit the packet immediately.
> 
> s/transmit/queue in the driver/.  If the medium is busy, it _can't_
> transmit the packet immediately.  Sure, if you're doing full-duplex UTP
> to a smart switch, you have no problems.  But there are lots of hubs
> and even real co-ax Ethernet networks out there still.

More particularly it is the queue in the MAC engine itself.  With
a chipset that obeys the original rules [1] it will almost never find
the lan idle until the far end has sent out a window full.  By then
it is on maximum backoff (IIRC ~2^10 times the slot time) and the
lan actually sits idle for a while before any of the acks escape.

If the 2 ends are on the same lan segment you (probably) get
better throughput if you only ack after receiving a full tx window
of data (unfortunately TCP, and ISO transport, but not LLC2) do
not pass the actual (instantaneous) tx window size to the receiver.

	David

[1] later chips allow the rules to be varied - eg only counting time
while the lan is idle.

-- 
David Laight: david@l8s.co.uk