[Ace-users] [tao-users] scalability/thread pool performance (500+ clients)
Douglas C. Schmidt
schmidt at dre.vanderbilt.edu
Fri Feb 29 21:47:47 CST 2008
Hi Andrew,
Thanks for using the PRF.
> ACE VERSION: 5.6.3
>
> HOST MACHINE and OPERATING SYSTEM: Windows XP
> If on Windows based OS's, which version of WINSOCK do you
> use?: 2.x
>
> TARGET MACHINE and OPERATING SYSTEM, if different from HOST: Windows 2003
> COMPILER NAME AND VERSION (AND PATCHLEVEL): VC 2008.
>
> THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform-
> specific file, simply state which one]:
>
>#define ACE_HAS_STANDARD_CPP_LIBRARY 1
>#define ACE_DISABLE_WIN32_ERROR_WINDOWS
>#define ACE_DISABLE_WIN32_INCREASE_PRIORITY
>#define ACE_HAS_GPERF
>
>#include "ace/config-win32.h"
>
> THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you
> use a link to a platform-specific file, simply state which one
> (unless this isn't used in this case, e.g., with Microsoft Visual
> C++)]:
>
> CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features
> (used by MPC when you generate your own makefiles):
>
> AREA/CLASS/EXAMPLE AFFECTED:
>
>scalability/performance
>
> DOES THE PROBLEM AFFECT:
> COMPILATION?
> LINKING?
> On Unix systems, did you run make realclean first?
> EXECUTION?
> OTHER (please specify)?
>[Please indicate whether ACE, your application, or both are affected.]
>
> SYNOPSIS:
>Poor scalability/thread pool performance with 500+ clients/
>
> DESCRIPTION:
>
>I'm developing a grid-like system. Server (coordinator) should
>communicate with ~1000 clients (agents). Scenario: client connects to
>the server, and then constantly sends data - 512 bytes sequence, 33
>seq per second.
>
>I try to create simple server and client (no any data processing on
>server, only form stream on client and receive on server). Results:
>server can dispatch only ~200 agents on 100 mbit network with 50% cpu
>load (without thread pool there is 0% cpu load with same dispatch freq) and
>only 50% of the network bandwidth use.
>
>Exactly same WCF-based (sic!) sample can hold 600 clients without any
>problem - cpu load about 20-30% while network use ~100%. It seems,
>that TAO can't effectively dispatch more than 200 connections (for
>example, 100-150 connections causes < 1% cpu load). I know, that on
>windows TAO uses old select-based reactor, and seems this is really
>not right case for scalable systems...
Yes, that's correct. That's why TAO makes it easy to support other
concurrency models.
>Maybe, i missed something, and
>i just should tune thread pool settings/tune single threaded mode?
Right.
>Now i have this lines in my svc.conf:
>
>static Advanced_Resource_Factory "-ORBInputCDRAllocator null -ORBReactorMaskSignals 0 -ORBConnectionCacheLock null -ORBFlushingStrategy blocking"
>static Client_Strategy_Factory "-ORBProfileLock null -ORBClientConnectionHandler RW"
>static Server_Strategy_Factory "-ORBPOALock null -ORBAllowReactivationOfSystemids 0"
>
>This causes 0% server load with a single orb thread, and 50-60% with a
>pool, with no perfomance gain at all.
>
>OS - Windows XP/2003, Intel Core 2 duo, 100 mbit network.
I recommend you check out
TAO_ROOT/docs/configurations.html
and try using various concurrency models to see which one performs the
best for your usecase. For example, try using "multiple threads,
single ORB, thread-per-connection" and see how that compares with
"multiple threads, single ORB, TAO thread-pool model". Both
approaches should work better than the default reactive model.
Take care,
Doug
--
Dr. Douglas C. Schmidt Professor and Associate Chair
Electrical Engineering and Computer Science TEL: (615) 343-8197
Vanderbilt University WEB: www.dre.vanderbilt.edu/~schmidt
Nashville, TN 37203 NET: d.schmidt at vanderbilt.edu
More information about the Ace-users
mailing list