summaryrefslogtreecommitdiff
path: root/ACE/apps/soreduce/README
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/soreduce/README')
-rw-r--r--ACE/apps/soreduce/README163
1 files changed, 163 insertions, 0 deletions
diff --git a/ACE/apps/soreduce/README b/ACE/apps/soreduce/README
new file mode 100644
index 00000000000..5e0264bdab2
--- /dev/null
+++ b/ACE/apps/soreduce/README
@@ -0,0 +1,163 @@
+Shared Library Reduction Tool
+-----------------------------
+
+The motivation for this tool was the understanding that the ACE & TAO
+libraries were to be linked with the VxWorks kernel to allow multiple
+applications to be run simultaniously with a minimum of footprint
+consumed. Ordinarily a choice is made between static linking
+applications, where each application gets only the object modules
+needed, and shared object linkage, where multiple applications share
+access to full libraries. Frequently a shared library will contain
+code and data which is not used by any of the applications in a
+particular configuration. The Shared Library Reduction Tool builds
+libraries that include only the modules needed to support a specified
+set of applications.
+
+The analysis is performed very late in the application implementation,
+allowing the system implementors the freedom to use whatever TAO & ACE
+components are needed. Once an application is built and running, its
+shared object need may be evaluated. The evaluation is straight
+forward. Run the soreduce program, passing the path to all of the
+applications that will share the libraries. The soreduce program uses
+the following steps to generate its results.
+
+1. A list of undefined symbols and shared libraries is built by
+ invoking the ldd and nm commands on each application. For now,
+ soreduce assumes the GNU variant of these tools.
+
+2. For each shared library, soreduce tries to invoke nm on each of the
+ intermediate object files used to build the library. It is
+ important that target library directory has a current .shobj
+ subdirectory.
+
+3. The list of undefined symbols is traversed. For each entry in the list, the
+ modules loaded from step 2 are examined to look for a matching
+ symbol. When one is found, the target symbol, and any others
+ satisfied by the module are removed from the list, and any
+ undefined symbols in the module are added to the list. This
+ process is repeated until the entire list of undefined symbols is
+ traversed without change.
+
+4. MPC files are generated. Rather than invoking the linker directly, an mpc
+ file is generated that may be used to build the libs. With these
+ mpc files, the actual library will be named (orig)_subset.
+
+Analysis Artifacts
+------------------
+
+Development of the shared library reduction tool also provided a
+secondary benefit. It is able to output usage metrics for the various
+modules, which may be useful for directing further hand-crafted
+reduction efforts. Using the GNU nm with more verbose output, it is
+possible to determine the first function using a given undefined
+symbol. While it is not (yet) possible to automate the refactoring of
+code based on this analysis, this information can provide a road map
+for breaking a single module into two or a few that will result in
+fewer incidental dependancies overall. However this speculation has
+not been tested.
+
+Test results
+------------
+
+Running soreduce providing itself as the sole client. The soreduce
+application is built on top of ACE, using just a few of ACE's
+features. Here is the output:
+
+bash$ ./soreduce soreduce
+discovering libraries
+loading object modules
+Libs subject to analysis:
+ ACE
+Starting analysis
+pass 0, undef count = 69
+pass 1, undef count = 207
+pass 2, undef count = 278
+pass 3, undef count = 271
+pass 4, undef count = 245
+pass 5, undef count = 235
+Writing results
+Making directory /opt/wustl/ACE_wrappers/build/native/ace/usage_metrics
+ACE: 61 out of 210 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/ace/ACE_subset.mpc
+Done.
+
+The size of libACE.so before rebuilding:
+
+bash$ size libACE.so
+ text data bss dec hex filename
+2361958 498760 12516 2873234 2bd792 libACE.so
+
+and after:
+
+bash$ size libACE_subset.so
+ text data bss dec hex filename
+ 987167 207452 7580 1202199 125817 libACE_subset.so
+
+
+2873234 - 1202199 = 1671035 bytes eliminated, a 58.2% reduction
+
+Here is another example, using the Naming Service, and its simple test
+client. Note that the orbsvcs results are bogus, the libraries are
+already fairly well factored so that the additional subsetting by
+soreduce is not effective. Also, due to the layout of the orbsvcs
+library source directory, the tool may not generate valid mpc files.
+
+bash$ $ACE_ROOT/apps/soreduce/soreduce Naming_Service/Naming_Service tests/Simple_Naming/client
+discovering libraries
+loading object modules
+Libs subject to analysis:
+ TAO_CosNaming
+ TAO_Svc_Utils
+ TAO_IORTable
+ TAO_PortableServer
+ TAO
+ ACE
+Starting analysis
+pass 0, undef count = 339
+pass 1, undef count = 580
+pass 2, undef count = 438
+pass 3, undef count = 278
+pass 4, undef count = 244
+pass 5, undef count = 246
+pass 6, undef count = 242
+Writing results
+Making directory /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/usage_metrics
+TAO_CosNaming: 11 out of 256 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/TAO_CosNaming_subset.mpc
+Making directory /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/usage_metrics
+TAO_Svc_Utils: 8 out of 256 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/TAO/orbsvcs/orbsvcs/TAO_Svc_Utils_subset.mpc
+Making directory /opt/wustl/ACE_wrappers/build/native/TAO/tao/IORTable/usage_metrics
+TAO_IORTable: 4 out of 4 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/TAO/tao/IORTable/TAO_IORTable_subset.mpc
+Making directory /opt/wustl/ACE_wrappers/build/native/TAO/tao/PortableServer/usage_metrics
+TAO_PortableServer: 26 out of 29 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/TAO/tao/PortableServer/TAO_PortableServer_subset.mpc
+Making directory /opt/wustl/ACE_wrappers/build/native/TAO/tao/usage_metrics
+TAO: 160 out of 191 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/TAO/tao/TAO_subset.mpc
+Making directory /opt/wustl/ACE_wrappers/build/native/ace/usage_metrics
+ACE: 75 out of 210 modules required
+writing file /opt/wustl/ACE_wrappers/build/native/ace/ACE_subset.mpc
+Done.
+
+Size before & after:
+ text data bss dec hex filename
+2361958 498760 12516 2873234 2bd792 libACE.so
+3432206 704188 30992 4167386 3f96da libTAO.so
+1931145 326632 7528 2265305 2290d9 libTAO_PortableServer.so
+ 76561 12504 364 89429 15d55 libTAO_IORTable.so
+
+
+Sum: 9395354
+
+
+ text data bss dec hex filename
+1340017 275440 8140 1623597 18c62d libACE_subset.so
+3131226 643816 27984 3803026 3a0792 libTAO_subset.so
+1845515 308812 6896 2161223 20fa47 libTAO_PortableServer_subset.so
+ 76603 12508 364 89475 15d83 libTAO_IORTable_subset.so
+
+Sum: 7677321
+
+Savings: 1718033 or 18.3%