axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aleksander Slominski <as...@cs.indiana.edu>
Subject Re: Analysis of Axis C++ client transport
Date Fri, 17 Sep 2004 18:50:11 GMT
Samisa Abeysinghe wrote:

>Hi All,
>    Since I was under the impression that the current Axis transport lib implementation
is much
>slower than LibWWW based implementation I did some measurers on the speed with echo string
method
>of base sample.
>   The original Axis transport lib was much slower and hence I implemented a new socket
based Axis
>transport lib with the logic similar to current Axis transport. The results are interesting.
The
>original Axis transport implementation is too slow, and not only that, it cannot send
messages
>lager than 48800 (strage number), if I try to the client segfaults. The new transport
lib as well
>as the LibWWW based transport can send much larger messages (I tested upto 2621440 characters)
>  
>
hi,

that would explain why AXIS C++ could not get pas some sizes when i was 
running those tests:
(...)*Medium size array*s: AXIS-C++ was not able to finish this test and 
is not shown.(...)
http://www.extreme.indiana.edu/xgws/soap_bench/linux_xeon_sc/

hopefullly that can be soon fixed.

alek

>   The other interesting thing is that the new trasport that I implemented are faster
than LibWWW
>based implementation.
>    Please have a look at the attached HTML file for results.
>
>    At the moment, the Call class creates a new transport object for each and every invcation.
I
>made the code to reuse the same transport and the code became still faster.
>
>    However, testing for thread safety, both LibWWW and the new transport failed, only
the old
>trasport work with threads. I am doubtful of this, because in the new transport I have
very
>similar logic to that of the old (but not the same) I doubt the old transport pretends
to be
>thread safe as it is too slow. We have to remove the globle variables from the code and
see if
>this thread safety problems would persist. We must look into thread safety as an immediate
high
>priority issue.
>
>    As the code is frozen at the moment for 1.3 I did not commit the new trasport. It
works for
>chunks as well, however it would have to be tested more to be used in production envioronments.
>Hence, even if I put it in cvs, I would like it to be seperate from the original Axis
transport
>lib. I have removed all cyclic couplings in this new code and hence it would be easier
to
>maintain.
>
>    I have given below the client code that I used for this testing (with base.wsdl generated
>code)
>
>Thanks,
>Samisa...
>
>#include <string>
>#include <iostream>
>#include <time.h>
>#include <stdio.h>
>#include <sys/types.h>
>#include <sys/timeb.h>
>
>#ifdef WIN32
>#else
>#include <sys/times.h>
>#include <unistd.h>
>#endif
>
>
>#include <axis/AxisGenException.h>
>#include "./gen_src/InteropTestPortType.h"
>
>using namespace std;
>
>#define STRING_TO_SEND "HelloWorld"
>
>static void
>usage (char *programName, char *defaultURL)
>{
>    cout << "\nUsage:\n"
>	<< programName << " [-? | service_url] " << endl
>	<< "    -?             Show this help.\n"
>	<< "    service_url    URL of the service.\n"
>	<< "    Default service URL is assumed to be " << defaultURL
>	<<
>	"\n    Could use http://localhost:8080/axis/services/echo to test with Axis Java."
>	<< endl;
>}
>
>
>int
>main (int argc, char *argv[])
>{
>    int length = 10;
>    char endpoint[256];
>
>    // Set default service URL
>    sprintf (endpoint, "http://localhost/axis/base");
>    // Could use http://localhost:8080/axis/services/echo to test with Axis Java
>
>    try
>    {
>
>	if (argc > 1)
>	{
>	    // Watch for special case help request
>	    if (!strncmp (argv[1], "-", 1)) // Check for - only so that it works for 
>                                            //-?, -h or --help; -anything 
>	    {
>		usage (argv[0], endpoint);
>		return 2;
>	    }
>	    length = atoi(argv[1]);
>	}
>        
>        if (argc > 2)
>            sprintf (endpoint, argv[2]);
>
>	cout << endl << " Using service at " << endpoint << endl <<
endl;
>
>	InteropTestPortType ws (endpoint);
>
>        ws.setTransportTimeout(2);
>
>        // Prepare the string to be sent 
>        char* buffer = new char[ length * strlen(STRING_TO_SEND) + 1];
>        buffer[0] = '\0';
>        for (int i = 0; i < length; i++ )
>            strcat(buffer, STRING_TO_SEND);
>	
>	// Time mesurement stuff
>	time_t startTime;
>        time_t endTime;
>
>	time( &startTime );
>
>        char* echoStringResult = ws.echoString(buffer);
>
>	time( &endTime );
>        printf( "Time spent to invoke method ws.echoString(buffer); = %lf s\n", difftime(
endTime,
>startTime ) );
>
>	if (0 == strcmp(echoStringResult, buffer))
>	    printf ("successful\n");
>	else
>	    printf ("failed\n");
>
>        // Clean memory 
>        if (echoStringResult)
>            free(echoStringResult);
>
>        delete [] buffer;
>
>    }
>    catch (AxisException & e)
>    {
>	printf ("Exception : %s\n", e.what ());
>    }
>    catch (exception & e)
>    {
>	printf ("Unknown exception has occured\n");
>    }
>    catch (...)
>    {
>	printf ("Unknown exception has occured\n");
>    }
>
>    // System vs User time stuff
>#ifdef WIN32
>#else // Linux/Unix
>    tms timesSpent;
>    times(&timesSpent);
>
>    printf( "User time               = %ld clock ticks\n", timesSpent.tms_utime );
>    printf( "System time             = %ld clock ticks\n", timesSpent.tms_stime);
>    printf( "User time of children   = %ld clock ticks\n", timesSpent.tms_cutime);
>    printf( "System time of children = %ld clock ticks\n", timesSpent.tms_cstime);
>    printf( "Processor time used     = %ld clock ticks\n", clock());
>    printf( "Number of clock ticks per second = %ld clock ticks/s\n", sysconf(_SC_CLK_TCK)
);
>#endif
>
>    return 0;
>}
>
>        
>
>
>		
>_______________________________
>Do you Yahoo!?
>Declare Yourself - Register online to vote today!
>http://vote.yahoo.com
>
>
> ------------------------------------------------------------------------
>
> Message Size (characters) 	Original Axis Transport 	New Axis 
> Transport 	LibWWW
> 5120 	real 0m15.113s 	real 0m0.084s 	real 0m0.360s
>
> 	user 0m0.043s 	user 0m0.036s 	user 0m0.113s
>
> 	sys 0m0.012s 	sys 0m0.015s 	sys 0m0.028s
>
> 	
> 	
> 	
> 10240 	real 0m15.121s 	real 0m0.081s 	real 0m0.224s
>
> 	user 0m0.047s 	user 0m0.046s 	user 0m0.119s
>
> 	sys 0m0.011s 	sys 0m0.010s 	sys 0m0.026s
>
> 	
> 	
> 	
> 20480 	real 0m15.128s 	real 0m0.103s 	real 0m0.268s
>
> 	user 0m0.058s 	user 0m0.056s 	user 0m0.150s
>
> 	sys 0m0.013s 	sys 0m0.013s 	sys 0m0.029s
>
> 	
> 	
> 	
> 40960 	real 0m15.127s 	real 0m0.156s 	real 0m0.416s
>
> 	user 0m0.108s 	user 0m0.111s 	user 0m0.264s
>
> 	sys 0m0.013s 	sys 0m0.012s 	sys 0m0.036s
>
> 	
> 	
> 	
> 81920 	Segmentation fault 	
> 	
>
> 	real 0m15.335s 	real 0m0.394s 	real 0m0.924s
>
> 	user 0m0.305s 	user 0m0.305s 	user 0m0.702s
>
> 	sys 0m0.011s 	sys 0m0.016s 	sys 0m0.035s
>
> 	
> 	
> 	
> 163840 	Segmentation fault 	
> 	
>
> 	real 0m16.168s 	real 0m1.233s 	real 0m2.844s
>
> 	user 0m1.078s 	user 0m1.094s 	user 0m2.437s
>
> 	sys 0m0.014s 	sys 0m0.017s 	sys 0m0.054s
>
> 	
> 	
> 	
> 327680 	Segmentation fault 	
> 	
>
> 	real 0m20.402s 	real 0m4.697s 	real 0m10.801s
>
> 	user 0m4.154s 	user 0m4.305s 	user 0m9.350s
>
> 	sys 0m0.031s 	sys 0m0.018s 	sys 0m0.101s
>
> 	
> 	
> 	
> 655360 	Segmentation fault 	
> 	
>
> 	real 0m38.541s 	real 0m17.718s 	real 0m30.372s
>
> 	user 0m17.683s 	user 0m15.765s 	user 0m27.242s
>
> 	sys 0m0.057s 	sys 0m0.052s 	sys 0m0.188s
>
> 	
> 	
> 	
> 1310720 	Segmentation fault 	
> 	
>
> 	real 1m21.945s 	real 1m3.540s 	real 1m52.533s
>
> 	user 1m2.152s 	user 0m58.013s 	user 1m39.505s
>
> 	sys 0m0.110s 	sys 0m0.102s 	sys 0m0.244s
>
> 	
> 	
> 	
> 2621440 	Segmentation fault 	
> 	
>
> 	real 4m42.126s 	real 4m26.030s 	real 5m47.741s
>
> 	user 4m8.387s 	user 4m4.459s 	user 5m32.326s
>
> 	sys 0m0.413s 	sys 0m0.376s 	sys 0m0.879s
>


-- 
The best way to predict the future is to invent it - Alan Kay


Mime
View raw message