A.12. Menu « Kernel hacking »

L'option « Show timing information on printks » permet d'ajouter une datation aux traces du noyau. La réponse recommandée est 'N.

L'option « Enable __must_check logic » permet de marquer les fonctions qui retournent un résultat avec un attribut du compilateur GCC pour que les appels de ces fonctions qui ne vérifient pas le code de retour soient signalés par un avertissement. Cette option est donc une aide à la recherche de bogues pour les développeurs. Toutefois, elle n'est pas d'utilité pour les utilisateurs et la réponse recommandée est 'N.

L'option « Magic SysRq key » permet d'activer la prise en charge de la prise de contrôle du noyau dans un mini débogueur intégré via la touche système. Cette fonctionnalité permet d'effectuer certaines opérations sur le noyau en fonctionnement via des raccourcis claviers. De ce fait, elle constitue un trou de sécurité et ne doit être utilisée que par les développeurs. La réponse recommandée est 'N'.

L'option « Enable unused/obsolete exported symbols » permet de conserver les fonctions et les variables non utilisées dans le noyau pour les exporter, dans l'éventualité qu'un pilote ou un module externe les utiliserait. Cependant, conserver ces symboles accroît la taille du noyau de manière inutile, et il peut être intéressant de les supprimer. La réponse recommandée est 'Y.

L'option « Debug Filesystem » permet d'activer la prise en charge d'un système de fichiers spécial utilisé par les développeurs du noyau pour y stocker des fichiers de déboguage. La réponse recommandée est 'N'.

L'option « Run 'make headers_check' when building vmlinux » permet de faire en sorte qu'à chaque compilation du noyau, des tests sont effectués sur les en-têtes du noyau pour vérifier que ceux-ci n'exportent pas de structures privées du noyau vers l'espace utilisateur, et que ces en-têtes sont donc utilisables pour compiler des programmes utilisateurs. Cette option n'est utile que pour les développeurs du noyau, aussi la réponse recommandée est-elle 'N'.

L'option « Kernel debugging » permet d'accéder à une série d'options relatives au débogage du noyau. Ces options ne sont pas réellement utilise pour un utilisateur et ne sont présentes que pour les développeurs de gestionnaires de périphériques ou les développeurs du noyau. Toutefois, certaines options utiles de la configuration générale du noyau peuvent ne pas être accessibles si vous désactivez cette fonctionnalité, aussi la réponse recommandée est-elle 'Y'. Vous pourrez accéder à des options complémentaires si vous répondez par l'affirmative à cette question.

L'option « Debug shared IRQ handlers » permet d'activer des vérifications sur les pilotes de périphériques qui se partagent une même interruption matérielle. La réponse recommandée est-elle 'N'.

L'option « Detect Soft Lockups » permet d'activer la détection d'une catégorie de bogues du noyau, à cause desquels celui-ci peut boucler indéfiniment dans un traitement sans permettre aux autres parties du système de travailler. Cette option n'est utile que pour les développeurs du noyau, aussi la réponse recommandée est-elle 'N'.

L'option « Collect scheduler debugging info » permet de récupérer des informations de déboguage sur l'ordonnanceur de tâches du système et de les exposer via le système de fichiers virtuel /proc/. La réponse recommandée est 'N'.

L'option « Collect scheduler statistics » permet d'accumuler des statistiques sur l'ordonnanceur du système afin de déterminer les temps de latence et d'optimiser certains processus. La réponse recommandée est 'N'.

L'option « Collect kernel timers statistics » permet d'accumuler des statistiques sur les horloges périodiques utilisées en interne dans le noyau et de les exposer via le système de fichiers virtuel /proc/. La réponse recommandée est 'N'.

L'option « Debug slab memory allocations » permet d'activer des contrôles plus stricts sur les mécanismes d'allocation et de libération de la mémoire dans le noyau. La réponse recommandée est 'N'.

L'option « Debug slab memory allocations » permet d'activer des contrôles plus stricts sur les mécanismes d'allocation et de libération de la mémoire dans le noyau. La réponse recommandée est 'N'.

L'option « SLUB debugging on by default » permet d'activer les vérifications de l'allocateur mémoire SLUB par défaut au démarrage de la machine. Ce comportement par défaut peut être modifié en utilisant une option du noyau en ligne de commande lors du démarrage. La réponse recommandée est 'N'.

L'option « Debug preemptible kernel » permet d'activer une option de déboguage qui simule une machine multiprocesseur sur les noyaux préemtibles, afin de détecter les erreurs dans les portions de code prémptibles. La réponse recommandée est 'N'.

L'option « RT Mutex debugging, deadlock detection » permet de contrôler que les zones d'exlusion mutuelles sont correctement utilisées et de détecter et de signaler les cas d'interblocages immédiatement en cours d'exécution. La réponse recommandée est 'N'.

L'option « Built-in scriptable tester for rt-mutexes » permet d'inclure un outil de test complémentaire pour les zones d'exclusions mutuelles. La réponse recommandée est 'N'.

L'option « Spinlock and rw-lock debugging: basic checks » permet de contrôler que les sections critiques de type spinlock sont toujours bien initialisées et que les erreurs les plus classiques ne sont pas faites lors de leur utilisation. La réponse recommandée est 'N'.

L'option « Mutex debugging: basic checks » permet de contrôler que les zones d'exlusion mutuelles sont correctement utilisées. La réponse recommandée est 'N'.

L'option « Semaphore debugging » permet de contrôler que les sémaphores sont correctement utilisés. La réponse recommandée est 'N'.

L'option « Lock debugging: detect incorrect freeing of live locks » permet de contrôler que les primitives de synchronisation du noyau ne sont pas détruits de manière incorrecte lors qu'elles sont encore utilisées par un thread dans le noyau. La réponse recommandée est 'N'.

L'option « Lock debugging: prove locking correctness » permet de conserver en mémoire des informations sur l'utilisation des différentes primitives de synchronisation et sur le contexte de leur utilisation, afin de vérifier qu'aucun cas de blocage que ne peut se produire théoriquement en fonction de modèles mathématiques de ces blocages. Cette fonctionnalité rallentit le noyau, car il doit effectuer des traitements complémentaires à chaque utilisation de ces primitives de synchronisation. La réponse recommandée est 'N'.

L'option « Lock usage statistics » permet de récolter des statistiques sur les utilisations des verrous dans le noyau afin de détecter les portions de code critiques qui ne peuvent pas être exécutées en parallèle. Cette option n'est utile que pour les développeurs, et la réponse recommandée est 'N'.

L'option « Lock dependancy engine debugging » permet d'activer un jeu de tests complémentaires dans le fonctionnalité de vérification de l'utilisation des primitives de synchronisation afin de vérifier son intégrité. Cette option n'est utile que pour les développeurs, et la réponse recommandée est 'N'.

L'option « Spinlock debugging: sleep-inside-spinlock checking » permet d'activer une alarme en cas d'appel d'une méthode pouvant provoquer la suspension du processus appelant au sein d'une section critique de type spinlock. Ces sections critiques ne permettent en effet pas aux threads appelant de rendre la main à l'ordonnanceur du noyau, ce qui constitue un bogue grave que cette option permet de détecter. La réponse recommandée est 'N'.

L'option « Locking API boot-time self-tests » permet de vérifier au démarrage de la machine que les techniques de déboguage des primitives de synchronisation sont bien efficaces. La réponse recommandée est 'N'.

L'option « kobject debugging » permet d'activer la génération de traces complémentaires sur les objets systèmes. La réponse recommandée est 'N'.

L'option « Highmem debugging » permet d'activer la génération de traces complémentaires sur les accès à la mémoire haute pour les systèmes qui ont plus de un gigaoctet de mémoire. La réponse recommandée est 'N'.

L'option « Verbose BUG() reporting (add 70K) » permet d'activer la détermination des fichiers et numéros de ligne pour l'affichage des piles d'appel lors de l'affichage d'un bug grave. Cette option permet d'aider les développeurs pour la mise au point du noyau, mais augmente sensiblement sa taille. La réponse recommandée est 'N'.

L'option « Compile the kernel with debug info » permet de compiler le noyau avec les informations symboliques de déboguage. Ces informations sont très utiles pour les développeurs pour l'analyse des bogues. La réponse recommandée est 'N'.

L'option « Debug VM » permet d'activer la prise en charge de tests d'intégrité de la mémoire virtuelle plus poussés, mais qui rallentissent le système. La réponse recommandée est 'N'.

L'option « Debug linked list manipulation » permet d'activer la prise en charge de tests d'intégrité des structures de données de type liste chaînée et des fonctions de parcours de ces listes. La réponse recommandée est 'N'.

L'option « Compile the kernel with frame pointers » permet de désactiver une optimisation du compilateur dont le but est normalement de simplifier les appels de fonctions. Cette optimisation peut empêcher un débogage correct des piles d'appel du noyau, aussi les développeurs du noyau ils la désactivent-ils généralement à l'aide de cette option. La réponse recommandée est 'N'.

L'option « Force gcc to inline functions marked 'inline' » permet de demander au compilateur de toujours inclure les fonctions marquées inline en tant que telles, même si ses algorithmes d'optimisation lui indiquent que cela n'est pas nécessaire. Les versions récentes de GCC sont suffisemment efficaces pour toujours savoir comment se comporter, mais ce n'est pas le cas des anciennes versions, aussi cette option est-elle fournie afin de contrecarrer ses éventuels mauvais choix. La réponse recommandée est 'N'.

L'option « torture tests for RCU » permet d'activer un module qui réalise des tests poussés sur le code de gestion des copies de page sur modification, dans le but de détecter des bogues éventuels. La réponse recommandée est 'N'.

L'option « Linux Kernel Dump Test Tool Module » permet d'activer un module dont le but est de planter le noyau. L'utilité de ce module est de tester l'infrastructure de génération de rapports de plantage du noyau. Il ne faut évidemment pas l'utiliser, et la réponse recommandée est 'N'.

L'option « Fault-injection framework » permet d'activer la possibilité de simuler une erreur à différents niveaux dans le noyau. Les options suivantes permettent de prendre en charge la génération d'erreurs fictives au niveau des fonctions de réservation de mémoire et de gestion des entrées/sorties. La réponse recommandée est 'N'.

L'option « Early printk » permet d'activer les fonctions d'affichage sur la console et le port série très tôt dans la phase de démarrage du noyau. Cette option est utile si le noyau plante au démarrage avant qu'il n'ait eu le temps d'initialiser la console. Toutefois, son implémentation n'est pas très élégante et cette option ne doit être activée que si nécessaire. La réponse recommandée est donc 'N'.

L'option « Check for stack overflows » permet de vérifier qu'aucun débordement de pile n'a lieu dans le noyau. La réponse recommandée est 'N'.

L'option « Stack utilization instrumentaiton » active une fonctionnalité permettant de connaître la taille maximum utilisée par tous les threads du noyau. La réponse recommandée est 'N'.

L'option « Debug page memory allocations » permet de supprimer les pages mémoires libérées de l'espace d'adressage du noyau, afin de détecter les accès aux pages mémoires non disponibles. Cette fonctionnalité facilite la détection de bogues relatifs à l'utilisation de la mémoire. La réponse recommandée est 'N'.

L'option « Write protect kernel read-only data structures » permet de marquer les pages mémoire des structures en lecture seule du noyau comme inaccessibles en écriture au niveau de l'unité de gestion de la mémoire virtuelle. Cela permet de détecter les écritures sur ces structures, qui ne doivent jamais être modifiées après leur initialisation. La réponse recommandée est 'N'.

L'option « Enable IOMMU debugging » permet d'activer des tests sur l'utilisation des ressources DMA par les pilotes de périphérique sur les architectures x86_64 même lorsque la machine dispose de moins de 4 Go de mémoire. Cela permet de diagnostiquer les problèmes d'accès direct à la mémoire des périphériques 32 bits, et de déboguer les pilotes qui supposent que l'espace d'adressage est limité à 32 bits seulement. La réponse recommandée est 'N'.

L'option « IOMMU leak tracing » permet de vérifier que les ressources DMA allouées par les pilotes de périphérique sont bien relâchées. Cela permet de déboguer les pilotes qui n'utilisent pas correctement les fonctions de gestion des accès direct à la mémoire. La réponse recommandée est 'N'.

L'option « Use 4Kb for kernel stacks instead of 8Kb » permet de réduire la taille de la pile d'exécution des threads au sein du noyau. Cette réduction permet d'exécuter plus de threads dans le système. La réponse recommandée est 'N'.

L'option « Enable doublefault exception handler » permet de supprimer le gestionnaire d'exceptions pour les exceptions processeur récursives qui, sans traitement particulier, provoquent un redémarrage. Supprimer ce gestionnaire peut faire gagner quatre kilooctets de mémoire, ce qui peut être intéressant pour les systèmes embarqués, mais cela induit un risque de redémarrage impromptus. Les cas de double faute sont toutefois relativement rares, aussi cette option est-elle proposée. Toutefois, il est recommandé de répondre 'Y' à cette question afin de laisser le noyau gérer ces situations exceptionnelles, mais qui peuvent se produire en fonctionnement normal.