cvs commit: src/sys/netinet tcp_subr.c tcp_timer.h

Peter Wemm peter at FreeBSD.org
Tue Jul 31 22:11:56 UTC 2007


peter       2007-07-31 22:11:56 UTC

  FreeBSD src repository

  Modified files:
    sys/netinet          tcp_subr.c tcp_timer.h 
  Log:
  Change TCPTV_MIN to be independent of HZ.  While it was documented to
  be in ticks "for algorithm stability" when originally committed, it turns
  out that it has a significant impact in timing out connections.  When we
  changed HZ from 100 to 1000, this had a big effect on reducing the time
  before dropping connections.
  
  To demonstrate, boot with kern.hz=100.  ssh to a box on local ethernet
  and establish a reliable round-trip-time (ie: type a few commands).
  Then unplug the ethernet and press a key.  Time how long it takes to
  drop the connection.
  
  The old behavior (with hz=100) caused the connection to typically drop
  between 90 and 110 seconds of getting no response.
  
  Now boot with kern.hz=1000 (default).  The same test causes the ssh session
  to drop after just 9-10 seconds.  This is a big deal on a wifi connection.
  
  With kern.hz=1000, change sysctl net.inet.tcp.rexmit_min from 3 to 30.
  Note how it behaves the same as when HZ was 100.  Also, note that when
  booting with hz=100, net.inet.tcp.rexmit_min *used* to be 30.
  
  This commit changes TCPTV_MIN to be scaled with hz.  rexmit_min should
  always be about 30.  If you set hz to Really Slow(TM), there is a safety
  feature to prevent a value of 0 being used.
  
  This may be revised in the future, but for the time being, it restores the
  old, pre-hz=1000 behavior, which is significantly less annoying.
  
  As a workaround, to avoid rebooting or rebuilding a kernel, you can run
  "sysctl net.inet.tcp.rexmit_min=30" and add "net.inet.tcp.rexmit_min=30"
  to /etc/sysctl.conf.  This is safe to run from 6.0 onwards.
  
  Approved by:  re (rwatson)
  Reviewed by:  andre, silby
  
  Revision  Changes    Path
  1.295     +2 -0      src/sys/netinet/tcp_subr.c
  1.37      +1 -1      src/sys/netinet/tcp_timer.h


More information about the cvs-src mailing list