diff options
Diffstat (limited to 'TAO/performance-tests/Cubit/COOL/MT_Cubit')
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/Makefile | 91 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/README | 166 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.cpp | 629 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.h | 196 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.cpp | 62 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.h | 45 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/client.cpp | 289 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/client.h | 41 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit.idl | 42 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.cpp | 69 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.h | 27 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.cpp | 281 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.h | 56 | ||||
-rw-r--r-- | TAO/performance-tests/Cubit/COOL/MT_Cubit/server.cpp | 160 |
14 files changed, 0 insertions, 2154 deletions
diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Makefile b/TAO/performance-tests/Cubit/COOL/MT_Cubit/Makefile deleted file mode 100644 index d605120ca98..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -#---------------------------------------------------------------------------- -# $Id$ -# -# Makefile for the CHORUS COOL Cubit tests -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- -# Local macros -#---------------------------------------------------------------------------- - -IDL_SRC = cubit.cpp cubit.H sk_cubit.C sk_cubit.H - -SRC = $(IDL_SRC) \ - cubit_impl.cpp \ - server.cpp \ - client.cpp \ - Task_Client.cpp \ - Util_Thread.cpp - -SVR_OBJS = cubit_impl.o \ - server.o \ - cubit.o - -CLT_OBJS = Task_Client.o \ - client.o \ - cubit.o \ - Util_Thread.o - -#---------------------------------------------------------------------------- -# Include macros and targets -#---------------------------------------------------------------------------- - -include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU -include $(ACE_ROOT)/include/makeinclude/macros.GNU -include $(ACE_ROOT)/include/makeinclude/rules.common.GNU -include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU -include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU -include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU -include $(ACE_ROOT)/include/makeinclude/rules.local.GNU - -#---------------------------------------------------------------------------- -# CHORUS related macros and target settings. -#---------------------------------------------------------------------------- - -CHORUS_BINDIR = $(CHORUS_ROOT)/bin -CHORUS_LIBDIR = $(CHORUS_ROOT)/lib -CHORUS_INCDIR = $(CHORUS_ROOT)/include - -CPPFLAGS += -I$(CHORUS_INCDIR) -I$(CHORUS_ROOT) -LDFLAGS += -L$(CHORUS_LIBDIR) -R$(CHORUS_LIBDIR) -L$(ACE)/ace -IDLFLAGS = --stub-header --stub-impl --skeleton-header --skeleton-impl --no-local --no-any --binding Cubit Cubit_Impl - -# pccTimer will eventually get integrated into ACE. It is specific for -# ClassiX on VME -ifdef CHORUS - SRC += pccTimer.cpp - CLT_OBJS += pccTimer.o - LDLIBS += -lOrb -else - LDLIBS += -lOrb-mt -endif - -VLDLIBS := $(LDLIBS:%=%$(VAR)) $(ACELIB) $(LIBS) - -#---------------------------------------------------------------------------- -# Local targets -#---------------------------------------------------------------------------- - -all: $(IDL_SRC) server client - -$(IDL_SRC): cubit.idl - $(CHORUS_BINDIR)/chic $(IDLFLAGS) cubit.idl - -/bin/mv cubit.C cubit.cpp - -server: $(addprefix $(VDIR),$(SVR_OBJS)) - $(LINK.cc) -o server $(addprefix $(VDIR),$(SVR_OBJS)) $(LDFLAGS) $(ITIIOP) $(ITSRV) $(VLDLIBS) $(POSTLINK) - -client: $(addprefix $(VDIR),$(CLT_OBJS)) - $(LINK.cc) -o client $(addprefix $(VDIR),$(CLT_OBJS)) $(LDFLAGS) $(ITIIOP) $(ITCLT) $(VLDLIBS) $(POSTLINK) - -realclean: clean - -/bin/rm -rf cubit.cpp cubit.H sk_cubit.C sk_cubit.H server client - -#---------------------------------------------------------------------------- -# Dependencies -#---------------------------------------------------------------------------- -# DO NOT DELETE THIS LINE -- g++dep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. - - -# IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/README b/TAO/performance-tests/Cubit/COOL/MT_Cubit/README deleted file mode 100644 index f8e7941cbdf..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/README +++ /dev/null @@ -1,166 +0,0 @@ -The MT-Cubit example for the CHORUS COOL ORB --------------------------------------------- - -Compiling ---------- - -Setup the CHORUS COOL environment variables before compiling, the -following is an example. You would typically want this in the shells' -resource file (e.g. .cshrc.mine). The example provided is for a C -shell. - - setenv CHORUS_ROOT /project/doc/miniCOOL/minicool.r4.3/solaris2.5-CC-mt - set path = ($path /project/doc/miniCOOL/minicool.r4.3/solaris2.5-CC-mt/bin) - setenv LD_LIBRARY_PATH /project/doc/miniCOOL/minicool.r4.3/solaris2.5-CC-mt/lib:$LD_LIBRARY_PATH - setenv MANPATH /project/doc/miniCOOL/minicool.r4.3/solaris2.5-CC-mt/man:$MANPATH - -Makefiles are provided. Use make to compile. - -You can either run the server in the background in the same window as -the client or open a separate window for the client and server. - -server: -------- - -./server <tpr | tpool> - <cool-tcp://THIS_HOSTNAME:THIS_HOST_PORT | cool-chorus://:THIS_HOST_PORT> - -v - <-cool-tcp -cool-iiop | -cool-chorus> - -tpr : this indicates to the server to use the Thread Per Request concurrency model. - -tpool : this indicates to the server to use the Thread Pool concurrency model. - -THIS_HOSTNAME : the name of the host that the server will be running on. This is useful - if you want to specifya different interface (e.g. ATM, 100Mbit Ethernet) - -THIS_HOST_PORT: is the port number at which the server will start the high - priority servant. The low priority servant will be created at - (THIS_HOST_PORT+1). - -The server will print the IOR of the high and low priority servants, -but it is not required by the client. - -client: -------- - -./client [-n <LOOP_COUNT>] - [-t <NUM_THREADS>] - [-h SERVER_HOSTNAME] - [-p <SERVER_PORT_NUM>] - [-cool-tcp -cool-iiop | -cool-chorus] - [-I] - -[-I] indicates to the client to use Chorus IPC as the underlying transport - instead of TCP - -<SERVER_HOSTNAME>: is the hostname of the server. - -<SERVER_PORT_NUM>: is the port number of the servant. - -Based on the SERVER_HOSTNAME and the SERVER_PORT_NUM, the client constructs -the IOR's for the high priority servant and the low priority servant. - -<LOOP_COUNT> : is the number of times the group of CORBA twoway calls are to - be made. The group consists of the following calls: cube_octet(), cube_short(), - cube_long() and cube_struct(). The default is 100 loops (i.e. 400 calls are made). - -<NUM_THREADS> : is the total number of concurrent clients to be - created. One of these clients will be a high priority client (and thus - send requests to the high priority servant), and the rest will have - low priority. - -The high priority client makes requests at 20Hz, and the low priority -clients make requests at 10Hz. - -Results -------- - -The client prints the latency observed by the high priority client, -and the average latency observed by the low priority client. - -Examples --------- - -(1) An Example on a Sparc running SunOS 5.5.1 using TCP as the underlying transport - - - On the host lambada.cs.wustl.edu : - - % ./server tpool cool-tcp://lambada.cs.wustl.edu:3000 -v -cool-tcp -cool-iiop - - On the host merengue.cs.wustl.edu : - - % ./client -t 2 -h lambada.cs.wustl.edu -p 3000 -cool-tcp -cool-iiop - - The output of the client program may look like this: - - (5) Everyone's done, here I go!! - (4) Threads have bound, utilization test started - (9) Everyone's done, here I go!! - (8) Everyone's done, here I go!! - (6) Everyone's done, here I go!! - (7) Everyone's done, here I go!! - cube average call ACE_OS::time = 20.917016 msec, 47.807966 calls/second - (5) My latency was 20.917016 - 5 calls, 0 errors - cube average call ACE_OS::time = 19.299501 msec, 51.814811 calls/second - (8) My latency was 19.299501 - cube average call ACE_OS::time = 19.262436 msec, 51.914514 calls/second - 5 calls, 0 errors - (9) My latency was 19.262436 - 5 calls, 0 errors - cube average call ACE_OS::time = 15.101540 msec, 66.218412 calls/second - (6) My latency was 15.101540 - 5 calls, 0 errors - cube average call ACE_OS::time = 10.320359 msec, 96.895858 calls/second - (7) My latency was 10.320359 - 5 calls, 0 errors - Test done. - High priority client latency : 20.917016 msec, jitter: 36.582330 msec - Low priority client latency : 15.995959 msec, jitter: 527.515277 msec - utilization task performed 435 computations - -(2) An Example on a MVME177 backplane using 68k processors running ClassiX using - Chorus IPC as the underlying transport - - - On the host tambora2.cs.wustl.edu : - - % rsh tambora2 arun /tests/Cubit/COOL/MT_Cubit/server tpool cool-chorus://:1023 -v -cool-chorus - - On the host tambora1.cs.wustl.edu : - - % rsh tambora1 arun /tests/Cubit/COOL/MT_Cubit/client -n 400 -I -t 2 -p 1023 -cool-chorus - - The output of the client program might look like this: - - started aid = 12 - COOL:0000000001000000010000001C00750AA60000000200750AA65555555500000001429A00000000000A(13) Thread created - (13) Im the high priority client, my id is 0. - Using ior = cool-chorus://:1023 - Creating 1 clients with low priority of 125 - (13) Binding succeeded - (13) Cb == 2c6144 - Object Created at: '2908484l'connected to object 'COOL:0000000001000000010000001C00750AA60000000200750AA65555555500000001429A00000000000A' - COOL:0000000001000000010000001C00750AA60000000200750AA65555555500000001429A00000000000A - (13) Waiting for other threads to finish binding.. - (12) Thread created - (12) Im a low priority client, my id is 1 - Using ior = cool-chorus://:1023 - (12) Binding succeeded - (12) Cb == 2c6164 - Object Created at: '2908516l'connected to object 'COOL:0000000001000000010000001C00750AA60000000200750AA65555555500000001429A00000000000A'(12) Waiting for other threads to finish binding.. - (13) Everyone's done, here I go!! - (12) Everyone's done, here I go!! - (12|13) cube average call ACE_OS::time = 12835 usec, 77 calls/second - (13) My latency was 12835 - 400 calls, 0 errors - (12|12) cube average call ACE_OS::time = 12931 usec, 77 calls/second - (12) My latency was 12931 - Test done. - High priority client latency : 12835 usec - Low priority client latency : 12931 usec - 400 calls, 0 errors - --->Output file for latency data is "cb12__2.txt" - (8) utilization task performed 0 computations diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.cpp b/TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.cpp deleted file mode 100644 index 11d70407978..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.cpp +++ /dev/null @@ -1,629 +0,0 @@ -// $Id$ - -#include "Task_Client.h" - -ACE_RCSID(MT_Cubit, Task_Client, "$Id$") - -Task_State::Task_State (int argc, char **argv) - : start_count_ (0), - loop_count_ (5), - thread_count_ (5), - base_port_ (5000), - datatype_ (CB_OCTET), - argc_ (argc), - argv_ (argv), - thread_per_rate_ (0), - global_jitter_array_ (0), - use_chorus_ipc_ (0), - grain_ (1) -{ - int c; - int datatype; - - // defaults - ACE_OS::strcpy (server_host_, "localhost"); - ior_header_ = ACE_OS::strdup ("cool-tcp"); - ACE_Get_Opt opts (argc, argv, "Hh:n:t:p:d:rIg:"); - - while ((c = opts ()) != -1) - switch (c) { - case 'g': - grain_ = ACE_OS::atoi (opts.optarg); - if (grain_ < 1) - grain_ = 1; - break; - case 'I': - use_chorus_ipc_ = 1; - break; - case 'r': - thread_per_rate_ = 1; - break; - case 'd': - datatype = ACE_OS::atoi (opts.optarg); - switch (datatype) - { - case CB_OCTET: - ACE_DEBUG ((LM_DEBUG, "Testing Octets\n")); - datatype_ = CB_OCTET; - break; - case CB_LONG: - ACE_DEBUG ((LM_DEBUG, "Testing Longs\n")); - datatype_ = CB_LONG; - break; - case CB_STRUCT: - ACE_DEBUG ((LM_DEBUG, "Testing Structs\n")); - datatype_ = CB_STRUCT; - break; - case CB_SHORT: - default: - ACE_DEBUG ((LM_DEBUG, "Testing Shorts\n")); - datatype_ = CB_SHORT; - break; - } - continue; - case 'h': - ACE_OS::strcpy (server_host_, opts.optarg); - continue; - case 'p': - base_port_ = ACE_OS::atoi (opts.optarg); - continue; - case 'n': // loop count - loop_count_ = (u_int) ACE_OS::atoi (opts.optarg); - continue; - case 't': - thread_count_ = (u_int) ACE_OS::atoi (opts.optarg); - continue; - case 'H': - ACE_DEBUG ((LM_DEBUG, "usage: %s" - "[-d datatype Octet=0, Short=1, Long=2, Struct=3]" - " [-n num_calls]" - " [-h server_hostname]" - " [-p server_port_num]" - " [-t num_threads]" - " [-I Use Chorus IPC. (For Chorus ClassiX *only*) ]" - " [-g granularity_of_request_timing]" - "\n", argv [0])); - continue; - } - - if (use_chorus_ipc_ == 1) - { - ior_header_ = ACE_OS::strdup ("cool-chorus"); - ACE_OS::strcpy (server_host_, ""); - } - - // thread_count_ + 1 because there is one utilization thread also - // wanting to begin at the same time the clients begin.. - ACE_NEW (barrier_, ACE_Barrier (thread_count_ + 1)); - ACE_NEW (latency_, double [thread_count_]); - ACE_NEW (global_jitter_array_, double *[thread_count_]); -} - -Client::Client (Task_State *ts) - : ACE_Task<ACE_MT_SYNCH> (ACE_Thread_Manager::instance ()), - ts_ (ts) -{ -} - -void -Client::put_latency (double *jitter, double latency, u_int thread_id) -{ - ACE_MT (ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, ts_->lock_)); - - ts_->latency_[thread_id] = latency; - ts_->global_jitter_array_ [thread_id] = jitter; - -#if defined (ACE_LACKS_FLOATING_POINT) - ACE_DEBUG ((LM_DEBUG, - "(%t) My latency was %u\n", - latency)); -#else - ACE_DEBUG ((LM_DEBUG, - "(%t) My latency was %f\n", - latency)); -#endif /* ! ACE_LACKS_FLOATING_POINT */ -} - -double -Client::get_high_priority_latency (void) -{ - return (double) ts_->latency_ [0]; -} - -double -Client::get_low_priority_latency (void) -{ - double l = 0; - - for (u_int i = 1; i < ts_->start_count_; i++) - l += (double) ts_->latency_[i]; - return ts_->start_count_ > 1? l / (double) (ts_->start_count_ - 1) : 0; -} - -int -Client::get_latency (u_int thread_id) -{ - return ts_->latency_ [thread_id]; -} - -double -Client::get_high_priority_jitter (void) -{ - double jitter = 0; - double average = get_high_priority_latency (); - - // Compute the standard deviation (i.e. jitter) from the values - // stored in the global_jitter_array_. - - // we first compute the sum of the squares of the differences - // each latency has from the average - for (u_int i = 0; i < ts_->loop_count_; i ++) - { - double difference = - ts_->global_jitter_array_ [0][i] - average; - jitter += difference * difference; - } - - // Return the square root of the sum of the differences computed - // above, i.e. jitter. - return sqrt (jitter); -} - -double -Client::get_low_priority_jitter (void) -{ - double jitter = 0; - double average = get_low_priority_latency (); - - // Compute the standard deviation (i.e. jitter) from the values - // stored in the global_jitter_array_. - - // We first compute the sum of the squares of the differences each - // latency has from the average. - for (u_int j = 1; j < ts_->start_count_; j ++) - for (u_int i = 0; i < ts_->loop_count_; i ++) - { - double difference = ts_->global_jitter_array_ [j][i] - average; - jitter += difference * difference; - } - - // Return the square root of the sum of the differences computed - // above, i.e. jitter. - return sqrt (jitter); -} - -int -Client::svc (void) -{ - ACE_DEBUG ((LM_DEBUG, - "(%t) Thread created\n")); - - u_int thread_id; - Cubit_ptr cb; - char ior [1024]; - double frequency; - CORBA::ORB_ptr orb_ptr; - - { - ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, ts_->lock_, -1); - - thread_id = ts_->start_count_; - ts_->start_count_++; - - if (ts_->thread_per_rate_ == 0) - { - if (thread_id == 0) - { - ACE_DEBUG ((LM_DEBUG, - "(%t) Im the high priority client, my id is %d.\n", - thread_id)); - ACE_OS::sprintf (ior, - "%s://%s:%d", - ts_->ior_header_, - ts_->server_host_, - ts_->base_port_); - frequency = CB_HIGH_PRIORITY_RATE; - } - else - { - ACE_DEBUG ((LM_DEBUG, - "(%t) Im a low priority client, my id is %d\n", - thread_id)); - ACE_OS::sprintf (ior, - "%s://%s:%d", - ts_->ior_header_, - ts_->server_host_, - ts_->base_port_);// + thread_id); - frequency = CB_LOW_PRIORITY_RATE; - } - } - else - { - switch (thread_id) - { -///////////////////////////////////// -// THIS NEEDS TO BE UPDATED AS ABOVE. -///////////////////////////////////// - case CB_40HZ_CONSUMER: - ACE_DEBUG ((LM_DEBUG, "(%t) Im the high priority client, my id is %d.\n", thread_id)); - ::sprintf (ior, "cool-tcp://%s:%d", ts_->server_host_, ts_->base_port_); - frequency = CB_40HZ_CONSUMER_RATE; - break; - case CB_20HZ_CONSUMER: - ACE_DEBUG ((LM_DEBUG, "(%t) Im the high priority client, my id is %d.\n", thread_id)); - ::sprintf (ior, "cool-tcp://%s:%d", ts_->server_host_, ts_->base_port_);//+1); - frequency = CB_20HZ_CONSUMER_RATE; - break; - case CB_10HZ_CONSUMER: - ACE_DEBUG ((LM_DEBUG, "(%t) Im the high priority client, my id is %d.\n", thread_id)); - ::sprintf (ior, "cool-tcp://%s:%d", ts_->server_host_, ts_->base_port_);//+2); - frequency = CB_10HZ_CONSUMER_RATE; - break; - case CB_5HZ_CONSUMER: - ACE_DEBUG ((LM_DEBUG, "(%t) Im the high priority client, my id is %d.\n", thread_id)); - ::sprintf (ior, "cool-tcp://%s:%d", ts_->server_host_, ts_->base_port_);//+3); - frequency = CB_5HZ_CONSUMER_RATE; - break; - case CB_1HZ_CONSUMER: - ACE_DEBUG ((LM_DEBUG, "(%t) Im the high priority client, my id is %d.\n", thread_id)); - ::sprintf (ior, "cool-tcp://%s:%d", ts_->server_host_, ts_->base_port_);//+4); - frequency = CB_1HZ_CONSUMER_RATE; - break; - default: - ACE_DEBUG ((LM_DEBUG, "(%t) Invalid Thread ID.\n", thread_id)); - } - } /* else */ - - ACE_DEBUG ((LM_DEBUG, "Using ior = %s\n", ior)); - - CORBA::Object_ptr objref = CORBA::Object::_nil (); - CORBA::Environment env; - - orb_ptr = CORBA::ORB_init (ts_->argc_, ts_->argv_, 0, env); - - if (env.exception () != 0) - ACE_ERROR_RETURN ((LM_ERROR,"%s:ORB initialization", env.exception ()), 2); - - // CORBA_BOA_ptr oa_ptr = orb_ptr->OA_init (ts_->argc_, ts_->argv_, 0, env); - // - // if (oa_ptr == 0) - // ACE_ERROR_RETURN ((LM_ERROR, - // " (%P|%t) Unable to initialize the POA.\n"), - // 1); - - - // - // Initialize client's binding to an - // arbitrary cubit server (at some host) - // - COOL::EOABindingData bindingData (ior); - - cb = Cubit::_bind(bindingData, env); - - // objref = orb_ptr->string_to_object ((CORBA::String) ior, env); - - // if (env.exception () != 0) - // ACE_ERROR_RETURN ((LM_ERROR, - // "%s:string2object failed. Supply valid IOR with the -O option\n", - // env.exception ()), 2); - - // if (CORBA::is_nil (objref) == CORBA_TRUE) - // ACE_ERROR_RETURN ((LM_ERROR, - // "%s: must identify non-null target objref\n", - // ts_->argv_ [0]), - // 1); - - // Narrow the CORBA::Object reference to the stub object, checking - // the type along the way using _is_a. - // cb = Cubit::_narrow (objref); - - if ( (CORBA::is_nil (cb) == CORBA_TRUE) || (env.exception () != 0)) - { - ACE_ERROR_RETURN ((LM_ERROR, "%s:Create cubit failed\n", env.exception ()), 1); - } - ACE_DEBUG ((LM_DEBUG, "(%t) Binding succeeded\n")); - ACE_DEBUG ((LM_DEBUG, "(%t) Cb == %x\n", cb)); - - CORBA::String str; - - str = orb_ptr->object_to_string (cb, env); - - if (env.exception () != 0) - ACE_ERROR_RETURN ((LM_ERROR, "object_to_string %s\n", env.exception ()), -1); - - ACE_OS::puts ((char *) str); - ACE_OS::fflush (stdout); - ACE_DEBUG ((LM_DEBUG, "Object Created at: '%ul'", cb)); - ACE_DEBUG ((LM_DEBUG, "connected to object '%s'", str)); - } - - ACE_DEBUG ((LM_DEBUG, "(%t) Waiting for other threads to finish binding..\n")); - ts_->barrier_->wait (); - ACE_DEBUG ((LM_DEBUG, "(%t) Everyone's done, here I go!!\n")); - - this->run_tests (cb, ts_->loop_count_, thread_id, ts_->datatype_, frequency); - - // Free resources - // CORBA::release (orb_ptr); - - return 0; -} - -int -Client::run_tests (Cubit_ptr cb, - u_int loop_count, - u_int thread_id, - Cubit_Datatypes datatype, - double frequency) -{ - CORBA::Environment env; - u_int i = 0; - u_int call_count = 0, error_count = 0; - double *my_jitter_array; - ACE_NEW_RETURN (my_jitter_array, double [ts_->loop_count_], 1); - - double latency = 0; - double sleep_time = (1/frequency) * (1000 * 1000); - double delta = 0; - - int pstartTime = 0; - int pstopTime = 0; - double real_time = 0.0; - -#if defined (ACE_HAS_QUANTIFY) - quantify_stop_recording_data(); - quantify_clear_data (); -#endif /* ACE_HAS_QUANTIFY */ - - // Make the calls in a loop. - for (i = 0; i < loop_count; i++) - { - ACE_High_Res_Timer timer_; - ACE_Time_Value tv (0, (long int) (sleep_time - delta)); - ACE_OS::sleep (tv); - - // Elapsed time will be in microseconds. - ACE_Time_Value delta_t; - -#if defined (CHORUS) - pstartTime = pccTime1Get(); -#else /* CHORUS */ - timer_.start (); -#endif /* !CHORUS */ - - switch (datatype) - { - case CB_OCTET: - { - // Cube an octet. - CORBA::Octet arg_octet = func (i), ret_octet = 0; - -#if defined (ACE_HAS_QUANTIFY) - /* start recording quantify data from here */ - quantify_start_recording_data (); -#endif /* ACE_HAS_QUANTIFY */ - ret_octet = cb->cube_octet (arg_octet, env); - -#if defined (ACE_HAS_QUANTIFY) - quantify_stop_recording_data(); -#endif /* ACE_HAS_QUANTIFY */ - - if (env.exception () != 0) - { - CORBA::SystemException* ex; - - ex = CORBA::SystemException::_narrow(env.exception()); - if (ex) - { - CORBA::String_var msg = ex->message(); - fprintf(stderr, "%s.\n", (const char*) msg); - } - else - { - fprintf(stderr, "Unknown user exception.\n"); - } - ACE_ERROR_RETURN ((LM_ERROR,"%s:Call failed\n", env.exception ()), 2); - } - - arg_octet = arg_octet * arg_octet * arg_octet; - - if (arg_octet != ret_octet) - { - ACE_DEBUG ((LM_DEBUG, "** cube_octet(%d) (--> %d)\n", arg_octet , ret_octet)); - error_count++; - } - call_count++; - } - break; - - case CB_SHORT: - // Cube a short. - { - call_count++; - - CORBA::Short arg_short = func (i), ret_short; - -#if defined (ACE_HAS_QUANTIFY) - // start recording quantify data from here. - quantify_start_recording_data (); -#endif /* ACE_HAS_QUANTIFY */ - - ret_short = cb->cube_short (arg_short, env); - -#if defined (ACE_HAS_QUANTIFY) - quantify_stop_recording_data(); -#endif /* ACE_HAS_QUANTIFY */ - - if (env.exception () != 0) - ACE_ERROR_RETURN ((LM_ERROR, - "%s:Call failed\n", - env.exception ()), - 2); - - arg_short = arg_short * arg_short * arg_short; - - if (arg_short != ret_short) - { - ACE_DEBUG ((LM_DEBUG, "** cube_short(%d) (--> %d)\n", arg_short , ret_short)); - error_count++; - } - break; - } - // Cube a long. - - case CB_LONG: - { - call_count++; - - CORBA::Long arg_long = func (i), ret_long; - -#if defined (ACE_HAS_QUANTIFY) - // start recording quantify data from here. - quantify_start_recording_data (); -#endif /* ACE_HAS_QUANTIFY */ - - ret_long = cb->cube_long (arg_long, env); - -#if defined (ACE_HAS_QUANTIFY) - quantify_stop_recording_data(); -#endif /* ACE_HAS_QUANTIFY */ - - if (env.exception () != 0) - ACE_ERROR_RETURN ((LM_ERROR,"%s:Call failed\n", env.exception ()), 2); - - arg_long = arg_long * arg_long * arg_long; - - if (arg_long != ret_long) - { - ACE_DEBUG ((LM_DEBUG, "** cube_long(%d) (--> %d)\n", arg_long , ret_long)); - error_count++; - } - break; - } - - case CB_STRUCT: - // Cube a "struct" ... - { - Cubit::Many arg_struct, ret_struct; - - call_count++; - - arg_struct.l = func (i); - arg_struct.s = func (i); - arg_struct.o = func (i); - -#if defined (ACE_HAS_QUANTIFY) - // start recording quantify data from here. - quantify_start_recording_data (); -#endif /* ACE_HAS_QUANTIFY */ - - ret_struct = cb->cube_struct (arg_struct, env); - -#if defined (ACE_HAS_QUANTIFY) - quantify_stop_recording_data(); -#endif /* ACE_HAS_QUANTIFY */ - - if (env.exception () != 0) - ACE_ERROR_RETURN ((LM_ERROR,"%s:Call failed\n", env.exception ()), 2); - - arg_struct.l = arg_struct.l * arg_struct.l * arg_struct.l ; - arg_struct.s = arg_struct.s * arg_struct.s * arg_struct.s ; - arg_struct.o = arg_struct.o * arg_struct.o * arg_struct.o ; - - if (arg_struct.l != ret_struct.l - || arg_struct.s != ret_struct.s - || arg_struct.o != ret_struct.o ) - { - ACE_DEBUG ((LM_DEBUG, "**cube_struct error!\n")); - error_count++; - } - - break; - } - } - - // use sysBench when CHORUS defined and option specified on command line -#if defined (CHORUS) - if ( (loop_count % ts_->grain_) == 0) - pstopTime = pccTime1Get(); -#else /* CHORUS */ - // if CHORUS is not defined just use plain timer_.stop (). - timer_.stop (); - timer_.elapsed_time (delta_t); -#endif /* !CHORUS */ - - // Calculate time elapsed -#if defined (ACE_LACKS_FLOATING_POINT) -# if defined (CHORUS) - real_time = pstopTime - pstartTime; - my_jitter_array [i/ts_->grain_] = real_time; // in units of microseconds. - // update the latency array, correcting the index using the granularity -# else /* CHORUS */ - // Store the time in usecs. - real_time = delta_t.sec () * ACE_ONE_SECOND_IN_USECS + - delta_t.usec (); - my_jitter_array [i] = real_time; // in units of microseconds. -# endif /* !CHORUS */ - delta = ((40 * fabs (real_time) / 100) + (60 * delta / 100)); // pow(10,6) - latency += real_time; -#else /* ACE_LACKS_FLOATING_POINT */ - // Store the time in secs. - real_time = delta_t.sec () + (double)delta_t.usec () / ACE_ONE_SECOND_IN_USECS; - delta = ((0.4 * fabs (real_time * (1000 * 1000))) + (0.6 * delta)); // pow(10,6) - latency += real_time; - my_jitter_array [i] = real_time * 1000; -#endif /* !ACE_LACKS_FLOATING_POINT */ - } - - if (call_count > 0) - { - if (error_count == 0) - { -#if defined (ACE_LACKS_FLOATING_POINT) - double calls_per_second = (call_count * ACE_ONE_SECOND_IN_USECS) / latency; -#endif /* ACE_LACKS_FLOATING_POINT */ - - latency /= call_count; - - if (latency > 0) - { -#if defined (ACE_LACKS_FLOATING_POINT) - ACE_DEBUG ((LM_DEBUG, - "(%P|%t) cube average call ACE_OS::time\t= %u usec, \t" - "%u calls/second\n", - latency, - calls_per_second)); - - this->put_latency (my_jitter_array, - latency, - thread_id); -#else - ACE_DEBUG ((LM_DEBUG, "(%P|%t) cube average call ACE_OS::time\t= %f msec, \t" - "%f calls/second\n", - latency * 1000, - 1 / latency)); - this->put_latency (my_jitter_array, - latency * 1000, - thread_id); -#endif /* ! ACE_LACKS_FLOATING_POINT */ - } - else - { - // still we have to call this function to store a valid array pointer. - this->put_latency (my_jitter_array, - 0, - thread_id); - ACE_DEBUG ((LM_DEBUG, - "*** Warning: Latency is less than or equal to zero." - " Precision may have been lost.\n")); - } - } - ACE_DEBUG ((LM_DEBUG, - "%d calls, %d errors\n", - call_count, - error_count)); - } - - // cb->please_exit (env); - return 0; -} diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.h b/TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.h deleted file mode 100644 index 62ea98eb6e8..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Task_Client.h +++ /dev/null @@ -1,196 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO/tests -// -// = FILENAME -// Task_Client.h -// -// = AUTHOR -// Andy Gokhale, Sumedh Mungee and Sergio Flores-Gaitan -// -// ============================================================================ - -#ifndef TASK_CLIENT_H -#define TASK_CLIENT_H - -#include <corba/cool.H> -#include "api/api.H" -#include "cubit.H" - -#include "ace/Synch.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/Task.h" -#include "ace/Thread_Manager.h" -#include "ace/Get_Opt.h" -#include "ace/Profile_Timer.h" -#include <math.h> - -#if defined (CHORUS) -#include "pccTimer.h" -#endif /* CHORUS */ - -// @@ Should we put this into a more general file, e.g., OS.h? -// -// I will integrate this, together with the sqrt() function when -// the implementation is complete. --Sergio. -// @@ Sergio, can you please use the ACE_timer_t here rather than #define'ing double? -#if defined (ACE_LACKS_FLOATING_POINT) -#define double ACE_UINT32 -#define fabs(X) ((X) >= 0 ? (X) : -(X)) -// the following is just temporary, until we finish the sqrt() -// implementation. -#define sqrt(X) (1) -#endif /* ACE_LACKS_FLOATING_POINT */ - -// Arbitrary generator used by the client to create the numbers to be -// cubed. -inline int -func (unsigned i) -{ - return i - 117; -} - -// The various datatypes which the client and the server can exchange. -enum Cubit_Datatypes -{ - CB_OCTET, - CB_SHORT, - CB_LONG, - CB_STRUCT -}; - -const int CB_40HZ_CONSUMER = 0; -const int CB_20HZ_CONSUMER = 1; -const int CB_10HZ_CONSUMER = 2; -const int CB_5HZ_CONSUMER = 3; -const int CB_1HZ_CONSUMER = 4; - -const int CB_40HZ_CONSUMER_RATE = 40; -const int CB_20HZ_CONSUMER_RATE = 20; -const int CB_10HZ_CONSUMER_RATE = 10; -const int CB_5HZ_CONSUMER_RATE = 5; -const int CB_1HZ_CONSUMER_RATE = 1; - -const int CB_HIGH_PRIORITY_RATE = 20; -const int CB_LOW_PRIORITY_RATE = 10; - -class Task_State - // = TITLE - // Maintains state common to multiple Cubit clients - - // = DESCRIPTION - // This class maintains state which is common to the potentially - // multiple concurrent clients. -{ -public: - ACE_Barrier *barrier_; - // Barrier for the multiple clients to synchronize after - // binding to the servants. - - Task_State (int argc, char **argv); - // Constructor. Takes the command line arguments, which are - // later passed into ORB_init - - u_int start_count_; - // keeps a count of the number of clients started.. This - // count also serves as a thread-id. The first thread created - // gets an ID of 0, then 1, and so on.. - - u_int loop_count_; - // number of times to loop, making calls.. - - u_int thread_count_; - // number of concurrent clients to create.. - - u_int base_port_; - // this is the port at which the high priority servant is - // listening.. lower priority ports begin at base_port_ + 1 - - char server_host_ [1024]; - // Server hostname - - double *latency_; - // Array to store the latency for every client, indexed by - // thread-id. - - Cubit_Datatypes datatype_; - // Which datatype to use to make the calls - - ACE_Thread_Mutex lock_; - // lock to protect access to this object - - int argc_; - char **argv_; - // command line arguments - - u_int thread_per_rate_; - // Flag for the thread_per_rate test - - double **global_jitter_array_; - // this array stores the latency seen by each client for each - // request, to be used later to compute jitter - - u_int use_chorus_ipc_; - // flag that indicates that we are going to use Chorus IPC - // communication mechanism, instead of the TCP/IP protocol stack. - // This only applies to the CHORUS ClassiX OS. - - char * ior_header_; - // pointer to the ior part where you specify the type of transport - // for COOL (i.e. ipc or tcp) - - u_int grain_; - // this is the granularity of the timing of the CORBA requests. A - // value of 5 represents that we will take time every 5 requests, - // instead of the default of every request (1). -}; - -class Client : public ACE_Task<ACE_MT_SYNCH> - // = TITLE - // The Cubit client. -{ -public: - Client (Task_State *ts); - // constructor, with a pointer to the common task state. - - virtual int svc (void); - // the thread function - - double get_high_priority_latency (void); - double get_low_priority_latency (void); - double get_high_priority_jitter (void); - double get_low_priority_jitter (void); - int get_latency (u_int thread_id); - // accessors to get the various measured quantities - - -private: - - int run_tests (Cubit_ptr, - unsigned int, - unsigned int, - Cubit_Datatypes, - double frequency); - // makes the calls to the servant - - void put_latency (double *jitter, - double latency, - unsigned int); - // Records the latencies in the Task_State - - int parse_args (int, char **); - // parses the arguments - - Task_State *ts_; - // pointer to shared state - -}; - -#endif /* !defined (TASK_CLIENT_H) */ diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.cpp b/TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.cpp deleted file mode 100644 index 5a63a86339c..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// $Id$ - -#include "Util_Thread.h" - -ACE_RCSID(MT_Cubit, Util_Thread, "$Id$") - -Util_Thread::Util_Thread (Task_State *ts, - ACE_Thread_Manager *thr_mgr) - : ACE_Task<ACE_MT_SYNCH> (thr_mgr), - done_ (0), - number_of_computations_ (0), - ts_ (ts) -{ -} - -int -Util_Thread::svc (void) -{ - ACE_DEBUG ((LM_DEBUG, - "(%t) Utilization Thread created, " - "waiting for threads to finish binding\n")); - - // this barrier synchronizes the utilization thread with - // the client threads - // i.e., the Util_thread should wait until all the - // clients have finished binding, and only then - // start measuring the utilization. - this->ts_->barrier_->wait (); - - ACE_DEBUG ((LM_DEBUG, - "(%t) Threads have bound, " - "utilization test started\n")); - - this->run_computations (); - return 0; -} - -double -Util_Thread::get_number_of_computations (void) -{ - return this->number_of_computations_; -} - -// Perform repeated prime factor computations on an arbitrary number. -// And you thought your life was boring... :-) - -int -Util_Thread::run_computations (void) -{ - while (this->done_ == 0) - { - // See if this number is prime. 2 and CUBIT_ARBIT_NUMBER / 2 are - // the recommended values for min_factor and max_factor, as - // explained in ACE.h (is_prime). - ACE::is_prime (CUBIT_ARBIT_NUMBER, - 2, - CUBIT_ARBIT_NUMBER / 2); - this->number_of_computations_ ++; - } - - return 0; -} diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.h b/TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.h deleted file mode 100644 index b336c11c2de..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/Util_Thread.h +++ /dev/null @@ -1,45 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO/tests -// -// = FILENAME -// Util_Thread.h -// -// = AUTHOR -// Andy Gokhale, Sumedh Mungee, and Sergio Flores-Gaitan -// -// ============================================================================ - -#include "Task_Client.h" - -const int CUBIT_ARBIT_NUMBER = 2064885; - -class Util_Thread : public ACE_Task<ACE_MT_SYNCH> - // = TITLE - // The thread that computes utilization. -{ -public: - Util_Thread (Task_State *, - ACE_Thread_Manager *thr_mgr); - // constructor. - - virtual int svc (void); - // The thread entry point function. - - double get_number_of_computations (void); - // Gets the number of computations the thread was able to perform. - - int done_; - // Indicates whether we're done. - -private: - int run_computations (void); - // Run the computations. - - // Sumedh, please add comments here. - double number_of_computations_; - Task_State *ts_; -}; diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/client.cpp b/TAO/performance-tests/Cubit/COOL/MT_Cubit/client.cpp deleted file mode 100644 index 0a1dbcc474c..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/client.cpp +++ /dev/null @@ -1,289 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO/tests -// -// = FILENAME -// client.cpp -// -// = AUTHOR -// Andy Gokhale, Brian Mendel, Sumedh Mungee, and Sergio Flores-Gaitan -// -// ============================================================================ - -#include "client.h" - -ACE_RCSID(MT_Cubit, client, "$Id$") - -int -initialize (void) -{ -#if defined (VXWORKS) - hostAdd ("mv2604d", "130.38.183.132"); -#if defined (VME_DRIVER) - STATUS status = vmeDrv (); - if (status != OK) - printf ("ERROR on call to vmeDrv()\n"); - status = vmeDevCreate ("/vme"); - if (status != OK) - printf ("ERROR on call to vmeDevCreate()\n"); -#endif /* defined (VME_DRIVER) */ -#endif /* defined (VXWORKS) */ - - // Make sure we've got plenty of socket handles. This call will use - // the default maximum. - ACE::set_handle_limit (); - return 0; -} - -int -do_priority_inversion_test (Task_State &ts) -{ - u_int i = 0; - - // Create the clients - Client high_priority_client (&ts); - Client low_priority_client (&ts); - - // Create the daemon thread in its own <ACE_Thread_Manager>. - ACE_Thread_Manager thr_mgr; - - Util_Thread util_thread (&ts, &thr_mgr); - - ACE_Sched_Priority priority = - ACE_Sched_Params::priority_min (ACE_SCHED_FIFO, - ACE_SCOPE_THREAD); - - // First activate the Utilization thread. It will wait until all - // threads have finished binding. - util_thread.activate (THR_BOUND, - 1, - 0, - priority); - - // Now activate the high priority client. - priority = ACE_THR_PRI_FIFO_DEF; - - if (high_priority_client.activate (THR_BOUND | ACE_SCHED_FIFO, - 1, - 0, - priority) == -1) - ACE_ERROR ((LM_ERROR, - "%p\n", - "activate failed")); - - // Drop the priority, so that the priority of clients will increase - // with increasing client number. - for (i = 0; i < ts.thread_count_; i++) - priority = ACE_Sched_Params::previous_priority (ACE_SCHED_FIFO, - priority, - ACE_SCOPE_THREAD); - - ACE_DEBUG ((LM_DEBUG, - "Creating %d clients with low priority of %d\n", - ts.thread_count_ - 1, - priority)); - - for (i = 0; i < ts.thread_count_ - 1; i++) - { - // The first thread starts at min + 1, since the minimum - // priority thread is the utilization thread. - - if (low_priority_client.activate (THR_BOUND, - 1, - 1, - priority) == -1) - ACE_ERROR ((LM_ERROR, - "%p\n", - "activate failed")); - - // get the next higher priority - priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO, - priority, - ACE_SCOPE_THREAD); - } - // Wait for all the threads to exit. - ACE_Thread_Manager::instance ()->wait (); - -#if defined (VXWORKS) - ACE_OS::printf ("Test done.\n" - "High priority client latency : %d usec\n" - "Low priority client latency : %d usec\n", - high_client.get_high_priority_latency (), - low_client.get_low_priority_latency ()); -#elif defined (CHORUS) - ACE_OS::printf ("Test done.\n" - "High priority client latency : %u usec\n" - "Low priority client latency : %u usec\n", - high_priority_client.get_high_priority_latency (), - low_priority_client.get_low_priority_latency ()); - - // output the latency values to a file, tab separated, to import it - // to Excel to calculate jitter, in the mean time we come up with - // the sqrt() function. - FILE *latency_file_handle = 0; - char latency_file[BUFSIZ]; - char buffer[BUFSIZ]; - - ACE_OS::sprintf (latency_file, - "cb__%d.txt", - ts.thread_count_); - - ACE_OS::fprintf(stderr, - "--->Output file for latency data is \"%s\"\n", - latency_file); - - latency_file_handle = ACE_OS::fopen (latency_file, "w"); - - for (u_int j = 0; j < ts.start_count_; j ++) - { - ACE_OS::sprintf(buffer, - "%s #%d", - j==0? "High Priority": "Low Priority", - j); - for (u_int i = 0; i < ts.loop_count_; i ++) - { - ACE_OS::sprintf(buffer+strlen(buffer), - "\t%u\n", - ts.global_jitter_array_[j][i]); - fputs (buffer, latency_file_handle); - buffer[0]=0; - } - } - - ACE_OS::fclose (latency_file_handle); -#else - ACE_DEBUG ((LM_DEBUG, "Test done.\n" - "High priority client latency : %f msec, jitter: %f msec\n" - "Low priority client latency : %f msec, jitter: %f msec\n", - high_priority_client.get_high_priority_latency (), - high_priority_client.get_high_priority_jitter (), - low_priority_client.get_low_priority_latency (), - low_priority_client.get_low_priority_jitter ())); -#endif /* !defined (CHORUS) && !defined (VXWORKS) */ - - // signal the utilization thread to finish with its work.. - util_thread.done_ = 1; - - // This will wait for the utilization thread to finish. - thr_mgr.wait (); - -#if defined (ACE_LACKS_FLOATING_POINT) - ACE_DEBUG ((LM_DEBUG, - "(%t) utilization task performed %u computations\n", - util_thread.get_number_of_computations ())); -#else - ACE_DEBUG ((LM_DEBUG, - "(%t) utilization task performed %g computations\n", - util_thread.get_number_of_computations ())); -#endif /* ! ACE_LACKS_FLOATING_POINT */ - - return 0; - -} - -int -do_thread_per_rate_test (Task_State &ts) -{ - // First activate the high priority client. - Client CB_40Hz_client (&ts); - Client CB_20Hz_client (&ts); - Client CB_10Hz_client (&ts); - Client CB_5Hz_client (&ts); - Client CB_1Hz_client (&ts); - - ACE_Sched_Priority priority = - ACE_Sched_Params::priority_max (ACE_SCHED_FIFO, - ACE_SCOPE_THREAD); - - // VxWorks priority of 0 causes problems. - priority = 10; - ACE_DEBUG ((LM_DEBUG, "Creating 40 Hz client with priority %d\n", priority)); - if (CB_40Hz_client.activate (THR_BOUND, 1, 0, priority++) == -1) - ACE_ERROR ((LM_ERROR, "%p\n", "activate failed")); - - ACE_DEBUG ((LM_DEBUG, "Creating 20 Hz client with priority %d\n", priority)); - if (CB_20Hz_client.activate (THR_BOUND, 1, 0, priority++) == -1) - ACE_ERROR ((LM_ERROR, "%p\n", "activate failed")); - - ACE_DEBUG ((LM_DEBUG, "Creating 10 Hz client with priority %d\n", priority)); - if (CB_10Hz_client.activate (THR_BOUND, 1, 0, priority++) == -1) - ACE_ERROR ((LM_ERROR, "%p\n", "activate failed")); - - ACE_DEBUG ((LM_DEBUG, "Creating 5 Hz client with priority %d\n", priority)); - if (CB_5Hz_client.activate (THR_BOUND, 1, 0, priority++) == -1) - ACE_ERROR ((LM_ERROR, "%p\n", "activate failed")); - - ACE_DEBUG ((LM_DEBUG, "Creating 1 Hz client with priority %d\n", priority)); - if (CB_1Hz_client.activate (THR_BOUND, 1, 0, priority++) == -1) - ACE_ERROR ((LM_ERROR, "%p\n", "activate failed")); - - // Wait for all the threads to exit. - ACE_Thread_Manager::instance ()->wait (); - - ACE_OS::printf ("Test done.\n" - "40Hz client latency : %d usec\n" - "20Hz client latency : %d usec\n" - "10Hz client latency : %d usec\n" - "5Hz client latency : %d usec\n" - "1Hz client latency : %d usec\n", - CB_40Hz_client.get_latency (0), - CB_20Hz_client.get_latency (1), - CB_10Hz_client.get_latency (2), - CB_5Hz_client.get_latency (3), - CB_1Hz_client.get_latency (4)); - return 0; -} - -// This is the main routine of the client, where we create a high -// priority and a low priority client. we then activate the clients -// with the appropriate priority threads, and wait for them to -// finish. After they aer done, we compute the latency and jitter -// metrics and print them. - -int -main (int argc, char *argv []) -{ -#if defined (FORCE_ARGS) - int argc = 7; - char *argv[] = {"main", - "-d", - "3", // Data Type - "-t", - "10", // Thread Count - "-h", - "mv2604d"}; // Host name -#endif /* defined (FORCE_ARGS) */ - - Task_State ts (argc, argv); - -#if defined (CHORUS) - // start the pccTimer for chorus classix - int pTime; - - // Initialize the PCC timer Chip - pccTimerInit(); - - if(pccTimer(PCC2_TIMER1_START,&pTime) !=K_OK) - { - printf("pccTimer has a pending bench mark\n"); - } -#endif - - if (ts.thread_per_rate_ == 0) - do_priority_inversion_test (ts); - else - do_thread_per_rate_test (ts); - -#if defined (CHORUS) - // stop the pccTimer for chorus ClassiX - if(pccTimer(PCC2_TIMER1_STOP,&pTime) !=K_OK) - { - printf("pccTimer has a pending benchmark\n"); - } -#endif - - return 0; -} diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/client.h b/TAO/performance-tests/Cubit/COOL/MT_Cubit/client.h deleted file mode 100644 index 734b559dafe..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/client.h +++ /dev/null @@ -1,41 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO/tests -// -// = FILENAME -// client.h -// -// = AUTHOR -// Andy Gokhale, Brian Mendel, Sumedh Mungee, and Sergio Flores-Gaitan -// -// ============================================================================ - -#include <corba/cool.H> -#include "cubit.H" - -#include "ace/Task.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/Thread_Manager.h" -#include "ace/Get_Opt.h" -#include "ace/Sched_Params.h" - -#include "Task_Client.h" -#include "Util_Thread.h" - -#if defined (CHORUS) -#include "pccTimer.h" -#endif /* CHORUS */ - -#if defined (VME_DRIVER) -#include <hostLib.h> -extern "C" STATUS vmeDrv (void); -extern "C" STATUS vmeDevCreate (char *); -#endif /* defined (VME_DRIVER) */ - diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit.idl b/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit.idl deleted file mode 100644 index d4f1610e2a8..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit.idl +++ /dev/null @@ -1,42 +0,0 @@ -// $Id$ - -// @(#)cubit.idl 1.1 95/09/10 -// Copyright 1994-1995 by Sun Microsystems, Inc. - -#pragma prefix "Eng.SUN.COM" -#pragma version Cubit 1.1 - -interface Cubit { - octet cube_octet (in octet o); - short cube_short (in short s); - long cube_long (in long l); - - struct Many { - octet o; // + 3 bytes padding (normally) ... - long l; - short s; // + 2 bytes padding (normally) ... - }; - - Many cube_struct (in Many values); - - enum discrim {e_0th, e_1st, e_2nd, e_3rd, e_4th, e_5th}; - - union oneof - switch (discrim) { - // this is an easy union to interpret; no padding - // is needed between discriminant and value. - case e_0th: - octet o; - case e_1st: - short s; - case e_2nd: - long l; - case e_3rd: - default: - Many cm; - }; - - oneof cube_union (in oneof values); - - oneway void please_exit (); -}; diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.cpp b/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.cpp deleted file mode 100644 index baf630d7dc5..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// $Id$ - -#include "cubit_impl.h" -#include "ace/ACE.h" - -ACE_RCSID(MT_Cubit, cubit_impl, "$Id$") - -Cubit_Impl::Cubit_Impl (Task_State *ts) - :ts_ (ts), - util_started_ (0) -{ -} - -CORBA::Octet Cubit_Impl:: cube_octet (CORBA::Octet o, CORBA::Environment &IT_env) -{ - // ACE_DEBUG ((LM_DEBUG, "octet cubed is %d\n", o*o*o)); - if (ts_->run_server_utilization_test_ == 1 && - ts_->utilization_task_started_ == 0 && - this->util_started_ == 0 ) - { - this->util_started_ = 1; - ts_->barrier_->wait (); - } - - ts_->loop_count_++; - - return (CORBA::Octet) (o * o * o); -} - -CORBA::Short Cubit_Impl:: cube_short (CORBA::Short s, CORBA::Environment &IT_env) { - return (CORBA::Short) (s * s * s); -} - -CORBA::Long Cubit_Impl:: cube_long (CORBA::Long l, CORBA::Environment &IT_env) { - return (CORBA::Long) (l * l * l); -} - -Cubit::Many Cubit_Impl:: cube_struct (const Cubit::Many& values, CORBA::Environment &IT_env) { - Cubit::Many out_values; - out_values.o = values.o * values.o * values.o; - out_values.s = values.s * values.s * values.s; - out_values.l = values.l * values.l * values.l; - return out_values; -} - -Cubit::oneof Cubit_Impl:: cube_union (const Cubit::oneof& values, CORBA::Environment &IT_env) { - Cubit::oneof out_values; - switch (values._d ()) { - case Cubit::e_0th: - out_values.o (values.o () * values.o () * values.o ()); - break; - case Cubit::e_1st: - out_values.s (values.s () * values.s () * values.s ()); - break; - case Cubit::e_2nd: - out_values.l (values.l () * values.l () * values.l ()); - break; - case Cubit::e_3rd: - default: - out_values.cm ().o = values.cm ().o * values.cm ().o * values.cm ().o ; - out_values.cm ().s = values.cm ().s * values.cm ().s * values.cm ().s ; - out_values.cm ().l = values.cm ().l * values.cm ().l * values.cm ().l ; - break; - } - return out_values; -} - -void Cubit_Impl:: please_exit (CORBA::Environment &IT_env) { -} diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.h b/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.h deleted file mode 100644 index 77eecdbbd10..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/cubit_i.h +++ /dev/null @@ -1,27 +0,0 @@ -// $Id$ - -#ifndef cubit_ih -#define cubit_ih - -#include <corba/cool.H> -#include "cubit.H" -#include "Task_Client.h" - -class Cubit_Impl { -public: - Cubit_Impl (Task_State *ts); - virtual CORBA_Octet cube_octet (CORBA_Octet o, CORBA_Environment &IT_env=_environment); - virtual CORBA_Short cube_short (CORBA_Short s, CORBA_Environment &IT_env=_environment); - virtual CORBA_Long cube_long (CORBA_Long l, CORBA_Environment &IT_env=_environment); - virtual Cubit::Many cube_struct (const Cubit::Many& values, CORBA_Environment &IT_env=_environment); - virtual Cubit::oneof cube_union (const Cubit::oneof& values, CORBA_Environment &IT_env=_environment); - virtual void please_exit (CORBA_Environment &IT_env=_environment); - -private: - Task_State *ts_; - //pointer to the task state - int util_started_; - // flag to indicate utilization test has started -}; - -#endif diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.cpp b/TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.cpp deleted file mode 100644 index a8846b631f9..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.cpp +++ /dev/null @@ -1,281 +0,0 @@ -// $Id$ - -/* - **************************************************************** - * - * Component = pccTimer.C - mvme167 - * - * Synopsis = - * - * Copyright (c) 1995, 1996, 1997 Chorus systemes - * (R) Chorus is a registered trademark of Chorus systemes - * - **************************************************************** - * - * - **************************************************************** - */ - -/* Everything is relative from -/vobs/chorus_work/merge1/mvme177/appl/include/chorus -*/ - -#include <stdio.h> -#include <chorus.h> -#include <exec/chContext.h> -//#include <exec/c_cpuContext.H> -#include <util/chKnTimeVal.h> -//#include <util/macro.h> -#include <tick/chTick.h> -//#include <kbim/p_chIntr.h> -//#include <stdconsio.h> -#include <bsp/pccchip2.h> -#include <bsp/nvram.h> -#include <bsp/board.h> -#include <exec/chPanic.h> -#include <bsp/intrLevel.h> -#include <timer/chProf.h> -#include <exec/f_chTrap.h> -#include <ims/ims_f.h> -//#include <sched/schedIntf.H> -//#include <p_boardInfo.H> -#include "pccTimer.h" - -ACE_RCSID(MT_Cubit, pccTimer, "$Id$") - - -static unsigned int quartz; -static unsigned int timer_reload_value; -int timerHz = 100; - -volatile struct -pccchip2 *pccchip2 = (volatile struct pccchip2 *) PCCchip2_BASE; - -volatile struct -nvram* nvram = ((volatile struct nvram*)NVRAM_BASE); - - -int -pccTimer(int option, int* uTime) -{ - KnTimeVal time; - - int res = K_EOK; - //option &= ~PCC_USERDATA; - static int benchEnable1 = 0; - static int benchEnable2 = 0; - static unsigned int benchLastTime = 0; - - switch(option) - { - - case PCC2_TIMER1_START: - if (benchEnable1) return K_EINVAL; - benchEnable1 = 1; - pccTimer1Start(); - benchLastTime = pccTimer1Reset(); - break; - - case PCC2_TIMER1_STOP: - benchLastTime = pccTime1Get(); - if (!benchEnable1) return K_EINVAL; - benchEnable1 = 0; - pccTimer1Stop(); - break; - - case PCC2_TIMER1_BPOINT: - benchLastTime = pccTime1Get(); - if (!benchEnable1) return K_EINVAL; - break; - - case PCC2_TIMER2_START: - if (benchEnable2) return K_EINVAL; - benchEnable2 = 1; - pccTimer2Start(); - benchLastTime = pccTimer2Reset(); - break; - - case PCC2_TIMER2_STOP: - benchLastTime = pccTime2Get(); - if (!benchEnable2) return K_EINVAL; - benchEnable2 = 0; - pccTimer2Stop(); - break; - - case PCC2_TIMER2_BPOINT: - benchLastTime = pccTime2Get(); - if (!benchEnable2) return K_EINVAL; - break; - - default: - return K_EINVAL; - } - - // Here only is last time must be returned - if (uTime) - { - *uTime = benchLastTime; - } - - return res; -} - - - // - // Return the value of the timer counter, in microseconds. - // - unsigned int -pccTime1Get() -{ - return pccchip2->timer1cnt; -} - - unsigned int -pccTimer1Reset() -{ - pccchip2->timer1cnt = 0; - return pccchip2->timer1cnt; -} - - void -pccTimer1Start() -{ - unsigned int temp; - - // Clear the counter - pccchip2->timer1cnt = 0; - // Start the counter running - // Do not reset the counter when it matches the compare register (~PCC2_COC) - // Clear the overflow counter - temp = pccchip2->timer1ctl; - pccchip2->timer1ctl = temp | PCC2_COVF | ~PCC2_COC | PCC2_CEN; - -} - - void -pccTimer1Stop() -{ - unsigned int temp; - - // Stop the counter running - temp = pccchip2->timer1ctl; - pccchip2->timer1ctl = temp | ~PCC2_CEN; - -} - - - // - // Return the value of the timer counter, in microseconds. - // - unsigned int -pccTime2Get() -{ - return pccchip2->timer2cnt; -} - - unsigned int -pccTimer2Reset() -{ - pccchip2->timer2cnt = 0; - return pccchip2->timer2cnt; -} - - void -pccTimer2Start() -{ - unsigned int temp; - - // Clear the counter - pccchip2->timer2cnt = 0; - // Start the counter running - // Do not reset the counter when it matches the compare register (~PCC2_COC) - // Clear the overflow counter - temp = pccchip2->timer2ctl; - pccchip2->timer2ctl = temp | PCC2_COVF | ~PCC2_COC | PCC2_CEN; - -} - - void -pccTimer2Stop() -{ - unsigned int temp; - - // Stop the counter running - temp = pccchip2->timer2ctl; - pccchip2->timer2ctl = temp | ~PCC2_CEN; - -} - - // - // Init the PCC2 timer - // - void -pccTimerInit() -{ - volatile unsigned int temp; - char c; - - /* compute board quartz frequency from nvram information */ - c = nvram->config_rom.speed[0]; - quartz = ((unsigned int) c - (unsigned int) '0') * 10; - c = nvram->config_rom.speed[1]; - quartz += ((unsigned int) c - (unsigned int) '0'); - - /* Step 1. Initialize prescaler control register */ - /* On a mvme177, the VME2Chip runs at half the MPU speed */ - temp = pccchip2->prescaleadjust & 0xFFFFFF00; - - switch(quartz) { - case 60 : pccchip2->prescaleadjust = temp | 0x000000E2; /* 256-30 */ - // ASSERT(((BoardInfo*)chorusContext->ctxBoardInfo)->boardId - // == BOARD_MVME177); - break; - default : { - char tab [80]; - printf(tab,"%s : %d", "Unknown clock frequency", quartz); - svSysPanic(KP_DEBUG, 0, 0, tab, __FILE__, __LINE__); - } - } - - timer_reload_value = 1000000 / timerHz; - - - /* Step 2. Set pcc timer 1 and timer 2 compare register */ -// pccchip2->timer1cmp = timer_reload_value; - pccchip2->timer1cmp = ~0; - pccchip2->timer2cmp = ~0; - - - /* Step 3. Clear timer 1 and timer 2 counter register */ - pccchip2->timer1cnt = 0; - pccchip2->timer2cnt = 0; - - - /* Step 4. Enable pcc timer 1 and timer 2*/ - temp = pccchip2->timer1ctl; - pccchip2->timer1ctl = temp | PCC2_COVF | PCC2_COC | PCC2_CEN; - - temp = pccchip2->timer2ctl; - pccchip2->timer2ctl = temp | PCC2_COVF | PCC2_COC | PCC2_CEN; - - - /* Step 5. VBR is already set */ -// No need to change the VBR if we are not Compare Feature of the PCC2 Timer - - /* Step 6. set the pcc timer 1 interrupt level */ -// temp = pccchip2->irqlvl1; -// temp = temp & 0xfffffff8; -// pccchip2->irqlvl1 = temp | TIMER_INT_LEVEL; - - - // KnIntrEntry clockConf; - - //clockConf.name = VME_CHIP2_TIMER1; - //clockConf.hdl = getHdlFromCf(); - //clockConf.on = clockStart_p; - //clockConf.off = clockStop_p; - //clockConf.down = clockDown_p; - //clockConf.ison = clockTest_p; - - //svIntrConnect (&clockConf); -} diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.h b/TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.h deleted file mode 100644 index 2f4acc12fe2..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/pccTimer.h +++ /dev/null @@ -1,56 +0,0 @@ -// $Id$ -/* - **************************************************************** - * - * Component = PCC2 Timer Header File - * - * Synopsis = - * - * - **************************************************************** - * - * - **************************************************************** - */ - - - -#ifndef _PCCTIMER_H -#define _PCCTIMER_H - -int -pccTimer(int option, int* uTime); -unsigned int -pccTime1Get(); -unsigned int -pccTimer1Reset(); -void -pccTimer1Start(); -void -pccTimer1Stop(); -unsigned int -pccTime2Get(); -unsigned int -pccTimer2Reset(); -void -pccTimer2Start(); -void -pccTimer2Stop(); -void -pccTimerInit(); - - -#define PCC2_TIMER1_START 0x0 -#define PCC2_TIMER1_STOP 0x1 -#define PCC2_TIMER1_BPOINT 0x2 -#define PCC2_TIMER2_START 0x10 -#define PCC2_TIMER2_STOP 0x20 -#define PCC2_TIMER2_BPOINT 0x40 -#define PCC2_USERDATA 0x100 - -#include <c_defs.h> -#include <mem/chAddr_f.h> - -//extern_C int sysBench __((int, int*)); - -#endif /* _PCCTIMER_H */ diff --git a/TAO/performance-tests/Cubit/COOL/MT_Cubit/server.cpp b/TAO/performance-tests/Cubit/COOL/MT_Cubit/server.cpp deleted file mode 100644 index e19d39e7bad..00000000000 --- a/TAO/performance-tests/Cubit/COOL/MT_Cubit/server.cpp +++ /dev/null @@ -1,160 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO/tests -// -// = FILENAME -// server.cpp -// -// = AUTHOR -// Andy Gokhale, Sumedh Mungee, and Sergio Flores-Gaitan -// -// ============================================================================ - -#include <api/binding.H> -#include <api/api.H> -#include <api/coolThreadPool.H> -#include <corba/eoa.H> -#include <corba/eorb.H> - -#include "cubit.H" -#include "cubit_impl.h" // server header file -#include "sk_cubit.H" -#include "sk_cubit.C" -#include "ace/OS.h" - -ACE_RCSID(MT_Cubit, server, "$Id$") - -CORBA_BOA_ptr boa; - -int -create_servant (void *arg) -{ - char ** argv = (char **) arg; - - CORBA_Environment env; - Cubit_ptr cubit; - Cubit_Impl cubit_impl; - - COOL_ThreadPool* MyPool_1; - u_int concurrencyModel = 0; - - if (strcmp (argv[1], "tpool") == 0) - { - // - // Defines a policy for using a pool of 20 threads. - // - concurrencyModel = THREAD_POOL; - ACE_DEBUG ((LM_DEBUG, "Using Thread Pool concurrency model\n")); - } - else if (strcmp (argv[1], "tpr") == 0) - { - // Defines policy to create a thread for each incoming - // request. - concurrencyModel = THREAD_PER_REQUEST; - ACE_DEBUG ((LM_DEBUG, "Using Thread Per Request concurrency model\n")); - } - else - { - ACE_ERROR ((LM_ERROR, "Concurrency model determination failed.\n")); - return -1; - } - - COOL_ThreadPoolControl poolCtl_1 (concurrencyModel, 1, 20, -1); - COOL_QueueControl qCtl; - - // Defines thread attributes for threads belonging to pools. - COOL_ThreadAttributes poolAttr; - struct sched_param sp; - poolAttr.init(); - poolAttr.stack_size(8192*2); - sp.sched_priority = 43; - poolAttr.sched_attr(&sp); - // - // Allocate and initialize first pool - // - MyPool_1 = new COOL_ThreadPool; - MyPool_1->init_pool(poolCtl_1, poolAttr, qCtl); - - COOL::EOABindingData bindingData (argv[2]); - bindingData.threadpool(MyPool_1); - - COOL_bind (cubit_impl, cubit, bindingData, env); - - if (env.exception ()) - { - ACE_DEBUG ((LM_ERROR, "Bind failed.\n")); - return -1; - } - - if (env.exception ()) { - ACE_DEBUG ((LM_ERROR, "Object Reference Export Failed.\n")); - return -1; - } - - ACE_DEBUG ((LM_DEBUG, "Entering boa->run ().\n")); - boa->run (); - return 0; -} - - -int -main (int argc, char** argv) -{ - CORBA_Environment env; - int i = 0; - - COOL::EOA::bind(argv[2], env); - if (env.exception()) { - ACE_DEBUG ((LM_ERROR, "Impossible to bind the ORB to the description: %s\n", argv[2])); - return -1; - } - - CORBA_ORB_ptr orb = CORBA_ORB_init (argc, argv, 0, env); - if (env.exception ()) { - ACE_DEBUG ((LM_ERROR, "ORB_init failed..\n")); - CORBA::SystemException* ex; - - ex = CORBA::SystemException::_narrow(env.exception()); - if (ex) { - CORBA::String_var msg = ex->message(); - fprintf(stderr, "%s.\n", (const char*) msg); - } else { - fprintf(stderr, "Unknown user exception.\n"); - } - return -1; - } - - boa = orb->OA_init (argc, argv, 0, env); - if (env.exception ()) - { - ACE_DEBUG ((LM_ERROR, "OA_init failed..\n")); - return -1; - } - - COOL_Activity_ptr new_activity [2]; - - for (i = 0; i < 1; i++) - { - if (thisCapsule->createActivity ((COOL_ActivityFunc) create_servant, - (void *) argv, - new_activity [i]) != C_OK) - { - ACE_ERROR ((LM_ERROR, "%p\n", "activate failed\n")); - } - } - - CORBA_Long status; - for (i = 0; i < 1; i++) - { - if (new_activity [i]->join (status) != C_OK) - { - ACE_ERROR ((LM_ERROR, "%p\n", "join failed\n")); - } - } - - ACE_DEBUG ((LM_DEBUG, "Cubit server is exiting\n")); - return 0; -} |