Subject: Question about caching ssthresh in routing table

From: [email-masked]
Date: Tue, 23 Mar 1999 09:12:01 -0500

We are running some HTTP applications on Solaris 2.6 platform. In some 
     tcp connections, we noticed that the ssthresh was initialized to a 
     very low value (for example, 2 MSSs) for some reason, even though 
     there were no packet losses in these connections. The slow start phase 
     in these connections was very short, and the cwnd stays at low values 
     because of the slow increasing in linear phase. This behavior leads to 
     long delay and low throughput in the application.
     
     It is also noticed that if there are no more packet losses, the 
     ssthresh will stay at the same low value for all consequent TCP 
     connections. ssthresh will increase only if there is a packet loss. 
     
     We assumed that the above problem was caused by caching the ssthresh 
     in the routing table. It seems that caching ssthresh might not always 
     be desired.
     
     I have two questions regarding the Solaris 2.6 implementation:
     
     1) ssthresh is saved in the routing table when a tcp connection is 
     closed. A condition for saving the ssthresh is that there must be at 
     least a certain amount of data transferred during the connection. BSD 
     uses 16 times the high water mark of the send buffer. Solaris 2.6 does 
     not seem to be using the same value. Does anybody know what the 
     condition is for saving ssthresh in Solaris 2.6?
     
     2) I assumed that the ssthresh in the routing table will timeout 
     eventually if there are no more updates to it after some time. Does 
     anyone know what the timer is for this in Solaris 2.6?
     
     Minghua

---

From: Kacheong Poon <[email-masked]>
Date: Tue, 23 Mar 1999 23:27:32 -0800 (PST)

>      in the routing table. It seems that caching ssthresh might not always 

If you are using Solaris 2.6, I don't believe caching is on by default.  Can
you check with `ndd /dev/tcp tcp_rtt_updates` to see if the value is non-zero?
Do you have a snoop trace for the connections you talked about?  Do you infer
the ssthresh value from a trace?  Can you send a copy to me?  Thanks.

>      condition is for saving ssthresh in Solaris 2.6?

tcp_rtt_updates controls when things like rtt_sa, rtt_sd, and ssthresh are
cached.  You can set it to a value you like.  To be the same as BSD, set it
to 16.  But in 2.6, it is 0 by default.  That means no caching is done.

>      anyone know what the timer is for this in Solaris 2.6?

If a destination is not directly connected and not being used, its cache will
be flushed in 30 seconds (ip_ire_cleanup_interval).  

							K. Poon.
							[email-masked]