CORBA Performance
While real-time behavior and memory footprint are often important for real-time and embedded developers, ORB performance is still the most important criteria for selecting a CORBA product.
There is a prevailing mindset that inserting CORBA into a system consists of adding another “layer”. CORBA adds minimal overhead to the system, and the amount of overhead will vary between CORBA implementations, and it is often found that the “layer” added by CORBA replaces the proprietary messaging processing that would have been added anyway.
To see how fast a powerful, robust ORB can be, visit our ORBexpress Performance page.
Benchmarking ORB
Performance
When benchmarking ORBs, it is important to look at more than just the total time it takes for a message invocation to complete. One important measurement is the time that it takes to perform the transfer without the ORB, or with TCP/IP, to measure the time a transfer takes using a simple socket program. The difference between the socket time and the time with the ORB in the loop is the true measure of the CORBA overhead.
CORBA Benchmarks
Phantom Works, an advanced research and development unit of The Boeing Company, conducted a Real Time CORBA ORB trade study that includes a real-time ORB benchmark. The study was conducted for the DII COE Real-Time Integrated Product Team.
Lockheed Martin Advanced Technology Laboratories performed tests of many real-time and non-real-time ORBs for throughput and predictability characteristics. They have done a nice job of isolating the determinism (or lack thereof) of the operating system and protocol stack from the ORB processing. Their tests of ORBexpress® have been extremely favorable, showing that ORBexpress beats all other ORBs in performance.
All About
Overhead
CORBA adds two types of overhead, Space and Time. CORBA “Space” added to the system is the number of bytes on the wire added to create the data for CORBA’s standardized messaging format, General Inter-ORB Protocol (GIOP), or Internet Inter-ORB Protocol (IIOP) for TCP/IP systems. For TCP/IP systems, there is already a certain amount of overhead inherent in the protocol.
As an example:
-
- Ethernet adds 26 bytes per frame
- IP adds 12 bytes per packet
- TCP adds 24 bytes (+ options) per packet
Therefore, CORBA IIOP adds an additional 40 to 80 bytes per message to this overhead. Consequently, the overhead added to a system will, in great part, depend on how the developer defines their interfaces. With CORBA IIOP, sending fewer big messages is more efficient (in terms of added overhead) than sending many small ones.
The second type of overhead, “Time”, is the amount of time the ORB takes to process each message. This time is divided into two parts: a fixed component and a variable component. When comparing different CORBA implementations with each other in a competitive benchmark, both fixed and variable overhead must be studied.
Fixed Overhead:
Fixed overhead is the overhead occurring as a result of the ORB performing a single, zero parameter message invocation. Fixed overhead consists of the time the ORB takes to de-multiplex, perform an up-call, context switch, perform system calls, and similar tasks that must occur for every message transfer.
In order to achieve low fixed overhead, an ORB must quickly locate objects, invoke operations on the objects, and avoid unnecessary context switches and system calls.
Variable Overhead:
Variable overhead is basically marshalling and de-marshalling speed. It will vary based on the number and type of parameters for a given message.
In order to achieve low variable overhead, an ORB must marshall and de-marshall data quickly, use the transport efficiently, and avoid making multiple copies of the data.