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