[Dovecot] Dovecot performance under high load (vs. Courier)

email builder emailbuilder88 at yahoo.com
Fri Jun 22 08:27:18 EEST 2012


>>>  Oh, and of course it also depends on Dovecot configuration :) 

>>> Authentication 
>>>  cache is needed and login processes must be in high performance mode.
>> 
>>  I.e., I think:
>> 
>>  http://wiki2.dovecot.org/LoginProcess
>>  http://wiki2.dovecot.org/Authentication/Caching
> 
> Yes.
> 
>>>  There is 
>>>  still the extra work of forking a new imap process (could also be 
>>> avoided with 
>>>  yet another config option)
>> 
>>  Are you referring to client_limit or service_count or something else as yet 
>> undeveloped?
> 
> service imap { service_count = 0 } (default=1) allows imap processes to be 
> reused for more than 1 connection. The downside is that if there are any bugs in 
> Dovecot, they might accidentally expose another user's email data to the 
> wrong user. That's very unlikely to happen but since this isn't a 
> performance problem in most (if any) systems I don't want to enable it by 
> default. Dovecot code is written so that write buffer overflows (= arbitrary 
> code execution) is minimized to be as zero possibility as I could think of, but 
> read buffer overflows (= exposing data within the process) isn't treated 
> nearly as much with paranoia.
> 
>>  Speaking of which, I cannot understand the different between those two.  
>> Hints in the
>>  configuration file (10-master.conf) and the wiki make them sound like they 
>> do the same
>>  thing -- ??
> 
> service_count limits the maximum of client_limit. One connection = one service. 
> Once a process has serviced "service_count" number of connections it 
> disconnects itself. There can never be more than "client_limit" number 
> of simultaneous connections. The important stuff to understand about these are:
> 
> * service_count=1: The most secure setting for a process. The process serves a 
> single connection and kills itself. No possibility of data leaking to unintended 
> connection.
> * service_count=0, client_limit=1: The process does blocking operations (e.g. 
> blocking disk IO). You don't want one connection's blocking operation to 
> affect other connections. But you're not paranoid about security, since in 
> case of some bugs some data might leak to unintended connection.
> * service_count>0: Restart process ever N connections, just in case it leaks 
> some memory.
> * client_limit>1: Limit the amount of CPU/memory a single process takes. The 
> process should never be blocking on disk I/O or locks or anything else. This 
> means it shouldn't be used for imap/pop3/lmtp processes. For CPU bound 
> processes it's fine.

So really, a new process is created under *two* circumstances?  1. when a
process reaches client_limit number of *simultaneous* connections or  2. when
a process has serviced service_count number of connections.  Is this correct?

So for service *-login, is it OK to do something like service_count=5000, client_limit=2000

Thanks for the help!    



More information about the dovecot mailing list