[Twisted-Python] Nagle delays and twisted

Brian Granger bgranger at scu.edu
Tue Aug 30 12:18:22 MDT 2005


Hello all,

I have been implementing a custom protocol with twisted and have been  
having some odd performance problems.  My protocol consists of a TCP  
connection with multiple client/server commands.  For some types of  
commands, I found it took about 200 ms for the client and server to  
complete.  Because this was over loopback (which has a ping of 0.1  
ms), it seems very slow.  Because I am keeping the socket connected,  
I am not measuring the socket setup time.  Lucky for me, there was a  
discussion about this issue on comp.lang.python recently:

http://groups.google.com/group/comp.lang.python/browse_frm/thread/ 
507a711c61df7ad5/d6e871a24d8506a6#d6e871a24d8506a6

I guess the 200 ms delay is a well known effect of the Nagle  
Algorithm that TCP uses.  Supposedly, this delay can be eliminated by  
i) setting TCP_NODELAY on the socket or ii) avoiding sending multiple  
small messages without a response from the other end.

My understanding is that protocols that do the following will run  
into the problem:

C: short message 1
C: short message 2
S: reply for message 1 and 2

What is the preferred way of setting TCP_NODELAY on a socket  
controlled by twisted?  Are there any adverse side effects that this  
will have?

And second: does anyone have any tips for designing protocols that  
avoid this delay without setting TCP_NODELAY?  The obvious solution  
is to have a reply for each message:

C: short message 1
S: reply for 1
C: short message 2
S: reply for 2

But... this increases the latency of the protocol.  Any ideas or  
experiences with these issues would be greatly appreciated.

Thanks

Brian

  
  




More information about the Twisted-Python mailing list