\section{Memory Footprints}
\label{sec:footprint}

Auf embedded Systemen sind Speicherressourcen knapper bemessen als auf anderen Computersystemen. Deshalb ist ein kleiner Footprint ein wichtiges Optimierungsma\ss\ f\"ur die in diesem Bereich eingesetzte Software.

Der Footprint von ACE/TAO \cite{taohp} Anwendungen im Arbeitsspeicher liegt, bei den im Rahmen der Diplomarbeit entwickelten Applikationen, deutlich unter einem Megabyte (MB). Dies Bedarf keiner weiteren Optimierung.

Die M\"achtigkeit des ACE/TAO Frameworks macht sich bei dem, von den ACE/TAO Libraries, ben\"otigten Festplattenplatz, circa 200 MB, bemerkbar. Siehe hierzu \cite{footprint}. Die ACE/TAO Libraries werden dynamisch von den ACE/TAO Applikationen zur Laufzeit geladen.

Vor allem bei ACE/TAO Applikationen welche nur wenige Dienste und Funktionen verwenden, kann eine deutliche Optimierung des ben\"otigten Festplattenplatzes erfolgen, in dem nur die von der Applikation tats\"achlich ben\"otigten Libraries auf das Zielsystem \"ubertragen werden. Die Libraries, welche f\"ur die im Rahmen dieser Diplomarbeit durchgef\"uhrten Versuche ben\"otigt wurden, belegen circa 30 MB Speicherplatz.

\subsection{ACE/TAO statisch compilieren}

Es wird untersucht, ob der Footprint auf dem Massenspeicher reduziert werden kann, in dem die Applikationen f\"ur das Zielsystem statisch compiliert werden. Der ben\"otigte Inhalt aus den shared Libraries wird direkt in die Applikation verlagert.

Um das ACE/TAO Framework statisch zu bauen, sind folgende Schritte durchzuf\"uhren:

\begin{lstlisting}
cd $ACE_ROOT
./MPC/clone_build_tree.pl static
export ACE_ROOT=$ACE_ROOT/build/static
export TAO_ROOT=$ACE_ROOT/TAO
cd $ACE_ROOT
make static_libs=1 shared_libs_only=0 static_libs_only=1
cd $TAO_ROOT
make static_libs=1 shared_libs_only=0 static_libs_only=1
\end{lstlisting}

Ein statisch gebautes ACE/TAO ben\"otigt ca. 20 GB Festplattenplatz.

Eigene RTCORBA Applikationen, statisch kompiliert, ben\"otigen mindestens 20 MB. Je nach Abh\"angigkeiten (zum Beispiel durch die Nutzung von CORBA Services) auch deutlich mehr.

Ob eine statisch kompilierte Anwendung weniger Plattenplatz ben\"otigt mu\ss\ im Einzelfall untersucht werden.

Eine statisch gebaute TAO Applikation ben\"otigt geringf\"ugig mehr Arbeitsspeicher, als die dynamisch Gebaute. Bei den hier vorgestellten Versuchen, liegt der Arbeitsspeicherbedarf ebenfalls unter einem MB.

\subsection{Erstellen von ACE/TAO Library subsets}
Das mit ACE/TAO mitgelieferte Programm soreduce (\emph{\$ACE\_ROOT/apps/soreduce/soreduce}) untersucht die Abh\"angigkeiten zwischen eigenen ACE/TAO Applikationen und den ben\"otigten Libraries. Als Ausgabe liefert soreduce MakeProjectCreator Files, mit welchen auf die eigenen Applikationen zugeschnittene ACE/TAO Libraries generiert werden k\"onnen.

Bei der Anwendung von soreduce, stellte sich jedoch heraus, dass das Programm nicht gut gewartet ist \cite{soreduce}.

\subsubsection[Installation]{Installation von soreduce unter Linux}

soreduce wird in der Standardkonfiguration nicht mit ACE/TAO zusammen \"ubersetzt. Unter Linux sind folgende Schritte durchzuf\"uhren:

\begin{lstlisting}
cd $ACE_ROOT/apps/soreduce
mpc.pl -type gnuace
make -j 2
\end{lstlisting}

\subsubsection{Anwendungsbeispiel}

Es wird erkl\"art, wie f\"ur die fiktiven Programme meinProg1 \dots\ meinProgN angepa\ss te ACE/TAO Libraries generiert werden.

Um nicht die aktuelle ACE/TAO Version zu ver\"andern, empfiehlt es sich den ACE/TAO Baum zu klonen:

\begin{lstlisting}
cd $ACE_ROOT
./MPC/clone_build_tree.pl mySubset
\end{lstlisting}

Der so geklonte ACE/TAO Baum befindet sich unter \emph{ACE\_ ROOT/build/mySubset} und wird zum neuen \emph{ACE\_ ROOT}:

\begin{lstlisting}
export ACE_ROOT=$ACE_ROOT/build/mySubset
export TAO_ROOT=$ACE_ROOT/TAO
\end{lstlisting}

Nun k\"onnen die MakeProjectCreator Files, welche die Informationen enthalten werden, aus welchen ACE/TAO Quellcodeteilen die Libraries gebaut werden, generiert werden:

\begin{lstlisting}
cd /home/meinName/meinProgVerzeichnis
$ACE_ROOT/apps/soreduce/soreduce meinProg1 ... meinProgN
\end{lstlisting}

Folgende Befehle bauen dann die Libraries, nach den von soreduce definierten Regeln:
\begin{lstlisting}
cd $ACE_ROOT
mwc.pl -recurse
make
\end{lstlisting}

Durch das Ver\"andern der Umgebungsvariablen wird das eigene Projekt beim n\"achsten neu \"Ubersetzen gegen die subset Libraries gelinkt und es gen\"ugt nur diese auf das Zielsystem zu kopieren:

\begin{lstlisting}
export TAO_ROOT=$ACE_ROOT/TAO
export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH
\end{lstlisting}

\subsubsection{Fazit}

Es l\"asst sich momentan keine Aussage \"uber die footprint Reduzierung durch soreduce machen, da trotz Kontakt mit den Entwicklern und damit verbundenen Bugfixes, soreduce, angewandt auf meine Applikationen, keine fehlerfreien MPC-Files erstellt.

Im ACE CHANGELOG \cite{acelog} sind die durch die Diplomarbeit iniziierten \"Anderungen an soreduce festgehalten:

\begin{shadowenv}
Fri Oct 13 10:25:12 UTC 2006  Johnny Willemsen - jwillemsen@remedy.nl
\begin{itemize}
\item apps/soreduce/Library.cpp: aceversion is not a valid base project. \\ Thanks to Manuel Traut - manut.de@googlemail.com for reporting this.
\end{itemize}
Tue Oct 17 12:35:12 UTC 2006  Johnny Willemsen - jwillemsen@remedy.nl
\begin{itemize}
\item apps/soreduce/Library.cpp: taoversion is not a valid base project. \\ Thanks to Manuel Traut - manut.de@googlemail.com for reporting this.
\end{itemize}
\end{shadowenv}
