From d7d6eb3789d1246b9e5a2c6c555b9b440c483c69 Mon Sep 17 00:00:00 2001
From: Jan Altenberg <jan@linutronix.de>
Date: Thu, 17 Jul 2014 12:51:24 +0200
Subject: Enhancements for boot process basics: SystemD example + Boot time
 analysis

---
 .../pres_boot-process-basics_de.tex                | 159 +++++++++++++++++++--
 1 file changed, 146 insertions(+), 13 deletions(-)

(limited to 'linux-basics/boot-process-basics/pres_boot-process-basics_de.tex')

diff --git a/linux-basics/boot-process-basics/pres_boot-process-basics_de.tex b/linux-basics/boot-process-basics/pres_boot-process-basics_de.tex
index 6175d86..fbc7f34 100644
--- a/linux-basics/boot-process-basics/pres_boot-process-basics_de.tex
+++ b/linux-basics/boot-process-basics/pres_boot-process-basics_de.tex
@@ -3,6 +3,8 @@
 \title{Der Linux-Boot-Prozess}
 \maketitle
 
+\subsection{Bootprozess}
+
 \begin{frame}
 \frametitle{Komponenten des Bootprozesses}
 \begin{itemize}
@@ -24,6 +26,29 @@
 \end{enumerate}
 \end{frame}
 
+\begin{frame}
+\frametitle{Aufgaben des Bootloaders}
+\begin{itemize}
+\item Low-Level-Initialisierung:
+\item Clocks (CPU, PLLs, Peripherie...)
+\item Speicher (DRAM-Controller, NAND-Controller...)
+\item serielle Schnittstelle
+\item Parameterübergabe an den Linux Kernel
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Der Linux Kernel}
+\begin{itemize}
+\item Setzt Interrupts auf (z.B. Timer Interrupt)
+\item Lädt Treiber, initialisiert Hardware
+\item Mountet ''root filesystem'' nach /
+\item Startet ersten Prozeß
+\end{itemize}
+\end{frame}
+
+\subsection{INIT Systeme}
+
 \begin{frame}
 \frametitle{Das INIT System}
 \begin{itemize}
@@ -124,27 +149,135 @@ emits net-device-down
 \end{itemize}
 \end{frame}
 
-\begin{frame}
-\frametitle{Aufgaben des Bootloaders}
+\begin{frame}[fragile]
+\frametitle{Systemd: Integrieren eigener Services}
+/lib/systemd/system/training.service
+\begin{verbatim}
+[Unit]
+Description=Just a simple SystemD service
+
+[Service]
+Type=oneshot
+ExecStart=/home/devel/systemd_test.sh
+StandardOutput=syslog
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Systemd: Integrieren eigener Services}
+/home/devel/systemd\_test.sh
+\begin{verbatim}
+#!/bin/sh
+
+echo "Here I AM :)"
+sleep 5
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Systemd: Integrieren eigener Services}
+/home/devel/systemd\_test.sh
+\begin{verbatim}
+$ systemctl enable training.service
+ln -s '/lib/systemd/system/training.service'
+     '/etc/systemd/system/multi-user.target.wants/training.service'
+\end{verbatim}
+\end{frame}
+
+\subsection{Bootzeitanalyse}
+
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: Bootloader}
+Use the scope, Luke! ;)
+\begin{figure}[h]
+\centering
+\includegraphics[height=5cm]{images/at91_ipl_quiet_lpj_lzo.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: Kernel}
 \begin{itemize}
-\item Low-Level-Initialisierung:
-\item Clocks (CPU, PLLs, Peripherie...)
-\item Speicher (DRAM-Controller, NAND-Controller...)
-\item serielle Schnittstelle
-\item Parameterübergabe an den Linux Kernel
+\item Booten des Targets mit initcall\_debug und printk.time=1
+\item Auf dem Target: dmesg > bootlog.txt
+\item bootlog.txt auf den Host kopieren
+\item Auf dem Host: perl pfad\_zu\_kerneltree/scripts/bootgraph.pl < bootlog.txt > bootlog.svg
 \end{itemize}
 \end{frame}
 
-\begin{frame}
-\frametitle{Der Linux Kernel}
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: Kernel}
+\begin{figure}[h]
+\centering
+\includegraphics[height=5cm]{images/bootlog.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: SystemV}
+Analyse des Bootprozesses mit bootchart:
 \begin{itemize}
-\item Setzt Interrupts auf (z.B. Timer Interrupt)
-\item Lädt Treiber, initialisiert Hardware
-\item Mountet ''root filesystem'' nach /
-\item Startet ersten Prozeß
+\item Booten des Targets mit init=/sbin/bootchartd
+\item Nach dem Booten, stoppen von Bootchartd auf dem Target:
+\begin{verbatim}
+/sbin/bootchartd stop
+\end{verbatim}
+\item /var/log/bootchart.tgz auf den Host kopieren
+\item Auf dem Host SVG Grafik generieren:
+\begin{verbatim}
+java -jar bootchart.jar -f svg bootchart.tgz
+\end{verbatim}
 \end{itemize}
 \end{frame}
 
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: SystemV / bootchart}
+\begin{figure}[h]
+\centering
+\includegraphics[height=5cm]{images/bootchart.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: systemd}
+Analyse des Bootprozesses mit systemd:
+\begin{itemize}
+\item Booten des Targets per systemd
+\item Nach dem Booten systemd-analyze auf dem Target aufrufen
+\begin{verbatim}
+$ systemd-analyze blame
+1897ms networking.service
+1715ms vmware-tools.service
+1234ms nfs-common.service
+
+# oder
+
+$ system-analyze plot > boot.svg
+\end{verbatim}
+\item Ausgaben oder Plot auf den Host kopieren und analysieren
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: systemd-analyze plot}
+\begin{figure}[h]
+\centering
+\includegraphics[width=8cm]{images/debian_systemd_top.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Bootzeitanalyse: systemd-analyze plot}
+\begin{figure}[h]
+\centering
+\includegraphics[width=8cm]{images/debian_systemd_bottom.png}
+\end{figure}
+\end{frame}
+
 \begin{frame}
 \frametitle{Quellen}
 \begin{thebibliography}{1}
-- 
cgit v1.2.3

