[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openldap-devel
Subject:    connection management, thread pool
From:       Howard Chu <hyc () symas ! com>
Date:       2011-10-09 7:45:26
Message-ID: 4E915116.9040601 () symas ! com
[Download RAW message or body]

It's looking like using a single mutex-controlled thread pool is a major 
bottleneck in the slapd frontend. Thinking it over, I've hit a number of 
different ideas but nothing without drawbacks.

Ideally we would get rid of the distinction between listener threads and 
worker threads, and only have worker threads. Each thread would be responsible 
for a fraction of the open sockets, and service them directly instead of 
queueing work into a thread pool. This would essentially mimic the behavior of 
SLAPD_NO_THREADS, just duplicated N times.

The upsides of such an approach are numerous; a whole slew of locks completely 
disappear from the design and we'd be keeping work local to the CPU that 
originally received a request. The obvious downside is that Abandon/Cancel ops 
would never be useful (as they currently are not useful in single-threaded 
slapd). I.e., since the thread responsible for a connection will always be 
occupied in actually processing an operation, it will never come back to read 
the next request on the connection (e.g. Abandon) until the current op is 
already finished.

A possible solution to that would be to always do a quick poll in 
send_ldap_response() etc. to check for new requests on a connection before 
sending another reply.
-- 
   -- Howard Chu
   CTO, Symas Corp.           http://www.symas.com
   Director, Highland Sun     http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP  http://www.openldap.org/project/

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic