summaryrefslogtreecommitdiff
path: root/realtime/rt-specialties/pres_rt-specialties_de.tex
diff options
context:
space:
mode:
Diffstat (limited to 'realtime/rt-specialties/pres_rt-specialties_de.tex')
-rw-r--r--realtime/rt-specialties/pres_rt-specialties_de.tex227
1 files changed, 217 insertions, 10 deletions
diff --git a/realtime/rt-specialties/pres_rt-specialties_de.tex b/realtime/rt-specialties/pres_rt-specialties_de.tex
index 07db328..e7e3d1d 100644
--- a/realtime/rt-specialties/pres_rt-specialties_de.tex
+++ b/realtime/rt-specialties/pres_rt-specialties_de.tex
@@ -1,24 +1,231 @@
-\documentclass{article}
+\documentclass{beamer}
+\usetheme{linutronix}
\usepackage{german}
\usepackage[utf8]{inputenc}
+\usepackage{pgf}
+\usepackage{graphicx}
+\usepackage{lxextras}
+
+\title{Block \lq Anwendung des Preempt RT Patches\rq}
+\institute{Linutronix GmbH}
\begin{document}
-\section*{Block \lq Was ist Linux?\rq}
+\maketitle
+
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Besorgen und Anwenden des Preempt RT Patches}
+\begin{lstlisting}
+# Vanilla Kernel
+wget http://www.kernel.org/pub/linux/kernel\
+/v2.6/linux-2.6.29.5.tar.bz2
+
+# Preempt RT Patch
+wget http://www.kernel.org/pub/linux/kernel\
+/projects/rt/patch-2.6.29.5-rt21.bz2
+
+# Extract the kernel tree
+tar xjvf linux-2.6.29.5.tar.bz2
+# Patch the kernel tree
+cd linux-2.6.29.5
+bzcat ../patch-2.6.29.5-rt21.bz2 | patch -p1
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Besorgen und Anwenden des Preempt RT Patches}
+\begin{lstlisting}
+mkdir linux-2.6.29.5-rt21
+cd linux-2.6.29.5-rt21
+ketchup -f --no-gpg 2.6.29.5-rt21
+\end{lstlisting}
+\end{frame}
-\subsection*{Lernziele}
+\begin{frame}[fragile]
+\frametitle{Konfigurieren und Übersetzen eines Preempt RT Kernels}
+\begin{overprint}
+\onslide<1>
+\begin{lstlisting}
+# external build directory
+mkdir ../build
+# base build on existing config
+cp /boot/config-x-x-x ../build/.config
+make O=../build oldconfig
+\end{lstlisting}
+\onslide<2>
+\begin{lstlisting}
+make O=../build menuconfig
+\end{lstlisting}
+\onslide<3>
+\begin{figure}[ht!]
+\centering
+\includegraphics[height=0.5\textwidth]{images/menu_rt_001.png}
+\end{figure}
+\onslide<4>
+\begin{figure}[ht!]
+\centering
+\includegraphics[height=0.5\textwidth]{images/menu_rt_002.png}
+\end{figure}
+\onslide<5>
+\begin{figure}[ht!]
+\centering
+\includegraphics[height=0.5\textwidth]{images/menu_rt_003.png}
+\end{figure}
+\onslide<6>
+\begin{figure}[ht!]
+\centering
+\includegraphics[height=0.5\textwidth]{images/menu_rt_004.png}
+\end{figure}
+\onslide<7>
+\begin{lstlisting}
+make O=../build
+make O=../build modules
+make O=../build install
+make O=../build modules_install
+\end{lstlisting}
+\end{overprint}
+\end{frame}
+
+\begin{frame}
+\frametitle{Testen eines Preempt RT Systems}
+RT Tests:
\begin{itemize}
-\item Lernziel 1
-\item Lernziel 2
-\item Lernziel 3
+\item cyclictest
+\item hwlatdetect
+\item pi\_stress
+\item signaltest
\end{itemize}
+\end{frame}
-\subsection*{Unterrichts-Ablauf}
+\begin{frame}
+\frametitle{Cyclictest}
+\begin{itemize}
+\item Ursprünglich entwickelt von Thomas Gleixner für Preempt RT Testing
+\item High Resolution Timer Testsoftware
+\item Setzt beliebige Anzahl von Realtime Tasks mit unterschiedlicher Priorität
+und unterschiedlichen Intervallen auf
+\item Viele Debuggingmöglichkeiten
+\item Sehr Aussagekräftig, um echtzeitverhalten auf einer bestimmten Plattform
+zu beurteilen.
+\end{itemize}
+\end{frame}
-Hinweise zur Präsentation, Zeitplanung, etc.
+\begin{frame}
+\frametitle{Lastszenarien}
+Geeignete Lastszenarien, um Worst-Case Situationen nachstellen /provozieren zu
+können:
+\begin{itemize}
+\item CPU Last: ''hackbench'', ursprünglich als Scheduler Benchmark geschrieben.
+\item Interrupt Last: Floodping (''ping -F'')
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Pitfall!}
+\begin{lstlisting}
+cat /proc/sys/kernel/sched_rt_runtime_us
+\end{lstlisting}
+\begin{figure}[l!]
+\centering
+\includegraphics[height=0.4\textwidth]{images/pitfall.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}
+\frametitle{Echtzeitapplikationen mit Preempt RT}
+\begin{columns}
+\column[r]{7cm}
+\begin{figure}[l!]
+\centering
+\includegraphics[height=0.4\textwidth]{images/thumb.png}
+\end{figure}
+\column[l]{8cm}
+\huge
+POSIX!
+\end{columns}
+\end{frame}
+
+\begin{frame}
+\frametitle{Schedulingstrategien}
+\begin{itemize}
+\item SCHED\_FIFO: Static priority
+\item SCHED\_RR: Round Robin mit Prioritäten
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Aufbau einer RT Applikation}
+\begin{overprint}
+\onslide<1>
+Schedulingstrategie / Priorität
+\begin{lstlisting}
+struct sched_param param;
+
+param.sched_priority = 80;
+if(sched_setscheduler(0, SCHED_FIFO, &param)
+ == -1) {
+ perror("sched_setscheduler failed");
+ exit(-1);
+}
+\end{lstlisting}
+\onslide<2>
+Lock memory:
+\begin{lstlisting}
+if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1) {
+ perror("mlockall failed");
+ exit(-2);
+}
+\end{lstlisting}
+\onslide<3>
+''Stack prefaulting''
+\begin{lstlisting}
+void stack_prefault(void) {
+ unsigned char dummy[MAX_SAFE_STACK];
+ memset(&dummy, 0, MAX_SAFE_STACK);
+ return;
+}
+\end{lstlisting}
+\end{overprint}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Tracing / Latency hunting}
+\begin{itemize}
+\item FTrace
+\item Cyclictest unterstützt Traces mittels FTrace
+\item Unterschiedliche Tracer (müssen im Kernel aktiviert sein)
+\item Kommunikation mit FTrace über Debugfs
+\end{itemize}
+\end{frame}
-\subsection*{Übungen bei vorhandener Hardware}
+\begin{frame}[fragile]
+\frametitle{Cyclictest + FTrace}
+\begin{lstlisting}[basicstyle=\ttfamily\fontsize{8}{10}\selectfont]
+# mount DebugFS
+mkdir -p /mnt/debugfs
+mount -t debugs debugfs /mnt/debugfs
-Hinweise zu Übungen, Zeitlimit dazu.
+# list available tracers
+zi:~# cat /mnt/debugfs/tracing/available_tracers
+wakeup_rt wakeup preemptoff function sched_switch nop
+\end{lstlisting}
+\end{frame}
+\begin{frame}[fragile]
+\frametitle{Cyclictest + FTrace}
+\begin{lstlisting}[basicstyle=\ttfamily\fontsize{8}{10}\selectfont]
+cyclictest -p80 -n -f -b 100
+zi:~# less /mnt/debugfs/tracing/trace
+# tracer: function
+#
+# TASK-PID CPU# TIMESTAMP FUNCTION
+# | | | | |
+IRQ-129-772 [000] 4154503386.851178: __rt_mutex_adjust_prio
+IRQ-129-772 [000] 4154503386.851186: __rt_mutex_adjust_prio
+IRQ-129-772 [000] 4154503386.851189: task_setprio<-__rt_mut
+[...]
+\end{lstlisting}
+\end{frame}
\end{document}