[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