[FE training-materials-updates] Boot time: add more generic slides

Michael Opdenacker michael.opdenacker at free-electrons.com
Mon Dec 30 08:09:35 CET 2013


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

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

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

commit ed6ca65f95cd81b1b8b324b54e90a99384c0ebc9
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date:   Mon Dec 30 08:05:47 2013 +0100

    Boot time: add more generic slides
    
    - Need to optimize userspace first.
      BusyBox and kernel should be later.
      Bootloader should be last
    
    - Add a slide about the need for build automation
    
    - Minor fixes
    
    Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>


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

ed6ca65f95cd81b1b8b324b54e90a99384c0ebc9
 labs/boottime-measuring/boottime-measuring.tex     |    6 +--
 slides/boottime-principles/boottime-principles.tex |   55 ++++++++++++++++----
 2 files changed, 48 insertions(+), 13 deletions(-)

diff --git a/labs/boottime-measuring/boottime-measuring.tex b/labs/boottime-measuring/boottime-measuring.tex
index 5f2ae73..3c5a148 100644
--- a/labs/boottime-measuring/boottime-measuring.tex
+++ b/labs/boottime-measuring/boottime-measuring.tex
@@ -230,8 +230,8 @@ components, and is used to add custom scripts and files to the system.}
 \item To copy the \code{1frame.avi} video to \code{/root} on the target
       file system. Do this by looking for the instruction that copies the 
       original video, and by using a similar command.
-\item To modify the contents of the \code{/root/go.sh} which starts the video 
-      player: 
+\item To modify the contents of the \code{/root/go.sh} script
+      which starts the video player: 
       \begin{itemize}
       \item To add an \code{echo -e "\nStarting video player"} command
 	    \footnote{We are using a newline (\code{\n}) at the
@@ -277,7 +277,7 @@ contains the right modifications and that there are no syntax errors.
 Update the \code{board/atmel/sama5d3ek_demo/post-build.sh} file until
 you get this file right.
 
-If you can't manage to get it righ, have a look at the
+If you can't manage to get it right, have a look at the
 \code{../solutions/post-build1.sh} file.
  
 \section{Re-flash the root filesystem}
diff --git a/slides/boottime-principles/boottime-principles.tex b/slides/boottime-principles/boottime-principles.tex
index 22ca3b5..7607cf2 100644
--- a/slides/boottime-principles/boottime-principles.tex
+++ b/slides/boottime-principles/boottime-principles.tex
@@ -46,7 +46,27 @@ critical application.
 \end{frame}
 
 \begin{frame}
-\frametitle{Main advice: worst things first!}
+\frametitle{What to optimize first}
+Start by optimizing the last steps of the boot process!
+\begin{itemize}
+\item Don't start by optimizing things that will reduce your ability to 
+      make measurements and implement other optimizations.
+\item Start by optimizing your applications and startup
+      scripts first.
+\item You can then simplify BusyBox, reducing the number of available
+      commands.
+\item The next thing to do is simplify and optimize the kernel. This
+      will make you lose debugging and development capabilities,
+      but this is fine as userspace has already been simplified.
+\item The last thing to do is implement bootloader optimizations,
+      when kernel optimizations are over and when the kernel command
+      line is frozen.
+\end{itemize}
+We will follow this order during the practical labs.
+\end{frame}
+
+\begin{frame}
+\frametitle{Worst things first!}
 {\em Premature optimization is the root of all evil.\\
 Donald Knuth}     
 \begin{itemize}
@@ -57,25 +77,40 @@ Donald Knuth}
 \end{itemize}
 \end{frame}
 
+\begin{frame}
+\frametitle{Build automation}
+\begin{itemize}
+\item Very important to automate the way the root filesystem is built,
+      if not done yet. That's always the first thing we do in boot time
+      reduction projects, and it's worth investing 1 or 2 days doing
+      this.
+\item Otherwise, you may lose existing optimizations or introduce new bugs
+      when making further optimizations. Without a build system,
+      you will waste a lot of time too.
+\item Can be done through build systems such as Buildroot or Yocto,
+      or using the original build automation of the project.
+\item Can also be done for kernel and bootloader optimizations, though
+      the need is less critical.
+\end{itemize}
+\end{frame}
 
 \begin{frame}
-\frametitle{Key ideas}
+\frametitle{Generic ideas}
 Some ideas to keep in mind while trying to reduce the boot time:
 \begin{itemize}
 \item The fastest code is code that is not executed
 \item A big part of booting is actually loading code and data from the
-        storage to RAM. Reading less means booting faster. I/O are
-        expensive !
+      storage to RAM. Reading less means booting faster. I/O are
+      expensive !
 \item The root filesystem may take longer to mount if it is bigger.
 \item So, even code that is not executed can make your boot time
-        longer.
+      longer.
 \item Also, try to benchmark different types of storage. It has
-        happened that booting from SD card was actually faster than
-        booting from NAND.
+      happened that booting from SD card was actually faster than
+      booting from NAND.
 \item It may be worth playing with gcc options like \code{-Os} to
-generate
-        smaller code but then, you will have to measure the performance.
-        It may or may not be worse.
+      generate smaller code but then, you will have to measure
+      the performance. It may or may not be worse.
 \end{itemize}
 \end{frame}
 



More information about the training-materials-updates mailing list