summaryrefslogtreecommitdiff
path: root/linux-basics
diff options
context:
space:
mode:
authorJan Altenberg <jan@linutronix.de>2014-07-17 12:51:24 +0200
committerJan Altenberg <jan@linutronix.de>2014-07-17 12:51:24 +0200
commitd7d6eb3789d1246b9e5a2c6c555b9b440c483c69 (patch)
tree78547bf86c8389fab80e7a2a9c1bf99e40b7b46d /linux-basics
parentab6e771fb39f74f9da875279593a48840c69bf14 (diff)
Enhancements for boot process basics: SystemD example + Boot time analysis
Diffstat (limited to 'linux-basics')
-rw-r--r--linux-basics/boot-process-basics/pres_boot-process-basics_de.tex159
1 files changed, 146 insertions, 13 deletions
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}
@@ -25,6 +27,29 @@
\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}
\item System V Init (z.B. Debian)
@@ -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}