Minimum TAO

In addition to our work on ACE subsetting, we have also been reducing the footprint of TAO. We are pursuing two complementary strategies to reduce TAO's footprint:

  1. Implicit subsetting, e.g., by reducing dependencies in the TAO library so that programs need not link unused TAO components.

  2. Explicit subsetting, e.g., by supporting the minimumCORBA specification to TAO. The minimumCORBA specification removes the following features from the CORBA specification.

The implicit subsetting of TAO requires no explicit application programmer intervention. In contrast, to minimize the footprint of TAO explicitly, you must
  1. Configure ACE to support only those components that are required by TAO and

  2. Configure TAO to only support the components specified by the minimumCORBA specification.
The following two tables show the footprint reduction achievable via explicit subsetting. Note that the IDL Compiler column refers to the code required to collaborate between the IDL compiler and the ORB, and not to the code for the IDL compiler itself.


Note: All measurement are for ACE 5.0 and TAO 1.0 using egcs-2.91.60 on SunOS5.7

The make flags options used were:

debug=0 optimize=1 static_libs_only=1 DEFFLAGS=-DACE_USE_RCSID=0

These options translate into:

To build a TAO static library, if shared libraries are the default, use make static_libs_only=1 (make sure to do this for ACE, as well). If you're using recent versions of GNU GCC, you can use the -frepo option, which typically reduces the footprint by another 25 percent.


Configuration Component Total OS Utils Logging Threads Demux Connection Sockets IPC Svcconf Streams Memory Token Other
ACE (all components) Size, bytes 709.5 11.9 115.3 13.7 63.0 88.0 68.6 16.9 43.0 99.8 21.4 29.2 76.0 62.9
Percentage of
total size
100 1.7 16.2 1.9 8.9 12.4 9.7 2.4 6.0 14.1 3.0 4.1 10.7 8.9
ACE (TAO components) Size, bytes 570.7 11.9 115.3 13.7 63.0 88.0 68.6 16.9 43.0 99.8 21.4 29.2 0 0
Percentage of
total size
100 2.1 20.2 2.4 11.0 15.4 12.0 3.0 7.5 17.5 3.7 5.1 0 0
Reduction % 19.6 0 0 0 0 0 0 0 0 0 0 0 100 100


Configuration Component Total POA Pluggable Protocols Default Resources Interpretive Marshaling IDL Compiler ORB Core Dynamic Any
Complete TAO Size, Kbytes 1617.2 412.5 281.0 32.1 73.4 10.7 595.2 212.3
Percentage of
total size
100 25.5 17.4 2.0 4.5 0.7 36.8 13.1
Minimum TAO Size, Kbytes 1359.2 376.2 281.0 32.1 73.4 10.7 585.5 0.0
Percentage of
total size
100 27.7 20.7 2.4 5.4 0.8 43.1 0.0
Reduction % 16.0 8.8 0 0 0 0 1.6 100


ACE+TAO Subsetting Work in Progress

We've been tracking the footprint reduction of ACE+TAO periodically since April, 2000. All the statistics are available online. As the result of this prior work, we've identified various areas for improvement that we're now addressing. For example, the following are the remaining areas for ACE subsetting: We anticipate that these changes should reduce the default size of ACE by around 100-200 kbytes.

As the effort to reduce TAO's footprint continues, we are planning several modifications for TAO that should reduce the footprint for both the full CORBA and minimum CORBA configurations by around 300-400 Kbytes. The list below contains an estimate of the impact of each one of these changes, along with the estimated effort to implement them.

ComponentImpactEffort Description
TAO~95 Kb2 weeks Make RT CORBA 1.0 support optional, thereby allowing CORBA-compliant applications to link without incurring the overhead of TAO's RT CORBA features.
TAO~50 kB3 weeks Make the CORBA Messaging components optional. This change requires making RT-CORBA optional first.
ACE14 Kb4 weeks Implement a TAO-specific Reactor. ACE's reactor supports a number of features that TAO does not require. Thus, a TAO-specific implementation is an important way to reduce the footprint.
ACE20 Kb4 weeks Implement a TAO-specific Service Configurator. TAO uses the ACE Service Configurator to dynamically configure its strategies. In many embedded applications the set of strategies are selected at design-time, on those platforms it would be appropriate to disable all the features to dynamically load components into the ORB.
TAO10-15 Kb1-2 weeks Eliminate duplicate code due to instantiations of string -> pointer maps. TAO uses several such maps, they could be replaced by a generic version, wrapped with a fully inlined (i.e. zero footprint) adapter for type-safety.
TAO3-10 Kb1-2 weeks Make message buffering strategies optional. TAO supports policy extensions to control the outgoing oneway and AMI request buffers. Those policies are not used by all applications.
TAO10 Kb2 weeks Make support for multiple ORBs optional. TAO can support multiple ORBs in the same process, but most applications only require one.
TAO<20 Kb1 weeks Use lower footprint alternatives to the ACE_Strategy_Acceptor and ACE_Strategy_Connector classes. TAO is using the most flexible classes in ACE to implement acceptors and connector, but does not take advantage of this flexibility.
TAO5 Kb1 week Move the less common transport muxing and reply waiting strategies to an optional library.
ACE+TAO30 Kb8 weeks Decouple ACE (and then TAO) from the ACE_Thread_Manager component. This component is only used in the thread-per-connection model, if we could decouple it in ACE then TAO could be modified to only link this component when that concurrency model is enabled.
TAO>50 Kb6 weeks Move <<= and >>= operators to separate files. Currently TAO includes nearly 500 such operators, moving them to separate files (grouped by component?) would eliminate them from most applications.

In parallel with the activities described above we are pursuing other avenues of research to find sources of rarely used or unused code in ACE+TAO, and to modify the software to eliminate such code. These activities include the following:

Although we do not yet have sufficient insights to know how much footprint reduction these activities will afford, we anticipate these enhancements could reduce the default footprint of TAO by another 100-200 Kbytes.