This report is provided "as is", without warranty of any kind, either
expressed or implied. This includes, but is not limited to, the implied
warranties of merchantability and fitness for a particular purpose. In no
event shall any author or copyright holder be liable for damages arising out
of the use or the inability to use the report.
|
The Linux GCC platform was configured as follows:
The TAO platform was configured as follows:
The results for TAO 1.2.5 and 1.2.6 come from debug benchmark runs. As such, they may be distorted by incorrect code, configuration, background load, etc. Known issues for these results are:
Individual aspects of broker performance are measured by dedicated suites of tests. All suites employ the same measurement framework. To form a specific test, the framework is augmented by an action to be measured on the client side and servants to be instantiated on the server side.
The concept of measurement framework is employed in both the C++ and Java environments. The implementations in both languages are functionally equivalent, except for short explicit garbage collection loop in Java client, which is aimed at ensuring similar starting conditions for each measurement.
The measurement framework carries out a measurement in five stages.
Each measurement is repeated 5 times.
On Solaris, the gethrtime () system call is used to obtain
the time information. The resolution of thus obtained time is 1 ns.
On Windows, the QueryPerformanceCounter () system call is
used to obtain the time information. The resolution of thus obtained time
is the same as the frequency of the processor clock.
The memory usage information on Solaris is collected from the
/proc/self/psinfo file, where the resident and swapped
application memory sizes are stored, from the kstat structures, where the
kernel memory size is stored, from the sysconf () system
call, which reports the total physical memory size, and from the
swapctl () system call, which reports the total swapped
memory size.
The network usage information on Solaris is collected from the kstat structures, where the network traffic information is stored. The network usage information does not include the traffic over the loopback interface in bytes, which is not reported by the operating system.
The processor usage information on Solaris is collected by hooking
the thr_create () and pthread_create ()
system calls, where the application thread count is kept, and from the kstat
structures, where the total processor usage is stored.
On Windows, most information is collected from performance data accessible
under HKEY_PERFORMANCE_DATA key in the registry. The data is
not actually stored in the registry; the registry functions cause the system
to collect the data from its source. The data come in form of performance
objects which represent various resources found in a system. Each object has a
name and a set of named counters associated with it. The counters associated
with an object can come in several instances for entities where it makes sense,
eg. processes, network interfaces, etc.
The memory usage information is collected from Working Set
and Page File Bytes counters of the corresponding instance of
Process object, where the resident and swapped application
memory sizes are stored, from Pool Paged Bytes and Pool
Nonpaged Bytes counters of the Memory object, where the
kernel memory sizes are stored and from the GlobalMemoryStatus ()
system call, which reports the total physical and total swapped memory sizes.
The network usage information is collected from Bytes Sent/sec,
Bytes Received/sec, Packets Sent/sec and Packets
Received/sec counters of all instances of Network Interface
object.
The processor usage information is collected from Thread Count
counter of the corresponding instance of Process object, where
the application thread count is kept, and from % User Time,
% Processor Time and % Privileged Time
counters of all instances of Processor object, where the total
processor usage is stored.
In Java, the information is collected using native code methods contained in platform dependent dynamic shared libraries, which utilize the above mentioned methods. The only exception is the application thread count, which is determined using pure Java methods and represents the number of active threads in the root thread group.
Individual suites of tests are described in dedicated chapters. All chapters begin with a description of the suite accompanied by code fragments that characterize the suite. Except where not applicable, the interface definitions in IDL are present together with the code of the action to be measured on the client side and the code of the servants to be instantiated on the server side.
The results of the tests follow the description in chapters dedicated to individual brokers and platforms. When more than one broker has been tested on a platform, a platform summary is also provided. The results are plotted in graphs accompanied by a description of what the graph shows.
The time distribution graphs are calculated from data collected in the solo measurement stage. On the X axis are intervals of the time being measured, on the Y axis is the percentage of the measured times that fell within the given interval. The bars marked as other denote measured times that were either smaller or bigger than any of the intervals considered.
The time pattern graphs are calculated from data collected in the solo measurement stage. On the X axis is the sequential number of the measurement, on the Y axis is the measured time.
The box and whiskers graphs are calculated from data collected in the solo measurement stage. The box spans from low to high quartile of the collected data and thus indicates the range within which half of the measured values fall. The whiskers span from minimum to maximum of the collected data and thus indicate the range within which all of the measured values fall. The median of the collected data is marked within the box.
The resource usage graphs are calculated from data collected in the client and server resource usage measurement stages. The solid line marks the average of the collected data. When present, a pair of dotted lines marks the minimum and maximum of the collected data.