Skip to content

Commit

Permalink
agenda: add on-site agenda to PREEMPT_RT course
Browse files Browse the repository at this point in the history
Plus a few tweaks in the online agendas as well.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
  • Loading branch information
tpetazzoni committed Oct 27, 2021
1 parent fa318f8 commit 2b364e3
Show file tree
Hide file tree
Showing 4 changed files with 403 additions and 3 deletions.
196 changes: 196 additions & 0 deletions agenda/preempt-rt-agenda.tex
@@ -0,0 +1,196 @@
\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}

\def \trainingtitle{Real-Time Linux with {\em PREEMPT\_RT} training}
\def \trainingduration{On-site training, 2 days}
\def \agendalanguage{english}
\def \training{preempt-rt}

\usepackage{agenda}

\begin{document}

\feshowtitle

\feagendasummaryitem{Title}{
{\bf \trainingtitle{}}
}
\feagendasummaryitem{Training objectives}{
\begin{itemize}
\vspace{-0.5cm}
\item Be able to understand the characteristics of a real-time
operating system
\item Be able to download, build and use the {\em PREEMPT\_RT} patch
\item Be able to identify and benchmark the hardware platform in
terms of real-time characteristics
\item Be able to configure the Linux kernel for deterministic
behavior.
\item Be able to develop, trace and debug real-time user-space Linux
applications.
\vspace{-0.5cm}
\end{itemize}
}
\feagendasummaryitem{Duration}{
{\bf Two} days - 16 hours (8 hours per day).
}
\onsitepedagogics{50}{50}{preempt-rt}
\feagendasummaryitem{Trainer}{
Maxime Chevallier
\newline \url{https://bootlin.com/company/staff/maxime-chevallier/}
}
\feagendasummaryitem{Language}{
Oral lectures: English
\newline Materials: English.
}
\feagendasummaryitem{Audience}{
Companies and engineers interested in writing and benchmarking
real-time applications and drivers on an embedded Linux system.
}
\feagendasummaryitem{Prerequisites}{
\begin{itemize}
\prerequisitecommandline
\prerequisiteembeddedlinux
\prerequisiteenglish
\end{itemize}
}
\ferequiredequipmentonsite{}
\certificate{}
\disabilities{}

\feagendatwocolumn
{Hardware in practical labs}
{
The hardware platform used for the practical labs of this training
session is the {\bf BeagleBone Black} board, which features:

\begin{itemize}
\item An ARM AM335x processor from Texas Instruments (Cortex-A8
based), 3D acceleration, etc.
\item 512 MB of RAM
\item 2-4 GB of on-board eMMC storage
\item USB host and device
\item HDMI output
\item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses
and more.
\end{itemize}
}
{}
{
\begin{center}
\includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png}
\end{center}
}

\section{Day 1}

\feagendaonecolumn
{Lecture - Introduction to Real-Time behaviour and determinism}
{
\begin{itemize}
\item Definition of a Real-Time Operating System
\item Specificities of multi-task systems
\item Common locking and prioritizing patterns
\item Overview of existing Real-Time Operating Systems
\item Approaches to bring Real-Time capabilities to Linux
\end{itemize}
}

\feagendatwocolumn
{Lecture - The {\em PREEMPT\_RT} patch}
{
\begin{itemize}
\item History and future of the {\em PREEMPT\_RT} patch
\item Real-Time improvements from {\em PREEMPT\_RT} in mainline Linux
\item The internals of {\em PREEMPT\_RT}
\item Interrupt handling: threaded interrupts, softirqs
\item Locking primitives: mutexes and spinlocks, sleeping spinlocks
\item Preemption models
\end{itemize}
}
{Lab - Building a mainline Linux Kernel with the {\em PREEMPT\_RT} patch}
{
\begin{itemize}
\item Downloading the Linux Kernel, and applying the patch
\item Configuring the Kernel
\item Booting the Kernel on a BeagleBone Black
\end{itemize}
}

\feagendaonecolumn
{Lecture - Hardware configuration and limitations for Real-Time}
{
\begin{itemize}
\item Interrupts and deep firmwares
\item Interaction with power management features: CPU frequency
scaling and sleep states
\item DMA
\end{itemize}
}

\feagendatwocolumn
{Lecture - Tools: Benchmarking, Stressing and Analyzing}
{
\begin{itemize}
\item Benchmarking with {\em cyclictest}
\item System stressing with {\em stress-ng} and {\em hackbench}
\item The Linux Kernel tracing infrastructure
\item Latency and scheduling analysis with {\em ftrace}, {\em
kernelshark} or {\em LTTng}
\end{itemize}
}
{Lab - Tools: Benchmarking, Stressing and Analyzing}
{
\begin{itemize}
\item Usage of benchmarking and stress tools
\item Common benchmarking techniques
\item Benchmarking and configuring the BeagleBone Black Wireless
\end{itemize}
}

\section{Day 2}

\feagendaonecolumn
{Lecture - Kernel infrastructures and configuration}
{
\begin{itemize}
\item Good practices when writing Linux kernel drivers
\item Scheduling policies and priorities: {\em SCHED\_FIFO}, {\em
SCHED\_RR}, {\em SCHED\_DEADLINE}
\item CPU and IRQ Affinity
\item Memory management
\item CPU isolation with {\em isolcpus}
\end{itemize}
}

\feagendatwocolumn
{Lecture - Real-Time Applications programming patterns}
{
\begin{itemize}
\item POSIX real-time API
\item Thread management and configuration
\item Memory management: memory allocation and memory locking, stack
\item Locking patterns: mutexes, priority inheritance
\item Inter-Process Communication
\item Signaling
\end{itemize}
}
{Lab - Debugging a demo application}
{
\begin{itemize}
\item Make a demo userspace application deterministic
\item Use the tracing infrastructure to identify the cause of a latency
\item Learn how to use the POSIX API to manage threads, locking and memory
\item Learn how to use the CPU affinities and configure the scheduling policy
\end{itemize}
}

\feagendaonecolumn
{Questions and Answers}
{
\begin{itemize}
\item Questions and answers with the audience about the course topics
\item Extra presentations if time is left, according what most
participants are interested in.
\end{itemize}
}

\end{document}
202 changes: 202 additions & 0 deletions agenda/preempt-rt-fr-agenda.tex
@@ -0,0 +1,202 @@
\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}

\def \trainingtitle{Formation temps-réel sous Linux avec {\em PREEMPT\_RT}}
\def \trainingduration{Formation sur site, 2 jours}
\def \agendalanguage{french}
\def \training{preempt-rt}

\usepackage{agenda}

\begin{document}

\feshowtitle

\feagendasummaryitem{Title}{
{\bf \trainingtitle{}}
}
\feagendasummaryitem{Objectifs\newline opérationnels}{
\begin{itemize}
\vspace{-0.5cm}
\item Être capable de comprendre et de maîtriser les
caractéristiques d'un système d'exploitation temps-réel
\item Être capable de télécharger, compiler et utiliser le patch
{\em PREEMPT\_RT}
\item Être capable d'identifier et de benchmarker la plateforme
matérielle en terme de caractéristiques temps-réel
\item Être capable de configurer le noyau Linux pour un comportement
déterministe
\item Être capable de développer, de tracer et de débugger des
applications user-space temps-réel.
\vspace{-0.5cm}
\end{itemize}
}
\feagendasummaryitem{Duration}{
{\bf Deux} journées - 16 heures (8 h par jour)
}
\onsitepedagogics{50}{50}{preempt-rt}
\feagendasummaryitem{Formateur}{
Maxime Chevallier
\newline \url{https://bootlin.com/company/staff/maxime-chevallier/}
}
\feagendasummaryitem{Langue}{
Présentations : Français
\newline Supports : Anglais
}
\feagendasummaryitem{Audience}{
Entreprises et ingénieurs intéressés dans le développement et le
benchmarking d'applications et de drivers temps-réel pour un système
Linux embarqué.
}
\feagendasummaryitem{Pré-requis}{
\begin{itemize}
\prerequisitecommandline
\prerequisiteembeddedlinux
\prerequisiteenglish
\end{itemize}
}
\ferequiredequipmentonsite{}
\certificate{}
\disabilities{}

\feagendatwocolumn
{Matériel}
{
La plateforme matérielle utilisée pendant les travaux pratiques de
cette formation est la carte {\bf BeagleBone Black}, dont voici les
caractéristiques :

\begin{itemize}
\item Un processeur ARM AM335x de Texas Instruments (à base de
Cortex-A8), avec accélération 3D, etc.
\item 512 Mo de RAM
\item 2-4 Go de stockage eMMC
\item USB hôte et device
\item Sortie HDMI
\item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux
bus SPI, aux bus I2C, et à d'autres entrées/sorties du
processeur.
\end{itemize}
}
{}
{
\begin{center}
\includegraphics[height=5cm]{../slides/beagleboneblack-board/beagleboneblack.png}
\end{center}
}

\section{1\textsuperscript{ère} journée}

\feagendaonecolumn
{Cours - Introduction au comportement temps-réel et au déterminisme}
{
\begin{itemize}
\item Définition d'un système d'exploitation temps-réel
\item Spécificigés des systèmes multi-tâches
\item Principaux patterns de verrouillage et de gestion des priorités
\item Aperçu des systèmes temps-réel existants
\item Approches pour apporter un comportement temps-réel à Linux
\end{itemize}
}

\feagendatwocolumn
{Cours - Le patch {\em PREEMPT\_RT}}
{
\begin{itemize}
\item Histoire et avenir du patch {\em PREEMPT\_RT}
\item Améliorations temps-réel provenant de {\em PREEMPT\_RT} dans le noyau Linux officiel
\item Fonctionnement interne de {\em PREEMPT\_RT}
\item Gestion des interruptions: interruptions threadées, softirqs
\item Primitives de verouillage: mutexes et spinlocks, spinlocks avec sommeil
\item Modèles de préemption
\end{itemize}
}
{TP - Compiler un noyau Linux avec {\em PREEMPT\_RT}}
{
\begin{itemize}
\item Télécharger le noyau Linux et appliquer le patch {\em PREEMPT\_RT}
\item Configurer le noyau Linux
\item Démarrer le kernel sur une plateforme matérielle, la
BeagleBone Black Wireless
\end{itemize}
}

\feagendaonecolumn
{Cours - Configuration et limites du matériel pour le temps-réel}
{
\begin{itemize}
\item Interruptions et firmware
\item Interaction avec les fonctionnalités de gestion d'énergie:
gestion dynamique de la fréquence du CPU et états de sommeil
\item DMA
\end{itemize}
}

\feagendatwocolumn
{Cours - Outils: Benchmarking, Stress et Analyse}
{
\begin{itemize}
\item Benchmarking avec {\em cyclictest}
\item Stress du système avec {\em stress-ng} et {\em hackbench}
\item L'infrastructure de {\em tracing} du noyau Linux
\item Analyse de la latence et de l'ordonnancement avec {\em
ftrace}, {\em kernelshark} ou {\em LTTng}
\end{itemize}
}
{TP - Outils: Benchmarking, Stress et Analyse}
{
\begin{itemize}
\item Utilisation des outils de benchmark et de stress
\item Techniques classiques de benchmarking
\item Benchmarking et configuration de la BeagleBone Black Wireless
\end{itemize}
}

\section{2\textsuperscript{ème} journée}

\feagendaonecolumn
{Cours - Infrastructures du noyau Linux et configuration}
{
\begin{itemize}
\item Bonnes pratiques pour le développement de drivers noyau Linux
pour des systèmes temps-réel
\item Politiques d'ordonnancement et priorités: {\em SCHED\_FIFO},
{\em SCHED\_RR}, {\em SCHED\_DEADLINE}
\item Affinité CPU et IRQ
\item Gestion mémoire
\item Isolution des CPUs avec {\em isolcpus}
\end{itemize}
}

\feagendatwocolumn
{Cours - Patterns de développement d'applications temps-réel}
{
\begin{itemize}
\item API POSIX pour les applications temps-réel
\item Gestion et configuration des threads
\item Gestion mémoire: allocation mémoire et verouillage mémoire, gestion de la pile
\item Patterns de verrouillage: mutexes, héritage de priorité
\item Communication inter-processus (IPC)
\item Signalisation
\end{itemize}
}
{TP - Débugger une application de démonstration}
{
\begin{itemize}
\item Créer une application de démonstration déterministe
\item Utiliser l'infrastructure de {\em tracing} pour identifier la source de latence
\item Apprendre à utiliser l'API POSIX pour gérer les threads, le verouillage, la mémoire
\item Apprendre à utiliser l'affinité CPU et configurer la politique d'ordonnancement
\end{itemize}
}

\feagendaonecolumn
{Questions / réponses}
{
\begin{itemize}
\item Questions / réponses avec les participants autour du noyau Linux
\item Des présentations supplémentaires s'il reste du temps, selon les sujets
qui intéressent le plus les participants.
\end{itemize}
}

\end{document}

0 comments on commit 2b364e3

Please sign in to comment.