diff options
| author | Manuel Traut <manut@linutronix.de> | 2011-01-27 00:52:19 +0100 |
|---|---|---|
| committer | Manuel Traut <manut@linutronix.de> | 2011-01-27 00:52:19 +0100 |
| commit | 7e5883bbd6e699d1fcee0814c5a172d6348bd63c (patch) | |
| tree | 3df8a00a9727ff0e2c020d2e07304fdb00c83e3d /realtime | |
| parent | 6fb0950420424ff27f6aa89429a763409b088ed6 (diff) | |
convert the rest to the new buildsys format
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'realtime')
| -rw-r--r-- | realtime/Makefile | 2 | ||||
| -rw-r--r-- | realtime/rt-app-basics/Makefile | 4 | ||||
| -rw-r--r-- | realtime/rt-app-basics/pres_rt-app-basics_en.tex | 73 | ||||
| -rw-r--r-- | realtime/rt-basics/Makefile | 4 | ||||
| -rw-r--r-- | realtime/rt-basics/handout_rt-basics_de.tex | 32 | ||||
| -rw-r--r-- | realtime/rt-basics/pres_rt-basics_de.tex | 19 | ||||
| -rw-r--r-- | realtime/rt-specialties/Makefile | 4 | ||||
| -rw-r--r-- | realtime/rt-specialties/handout_rt-specialties_de.tex | 45 | ||||
| -rw-r--r-- | realtime/rt-specialties/pres_rt-specialties_de.tex | 24 | ||||
| -rw-r--r-- | realtime/section.tex | 1 |
10 files changed, 67 insertions, 141 deletions
diff --git a/realtime/Makefile b/realtime/Makefile index c0c47ad..0a202ea 100644 --- a/realtime/Makefile +++ b/realtime/Makefile @@ -1,4 +1,4 @@ -SUBDIRS = `ls -1 | grep -v *.tex | grep -v Makefile` +SUBDIRS = `ls -1 | grep -v *.tex | grep -v Makefile | grep -v TODO` all clean:: for dir in $(SUBDIRS) ; do \ diff --git a/realtime/rt-app-basics/Makefile b/realtime/rt-app-basics/Makefile index 4663d52..d641258 100644 --- a/realtime/rt-app-basics/Makefile +++ b/realtime/rt-app-basics/Makefile @@ -1,7 +1,7 @@ all: for pdf in `ls -1 *.tex` ; do \ - pdflatex $$pdf; \ - pdflatex $$pdf; \ + TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \ + TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \ done clean: diff --git a/realtime/rt-app-basics/pres_rt-app-basics_en.tex b/realtime/rt-app-basics/pres_rt-app-basics_en.tex index 6179851..90b2ce3 100644 --- a/realtime/rt-app-basics/pres_rt-app-basics_en.tex +++ b/realtime/rt-app-basics/pres_rt-app-basics_en.tex @@ -1,70 +1,17 @@ -\documentclass[11pt]{beamer} - -%\usepackage{ngerman} -\usepackage{times} -\usepackage{graphicx} -\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps} -\usepackage{amsmath,amssymb} -\usepackage[latin1]{inputenc} -\usepackage{listings,color} -\definecolor{lbcolor}{RGB}{255,210,150} -\lstset{ - language=C, - numbers=left, - stepnumber=1, - numbersep=5pt, - numberstyle=\tiny, - breaklines=true, - breakautoindent=true, - postbreak=\space, - tabsize=2, - basicstyle=\ttfamily\footnotesize, - showspaces=false, - showstringspaces=false, - extendedchars=true, - backgroundcolor=\color{lbcolor}, - keywordstyle=\bf , - commentstyle=\color{green}, - stringstyle=\color{red} -} - -\mode<presentation> -{ - \usetheme{linutronix} -} - % on the following slides, include icon in the left sidebar \def\lximg{/usr/share/lx/icons/fueller.png} -\title{Realtime application development using Linux-RT\_PREEMPT} -\institute{Linutronix GmbH} - -\begin{document} +\input{configpres} -\frame{ \titlepage } +\title{Realtime application development using Linux-RT\_PREEMPT} +\maketitle % stop displaying 'fueller.png' on the following slides \def\lximg{none} -%\AtBeginSection[] -%{ -% \begin{frame}<beamer> -% \tableofcontents[currentsection,currentsubsection] -% \end{frame} -%} - -\AtBeginSubsection[] -{ - \begin{frame}<beamer> - \tableofcontents[currentsection,currentsubsection] - \end{frame} -} - -\begin{frame} - \tableofcontents -\end{frame} +\subsection{RT\_PREEMPT Realtime development} -\section{Basics} +\subsubsection{Basics} \begin{frame}[fragile] \frametitle{Check sched\_rt\_runtime\_us!!} \begin{verbatim} @@ -125,7 +72,7 @@ for (i = 0; i < SAVE_STACK_SIZE; i += sysconf(_SC_PAGESIZE)) \end{lstlisting} \end{frame} -\section{Clocks and Timers} +\subsubsection{Clocks and Timers} \begin{frame} \frametitle{Clocks: Basic} @@ -207,7 +154,7 @@ int main(void) \end{lstlisting} \end{frame} -\section{Locking} +\subsubsection{Locking} \begin{frame} \frametitle{Locking} \begin{itemize} @@ -237,7 +184,7 @@ pthread_mutex_destroy(&master_lock); \end{lstlisting} \end{frame} -\section{Signalling} +\subsubsection{Signalling} \begin{frame} \frametitle{Signalling mechanisms} \begin{itemize} @@ -294,7 +241,7 @@ pthread_mutex_unlock(&mutex); \end{lstlisting} \end{frame} -\section*{sources} +\subsubsection{sources} \begin{frame} \frametitle{sources} \small @@ -305,4 +252,4 @@ pthread_mutex_unlock(&mutex); \end{thebibliography} \end{frame} -\end{document} +\input{tailpres} diff --git a/realtime/rt-basics/Makefile b/realtime/rt-basics/Makefile index 4663d52..d641258 100644 --- a/realtime/rt-basics/Makefile +++ b/realtime/rt-basics/Makefile @@ -1,7 +1,7 @@ all: for pdf in `ls -1 *.tex` ; do \ - pdflatex $$pdf; \ - pdflatex $$pdf; \ + TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \ + TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \ done clean: diff --git a/realtime/rt-basics/handout_rt-basics_de.tex b/realtime/rt-basics/handout_rt-basics_de.tex index 8d98ccc..dd775b6 100644 --- a/realtime/rt-basics/handout_rt-basics_de.tex +++ b/realtime/rt-basics/handout_rt-basics_de.tex @@ -1,16 +1,10 @@ -\documentclass{lxarticle} -\usepackage{german} -\usepackage[utf8]{inputenc} -\usepackage{lxheaders} -\usepackage{lxextras} +\input{confighandout} -\begin{document} +\subsection{Realtime Linux} -\section*{Realtime Linux} +\subsubsection{Grundlagen} -\subsection*{Grundlagen} - -\subsubsection*{Was ist Echtzeit?} +\paragraph{Was ist Echtzeit?} Vor der Betrachtung verschiedener Ansätze, Linux echtzeitfähig zu machen, ist es notwendig, einige grundlegende Begrifflichkeiten zur erläutern: \begin{itemize} @@ -24,14 +18,14 @@ Auftreten eines Events und der Reaktion auf dieses Event. \item Jitter: Mit Jitter bezeichnet man die Varianz der Latenzzeit. \end{itemize} -\subsubsection*{Anwendungsbereiche} +\paragraph{Anwendungsbereiche} Die wohl gängigsten Anwendungsbereiche für Echtzeitsysteme sind die Steuerungs- und Automatisierungstechnik, Multimediasysteme und die Luft- und Raumfahrttechnik. Ein weiteres interessantes Einsatzgebiet stellt die Finanzdienstleistung dar. Hier geht es insbesondere um die zeitgenaue, zuverlässige Abwicklung von Finanztransaktionen über hochverteilte Systeme. -\subsubsection*{Anforderungen an ein Echtzeitsystem} +\paragraph{Anforderungen an ein Echtzeitsystem} Ein Echtzeitsystem muß in der Lage sein, in einem garantierten Zeitrahmen auf ein Ereignis zu reagieren. Es muß also möglich sein, in möglichst kurzer Zeit von einer niederprioren Task auf eine hochpriore Task umzuschalten, falls diese @@ -53,8 +47,8 @@ Prioritätsgrenze festgelegt. Jede Task, die die Resource belegt, wird auf die Prioritätsgrenze der Resource angehoben. \end{itemize} -\subsection*{Realtime Linux Varianten} -\subsubsection*{Historisches zu Echtzeitlinux} +\subsubsection{Realtime Linux Varianten} +\paragraph{Historisches zu Echtzeitlinux} Im Gegensatz zu traditionellen Echtzeitsystem wurde Linux ursprünglich nicht als solches designt. Als General Purpose Operating System wurde Linux auf Fairness und Durchsatz optimiert. Linux echtzeitfähig zu machen, bedeutet also, ein @@ -73,7 +67,7 @@ und ist die Variante, die von den Linux Entwicklern zur Integration in den Hauptzweig von Linux abgenickt wurde. \end{itemize} -\subsubsection*{RTAI} +\paragraph{RTAI} Das Realtime Application Interface (RTAI) ist eine Entwicklung der Technischen Universität Mailand und entstand unter der Schirmherrschaft von Professor Paolo Mantegazza. Oberstes Designziel von RTAI ist und war es, die kleinstmöglichen @@ -90,7 +84,7 @@ x86\_64 und diverse ARM Plattformen). RTAI ist ein typischer Vertreter des Dual Kernel Ansatzes. Abbildung \ref{img:rtai} zeigt die Funktionsweise von RTAI. -\subsubsection*{Xenomai} +\paragraph{Xenomai} Das Xenomai Projekt wurde im Jahre 2001 gegründet. Im Gegensatz zu RTAI erlaubt Xenomai auch Echtzeit im Userpace (RTAI erlaubt dies nur sehr eingeschränkt). Die Besonderheit von Xenomai sind die sogenannten Skins, die es vereinfachen sollen, @@ -124,7 +118,7 @@ Komponenten. Abbildung \ref{img:ipipe} zeigt die Funktionsweise von IPIPE. \label{img:ipipe} \end{figure} -\subsubsection*{Preempt RT} +\paragraph{Preempt RT} Der Realtime Preemption Patch entstand ursprünglich aus Arbeiten von Ingo Molnar und Thomas Gleixner. Beide sind bis zum heutigen Zeitpunkt die treibenden Kräfte bei der Entwicklung von Preempt RT. @@ -159,7 +153,7 @@ anderer Projekte haben die Vorzüge von Preempt RT bereits erkannt. Die Roadmap für Xenomai 3 sieht Preempt RT Support vor. Dies würde den Einsatz von Xenomai Skins auf Preempt RT Kerneln ermgöglichen. -\subsection*{Kontrollfragen} +\subsubsection{Kontrollfragen} \begin{enumerate} \item Was sind die wichtigsten Anforderungen an ein Echtzeitsystem? @@ -170,4 +164,4 @@ beschriebenen Ansätze verfolgen Sie? spezielle API benötigt? \end{enumerate} -\end{document} +\input{tailhandout} diff --git a/realtime/rt-basics/pres_rt-basics_de.tex b/realtime/rt-basics/pres_rt-basics_de.tex index 128b115..66a78eb 100644 --- a/realtime/rt-basics/pres_rt-basics_de.tex +++ b/realtime/rt-basics/pres_rt-basics_de.tex @@ -1,20 +1,10 @@ -\documentclass{beamer} -\usetheme{linutronix} -\usepackage{german} -\usepackage[utf8]{inputenc} -\usepackage{pgf} -\usepackage{graphicx} -\usepackage{lxextras} +\input{configpres} \title{Block \lq Realtime Linux\rq} -\institute{Linutronix GmbH} - -\begin{document} - \maketitle +\subtitle{Echtzeit} -% ----- Slide ------------------ \begin{frame} \frametitle{Was ist Echtzeit?} \begin{itemize} @@ -58,6 +48,7 @@ Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler! \end{itemize} \end{frame} +\subsubsection{Priority Inversion} \begin{frame} \frametitle{Priority Inversion} \begin{figure}[h] @@ -66,6 +57,7 @@ Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler! \end{figure} \end{frame} +\subsubsection{Linux und Echtzeit} \begin{frame} \frametitle{Linux und Echtzeit} \begin{figure}[h] @@ -210,5 +202,4 @@ können. Raw Spinlocks ersetzen die ursprüngliche Spinlock \end{figure} \end{frame} - -\end{document} +\input{tailpres} diff --git a/realtime/rt-specialties/Makefile b/realtime/rt-specialties/Makefile index 4663d52..d641258 100644 --- a/realtime/rt-specialties/Makefile +++ b/realtime/rt-specialties/Makefile @@ -1,7 +1,7 @@ all: for pdf in `ls -1 *.tex` ; do \ - pdflatex $$pdf; \ - pdflatex $$pdf; \ + TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \ + TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \ done clean: diff --git a/realtime/rt-specialties/handout_rt-specialties_de.tex b/realtime/rt-specialties/handout_rt-specialties_de.tex index 33dc9b6..54771ca 100644 --- a/realtime/rt-specialties/handout_rt-specialties_de.tex +++ b/realtime/rt-specialties/handout_rt-specialties_de.tex @@ -1,13 +1,8 @@ -\documentclass{lxarticle} -\usepackage{german} -\usepackage[utf8]{inputenc} -\usepackage{lxheaders} -\usepackage{lxextras} +\input{confighandout} +\subsection{RT\_PREEMPT} -\begin{document} - -\section*{Anwendung des Preempt RT Patches} -\subsection*{Besorgen und Anwenden des Patches} +\subsubsection{Anwendung des Preempt RT Patches} +\paragraph{Besorgen und Anwenden des Patches} Preempt RT wird als Patch gegen den Mainline Linux Kernel gepflegt. Unter:\newline http://www.kernel.org/pub/linux/kernel/projects/rt sind die aktuellsten Patche @@ -39,7 +34,7 @@ cd linux-2.6.29.5-rt21 ketchup -f --no-gpg 2.6.29.5-rt21 \end{lstlisting} -\subsection*{Konfigurieren und Übersetzen eines Preempt RT Kernels} +\paragraph{Konfigurieren und Übersetzen eines Preempt RT Kernels} Die Konfiguration und das Übersetzen machen keinen Unterschied zu Linux ohne Preempt RT Patch: \begin{lstlisting} @@ -83,8 +78,9 @@ make O=../build modules make O=../build install make O=../build modules_install \end{lstlisting} -\section*{Testen eines Preempt RT Systems} -\subsection*{RT Tests} + +\subsubsection{Testen eines Preempt RT Systems} +\paragraph{RT Tests} Die RT Tests sind eine Sammlung von Programmen, zur Validierung der Eigenschaften von Echtzeitsystemen. Die RT Tests umfassen folgende Tools: \begin{itemize} @@ -104,7 +100,7 @@ git-clone git://git.kernel.org/pub/scm/linux/kernel\ cd rt-tests make \end{lstlisting} -\subsection*{Cyclictest} +\subparagraph{Cyclictest} Cyclictest ist die wohl meistgenutzte Testsoftware auf Preempt RT Systemen. Mit Cyclictest kann eine bestimmte Anzahl von Timertasks mit einem definierten Interval aufgesetzt werden. Für diese Tasks wird kontinuierlich die Abweichung @@ -128,7 +124,7 @@ T: 1 ( 2122) P:79 I:2500 C: 1007 Min: 47 Act: 76 Avg: 77 Max: 130 T: 2 ( 2123) P:78 I:3000 C: 841 Min: 54 Act: 76 Avg: 82 Max: 136 T: 3 ( 2124) P:77 I:3500 C: 723 Min: 67 Act: 95 Avg: 96 Max: 177 \end{lstlisting} -\subsection*{Lastszenarien} +\paragraph{Lastszenarien} Um eine Aussage über das Echtzeitverhaltens treffen zu können, interessiert in der Hauptsache das Verhalten in Worst-Case Szenarien (hohe CPU Last, hohe Interruptlast). Ein ausgezeichnetes Werkzeug, um CPU Last zu erzeugen, ist @@ -142,7 +138,7 @@ Rechner erzeugen. Ein Floodping schickt eine große Anzahl von ICMP Paketen in kurzer Zeit. Dies erzeugt eine hohe Anzahl von Netzwerkinterrupts. Um Floodpings zu generieren muß das Programm ping mit Rootrechten und mit der Option -f ausgeführt werden. -\subsection*{Pitfall} +\subparagraph{Pitfall} Ein sehr häufig gemeldetes Phänomen bei Testläufen von Cyclictest mit einem Floodping als Lastszenario, sind extrem große Ausreißer in der Größenordnung von 50ms. Dies ist auf ein ''Feature'' aktueller Preempt RT Kernel zurückzuführen. @@ -166,8 +162,8 @@ Zum Deaktivieren dieser Funktion muß Folgendes getan werden: \begin{lstlisting} echo -1 > /proc/sys/kernel/sched_rt_runtime_us \end{lstlisting} -\section*{Erstellen einer Realtime Task für Preempt RT} -\subsection*{Schedulingklassen / Prioritäten} +\subsubsection{Erstellen einer Realtime Task für Preempt RT} +\paragraph{Schedulingklassen / Prioritäten} Eine Realtime Applikation auf Preempt RT ist eine POSIX Realtime Applikation. POSIX sieht für Echtzeitapplikationen folgende Schedulingstrategien vor: \begin{itemize} @@ -176,7 +172,7 @@ POSIX sieht für Echtzeitapplikationen folgende Schedulingstrategien vor: \end{itemize} Echtzeitpriorität bekommt eine Applikation nur dann, wenn dies explizit gewünscht wird. Hierzu ist die Funktion sched\_setscheduler() vorgesehen. -\subsection*{Beispiel einer Echtzeitapplikation} +\paragraph{Beispiel einer Echtzeitapplikation} Das folgende Beispiel zeigt eine einfache POSIX Realtimeapplikation: \begin{lstlisting} /* @@ -239,8 +235,8 @@ undeterministisches Zeitverhalten verursachen Eine Ausgezeichnete Einführung zum Erstellen von Echtzeitapplikationen und zur Verwendung von Preempt RT findet sich unter:\newline http://rt.wiki.kernel.org -\subsection*{Tracing / Latenzen aufspüren} -\subsubsection*{FTrace} +\paragraph{Tracing / Latenzen aufspüren} +\subparagraph{FTrace} Ein hervorragendes Werkzeug, um kernelseitige Codepfade aufzuspüren, die lange Latenzzeiten verursachen, ist Ftrace. Ftrace wird über DebugFS, einem virtuellen Dateisystem, gesteuert und platziert dort auch seine Ausgaben. Die einfachste @@ -248,7 +244,7 @@ Methode, FTrace zu verwenden ist Cyclictest. Cyclictest biete bereits einige Optionen, um FTrace zu steuern. Die Option -f schällt Cyclictests Ftrace Support an, -b <max\_latency> veranlaßt Cyclictest, bei Überschreiten einer maximalen Latenzzeit, abzubrechen und einen Trace zu triggern. -\subsubsection*{Kerneloptionen für FTrace} +\subparagraph{Kerneloptionen für FTrace} Um FTrace verwenden zu können, müssen beim Konfigurieren des Kernels einige unter dem Menupunkt ''Kernel hacking-->Tracers'' einige Optionen aktiviert werden: \begin{itemize} @@ -257,7 +253,7 @@ unter dem Menupunkt ''Kernel hacking-->Tracers'' einige Optionen aktiviert werde Tracetyp kann cyclictest über die Commandline mitgegeben werden, siehe cyclictest -h. Default ist der Event Tracer) \end{itemize} -\subsubsection*{Beispiel eines Traces} +\subparagraph{Beispiel eines Traces} Das Erstellen eines Traces mit cyclictest läßt sich am Besten mit einem Beispiel erläutern: \begin{lstlisting} @@ -292,7 +288,7 @@ IRQ-129-772 [000] 4154503386.851234: timer_interrupt<-ret_from [...] \end{lstlisting} -\subsection*{Kontrollfragen} +\paragraph{Kontrollfragen} \begin{itemize} \item Welche Optionen sollten beim Übersetzen eines Preempt RT Kernels mindestens gesetzt sein? @@ -302,4 +298,5 @@ als Lastszenario? Wie kann dieser umgangen werden? \item Welche 3 Schritte sind notwendig, um das deterministische Zeitverhalten einer Applikation zu garantieren? \end{itemize} -\end{document} + +\input{tailhandout} diff --git a/realtime/rt-specialties/pres_rt-specialties_de.tex b/realtime/rt-specialties/pres_rt-specialties_de.tex index 046521d..85cf301 100644 --- a/realtime/rt-specialties/pres_rt-specialties_de.tex +++ b/realtime/rt-specialties/pres_rt-specialties_de.tex @@ -1,20 +1,11 @@ -\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} +\input{configpres} +\title{\lq Anwendung des Preempt RT Patches\rq} \maketitle +\subsection{PREEMPT\_RT} -% ----- Slide ------------------ +\subsubsection{Download und Anwenden} \begin{frame}[fragile] \frametitle{Besorgen und Anwenden des Preempt RT Patches} \begin{lstlisting} @@ -43,6 +34,7 @@ ketchup -f --no-gpg 2.6.29.5-rt21 \end{lstlisting} \end{frame} +\subsubsection{Konfiguration} \begin{frame}[fragile] \frametitle{Konfigurieren und Übersetzen eines Preempt RT Kernels} \begin{overprint} @@ -88,6 +80,7 @@ make O=../build modules_install \end{overprint} \end{frame} +\subsubsection{Verifikation} \begin{frame} \frametitle{Testen eines Preempt RT Systems} RT Tests: @@ -133,6 +126,7 @@ cat /proc/sys/kernel/sched_rt_runtime_us \end{figure} \end{frame} +\subsubsection{Applikationsentwicklung} \begin{frame} \frametitle{Echtzeitapplikationen mit Preempt RT} \begin{columns} @@ -190,6 +184,7 @@ void stack_prefault(void) { \end{overprint} \end{frame} +\subsubsection{Tracing / Latency hunting} \begin{frame}[fragile] \frametitle{Tracing / Latency hunting} \begin{itemize} @@ -228,4 +223,5 @@ IRQ-129-772 [000] 4154503386.851189: task_setprio<-__rt_mut [...] \end{lstlisting} \end{frame} -\end{document} + +\input{tailpres} diff --git a/realtime/section.tex b/realtime/section.tex new file mode 100644 index 0000000..d593283 --- /dev/null +++ b/realtime/section.tex @@ -0,0 +1 @@ +\section{Echtzeit} |
