[Ace-users] [tao-users] scalability/thread pool performance (500+ clients)
Andrew Solodovnikov
blackborn at yandex.ru
Fri Feb 29 11:26:04 CST 2008
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... Maybe, i missed something, and
i just should tune thread pool settings/tune single threaded mode?
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.
Thanks!
--
Andrew Solodovnikov
More information about the Ace-users
mailing list