[e2e] Minimum RTO values

Naidu, Venkata Venkata.Naidu at Marconi.com
Wed Nov 10 14:19:57 PST 2004


-> Hello,
-> I am trying to probe webservers in the Internet for TCP Min 
-> RTO values.
-> Based on my preliminary tests I saw the following results, 
-> which I want to
-> validate.
-> Linux : around 200 ms

  Yes. This is correct. Most of the Lunux TCP constants are 
  defined in ~/include/net/tcp.h :

    #define TCP_RTO_MAX ((unsigned)(120*HZ))
    #define TCP_RTO_MIN ((unsigned)(HZ/5))
  Linux 2.4 and previous versions use HZ of 100ms (default) and 
  Linux 2.6 uses HZ of 1000ms (default). But, the defines are 
  tuned to reflect TCP_RTO_MIN to 200ms.

-> FreeBSD : around 1s

  This value of 1s is used in old FreeBSD versions. Now the min 
  RTO in FreeBSD is 30ms. Note that, this constants are specific 
  to FreeBSD and very different from NetBSD and OpenBSD. If you 
  are looking for NetBSD and OpenBSD values, let me know.

   * Minimum retransmit timer is 3 ticks, for algorithmic stability.
   * TCPT_RANGESET() will add another TCPTV_CPU_VAR to deal with
   * the expected worst-case processing variances by the kernels
   * representing the end points.  Such variances do not always show
   * up in the srtt because the timestamp is often calculated at
   * the interface rather then at the TCP layer.  This value is
   * typically 50ms.  However, it is also possible that delayed
   * acks (typically 100ms) could create issues so we set the slop
   * to 200ms to try to cover it.  Note that, properly speaking,
   * delayed-acks should not create a major issue for interactive
   * environments which 'P'ush the last segment, at least as 
   * long as implementations do the required 'at least one ack
   * for every two packets' for the non-interactive streaming case.
   * (maybe the RTO calculation should use 2*RTT instead of RTT
   * to handle the ack-every-other-packet case).
   * The prior minimum of 1*hz (1 second) badly breaks throughput on any
   * networks faster then a modem that has minor (e.g. 1%) packet loss.
  #define TCPTV_MIN   ( 3 )           /* minimum allowable value */
  #define TCPTV_CPU_VAR   ( hz/5 )        /* cpu variance allowed (200ms) */
  #define TCPTV_REXMTMAX  ( 64*hz)        /* max allowable REXMT value */

-> Sun Solaris : around 4s

  Should be 400ms as per Solaris 9 Tunable parameters document:

-> Microsoft windows server : around 2s

  Sorry I don't have access to such kernels or (at least) header files
  or documents.
-> Can anybody throw some light on the actual Min RTO values used by
-> different OSes? (listed above or otherwise)?
-> Thanks a lot,
-> Preethi


More information about the end2end-interest mailing list