summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2011-04-12 20:30:29 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2011-04-12 20:30:29 +0000
commita7780dff310fc13406f09fd6d2099b98aa418968 (patch)
tree1e42da5e05bb54eaf8f4a5223584ee8dea6ddbaf
parent3a451e9d58e8f6a91a580ba8cd722efaa58825ad (diff)
downloadATCD-a7780dff310fc13406f09fd6d2099b98aa418968.tar.gz
Tue Apr 12 20:11:30 UTC 2011 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--ChangeLog9
-rw-r--r--performance-tests/Alt_Mapping/StringMember/StringMember.idl18
-rw-r--r--performance-tests/Alt_Mapping/StringMember/StringMember.mpc103
-rw-r--r--performance-tests/Alt_Mapping/StringMember/client.cpp145
-rw-r--r--performance-tests/Alt_Mapping/StringMember/run_test.pl98
-rw-r--r--performance-tests/Alt_Mapping/StringMember/server.cpp98
6 files changed, 471 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b717a391a5b..cde4c1ee135 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Tue Apr 12 20:11:30 UTC 2011 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * performance-tests/Alt_Mapping/StringMember/*.*:
+
+ New test, measures latency of a CORBA operation sending a
+ struct with a string member, in two versions - when the
+ string member in question is assigned with a copy and
+ without a copy.
+
Fri Apr 8 20:49:40 UTC 2011 Jeff Parsons <j.parsons@vanderbilt.edu>
* tests/Alt_Mapping/Options.cpp:
diff --git a/performance-tests/Alt_Mapping/StringMember/StringMember.idl b/performance-tests/Alt_Mapping/StringMember/StringMember.idl
new file mode 100644
index 00000000000..6e9231930f5
--- /dev/null
+++ b/performance-tests/Alt_Mapping/StringMember/StringMember.idl
@@ -0,0 +1,18 @@
+// $Id$
+
+#ifndef STRINGMEMBER_IDL
+#define STRINGMEMBER_IDL
+
+struct Foo
+{
+ string strmem;
+};
+
+interface Test
+{
+ void test_op (in Foo inarg);
+
+ void shutdown ();
+};
+
+#endif // STRINGMEMBER_IDL
diff --git a/performance-tests/Alt_Mapping/StringMember/StringMember.mpc b/performance-tests/Alt_Mapping/StringMember/StringMember.mpc
new file mode 100644
index 00000000000..cc7af5296f7
--- /dev/null
+++ b/performance-tests/Alt_Mapping/StringMember/StringMember.mpc
@@ -0,0 +1,103 @@
+// -*- MPC -*-
+// $Id$
+
+project(*idl): taoidldefaults {
+ IDL_Files {
+ idlflags -= -Sa -St
+ idlflags += -Wb,stub_export_macro=STRING_MEMBER_STUB_Export \
+ -Wb,stub_export_include=string_member_stub_export.h \
+ -Wb,skel_export_macro=STRING_MEMBER_SKEL_Export \
+ -Wb,skel_export_include=string_member_skel_export.h \
+ -Gxhst -Gxhsk -Gstl
+
+ StringMember.idl
+ }
+
+ custom_only = 1
+}
+
+project(*Stub): taolib, anytypecode, codeset, avoids_minimum_corba, avoids_ace_for_tao {
+ after += *idl
+ sharedname = String_Member_Stub
+ dynamicflags += STRING_MEMBER_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ StringMemberC.cpp
+ }
+
+ Inline_Files {
+ StringMemberC.inl
+ }
+
+ Header_Files {
+ StringMemberC.h
+ string_member_stub_export.h
+ }
+}
+
+project(*Client): taoexe, codeset {
+ exename = client
+ after += *Stub
+ libs += String_Member_Stub
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ client.cpp
+ }
+
+ Header_Files {
+ }
+
+ Inline_Files {
+ }
+}
+
+project(*Skel): portableserver, codeset, avoids_minimum_corba, avoids_corba_e_compact, avoids_corba_e_micro {
+ after += *Stub
+ sharedname = String_Member_Skel
+ libs += String_Member_Stub
+ dynamicflags += STRING_MEMBER_SKEL_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ StringMemberS.cpp
+ }
+
+ Inline_Files {
+ StringMemberS.inl
+ }
+
+ Header_Files {
+ StringMemberS.h
+ string_member_skel_export.h
+ }
+}
+
+project(*Server): taoexe, codeset, portableserver {
+ exename = server
+ after += *Skel
+ libs += String_Member_Skel String_Member_Stub
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ server.cpp
+ }
+
+ Header_Files {
+ }
+
+ Inline_Files {
+ }
+}
+
+
+
diff --git a/performance-tests/Alt_Mapping/StringMember/client.cpp b/performance-tests/Alt_Mapping/StringMember/client.cpp
new file mode 100644
index 00000000000..3a89abf76fd
--- /dev/null
+++ b/performance-tests/Alt_Mapping/StringMember/client.cpp
@@ -0,0 +1,145 @@
+// $Id$
+
+//========================================================================
+//
+// = FILENAME
+// client.cpp
+//
+// = DESCRIPTION
+// This is the driver program that compares copy and non-copy performance
+// of arg string member assignment from std::string.
+//
+// = AUTHOR
+// Jeff Parsons <j.parsons@vanderbilt.edu>
+//
+//=========================================================================
+
+#include "ace/High_Res_Timer.h"
+#include "ace/Basic_Stats.h"
+#include "ace/Sample_History.h"
+#include "ace/OS_NS_ctype.h"
+#include "ace/Get_Opt.h"
+
+#include "StringMemberC.h"
+
+const char *ior_file = "file://StringMember.ior";
+int niterations = 10000;
+CORBA::ULong len = 40;
+
+int
+parse_args (int argc, ACE_TCHAR *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("n:l:"));
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'n':
+ niterations = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case 'l':
+ len = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-n <iterations> "
+ "-l <string length> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+char *
+gen_string (void)
+{
+ char *buf = CORBA::string_alloc (len);
+ CORBA::ULong i = 0;
+
+ while (i < len)
+ {
+ int c = ACE_OS::rand () % 128;
+
+ if (ACE_OS::ace_isprint (c) && !ACE_OS::ace_isspace (c))
+ {
+ buf [i] = c;
+ i++;
+ }
+ }
+
+ buf[i] = 0;
+ return buf;
+}
+
+int
+ACE_TMAIN (int argc, char *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var obj = orb->string_to_object (ior_file);
+
+ Test_var target = Test::_narrow (obj.in ());
+
+ if (parse_args (argc, argv) != 0)
+ {
+ return 1;
+ }
+
+ CORBA::String_var str = gen_string ();
+ std::string data (str.in ());
+
+ Foo arg;
+
+ ACE_Sample_History no_copy_history (niterations);
+
+ for (int i = 0; i < niterations; ++i)
+ {
+ ACE_hrtime_t start = ACE_OS::gethrtime ();
+ arg.strmem = data;
+ target->test_op (arg);
+ ACE_hrtime_t now = ACE_OS::gethrtime ();
+ no_copy_history.sample (now - start);
+ }
+
+ ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
+ ACE_Basic_Stats no_copy_stats;
+ no_copy_history.collect_basic_stats (no_copy_stats);
+ no_copy_stats.dump_results (ACE_TEXT ("No Copy"), gsf);
+
+ ACE_Sample_History copy_history (niterations);
+
+ for (int i = 0; i < niterations; ++i)
+ {
+ ACE_hrtime_t start = ACE_OS::gethrtime ();
+ arg.strmem = data.c_str ();
+ target->test_op (arg);
+ ACE_hrtime_t now = ACE_OS::gethrtime ();
+ copy_history.sample (now - start);
+ }
+
+ ACE_Basic_Stats copy_stats;
+ copy_history.collect_basic_stats (copy_stats);
+ copy_stats.dump_results (ACE_TEXT ("Copy"), gsf);
+
+// target->shutdown ();
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("client: CORBA Exception caught");
+ return -1;
+ }
+ catch (...)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR, "client: unknown exception caught\n"),
+ -1);
+ }
+
+ return 0;
+}
diff --git a/performance-tests/Alt_Mapping/StringMember/run_test.pl b/performance-tests/Alt_Mapping/StringMember/run_test.pl
new file mode 100644
index 00000000000..03c0b93676e
--- /dev/null
+++ b/performance-tests/Alt_Mapping/StringMember/run_test.pl
@@ -0,0 +1,98 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{ACE_ROOT}/bin";
+use PerlACE::TestTarget;
+
+my $server = PerlACE::TestTarget::create_target(1) || die "Create target 1 failed\n";
+my $client = PerlACE::TestTarget::create_target(2) || die "Create target 2 failed\n";
+
+$iorbase = "StringMember.ior";
+my $server_iorfile = $server->LocalFile ($iorbase);
+my $client_iorfile = $client->LocalFile ($iorbase);
+$server->DeleteFile($iorbase);
+$client->DeleteFile($iorbase);
+
+$num = 10000;
+$len = 40;
+$status = 0;
+
+# Parse the arguments
+
+for ($i = 0; $i <= $#ARGV; $i++) {
+ if ($ARGV[$i] eq "-h" || $ARGV[$i] eq "-?") {
+ print "Run_Test Perl script for TAO StringMember Test\n\n";
+ print "run_test [-n num] [-l length]\n";
+ print "\n";
+ print "-n num -- num iterations for stats\n";
+ print "-l length -- string member length\n";
+ exit 0;
+ }
+ elsif ($ARGV[$i] eq "-n") {
+ $num = $ARGV[$i + 1];
+ $i++;
+ }
+ elsif ($ARGV[$i] eq "-l") {
+ $len = $ARGV[$i + 1];
+ $i++;
+ }
+}
+
+$SV = $server->CreateProcess ("server");
+$CL = $client->CreateProcess ("client");
+
+$server->DeleteFile($iorbase); # Ignore errors
+$client->DeleteFile($iorbase);
+
+$server_status = $SV->Spawn ();
+
+if ($server_status != 0) {
+ print STDERR "ERROR: server returned $server_status\n";
+ $status = 1;
+} else {
+ if ($server->WaitForFileTimed ($iorbase,
+ $server->ProcessStartWaitInterval()) == -1) {
+ print STDERR "ERROR: cannot find file <$server_iorfile>\n";
+ $SV->Kill ();
+ exit 1;
+ }
+
+ if ($server->GetFile ($iorbase) == -1) {
+ print STDERR "ERROR: cannot retrieve file <$server_iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+ }
+ if ($client->PutFile ($iorbase) == -1) {
+ print STDERR "ERROR: cannot set file <$client_iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+ }
+
+ $CL->Arguments ("-n $num -l $len");
+ $client_status = $CL->SpawnWaitKill ($server->ProcessStartWaitInterval() + 45);
+
+ if ($client_status != 0) {
+ print STDERR "ERROR: client returned $client_status\n";
+ $status = 1;
+ }
+
+ $server_status = $SV->Kill ();
+
+ if ($server_status != 0) {
+ print STDERR "ERROR: server returned $server_status\n";
+ $status = 1;
+ }
+
+ $server->GetStderrLog();
+
+ $server->DeleteFile($iorbase);
+ $client->DeleteFile($iorbase);
+}
+
+$server->DeleteFile($iorbase);
+
+exit $status;
diff --git a/performance-tests/Alt_Mapping/StringMember/server.cpp b/performance-tests/Alt_Mapping/StringMember/server.cpp
new file mode 100644
index 00000000000..9f3b2c07402
--- /dev/null
+++ b/performance-tests/Alt_Mapping/StringMember/server.cpp
@@ -0,0 +1,98 @@
+// $Id$
+
+// ============================================================================
+//
+// = FILENAME
+// server.cpp
+//
+// = DESCRIPTION
+// The server process for the StringMember test
+//
+// = AUTHOR
+// Jeff Parsons <j.parsons@vanderbilt.edu>
+//
+// ============================================================================
+
+#include "ace/OS_NS_stdio.h"
+
+#include "StringMemberS.h"
+
+const char *ior_file = "StringMember.ior";
+
+class Test_i : public virtual POA_Test
+{
+public:
+ Test_i (CORBA::ORB_ptr orb)
+ : orb_ (orb)
+ {
+ }
+
+ virtual void
+ test_op (const Foo & /* inarg */)
+ {
+ }
+
+ virtual void
+ shutdown (void)
+ {
+ this->orb_->shutdown (false);
+ }
+
+private:
+ CORBA::ORB_ptr orb_;
+};
+
+int
+ACE_TMAIN (int argc, char *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var obj =
+ orb->resolve_initial_references ("RootPOA");
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (obj.in ());
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager ();
+
+ poa_manager->activate ();
+
+ Test_i servant (orb.in ());
+ Test_var objref = servant._this ();
+
+ CORBA::String_var ior = orb->object_to_string (objref.in ());
+
+ FILE *output_file= ACE_OS::fopen (ior_file, "w");
+
+ if (output_file == 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s",
+ ior_file));
+ return -1;
+ }
+
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ orb->run ();
+
+ root_poa->destroy (false, false);
+ orb->destroy ();
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("server: CORBA Exception caught");
+ return -1;
+ }
+ catch (...)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR, "server: unknown exception caught\n"),
+ -1);
+ }
+
+ return 0;
+}