[omniORB] omniORB performance

David Riddoch djr@uk.research.att.com
Wed, 16 Feb 2000 13:20:51 +0000 (GMT)


> > While we are on the subject of performance, I might as well mention this.
> > There seems to be a general believe that doing sequential string matching
> > to match an operation name with the upcall routine is inefficent and "high
> > performance" ORBs should do something like hashing or binary tree
> > search. We did some measurements and find that simple string match is
> > actually faster for small number of operations defined in an interface. The
> > picture reverses as the number of operations increases but the yield point
> > is at least tens of if not over 100 operations. It seems to me it is hard
> > to find in real use an interface with over 100 operations or else it is a
> > really fat interface that can do with some weight loss exercises.
> 
> Hmm... isn't it possible to delayer the search for correct operation?
> Instead of first seraching for the correct object and afterwards for the
> correct object operation, to directly search for the correct object
> operation in one step ??!! I guess it shouldn't be that hard to change a
> hashing algorithm for finding the object to find the operation directly
> ?? Is it ?

If you did this the hash table would have to contain an object pointer and
something to indicate what method it was (presumably a pointer).  This
doubles the hash table size.  Further the number of entries required would
be multiplied by the mean number of operations per object.  Lots more
memory overhead per object!

The point about operation names is that string compares are pretty darn
quick.  In most cases you can determine that two names a different just by
looking at the first character -- in most situations you are only going to
go through the whole operation name once.  You have to go through the
whole operation name at least once with hashing too (and at least twice if
you can't guarentee a perfect hash function), plus the hash lookup.

Except for really esoteric cases it turns out that it is not worth the
effort.  I suspect the esoteric cases are only exercised in benchmarks
(such as really long operation names that only differ right at the end).


David