omniORB2 performance

Eoin Carroll ewc@orl.co.uk
Thu, 14 Aug 1997 16:55:59 +0100 (BST)


Hi,

> Does omniorb implement some special detection if objects reside on
> the same node or communication is done between the same hardware
> architecture? 
> I ask this, because I get very good performance numbers
> compared to other orbs, especially when I make communication
> within the same machine (factor 10 faster than some other orbs).
> When it comes to communication over networks speeds of omniorb compared
> to some other orbs get more comparable. Does anyone have a explanation
> for this effect?
> 

omniORB2 doesn't (yet) do anything special if objects reside in 
different address spaces on the same node or on different nodes of the
same architecture. We are, however, working on a shared memory transport.

There are a number of reasons for the effects you have noticed:

1. If the machines are of the same endian, then no byte swapping is required.
   This explains why omniORB2 performance is better between machines of the 
   same architecture than between machines of different architecture (if the
   machines are of different endian). Mind you, this is also true for any ORB - 
   but perhaps the ORBs you have tested have less efficient unmarshalling functions
   than omniORB2.

2. Threading. Different ORBs have different threading policies. If an ORB
   uses several threads when sending and servicing a request, then there 
   can be a lot of overhead from thread scheduling. This is particularly 
   the case when the client and server object are on the same machine. If 
   they are on different machines, then not all of the thread switching 
   takes place on the same machine.

   In omniORB2, there is no thread switching along the call chain. On the 
   client side, the thread that invokes on the object directly sends the
   GIOP request, and then blocks, waiting for the reply. On the server side,
   a dedicated thread blocks for requests. When it receives one, it unmarshalls
   the request and arguments, performs the upcall, and sends the reply. This
   policy should be more efficient then using several threads to service each
   request, particularly when the objects are on the same machine.


omniORB2 also has several other optimizations which may contribute to the 
superior performance in the situations you observed.


Regards,

Eoin Carroll

--
Eoin Carroll                                     ewc@orl.co.uk
Research Engineer
Olivetti & Oracle Research Lab
Cambridge, UK