Hi, 

Apologies for my silence in the last couple of days. I have been busy...

On Sat, 24 Nov 2001, marc fleury wrote:

> Ok so if I read your stuff correctly what you mean by "RMI/IIOP" semantics
> is enforcing that we work from IOR all the time, ie. serialized
> representations of invocations.  It is as if we were using "MO.get()" in the
> optimized stack, WHICH WE DO if for example the cl test we were talking
> about the other day fails.

Yes.

> You are saying removing the network give a speed of 2.  I want to see MO vs
> the same serialization both without the stack.

Ok, now I got some new numbers. But they are so counter-intuitive I feel
uneasy about posting them. (Did I screwed something up bigtime?)

Well, even at the risk of looking ridiculous, I am attaching to this
message a text file with my new numbers. (To view it you need a text
window with at least 97 columns.) I am about to commit to contrib/iiop the
code I used to get these numbers, so anyone can look if there is something
wrong in it. This will also allow me to tell you precisely (by referring 
to the code) what changed in each measurement.

Anyway, these numbers show that:

 - My IIOP stuff does not like the multithreaded testcases of the bank
   suite. This might be a problem in JacORB, I do not know yet. I played
   with the jacorb.poa.thread_pool_max parameter in an attempt to make
   things better, but had very small success here. On the other hand, the
   IIOP stuff outperforms the JRMP code in RH on _all_ other bank testcases.

 - A local call path buys me nothing. This is very counter-intuitive!
   A possible reason could be that my local call path is superfluous
   because JacORB provides one such path anyway, but I still have to
   check if this is true or not.

 - MarshalledObjects are bad. Maybe not as bad as the numbers I posted
   last week might have suggested, but they're bad anyway.

 - Having getHandle()/getHomeHandle() implementations in the IIOP stubs
   makes a great difference. I could reproduce last week's bad numbers
   only by disabling the stub implementations of these methods. This was a
   big surprise for me, as the bank testsuite does not explicitly call
   getHandle(). It appears that the object pooling code makes a lot of 
   getHandle() calls.

 - The performace penalty of param/result copying (to get proper RMI/IIOP
   semantics on the local call path) is very small in the bank testcases.

Cheers,

Francisco
Times in seconds, on a PII 400MHz w/ 256M RAM 
                  running Linux kernel 2.2.19
              and Sun JDK 1.3.1 build 1.3.1-b24

                  RH main    IIOP     IIOP     IIOP     IIOP     IIOP     IIOP     
IIOP     IIOP
                   (JRMP       LP       LP       LP       LP       LP    no LP    no 
LP    no LP
                      LP    no CP    no CP       CP    no CP       CP                  
    
                   no CP)   no MO    no MO    no MO       MO       MO    no MO       
MO       MO
                              (1)      (2)                                             
      (3)

testTeller         19.983   20.452   20.590   19.562   23.422   23.879   20.374   
22.401   31.356
testBank            1.001    0.395    0.507    0.527    1.421    1.517    0.497    
1.340    1.340
testMultiThread   178.551  888.022  874.585  888.838  905.898  942.769  891.106  
909.519 1868.587
testMultiThread2  173.741  885.955  880.567  896.045  926.035  952.402  899.614  
947.406 1856.483
testTransaction    10.041    5.837    6.975    5.593    8.796    9.054    6.009    
8.993   11.095
testTransfer       14.304   13.343   13.354   14.570   18.557   18.878   12.555   
16.646   84.310
testReadOnly       85.222    8.781    8.593    8.227   58.318   59.394    9.671   
58.349   62.116
testPassivation     5.454    7.282    6.402    7.136    6.760    6.762    6.399    
7.092    7.434
testFinder         43.323   13.537   11.713   12.349   59.452   59.249   12.534   
58.291   62.631
testServerFound    38.240    6.459    5.754    6.295   53.620   53.398    6.304   
52.409   56.642


- LP x no LP: Local call path enabled (LP) or disabled (no LP)

- CP x no CP (just for the LP case): copy parameters and return value 
             to get proper RMI/IIOP semantics (CP) or just pass references 
             around (no CP)

- MO X no MO: IORs of entity beans contain a MarshalledObject wrapping the
              entity bean's PK (MO) or contain a custom serialization of the 
              PK (no MO)

- except for column (3), the methods getHandle()/getHomeHandle() are 
  implemented directly in the IIOP stubs and hence never reach the container

(1) - jacorb.poa.thread_pool_max=100

(2) - jacorb.poa.thread_pool_max=200 at this column and at the following ones

(3) - disabled implementation of getHandle/getHomeHandle in the stubs

Reply via email to