[FE training-materials-updates] Boot time slides: add linker optimization details

Michael Opdenacker michael.opdenacker at free-electrons.com
Tue Dec 31 08:03:19 CET 2013


Repository : git://git.free-electrons.com/training-materials.git

On branch  : master
Link       : http://git.free-electrons.com/training-materials/commit/?id=70ec2bdbe5dbb68857884e5a3082d847b220a7f5

>---------------------------------------------------------------

commit 70ec2bdbe5dbb68857884e5a3082d847b220a7f5
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date:   Tue Dec 31 06:12:04 2013 +0100

    Boot time slides: add linker optimization details
    
    - Explain how to compute an upper limit to the
      savings from this costly technique.
    
    Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>


>---------------------------------------------------------------

70ec2bdbe5dbb68857884e5a3082d847b220a7f5
 .../boottime-application/boottime-application.tex  |   39 ++++++++++++++++----
 1 file changed, 31 insertions(+), 8 deletions(-)

diff --git a/slides/boottime-application/boottime-application.tex b/slides/boottime-application/boottime-application.tex
index 5f20a90..5e6f9ff 100644
--- a/slides/boottime-application/boottime-application.tex
+++ b/slides/boottime-application/boottime-application.tex
@@ -239,23 +239,46 @@ the same results as compiling everything with Buildroot.
 \end{frame}
 
 \begin{frame}
-\frametitle{Linker optimizations}
+\frametitle{Linker optimizations (1)}
 Group application code used at startup
 \begin{itemize}
         \item Find the functions called during startup, for example using
-                the \code{-finstrument-functions} gcc option.
+              the \code{-finstrument-functions} gcc option.
         \item Create a custom linker script to reorder those functions in
-                the call order. You can acheive that by putting each function
-                in their own section using the \code{-ffunction-sections} gcc
-                option.
+              the call order. You can achieve that by putting each function
+              in their own section using the \code{-ffunction-sections} gcc
+              option.
         \item Particularly useful for flash storage with rather big MTD
-                read blocks. As the whole read blocks are read, you end up
-                reading unnecessary data.
+              read blocks. As the whole read blocks are read, you end up
+              reading unnecessary data.
 \end{itemize}
-See \url{http://blogs.linux.ie/caolan/2007/04/24/controlling-symbol-ordering/}
+Details:
+{\scriptsize
+\url{http://blogs.linux.ie/caolan/2007/04/24/controlling-symbol-ordering/}}
 \end{frame}
 
 \begin{frame}
+\frametitle{Linker optimizations (2)}
+\begin{itemize}
+\item Here's a very simple way to find the maximum savings you can expect
+      from this technique:
+      \begin{itemize}
+      \item Start the application once and measure its startup time. 
+      \item Start the application and measure its startup time again.
+            Its code should still be in the Linux file cache,
+            and the code loading time will be zero.
+      \end{itemize}
+\item You now know how much time it took to load the application code
+      (and its libraries) the first time. Linker optimizations will
+      save less than this upper limit.
+\item You can then decide whether this could be worth the effort.
+      Such optimizations are costly, as the way you compile your
+      applications has be be modified. 
+\end{itemize}
+\end{frame}
+
+
+\begin{frame}
 \frametitle{Prelink}
 \begin{itemize}
 \item Prelinking reduces the time needed to start an executable



More information about the training-materials-updates mailing list