New Transport for omniORB

Sai-Lai Lo S.Lo@orl.co.uk
Tue, 17 Feb 1998 17:45:45 GMT


Hi Luis,

It is good to know we share a common interest with another research group.

Let me first answer your query:

> We have knowledge of the key abstract classes that we need to work
> on: ropeFactoryTypes, ropeFactory, incomingRopeFactory,
> outgoingRopeFactory, Strand, Rope, and Endpoint. But, any further
> indications will be appreciated (modifications to the GIOP client and
> server, etc.)

You are on the right track. I left a note in ropeFactory.h which outlines
what has to be done. I guess you are aware of that.

- To get the ORB to use a new transport to create *outgoing* connections, an
  instance of its outgoingRopeFactory must be inserted into the
  globalOutgoingRopeFactories list. For tcp/ip this is done in
   corbaOrb.cc: (CORBA::ORB_init()).

- To get the ORB to use a new transport for *incoming* connections, an
  instance of its incomingRopeFactory must be inserted into the factory
  list of the BOAobjectManager. For tcp/ip this is done in
     corbaBoa.cc: ctor of BOAobjectManager.

- There is no need to modify giop client and server or NetBufferedStream.

- reliableStreamStrand is a generic class that implements most of the
  Strand interface over a reliable stream transport. The real network
  transport only needs to provide the actual functions to send and receive
  data. If your transport is also a reliable stream, you can reuse this
  class in the same way tcpSocketStrand does.

- If your transport is unreliable, e.g. ATM AAL5, you will have to provide
  the parallel of reliableStreamStrand to preserve the request-response
  semantics. We have done this but the code has not been integrated into
  the general release. (see below)

- When the ORB receives an IOR that contains multiple communication
  profiles, the current implementation simply iterates through them until
  it finds one that is supported by one of the outgoingRopeFactory in the
  globalOutgoingRopeFactories list. The code that does this is
    ropeFactory.cc: (ropeFactory::iopProfilesToRope()).
  We envisage there will be some negotiation with the other end to pick the
  best transport.

If you have more questions about the implementation, you are welcomed to
send us a message.

We have done some work to drive omniORB2 on top of ATM, SCI and shared
memory. In particular, we have omniORB2 communicates directly over ATM AAL5
and have a light weight implementation to preserve the exactly-once
request-response semantics on top of AAL5's unreliable packets.

Here is a sample of the latency we are getting:

                                micro seconds
     --------------------------------------------
      omniORB2/TCP over ATM      470
      omniORB2/AAL5              380
      omniORB2/Shared memory     270
      omniORB2/SCI event sync.   214
      omniORB2/SCI spinning      156

The figures measured the round trip time of echoing a null string. The tests
were done on pentium pro 200 machines running linux with ATM 155 and Dolphin
PCI SCI kit. We'll discuss our implementation and results in a paper that
is currently being prepared.

> We took the first step by adapting omnithread to our low-latency thread
> library (SCALE Threads) obtaining a 40 microsecond improvement in the two
> way latency. 

This is impressive! On which platform is this measured?

Regards,

Sai-Lai

-- 
Dr. Sai-Lai Lo                          |       Research Scientist
                                        |
E-mail:         S.Lo@orl.co.uk          |       Olivetti & Oracle Research Lab
                                        |       24a Trumpington Street
Tel:            +44 223 343000          |       Cambridge CB2 1QA
Fax:            +44 223 313542          |       ENGLAND