diff options
Diffstat (limited to 'apps/soreduce/README')
-rw-r--r-- | apps/soreduce/README | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/apps/soreduce/README b/apps/soreduce/README deleted file mode 100644 index 5e0264bdab2..00000000000 --- a/apps/soreduce/README +++ /dev/null @@ -1,163 +0,0 @@ -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% |