Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
agenda: add on-site agenda to PREEMPT_RT course
Plus a few tweaks in the online agendas as well. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
- Loading branch information
1 parent
fa318f8
commit 2b364e3
Showing
4 changed files
with
403 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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} |
Oops, something went wrong.