Some timing info on populating mailboxes

Wesley Craig wes at umich.edu
Sun Dec 17 20:10:12 EST 2006


On 17 Dec 2006, at 14:12, Ross Boylan wrote:
> Is it enough to set this on the listening IMAP socket, or does it need
> to be set on the sockets that get opened up as the dialogue
> progresses?  Put differently, can I write a little independent program
> to set the socket options, or do I need to modify the cyrus sources
> (or perhaps those of mailutils?)?

You need to insert it into both the client and server, it needs to  
happen within the program that uses the socket in question.  The  
option is socket specific, it has no effect on the rest of the  
system.  Ideally, you'd do it just after the connect() on the client  
or accept() on the server.  I see that stock Cyrus doesn't have Nagel  
disabled.  I can't think of what use enabling Nagel would have for  
Cyrus, and disabling Nagel would certainly tend to improve performance.

The problem as I understand it is with very small exchanges.  So the  
client says something like "select this mailbox".  Since it doesn't  
fill a buffer, Nagel says to hang on to it for a fraction of a  
second.  Similarly, the server responds to something like the example  
"select" with "OKAY", which is also small and so is buffered.  Since  
IMAP is characterized by these many small exchanges, the cumulative  
delay can be large, and the protocol doesn't operate at anywhere near  
maximum throughput.  When full messages are exchanged, the buffers  
are filled, so those don't suffer from delays, but keep in mind that  
IMAP is designed to avoid sending the full message under most  
circumstances.

:wes


More information about the Info-cyrus mailing list