Hi,
yes, FreeBSD is blasting the full socket buffer onto the net
when the destination is "local".
I think it was introduced when the T/TCP changes were committed,
it kind-of makes sense with T/TCP, but other than that
it is a very bad idea to have it on by default.
For one, in many nets including a 100/10 switch, or slow receivers,
it tends to cause an immediate loss on the first window of data
because of the overload at the switch or the receiver.

        cheers
        luigi

> 
> Hi folks,
> 
>  At the last IETF meeting there were some debates around FreeBSD using a
> 16-KB initial congestion window in TCP when destination IP address is from
> the local subnet. Does anybody remember when it was introduced into the
> code and what kind of ideas were behind?
> 
> Some reasons were given why it may not be a good idea:
> 
> -the benefit of not having slow start on LANs is very small, i.e. some
> milliseconds
> 
> -it is not a conformant TCP feature, i.e. not allowed by TCP Congestion
> Control (RFC2581) and is explicitly given in Known TCP Implementation
> Problems (RFC2525) "2.1 No initial slow start" and "2.3 Uninitialized
> CWND"
> 
> -people may have the same subnet mask also over a slow PPP link. In this
> case the effect of the huge initial window is quite bad, see for example
> http://www.cs.Helsinki.FI/u/gurtov/papers/effect_of_delays_on_tcp_performance.pdf
> 
> -in case of congestion on Ethernet, packets queues build up at the
> network interfaces in hosts and agressive TCP start-up behaviour can
> further increase congestion losses
> 
> What are your thoughts on this?
> 
> Andrei
> 
> tcp_output.c:
> 
> int ss_fltsz = 1;
> SYSCTL_INT(_net_inet_tcp, OID_AUTO, slowstart_flightsize, CTLFLAG_RW,
>         &ss_fltsz, 1, "Slow start flight size");
> 
> int ss_fltsz_local = TCP_MAXWIN;               /* something large */
> SYSCTL_INT(_net_inet_tcp, OID_AUTO, local_slowstart_flightsize,
> CTLFLAG_RW,
>         &ss_fltsz_local, 1, "Slow start flight size for local networks");
> 
> [...]
>                 if (
>                      in_localaddr(tp->t_inpcb->inp_faddr)
>                     )
>                         tp->snd_cwnd = tp->t_maxseg * ss_fltsz_local;
>                 else
>                         tp->snd_cwnd = tp->t_maxseg * ss_fltsz;
> 
> 
> 
> 
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-net" in the body of the message
> 


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to