Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Aug 2000 16:23:37 -0700 (PDT)
From:      Archie Cobbs <archie@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/netinet tcp_output.c
Message-ID:  <200008032323.QAA56279@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
archie      2000/08/03 16:23:37 PDT

  Modified files:
    sys/netinet          tcp_output.c 
  Log:
  Improve performance in the case where ip_output() returns an error.
  When this happens, we know for sure that the packet data was not
  received by the peer. Therefore, back out any advancing of the
  transmit sequence number so that we send the same data the next
  time we transmit a packet, avoiding a guaranteed missed packet and
  its resulting TCP transmit slowdown.
  
  In most systems ip_output() probably never returns an error, and
  so this problem is never seen. However, it is more likely to occur
  with device drivers having short output queues (causing ENOBUFS to
  be returned when they are full), not to mention low memory situations.
  
  Moreover, because of this problem writers of slow devices were
  required to make an unfortunate choice between (a) having a relatively
  short output queue (with low latency but low TCP bandwidth because
  of this problem) or (b) a long output queue (with high latency and
  high TCP bandwidth). In my particular application (ISDN) it took
  an output queue equal to ~5 seconds of transmission to avoid ENOBUFS.
  A more reasonable output queue of 0.5 seconds resulted in only about
  50% TCP throughput. With this patch full throughput was restored in
  the latter case.
  
  Reviewed by:	freebsd-net
  
  Revision  Changes    Path
  1.46      +16 -1     src/sys/netinet/tcp_output.c



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200008032323.QAA56279>