diff options
| author | Jan Altenberg <jan@linutronix.de> | 2014-07-17 12:51:24 +0200 |
|---|---|---|
| committer | Jan Altenberg <jan@linutronix.de> | 2014-07-17 12:51:24 +0200 |
| commit | d7d6eb3789d1246b9e5a2c6c555b9b440c483c69 (patch) | |
| tree | 78547bf86c8389fab80e7a2a9c1bf99e40b7b46d /linux-basics | |
| parent | ab6e771fb39f74f9da875279593a48840c69bf14 (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.tex | 159 |
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} |
