Return-Path: Delivered-To: apmail-directory-dev-archive@www.apache.org Received: (qmail 12246 invoked from network); 1 Dec 2005 12:14:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 1 Dec 2005 12:14:02 -0000 Received: (qmail 70979 invoked by uid 500); 1 Dec 2005 12:13:56 -0000 Delivered-To: apmail-directory-dev-archive@directory.apache.org Received: (qmail 70925 invoked by uid 500); 1 Dec 2005 12:13:55 -0000 Mailing-List: contact dev-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Apache Directory Developers List" Delivered-To: mailing list dev@directory.apache.org Received: (qmail 70914 invoked by uid 99); 1 Dec 2005 12:13:55 -0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [192.87.106.226] (HELO ajax.apache.org) (192.87.106.226) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 01 Dec 2005 04:13:53 -0800 Received: from ajax.apache.org (ajax.apache.org [127.0.0.1]) by ajax.apache.org (Postfix) with ESMTP id B15B2CB for ; Thu, 1 Dec 2005 13:13:30 +0100 (CET) Message-ID: <1581159804.1133439210724.JavaMail.jira@ajax.apache.org> Date: Thu, 1 Dec 2005 13:13:30 +0100 (CET) From: "dave irving (JIRA)" To: dev@directory.apache.org Subject: [jira] Commented: (DIRMINA-119) Multiple selector loops In-Reply-To: <958001931.1131529340117.JavaMail.jira@ajax.apache.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N [ http://issues.apache.org/jira/browse/DIRMINA-119?page=comments#action_12359038 ] dave irving commented on DIRMINA-119: ------------------------------------- > The SocketIoProcessor constructor takes an exception monitor as an argument instead of the parent IoSessionManager Yes > Then the SocketIoProcessorPool could be configured with an exception monitor. Possibily, but I think that is maybe forcing knowledge of too many implementation details to the user. Today, you just configure an ExceptionMonitor on an IoSessionManager (connectors / acceptors). So non-session related exceptions are provided to this monitor. I dont think pooling changes that. Sure, we now have multiple processors, but they are all working on behalf of all SessionManagers which are using them. As such, if an exception occurs in a pooled IoProcessor, I think we should notify the exception monitors of all session managers which are using the pool. > Multiple selector loops > ----------------------- > > Key: DIRMINA-119 > URL: http://issues.apache.org/jira/browse/DIRMINA-119 > Project: Directory MINA > Type: Improvement > Versions: 0.8 > Environment: All. Benefit is dependant on environment > Reporter: dave irving > Assignee: Trustin Lee > Priority: Minor > Fix For: 0.9 > Attachments: prototype.zip > > Mina's SocketIoProcessor currently owns a Selector and employs a single Worker to run the NIO "selector loop". > I have been running tests where Im trying to maximise throughput and have found - that in certain multi-cpu environments - this worker thread can encounter a large amount of starvation even though CPU usage is fairly low. > By testing 2 selector-loops instead of 1, I managed to improve my overall test throughput by just under 30%. > The general idea is to do this: > - Each SocketIoProcessor.Worker encapsulates its own work queues associated Selector > - It should be possible to configure the number of Workers (and thus selectors) employed by SocketIoProcessor > - When a SocketSession is added to the SocketIoProcessor, a Worker is selected (round-robin) which will be associated with the SocketSession for its lifetime. This association is managed by SocketSession (get/setWorker) > - When someone asks SocketIoProcessor to do some work to a session, instead of doing it directly, the processor now asks the session for its Worker, and delegates to the worker (i.e, the same worker is always used for an individual session) > I've done some prototyping, and have also checked that the concept works with the latest build. > The prototype is very hacky - mainly because there are some refactoring issues i'd like feed-back on before I submit a "proper" patch for review. Namely: > - How do you want me to tell the SocketIoProcessor how many workers to use? One option is a system property - but thats pretty hacky. I dont think we need to support changing the number of workers after operation has begun (It'll probably be a function of the number of available CPUs) - and this makes the code simpler. However, as SocketIoProcessor is a (non lazy created) singleton, we need a way to get the param in. We could refactor, or maybe introduce a ProcessorOptions class or something. The SocketIoProcessor could interrigate this when initializing. Any direction on your desired approach would be appreciated > Cheers, > Dave -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira