Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Oct 2004 11:45:17 -0400
From:      Brian Fundakowski Feldman <green@freebsd.org>
To:        Andre Oppermann <andre@freebsd.org>
Cc:        freebsd-arch@freebsd.org
Subject:   Re: Removing T/TCP and replacing it with something simpler
Message-ID:  <20041022154517.GN1072@green.homeunix.org>
In-Reply-To: <417923BF.661D2A6D@freebsd.org>
References:  <4177C8AD.6060706@freebsd.org> <71C3A1EA-238F-11D9-9171-000A95C705DC@chittenden.org> <41780672.6AAC705F@freebsd.org> <E0C34A72-2396-11D9-9171-000A95C705DC@chittenden.org> <417923BF.661D2A6D@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Oct 22, 2004 at 05:14:07PM +0200, Andre Oppermann wrote:
> Sean Chittenden wrote:
> > 
> > >>> However something like T/TCP is certainly useful and I know of one
> > >>> special
> > >>> purpose application using it (Web Proxy Server/Client for high-delay
> > >>> Satellite
> > >>> connections).
> > >>
> > >> Actually, there are two/three programs that I know of that use it.
> > >> memcached(1), which found a fantastic decrease in its benchmarks.
> > >> Here's an excerpt from the following link:
> > >>
> > >> http://lists.danga.com/pipermail/memcached/2003-August/000111.html
> > >
> > > I think you got something wrong here.  T/TCP is never ever mentioned
> > > in this.  Memcached is not using T/TCP as far as I can see.
> > 
> > It's not, but I thought setsockopt(2) w/ TCP_NOPUSH enabled the use of
> > T/TCP in that there was no 3WHS performed on a TCP_NOPUSH'ed
> > connection.
> 
> No, it is not.  T/TCP will only be used if you use sendto(), have T/TCP
> globally enabled on the machine and the server supports it too.
> 
> TCP_NOPUSH was introduced together with or some time after T/TCP to
> change the behaviour how tcp_output() pushes non-full packets on the
> wire.  It pretty closely related to the same purpose as TCP_CORK.
> 
> > >> and an internal reverse proxy server/modified apache that I've hacked
> > >> together (reduces latency in a tiered request hierarchy a great deal,
> > >> on order of the benchmarks from above).
> > >
> > > What syscall do you use to get to the other side in your reverse proxy?
> > 
> > On the client, sendto()/read().  On the server, setsockopt() + write().
> 
> Ok, then you are indeed using T/TCP (provided you have enabled it on
> both machines).  The setsockopt() optimizes packet sending on the server
> but otherwise doesn't have anything to do with T/TCP.
> 
> > > I'm not sure if I can follow you here.  TCP_CORK deals with the
> > > different
> > > behaviour of connections with Nagle vs. TCP_NODELAY.  TCP_CORK allows
> > > to
> > > avoid the delays of Nagle by corking (sort of blocking) the sending of
> > > packets until you are done with write()ing to the socket.  Then the
> > > connection is uncorked and all data will be sent in one go even if it
> > > doesn't fill an entire packet.  Sort of an fsync() for sockets.  There
> > > are no security implications with TCP_CORK as far as I am aware.
> > 
> > Isn't that what NOPUSH does?  Or is it that CORK uses a fully
> > established TCP connection, but blocks sending data until the
> > connection has been uncorked/flushed?  I thought that TCP_CORK had the
> > same security implications that NOPUSH does (ie, the lack of a hand
> > shake).
> 
> None of it.  Neither NOPUSH nor CORK have any security implications.
> Those are only with the specification of T/TCP.  Blocking the data
> is independend of 3WSH.  Normally you have Nagle enabled (default)
> and when you don't fill an entire packet worth of data it will wait
> up to 200ms to send the packet in anticipation of more data from the
> socket.  This screws the responsiveness of your connection.  The first
> solution is to turn off Nagle (with TCP_NODELAY) but now you get a
> packet for every single write() you do.  Fine for telnet and ssh but
> not the right thing for a database server.  There you don't want the
> delay but at the same time you want several successive write()s that
> will go in one packet on the wire.  Here NOPUSH and CORK come into
> play.

Why is just tuning the delay a bad solution?

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green@FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\



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