[bootlin/training-materials updates] master: agenda: add agenda for the new debugging course (9016b295)
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Fri Oct 21 10:42:17 CEST 2022
Repository : https://github.com/bootlin/training-materials
On branch : master
Link : https://github.com/bootlin/training-materials/commit/9016b295c42009d21c73bd71075e9aea772d7e3f
>---------------------------------------------------------------
commit 9016b295c42009d21c73bd71075e9aea772d7e3f
Author: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Date: Fri Oct 21 10:41:02 2022 +0200
agenda: add agenda for the new debugging course
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
>---------------------------------------------------------------
9016b295c42009d21c73bd71075e9aea772d7e3f
agenda/debugging-agenda.tex | 286 ++++++++++++++++++++++++++++++++
agenda/debugging-fr-agenda.tex | 296 +++++++++++++++++++++++++++++++++
agenda/debugging-online-agenda.tex | 292 ++++++++++++++++++++++++++++++++
agenda/debugging-online-fr-agenda.tex | 304 ++++++++++++++++++++++++++++++++++
4 files changed, 1178 insertions(+)
diff --git a/agenda/debugging-agenda.tex b/agenda/debugging-agenda.tex
new file mode 100644
index 00000000..55804838
--- /dev/null
+++ b/agenda/debugging-agenda.tex
@@ -0,0 +1,286 @@
+\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}
+
+\def \trainingtitle{Linux debugging, profiling, tracing and performance analysis training}
+\def \trainingduration{On-site training, 3 days}
+\def \agendalanguage{english}
+\def \training{debugging}
+
+\usepackage{agenda}
+
+\begin{document}
+
+\feshowtitle
+
+\feagendasummaryitem{Title}{
+ {\bf \trainingtitle{}}
+}
+\feagendasummaryitem{Training objectives}{
+ \begin{itemize}
+ \vspace{-0.5cm}
+ \item Be able to understand the main concepts of Linux that are
+ relevant for performance analysis: process, threads, memory
+ management, virtual memory, execution contexts, etc.
+ \item Be able to analyze why a system is loaded and what are the
+ elements that contributes to this load using common Linux
+ observability tools.
+ \item Be able to debug an userspace application using {\em gdb},
+ either live or after a crash, and analyze the contents of ELF
+ binaries.
+ \item Be able to trace and profile a complete userspace application
+ and its interactions with the Linux kernel in order to fix bugs
+ using {\em strace}, {\em ltrace}, {\em perf} or {\em Callgrind}.
+ \item Be able to understand classical memory issues and analyze them
+ using {\em valgrind}, {\em libefence} or {\em Massif}.
+ \item Be able to trace and profile the entire Linux system, using
+ {\em perf}, {\em ftrace}, {\em kprobes}, {\em eBPF} tools, {\em
+ kernelshark} or {\em LTTng}
+ \item Be able to debug Linux kernel issues: debug kernel crashes
+ live or post-mortem, analyze memory issues at the kernel level,
+ analyze locking issues, use kernel-level debuggers.
+ \vspace{-0.5cm}
+ \end{itemize}
+}
+\feagendasummaryitem{Duration}{
+ {\bf Three} days - 24 hours (8 hours per day).
+}
+\onsitepedagogics{40}{60}{debugging}
+\feagendasummaryitem{Trainer}{
+ Clément Léger
+ \newline \url{https://bootlin.com/company/staff/clement-leger/}
+}
+\feagendasummaryitem{Language}{
+ Oral lectures: English
+ \newline Materials: English.
+}
+\feagendasummaryitem{Audience}{
+ Companies and engineers interested in debugging, profiling and
+ tracing Linux systems and applications, to analyze and address
+ performance or latency problems.
+}
+\feagendasummaryitem{Prerequisites}{
+ \begin{itemize}
+ \prerequisitecommandline
+ \prerequisiteembeddedlinux
+ \prerequisiteenglish
+ \end{itemize}
+}
+\ferequiredequipmentonsite{22.04}
+\certificate{}
+\disabilities{}
+
+\feagendatwocolumn
+{Hardware in practical labs}
+{
+ The hardware platform used for the practical labs of this training
+ session is the {\bf STMicroelectronics STM32MP157D-DK1 Discovery
+ board} board, which features:
+
+ \begin{itemize}
+ \item STM32MP157D (dual Cortex-A7) CPU from STMicroelectronics
+ \item USB powered
+ \item 512 MB DDR3L RAM
+ \item Gigabit Ethernet port
+ \item 4 USB 2.0 host ports
+ \item 1 USB-C OTG port
+ \item 1 Micro SD slot
+ \item On-board ST-LINK/V2-1 debugger
+ \item Arduino Uno v3-compatible headers
+ \item Audio codec
+ \item Misc: buttons, LEDs
+ \end{itemize}
+}
+{}
+{
+ \begin{center}
+ \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png}
+ \end{center}
+}
+
+\section{Day 1 - Morning}
+
+\feagendaonecolumn
+{Lecture - Linux application stack}
+{
+ \begin{itemize}
+ \item Global picture: understanding the general architecture of a
+ Linux system, overview of the major components.
+ \item What is the difference between a process and a thread, how
+ applications run concurrently.
+ \item ELF files and associated analysis tools.
+ \item Userspace application memory layout (heap, stack, shared
+ libraries mappings, etc).
+ \item MMU and memory management: physical/virtual address spaces.
+ \item Kernel context switching and scheduling
+ \item Kernel execution contexts: kernel threads, workqueues,
+ interrupt, threaded interrupts, softirq
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Lecture - Common analysis \& observability tools}
+{
+ \begin{itemize}
+ \item Analyzing an ELF file with GNU binary utilities
+ ({\em objdump}, {\em addr2line}).
+ \item Tools to monitor a Linux system: processes, memory
+ usage and mapping, resources.
+ \item Using {\em vmstat}, {\em iostat}, {\em ps}, {\em top}, {\em
+ iotop}, {\em free} and understanding the metrics they provide.
+ \item Pseudo filesystems: {\em procfs}, {\em sysfs} and {\em
+ debugfs}.
+ \end{itemize}
+}
+\section{Day 1 - Afternoon}
+\feagendaonecolumn
+{Lab - Check what is running on a system and its load}
+{
+ \begin{itemize}
+ \item Observe running processes using {\em ps} and {\em top}.
+ \item Check memory allocation and mapping with {\em procfs} and {\em
+ pmap}.
+ \item Monitor other resources usage using {\em iostat}, {\em vmstat}
+ and {\em netstat}.
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Debugging an application}
+{
+ \begin{itemize}
+ \item Using {\em gdb} on a live process.
+ \item Understanding compiler optimizations impact on debuggability.
+ \item Postmortem diagnostic using core files.
+ \item Remote debugging with {\em gdbserver}.
+ \item Extending {\em gdb} capabilities using python scripting
+ \end{itemize}
+}
+{Lab - Solving an application crash}
+{
+ \begin{itemize}
+ \item Analysis of compiled C code with compiler-explorer to understand
+ optimizations.
+ \item Managing {\em gdb} from the command line, then from an IDE.
+ \item Using {\em gdb} Python scripting capabilities.
+ \item Debugging a crashed application using a coredump with {\em gdb}.
+ \end{itemize}
+}
+
+\section{Day 2 - Morning}
+
+\feagendatwocolumn
+{Lecture - Tracing an application}
+{
+ \begin{itemize}
+ \item Tracing system calls with {\em strace}.
+ \item Tracing library calls with {\em ltrace}.
+ \end{itemize}
+}
+{Lab – Debugging application issues}
+{
+ \begin{itemize}
+ \item Analyze dynamic library calls from an application using
+ {\em ltrace}.
+ \item Debug a misbehaving application using {\em strace}.
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Memory issues}
+{
+ \begin{itemize}
+ \item Usual memory issues: buffer overflow, segmentation fault,
+ memory leaks, heap-stack collision.
+ \item Memory corruption tooling, {\em valgrind}, {\em libefence},
+ etc.
+ \item Heap profiling using {\em Massif}
+ \end{itemize}
+}
+{Lab – Debugging memory issues}
+{
+ \begin{itemize}
+ \item Buffer overflow investigation with {\em libefence}.
+ \item Memory leak and misbehavior detection with {\em valgrind} and
+ {\em vgdb}.
+ \item Performance issues due to memory over allocation.
+ \item Visualizing application heap using {\em Massif}.
+ \end{itemize}
+}
+
+\section{Day 2 - Afternoon}
+
+\feagendatwocolumn
+{Lecture – Application profiling}
+{
+ \begin{itemize}
+ \item Performances issues.
+ \item Gathering profiling data with {\em perf}.
+ \item Analyzing an application callgraph using {\em Callgrind}
+ and {\em KCachegrind}.
+ \item Filtering the data set.
+ \item Interpreting the data recorded by {\em perf}.
+ \end{itemize}
+}
+{Lab - Application profiling}
+{
+ \begin{itemize}
+ \item Profiling an application with {\em Callgrind}/{\em
+ KCachegrind}.
+ \item Analyzing application performances with {\em perf}.
+ \item Generating a flamegraph using {\em FlameGraph}.
+ \end{itemize}
+}
+
+\section{Day 3 - Morning}
+
+\feagendatwocolumn
+{Lecture - System wide profiling and tracing}
+{
+ \begin{itemize}
+ \item System wide profiling using {\em perf}.
+ \item Using {\em kprobes} to hook on kernel code without
+ recompiling.
+ \item {\em eBPF} tools ({\em bcctools}, {\em bpftrace}, etc) for
+ complex tracing scenarios.
+ \item Application and kernel tracing and visualization using {\em
+ ftrace}, {\em kernelshark} or {\em LTTng}
+ \end{itemize}
+}
+{Lab - System wide profiling and tracing}
+{
+ \begin{itemize}
+ \item System profiling with {\em perf}.
+ \item IRQ latencies using {\em ftrace}.
+ \item Tracing and visualizing system activity using {\em
+ kernelshark} or {\em LTTng}
+ \end{itemize}
+}
+
+\section{Day 3 - Afternoon}
+
+\feagendatwocolumn
+{Lecture - Kernel debugging}
+{
+ \begin{itemize}
+ \item Kernel compilation results (\code{vmlinux}, \code{System.map}).
+ \item Understanding and configuring kernel {\em oops} behavior.
+ \item Post mortem analysis using kernel crash dump with {\em crash}.
+ \item Memory issues ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}).
+ \item Debugging the kernel using {\em KGDB} and {\em KDB}.
+ \item Kernel locking debug configuration options (lockdep).
+ \item Other kernel configuration options that are useful for debug.
+ \end{itemize}
+}
+{Lab - Kernel debugging}
+{
+ \begin{itemize}
+ \item Analyzing an {\em oops} after using a faulty module with
+ {\em obdjump} and {\em addr2line}.
+ \item Debugging a deadlock problem using {\em PROVE\_LOCKING} options.
+ \item Detecting undefined behavior with {\em UBSAN} in kernel code.
+ \item Find a module memory leak using {\em kmemleak}.
+ \item Debugging a module with {\em KGDB}.
+ \end{itemize}
+}
+
+\end{document}
+
diff --git a/agenda/debugging-fr-agenda.tex b/agenda/debugging-fr-agenda.tex
new file mode 100644
index 00000000..96365cab
--- /dev/null
+++ b/agenda/debugging-fr-agenda.tex
@@ -0,0 +1,296 @@
+\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}
+
+\def \trainingtitle{Formation debugging, profiling, tracing et analyse de performance sous Linux}
+\def \trainingduration{Formation sur site, 3 jours}
+\def \agendalanguage{french}
+\def \training{debugging}
+
+\usepackage{agenda}
+
+\begin{document}
+
+\feshowtitle
+
+\feagendasummaryitem{Titre}{
+ {\bf \trainingtitle{}}
+}
+\feagendasummaryitem{Objectifs\newline opérationnels}{
+ \begin{itemize}
+ \item Être capable de comprendre les principaux concepts de Linux
+ qui sont liés à l'analyse de performance: processus, threads,
+ gestion de la mémoire, mémoire virtuelle, contextes d'exécution,
+ etc.
+ \item Être capable d'analyser pourquoi un système est chargé et
+ quels sont les éléments qui contribuent à cette charge avec les
+ outils usuels d'observabilité sous Linux.
+ \item Être capable de débugger une application espace utilisateur
+ avec {\em gdb}, soit en direct soit {\em post-mortem} suite à un
+ crash, et analyser le contenu de binaires ELF.
+ \item Être capable d'utiliser le {\em tracing} et le {\em profiling}
+ sur une application espace utilisateur et comprendre ses
+ interactions avec le noyau Linux afin de corriger des bugs, en
+ utilisant {\em strace}, {\em ltrace}, {\em perf} ou {\em
+ Callgrind}
+ \item Être capable d'utiliser le {\em tracing} et le {\em profiling}
+ le système Linux complet, en utilisant {\em perf}, {\em ftrace},
+ {\em kprobe}, les outils {\em eBPF}, {\em kernelshark} ou {\em
+ LTTng}
+ \item Être capable de débugger des problèmes au niveau du noyau
+ Linux: debug de crash en direct ou post-mortem, analyse de
+ problèmes mémoire au niveau noyau, analyse de problèmes de locks,
+ utilisation de debuggers au niveau noyau.
+ \end{itemize}
+}
+\feagendasummaryitem{Durée}{
+ {\bf Trois} jours - 24 h (8 h par jour)
+}
+\onsitepedagogics{40}{60}{debugging}
+\feagendasummaryitem{Formateur}{
+ Clément Léger
+ \newline \url{https://bootlin.com/company/staff/clement-leger/}
+}
+\feagendasummaryitem{Langue}{
+ Présentations : Français
+ \newline Supports : Anglais
+}
+\feagendasummaryitem{Public visé}{
+ Sociétés et ingénieurs intéressés dans le debug, profiling et
+ tracing de systèmes et d'applications Linux, afin d'analyser et
+ résoudre des problèmes de performance ou de latence.
+}
+\feagendasummaryitem{Pré-requis}{
+ \begin{itemize}
+ \prerequisitecommandline
+ \prerequisiteembeddedlinux
+ \prerequisiteenglish
+ \end{itemize}
+}
+\ferequiredequipmentonsite{22.04}
+\certificate{}
+\disabilities{}
+
+\feagendatwocolumn
+{Matériel utilisé pour les travaux pratiques}
+{
+ Une de ces cartes de STMicroelectronics: {\bf
+ STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou
+ {\bf STM32MP157F-DK2}
+ \begin{itemize}
+ \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics
+ \item Alimentée par USB
+ \item 512 Mo DDR3L RAM
+ \item Port Gigabit Ethernet port
+ \item 4 ports hôte USB 2.0
+ \item 1 port USB-C OTG
+ \item 1 connecteur Micro SD
+ \item Debugger ST-LINK/V2-1 sur la carte
+ \item Connecteurs compatibles Arduino Uno v3
+ \item Codec audio
+ \item Divers: boutons, LEDs
+ \item Écran LCD tactile (uniquement sur cartes DK2)
+ \end{itemize}
+}{}
+{
+ \begin{center}
+ \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png}
+ \end{center}
+}
+
+\section{1\textsuperscript{er} Jour - Matin}
+
+\feagendaonecolumn
+{Cours - Pile logicielle Linux}
+{
+ \begin{itemize}
+ \item Vue d'ensemble: comprendre l'architecture général d'un système
+ Linux, aperçu des principaux composants
+ \item Différence entre un processus et un thread, comment les
+ applications fonctionnent de façon concurrente.
+ \item Fichiers ELF et outils d'analyse associés.
+ \item Organisation de l'espace d'adressage des applications: heap,
+ stack, bibliothèques partagées, etc.
+ \item MMU et gestion mémoire: espaces d'adressage physique et
+ virtuel
+ \item Contexte d'exécution dans le noyau: threads noyau, workqueues,
+ interruptions, interruptions threadées, softirq
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Cours - Outils usuels d'analyse et d'observation}
+{
+ \begin{itemize}
+ \item Analyse d'un binaire ELF avec les outils GNU ({\em objdump},
+ {\em addr2line})
+ \item Outils pour monitorer un système Linux: processus,
+ consommation et mapping mémoire, ressources
+ \item Utilisation de {\em vmstat}, {\em iostat}, {\em ps}, {\em
+ top}, {\em iotop}, {\em free} et compréhension des métriques
+ qu'ils fournissent.
+ \item Systèmes de fichiers virtuels: {\em procfs}, {\em sysfs} et
+ {\em debugfs}
+ \end{itemize}
+}
+
+\section{1\textsuperscript{er} Jour - Après-midi}
+
+\feagendaonecolumn
+{Démo - Comprendre ce qui fonctionne sur un système et sa charge}
+{
+ \begin{itemize}
+ \item Observation des processus en cours d'exécution avec {\em ps} et {\em top}
+ \item Observation des mappings mémoire avec {\em procfs} et {\em pmap}
+ \item Monitoring d'aurtres ressources avec {\em iostat}, {\em
+ vmstat} et {\em netstat}
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Debug d'une application}
+{
+ \begin{itemize}
+ \item Utilisation de {\em gdb} sur un processus en cours d'exécution.
+ \item Comprendre l'impact des optimisations du compilateur sur la
+ capacité à débugger un programme.
+ \item Analyse post-mortem avec des fichiers {\em core}
+ \item Debug à distance avec {\em gdbserver}.
+ \item Étendre les capacités de {\em gdb} en utilisant des scripts
+ Python.
+ \end{itemize}
+}
+{Démo - Résoudre un crash applicatif}
+{
+ \begin{itemize}
+ \item Analyse d'un code C compilé avec \code{compiler-explorer} pour
+ comprendre les optimisations.
+ \item Utilisation de {\em gdb} en ligne de commande, puis depuis un
+ IDE.
+ \item Utilisation des possibilités de scripting Python dans {\em gdb}.
+ \item Debugger une application {\em post mortem} avec un {\em core
+ dump} et {\em gdb}
+ \end{itemize}
+}
+
+\section{2\textsuperscript{ème} Jour - Matin}
+
+\feagendatwocolumn
+{Cours - Tracing d'une application}
+{
+ \begin{itemize}
+ \item Tracing des appels systèmes avec {\em strace}.
+ \item Tracing des appels à des bibliothèques partagées avec {\em ltrace}.
+ \end{itemize}
+}
+{Démo – Débugger des problèmes applicatifs}
+{
+ \begin{itemize}
+ \item Analyser les appels à des bibliothèques partagées d'une
+ application en utilisant {\em ltrace}.
+ \item Débugger une application qui fonctionne de manière incorrecte
+ en utilisant {\em strace}.
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Problèmes liés à la mémoire}
+{
+ \begin{itemize}
+ \item Problèmes classiques liés à la mémoire: {\em buffer overflow},
+ {\em segmentation fault}, fuite mémoire, collision pile/tas.
+ \item Outils de détection/investigation de problèmes mémoires: {\em
+ valgrind}, {\em libefence}, etc.
+ \item Profiling de l'utilisation du tas en utilisant {\em Massif}
+ \end{itemize}
+}
+{Démo – Débugger des problèmes liés à la mémoire}
+{
+ \begin{itemize}
+ \item Fuites mémoire et détection de comportement incorrects avec
+ {\em valgrind} et {\em vgdb}.
+ \item Problèmes de performance liés à une sur-allocation.
+ \item Visualisation de l'utilisation du tas par une application en
+ utilisant {\em Massif}.
+ \end{itemize}
+}
+
+\section{2\textsuperscript{ème} Jour - Après-midi}
+
+\feagendatwocolumn
+{Cours – Profiling d'application}
+{
+ \begin{itemize}
+ \item Problèmes de performance.
+ \item Récupération d'informations de profiling avec {\em perf}.
+ \item Analyse du graphe d'appel d'une application avec {\em
+ Callgrind} et {\em KCachegrind}.
+ \item Filtrage du jeu de données récupéré.
+ \item Interprétation, des données enregistrées avec {\em perf}.
+ \end{itemize}
+}
+{Démo - Profiling d'application}
+{
+ \begin{itemize}
+ \item Profiling d'une application avec {\em Callgrind}/{\em
+ KCachegrind}.
+ \item Analyse des performances d'une application avec {\em perf}.
+ \item Générer un {\em flamegraph} avec {\em FlameGraph}.
+ \end{itemize}
+}
+
+\section{3\textsuperscript{ème} Jour - Matin}
+
+\feagendatwocolumn
+{Cours - Profiling et tracing de l'ensemble du système}
+{
+ \begin{itemize}
+ \item Profiling du système complet avec {\em perf}.
+ \item Utilisation de {\em kprobes} pour ajouter des points de trace
+ supplémentaires sans recompilation
+ \item Outils {\em eBPF} ({\em bcctools}, {\em bpftrace}, etc) pour
+ les scénarios de tracing complexes.
+ \item Tracing d'application et du noyau et visualisation des traces
+ avec {\em ftrace}, {\em kernelshark} ou {\em LTTng}
+ \end{itemize}
+}
+{Démo - Profiling et tracing de l'ensemble du système}
+{
+ \begin{itemize}
+ \item Profiling du système complet avec {\em perf}.
+ \item Latence d'interruptions avec {\em ftrace}.
+ \item Tracing et visualisation de l'activité du système avec {\em
+ kernelshark} ou {\em LTTng}
+ \end{itemize}
+}
+
+\section{3\textsuperscript{ème} Jour - Après-midi}
+
+\feagendatwocolumn
+{Cours - Debugging du noyau Linux}
+{
+ \begin{itemize}
+ \item Sorties de la compilation du noyau Linux utiles pour le
+ debugging (\code{vmlinux}, \code{System.map}).
+ \item Comprendre et configurer le comportement des {\em kernel oops}.
+ \item Analyse post-mortem d'un crash kernel avec {\em crash}.
+ \item Problèmes mémoire au niveau kernel ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}).
+ \item Debugging du noyau Linux avec {\em KGDB} et {\em KDB}.
+ \item Options du noyau Linux pour le debug des problèmes de verrous
+ (lockdep)
+ \item Autres options de configuration du noyau Linux utiles pour le
+ debug.
+ \end{itemize}
+}
+{Démo - Debugging du noyau Linux}
+{
+ \begin{itemize}
+ \item Analyse d'un {\em oops} après utilisation d'un module noyau
+ incorrect, avec {\em obdjump} et {\em addr2line}.
+ \item Debugging d'un {\em deadlock} avec les options {\em PROVE\_LOCKING}.
+ \item Détecter un {\em undefined behavior} avec {\em UBSAN} dans le noyau Linux.
+ \item Trouver une fuite mémoire avec {\em kmemleak}.
+ \item Débugger un module noyau avec {\em KGDB}.
+ \end{itemize}
+}
+
+\end{document}
+
diff --git a/agenda/debugging-online-agenda.tex b/agenda/debugging-online-agenda.tex
new file mode 100644
index 00000000..9e307c6c
--- /dev/null
+++ b/agenda/debugging-online-agenda.tex
@@ -0,0 +1,292 @@
+\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}
+
+\def \trainingtitle{Linux debugging, profiling, tracing and performance analysis training}
+\def \trainingduration{On-line seminar, 4 sessions of 4 hours}
+\def \agendalanguage{english}
+\def \training{debugging}
+
+\usepackage{agenda}
+
+\begin{document}
+
+\feshowtitle
+
+\feagendasummaryitem{Title}{
+ {\bf \trainingtitle{}}
+}
+\feagendasummaryitem{Training objectives}{
+ \begin{itemize}
+ \vspace{-0.5cm}
+ \item Be able to understand the main concepts of Linux that are
+ relevant for performance analysis: process, threads, memory
+ management, virtual memory, execution contexts, etc.
+ \item Be able to analyze why a system is loaded and what are the
+ elements that contributes to this load using common Linux
+ observability tools.
+ \item Be able to debug an userspace application using {\em gdb},
+ either live or after a crash, and analyze the contents of ELF
+ binaries.
+ \item Be able to trace and profile a complete userspace application
+ and its interactions with the Linux kernel in order to fix bugs
+ using {\em strace}, {\em ltrace}, {\em perf} or {\em Callgrind}.
+ \item Be able to understand classical memory issues and analyze them
+ using {\em valgrind}, {\em libefence} or {\em Massif}.
+ \item Be able to trace and profile the entire Linux system, using
+ {\em perf}, {\em ftrace}, {\em kprobes}, {\em eBPF} tools, {\em
+ kernelshark} or {\em LTTng}
+ \item Be able to debug Linux kernel issues: debug kernel crashes
+ live or post-mortem, analyze memory issues at the kernel level,
+ analyze locking issues, use kernel-level debuggers.
+ \vspace{-0.5cm}
+ \end{itemize}
+}
+\feagendasummaryitem{Duration}{
+ {\bf Four} half days - 16 hours (4 hours per half day).
+}
+\onlinepedagogics{debugging}
+\feagendasummaryitem{Trainer}{
+ Clément Léger
+ \newline \url{https://bootlin.com/company/staff/clement-leger/}
+}
+\feagendasummaryitem{Language}{
+ Oral lectures: English
+ \newline Materials: English.
+}
+\feagendasummaryitem{Audience}{
+ Companies and engineers interested in debugging, profiling and
+ tracing Linux systems and applications, to analyze and address
+ performance or latency problems.
+}
+\feagendasummaryitem{Prerequisites}{
+ \begin{itemize}
+ \prerequisitecommandline
+ \prerequisiteembeddedlinux
+ \prerequisiteenglish
+ \end{itemize}
+}
+\feagendasummaryitem{Required equipment}{
+ \begin{itemize}
+ \item Computer with the operating system of your choice, with the
+ Google Chrome or Chromium browser for videoconferencing
+ \item Webcam and microphone (preferably from an audio headset)
+ \item High speed access to the Internet
+ \end{itemize}
+}
+\certificate{}
+\disabilities{}
+
+\feagendatwocolumn
+{Real hardware in practical demos}
+{
+ The hardware platform used for the practical demos of this training
+ session is the {\bf STMicroelectronics STM32MP157D-DK1 Discovery
+ board} board, which features:
+
+ \begin{itemize}
+ \item STM32MP157D (dual Cortex-A7) CPU from STMicroelectronics
+ \item USB powered
+ \item 512 MB DDR3L RAM
+ \item Gigabit Ethernet port
+ \item 4 USB 2.0 host ports
+ \item 1 USB-C OTG port
+ \item 1 Micro SD slot
+ \item On-board ST-LINK/V2-1 debugger
+ \item Arduino Uno v3-compatible headers
+ \item Audio codec
+ \item Misc: buttons, LEDs
+ \end{itemize}
+}
+{}
+{
+ \begin{center}
+ \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png}
+ \end{center}
+}
+
+\section{Half day 1}
+
+\feagendaonecolumn
+{Lecture - Linux application stack}
+{
+ \begin{itemize}
+ \item Global picture: understanding the general architecture of a
+ Linux system, overview of the major components.
+ \item What is the difference between a process and a thread, how
+ applications run concurrently.
+ \item ELF files and associated analysis tools.
+ \item Userspace application memory layout (heap, stack, shared
+ libraries mappings, etc).
+ \item MMU and memory management: physical/virtual address spaces.
+ \item Kernel context switching and scheduling
+ \item Kernel execution contexts: kernel threads, workqueues,
+ interrupt, threaded interrupts, softirq
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Lecture - Common analysis \& observability tools}
+{
+ \begin{itemize}
+ \item Analyzing an ELF file with GNU binary utilities
+ ({\em objdump}, {\em addr2line}).
+ \item Tools to monitor a Linux system: processes, memory
+ usage and mapping, resources.
+ \item Using {\em vmstat}, {\em iostat}, {\em ps}, {\em top}, {\em
+ iotop}, {\em free} and understanding the metrics they provide.
+ \item Pseudo filesystems: {\em procfs}, {\em sysfs} and {\em
+ debugfs}.
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Demo - Check what is running on a system and its load}
+{
+ \begin{itemize}
+ \item Observe running processes using {\em ps} and {\em top}.
+ \item Check memory allocation and mapping with {\em procfs} and {\em
+ pmap}.
+ \item Monitor other resources usage using {\em iostat}, {\em vmstat}
+ and {\em netstat}.
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Lecture - Debugging an application}
+{
+ \begin{itemize}
+ \item Using {\em gdb} on a live process.
+ \item Understanding compiler optimizations impact on debuggability.
+ \item Postmortem diagnostic using core files.
+ \item Remote debugging with {\em gdbserver}.
+ \item Extending {\em gdb} capabilities using python scripting
+ \end{itemize}
+}
+
+\section{Half day 2}
+
+\feagendaonecolumn{Demo - Solving an application crash}
+{
+ \begin{itemize}
+ \item Analysis of compiled C code with compiler-explorer to understand
+ optimizations.
+ \item Managing {\em gdb} from the command line, then from an IDE.
+ \item Using {\em gdb} Python scripting capabilities.
+ \item Debugging a crashed application using a coredump with {\em gdb}.
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Tracing an application}
+{
+ \begin{itemize}
+ \item Tracing system calls with {\em strace}.
+ \item Tracing library calls with {\em ltrace}.
+ \end{itemize}
+}
+{Demo – Debugging application issues}
+{
+ \begin{itemize}
+ \item Analyze dynamic library calls from an application using
+ {\em ltrace}.
+ \item Debug a misbehaving application using {\em strace}.
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Memory issues}
+{
+ \begin{itemize}
+ \item Usual memory issues: buffer overflow, segmentation fault,
+ memory leaks, heap-stack collision.
+ \item Memory corruption tooling, {\em valgrind}, {\em libefence},
+ etc.
+ \item Heap profiling using {\em Massif}
+ \end{itemize}
+}
+{Demo – Debugging memory issues}
+{
+ \begin{itemize}
+ \item Memory leak and misbehavior detection with {\em valgrind} and
+ {\em vgdb}.
+ \item Performance issues due to memory over allocation.
+ \item Visualizing application heap using {\em Massif}.
+ \end{itemize}
+}
+
+\section{Half day 3}
+
+\feagendatwocolumn
+{Lecture – Application profiling}
+{
+ \begin{itemize}
+ \item Performances issues.
+ \item Gathering profiling data with {\em perf}.
+ \item Analyzing an application callgraph using {\em Callgrind}
+ and {\em KCachegrind}.
+ \item Filtering the data set.
+ \item Interpreting the data recorded by {\em perf}.
+ \end{itemize}
+}
+{Demo - Application profiling}
+{
+ \begin{itemize}
+ \item Profiling an application with {\em Callgrind}/{\em
+ KCachegrind}.
+ \item Analyzing application performances with {\em perf}.
+ \item Generating a flamegraph using {\em FlameGraph}.
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Lecture - System wide profiling and tracing}
+{
+ \begin{itemize}
+ \item System wide profiling using {\em perf}.
+ \item Using {\em kprobes} to hook on kernel code without
+ recompiling.
+ \item {\em eBPF} tools ({\em bcctools}, {\em bpftrace}, etc) for
+ complex tracing scenarios.
+ \item Application and kernel tracing and visualization using {\em
+ ftrace}, {\em kernelshark} or {\em LTTng}
+ \end{itemize}
+}
+
+\section{Half day 4}
+
+\feagendaonecolumn
+{Demo - System wide profiling and tracing}
+{
+ \begin{itemize}
+ \item System profiling with {\em perf}.
+ \item IRQ latencies using {\em ftrace}.
+ \item Tracing and visualizing system activity using {\em
+ kernelshark} or {\em LTTng}
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Kernel debugging}
+{
+ \begin{itemize}
+ \item Kernel compilation results (\code{vmlinux}, \code{System.map}).
+ \item Understanding and configuring kernel {\em oops} behavior.
+ \item Post mortem analysis using kernel crash dump with {\em crash}.
+ \item Memory issues ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}).
+ \item Debugging the kernel using {\em KGDB} and {\em KDB}.
+ \item Kernel locking debug configuration options (lockdep).
+ \item Other kernel configuration options that are useful for debug.
+ \end{itemize}
+}
+{Demo - Kernel debugging}
+{
+ \begin{itemize}
+ \item Analyzing an {\em oops} after using a faulty module with
+ {\em obdjump} and {\em addr2line}.
+ \item Debugging a deadlock problem using {\em PROVE\_LOCKING} options.
+ \item Detecting undefined behavior with {\em UBSAN} in kernel code.
+ \item Find a module memory leak using {\em kmemleak}.
+ \item Debugging a module with {\em KGDB}.
+ \end{itemize}
+}
+
+\end{document}
diff --git a/agenda/debugging-online-fr-agenda.tex b/agenda/debugging-online-fr-agenda.tex
new file mode 100644
index 00000000..b727dbdf
--- /dev/null
+++ b/agenda/debugging-online-fr-agenda.tex
@@ -0,0 +1,304 @@
+\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}
+
+\def \trainingtitle{Formation debugging, profiling, tracing et analyse de performance sous Linux}
+\def \trainingduration{Formation en ligne, 4 sessions de 4 heures}
+\def \agendalanguage{french}
+\def \training{debugging}
+
+\usepackage{agenda}
+
+\begin{document}
+
+\feshowtitle
+
+\feagendasummaryitem{Titre}{
+ {\bf \trainingtitle{}}
+}
+\feagendasummaryitem{Objectifs\newline opérationnels}{
+ \begin{itemize}
+ \item Être capable de comprendre les principaux concepts de Linux
+ qui sont liés à l'analyse de performance: processus, threads,
+ gestion de la mémoire, mémoire virtuelle, contextes d'exécution,
+ etc.
+ \item Être capable d'analyser pourquoi un système est chargé et
+ quels sont les éléments qui contribuent à cette charge avec les
+ outils usuels d'observabilité sous Linux.
+ \item Être capable de débugger une application espace utilisateur
+ avec {\em gdb}, soit en direct soit {\em post-mortem} suite à un
+ crash, et analyser le contenu de binaires ELF.
+ \item Être capable d'utiliser le {\em tracing} et le {\em profiling}
+ sur une application espace utilisateur et comprendre ses
+ interactions avec le noyau Linux afin de corriger des bugs, en
+ utilisant {\em strace}, {\em ltrace}, {\em perf} ou {\em
+ Callgrind}
+ \item Être capable d'utiliser le {\em tracing} et le {\em profiling}
+ le système Linux complet, en utilisant {\em perf}, {\em ftrace},
+ {\em kprobe}, les outils {\em eBPF}, {\em kernelshark} ou {\em
+ LTTng}
+ \item Être capable de débugger des problèmes au niveau du noyau
+ Linux: debug de crash en direct ou post-mortem, analyse de
+ problèmes mémoire au niveau noyau, analyse de problèmes de locks,
+ utilisation de debuggers au niveau noyau.
+ \end{itemize}
+}
+\feagendasummaryitem{Durée}{
+ {\bf Quatre} demi-journées - 16 h (4 h par demi-journée)
+}
+\onlinepedagogics{debugging}
+\feagendasummaryitem{Formateur}{
+ Clément Léger
+ \newline \url{https://bootlin.com/company/staff/clement-leger/}
+}
+\feagendasummaryitem{Langue}{
+ Présentations : Français
+ \newline Supports : Anglais
+}
+\feagendasummaryitem{Public visé}{
+ Sociétés et ingénieurs intéressés dans le debug, profiling et
+ tracing de systèmes et d'applications Linux, afin d'analyser et
+ résoudre des problèmes de performance ou de latence.
+}
+\feagendasummaryitem{Pré-requis}{
+ \begin{itemize}
+ \prerequisitecommandline
+ \prerequisiteembeddedlinux
+ \prerequisiteenglish
+ \end{itemize}
+}
+\feagendasummaryitem{Équipement nécessaire}{
+ \begin{itemize}
+ \item Ordinateur avec le système d'exploitation de votre choix, équipé du
+ navigateur Google Chrome ou Chromium pour la conférence vidéo.
+ \item Une webcam et un micro (de préférence un casque avec micro)
+ \item Une connexion à Internet à haut débit
+ \end{itemize}
+}
+\certificate{}
+\disabilities{}
+
+\feagendatwocolumn
+{Matériel utilisé pour les démonstrations pratiques}
+{
+ Une de ces cartes de STMicroelectronics: {\bf
+ STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou
+ {\bf STM32MP157F-DK2}
+ \begin{itemize}
+ \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics
+ \item Alimentée par USB
+ \item 512 Mo DDR3L RAM
+ \item Port Gigabit Ethernet port
+ \item 4 ports hôte USB 2.0
+ \item 1 port USB-C OTG
+ \item 1 connecteur Micro SD
+ \item Debugger ST-LINK/V2-1 sur la carte
+ \item Connecteurs compatibles Arduino Uno v3
+ \item Codec audio
+ \item Divers: boutons, LEDs
+ \item Écran LCD tactile (uniquement sur cartes DK2)
+ \end{itemize}
+}{}
+{
+ \begin{center}
+ \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png}
+ \end{center}
+}
+
+\section{1\textsuperscript{ère} demi-journée}
+
+\feagendaonecolumn
+{Cours - Pile logicielle Linux}
+{
+ \begin{itemize}
+ \item Vue d'ensemble: comprendre l'architecture général d'un système
+ Linux, aperçu des principaux composants
+ \item Différence entre un processus et un thread, comment les
+ applications fonctionnent de façon concurrente.
+ \item Fichiers ELF et outils d'analyse associés.
+ \item Organisation de l'espace d'adressage des applications: heap,
+ stack, bibliothèques partagées, etc.
+ \item MMU et gestion mémoire: espaces d'adressage physique et
+ virtuel
+ \item Contexte d'exécution dans le noyau: threads noyau, workqueues,
+ interruptions, interruptions threadées, softirq
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Outils usuels d'analyse et d'observation}
+{
+ \begin{itemize}
+ \item Analyse d'un binaire ELF avec les outils GNU ({\em objdump},
+ {\em addr2line})
+ \item Outils pour monitorer un système Linux: processus,
+ consommation et mapping mémoire, ressources
+ \item Utilisation de {\em vmstat}, {\em iostat}, {\em ps}, {\em
+ top}, {\em iotop}, {\em free} et compréhension des métriques
+ qu'ils fournissent.
+ \item Systèmes de fichiers virtuels: {\em procfs}, {\em sysfs} et
+ {\em debugfs}
+ \end{itemize}
+}
+{Démo - Comprendre ce qui fonctionne sur un système et sa charge}
+{
+ \begin{itemize}
+ \item Observation des processus en cours d'exécution avec {\em ps} et {\em top}
+ \item Observation des mappings mémoire avec {\em procfs} et {\em pmap}
+ \item Monitoring d'aurtres ressources avec {\em iostat}, {\em
+ vmstat} et {\em netstat}
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Cours - Debug d'une application}
+{
+ \begin{itemize}
+ \item Utilisation de {\em gdb} sur un processus en cours d'exécution.
+ \item Comprendre l'impact des optimisations du compilateur sur la
+ capacité à débugger un programme.
+ \item Analyse post-mortem avec des fichiers {\em core}
+ \item Debug à distance avec {\em gdbserver}.
+ \item Étendre les capacités de {\em gdb} en utilisant des scripts
+ Python.
+ \end{itemize}
+}
+
+\section{2\textsuperscript{ème} demi-journée}
+
+\feagendaonecolumn{Démo - Résoudre un crash applicatif}
+{
+ \begin{itemize}
+ \item Analyse d'un code C compilé avec \code{compiler-explorer} pour
+ comprendre les optimisations.
+ \item Utilisation de {\em gdb} en ligne de commande, puis depuis un
+ IDE.
+ \item Utilisation des possibilités de scripting Python dans {\em gdb}.
+ \item Debugger une application {\em post mortem} avec un {\em core
+ dump} et {\em gdb}
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Tracing d'une application}
+{
+ \begin{itemize}
+ \item Tracing des appels systèmes avec {\em strace}.
+ \item Tracing des appels à des bibliothèques partagées avec {\em ltrace}.
+ \end{itemize}
+}
+{Démo – Débugger des problèmes applicatifs}
+{
+ \begin{itemize}
+ \item Analyser les appels à des bibliothèques partagées d'une
+ application en utilisant {\em ltrace}.
+ \item Débugger une application qui fonctionne de manière incorrecte
+ en utilisant {\em strace}.
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Problèmes liés à la mémoire}
+{
+ \begin{itemize}
+ \item Problèmes classiques liés à la mémoire: {\em buffer overflow},
+ {\em segmentation fault}, fuite mémoire, collision pile/tas.
+ \item Outils de détection/investigation de problèmes mémoires: {\em
+ valgrind}, {\em libefence}, etc.
+ \item Profiling de l'utilisation du tas en utilisant {\em Massif}
+ \end{itemize}
+}
+{Démo – Débugger des problèmes liés à la mémoire}
+{
+ \begin{itemize}
+ \item Fuites mémoire et détection de comportement incorrects avec
+ {\em valgrind} et {\em vgdb}.
+ \item Problèmes de performance liés à une sur-allocation.
+ \item Visualisation de l'utilisation du tas par une application en
+ utilisant {\em Massif}.
+ \end{itemize}
+}
+
+\section{3\textsuperscript{ème} demi-journée}
+
+\feagendatwocolumn
+{Cours – Profiling d'application}
+{
+ \begin{itemize}
+ \item Problèmes de performance.
+ \item Récupération d'informations de profiling avec {\em perf}.
+ \item Analyse du graphe d'appel d'une application avec {\em
+ Callgrind} et {\em KCachegrind}.
+ \item Filtrage du jeu de données récupéré.
+ \item Interprétation, des données enregistrées avec {\em perf}.
+ \end{itemize}
+}
+{Démo - Profiling d'application}
+{
+ \begin{itemize}
+ \item Profiling d'une application avec {\em Callgrind}/{\em
+ KCachegrind}.
+ \item Analyse des performances d'une application avec {\em perf}.
+ \item Générer un {\em flamegraph} avec {\em FlameGraph}.
+ \end{itemize}
+}
+
+\feagendaonecolumn
+{Cours - Profiling et tracing de l'ensemble du système}
+{
+ \begin{itemize}
+ \item Profiling du système complet avec {\em perf}.
+ \item Utilisation de {\em kprobes} pour ajouter des points de trace
+ supplémentaires sans recompilation
+ \item Outils {\em eBPF} ({\em bcctools}, {\em bpftrace}, etc) pour
+ les scénarios de tracing complexes.
+ \item Tracing d'application et du noyau et visualisation des traces
+ avec {\em ftrace}, {\em kernelshark} ou {\em LTTng}
+ \end{itemize}
+}
+
+\section{4\textsuperscript{ème} demi-journée}
+
+\feagendaonecolumn
+{Démo - Profiling et tracing de l'ensemble du système}
+{
+ \begin{itemize}
+ \item Profiling du système complet avec {\em perf}.
+ \item Latence d'interruptions avec {\em ftrace}.
+ \item Tracing et visualisation de l'activité du système avec {\em
+ kernelshark} ou {\em LTTng}
+ \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Debugging du noyau Linux}
+{
+ \begin{itemize}
+ \item Sorties de la compilation du noyau Linux utiles pour le
+ debugging (\code{vmlinux}, \code{System.map}).
+ \item Comprendre et configurer le comportement des {\em kernel oops}.
+ \item Analyse post-mortem d'un crash kernel avec {\em crash}.
+ \item Problèmes mémoire au niveau kernel ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}).
+ \item Debugging du noyau Linux avec {\em KGDB} et {\em KDB}.
+ \item Options du noyau Linux pour le debug des problèmes de verrous
+ (lockdep)
+ \item Autres options de configuration du noyau Linux utiles pour le
+ debug.
+ \end{itemize}
+}
+{Démo - Debugging du noyau Linux}
+{
+ \begin{itemize}
+ \item Analyse d'un {\em oops} après utilisation d'un module noyau
+ incorrect, avec {\em obdjump} et {\em addr2line}.
+ \item Debugging d'un {\em deadlock} avec les options {\em PROVE\_LOCKING}.
+ \item Détecter un {\em undefined behavior} avec {\em UBSAN} dans le noyau Linux.
+ \item Trouver une fuite mémoire avec {\em kmemleak}.
+ \item Débugger un module noyau avec {\em KGDB}.
+ \end{itemize}
+}
+
+\section{Temps supplémentaire possible}
+
+{\em Du temps supplémentaire (jusqu'à 4 heures) pourrait être proposé si le programme ne tenait
+ pas en 4 demi-journées, selon le temps passé à répondre aux questions des participants.}
+
+\end{document}
More information about the training-materials-updates
mailing list