axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Hawkins <HAWKI...@uk.ibm.com>
Subject Re: Analysis of Axis C++ client transport
Date Fri, 17 Sep 2004 09:34:44 GMT




Wow !!!

The old code was really slow !
Your code is really fast :-)

We do get other things with libwww though don't we?


If your code is better than the current code 9(and we can make it thread
safe and have the same function) then let's use it and ditch the original
one?



John Hawkins




                                                                           
             Samisa Abeysinghe                                             
             <samisa_abeysingh                                             
             e@yahoo.com>                                               To 
                                       Apache AXIS C Developers List       
             17/09/2004 09:39          <axis-c-dev@ws.apache.org>          
                                                                        cc 
                                                                           
             Please respond to                                     Subject 
              "Apache AXIS C           Analysis of Axis C++ client         
             Developers List"          transport                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




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)
   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   |  Original Axis  |    New Axis     |     LibWWW      |
|  (characters)   |    Transport    |    Transport    |                 |
|-----------------+-----------------+-----------------+-----------------|
|             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     |
|-----------------+-----------------+-----------------+-----------------|




Mime
View raw message