Présentation du noyau
- Vue d'ensemble du système et rôle du noyau.
- Les sites de référence.
- Spécificités des noyaux 3.x et 4.x.
- Cycles de développement du noyau, les patchs.
- Mode de fonctionnement (superviseur et utilisateur). Appels système.
- Organisation des sources (Include/linux, Arch, Kernel, Documentation...).
- Principe de compilation du noyau et des modules.
- Les dépendances et symboles.
- Les exportations de symboles.
- Le chargement du noyau (support, argument...).
- La gestion de la mémoire virtuelle sous Linux.
- Optimisation des systèmes de fichiers : Ext3/4, modes de journalisation, attributs du système de fichier.
- Les optimisations classiques.
Travaux pratiques
Compilation et installation d'un noyau.
Les outils utilisables
- Outils de développement (Gcc, Kbuild, Kconfig et Makefile...).
- Outils de débogage (GDB, KGDB, ftrace...).
- Environnement de débogage (Linux Trace Toolkit...).
- Tracer les appels système (ptrace...).
- Outil de métrologie classique sous Linux.
- Collecte de données sur la performance.
- Nagios, Ganglia
- Surveillance du noyau.
- Les commandes : utilisation de vmstat, df, stat, cpuinfo,etc
Travaux pratiques
Installer l'ensemble des outils et des sources. Collecte de donnée. Surveillance du noyau. Utilisation des commandes natives.
Gestion des threads, scheduling
- Les différents types de périphériques.
- Contextes de fonctionnement du noyau. Protection des variables globales.
- Représentation des threads (état, structure task_stru, thread_info...).
- Les threads, contexte d'exécution.
- Le scheduler de Linux et la préemption.
- Création d'un thread noyau (kthread_create, wakeup_process...).
Travaux pratiques
Surveiller, gérer les threads.
Gestion de la mémoire, du temps et de proc
- L'organisation mémoire pour les architectures UMA et NUMA.
- L'espace d'adressage utilisateur et noyau.
- La gestion de pages à la demande (demand paging).
- Allocations mémoire, buddy allocator, kmalloc, slabs et pools mémoire.
- La gestion des accès à la mémoire (les caches et la MMU).
- Les problèmes liés à la sur-réservation de la mémoire.
- Gestion de la mémoire sur x86 et ARM, utilisation des Hugepages.
- Optimisation des appels systèmes (IAPX32, VDSO).
- Synchronisations et attentes dans le noyau, waitqueues, mutex et les completions.
- Les ticks et les jiffies dans Linux.
- L'horloge temps réel, RTC (real Time Clock), implémentation des timers.
- Interface timers haute résolution, estampilles.
- Les outils spécifiques au noyau, listes chaînées, kfifo et container_of.
- L'interface noyau avec /proc par le procfs.
Travaux pratiques
Analyse de la mémoire, des fichiers /proc.
Optimisations de NUMA (non-uniform memory access)
- Principaux concepts NUMA.
- Concepts et architecture du CPU.
- Allocation de mémoire NUMA.
- Statistiques NUMA.
- Sous-système E/S.
Stockage et IO
- Logiciel RAID Refresher.
- Niveaux RAID, configuration RAID.
- Volumes logiques, Volumes et groupes de volumes, Création de volumes logiques.
- Dispositifs bruts.
- E/S asynchrones.
Travaux pratiques
Auditer le stockage.
Analyse du sous-système E/S
- iostats.
- iotop, blktrace, blkparse.
- btrace, btt, blkiomon.
Travaux pratiques
Analyse et interprétation des E/S.
Optimisation du sous-système réseau
- Vue d'ensemble du stack réseau.
- Optimisation de la latence et du débit.
- Paramètres matériels de l'interface réseau.
- Techniques de déchargement.
- Optimisation TCP.
- Outils de surveillance et de diagnostic
Travaux pratiques
Vue d'ensemble du stack réseau.
Audit
- Les méthodes.
- Ce qui ne doit pas être oublié.
- Les outils.
Travaux pratiques
Réaliser l’audit d’un système Linux, produire un rapport.