Kernel

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Noyau Linux (mémoire, E/S, boot)
Paquet doc kernel-doc
Contexte Concepts noyau 32/64 bits, historiquement documentés sur RHEL/CentOS 5/6
Voir aussi Systemctl (services), Chkconfig (services legacy)

Aide-mémoire sur quelques aspects internes du noyau Linux utiles en exploitation : gestion de la mémoire (zones et OOM killer), scheduler d'entrées/sorties, et support TRIM sur SSD.

Documentation embarquée

Le noyau Linux dispose d'une documentation complète installable localement via le paquet :

yum install kernel-doc     # ou dnf sur les distributions récentes

Elle est ensuite disponible dans /usr/share/doc/kernel-doc-<version>/Documentation/.

Cartographie visuelle du noyau (sous-systèmes et dépendances) : http://www.makelinux.net/kernel_map/

Gestion de la mémoire

La gestion de la mémoire dans Linux est prise en charge par le sous-système appelé « VM » (Virtual Memory).

Sur un système Intel 32 bits, la mémoire physique est scindée en plusieurs zones. Avec un noyau « normal » 32 bits (par opposition au noyau « hugemem »), un peu moins de 1 Go de mémoire est alloué à la zone normale et le reste à la mémoire haute :

Zone DMA       premiers 16 Mo de mémoire
Zone Normale   16 Mo à ~1 Go
Zone Highmem   ~1 Go à la fin

La plupart des opérations du noyau sont effectuées en zone normale, il s'agit donc de la zone la plus critique du système : le noyau y conserve entre autres les tables de pages des processus (correspondance entre adresses virtuelles applicatives et adresses physiques), ainsi que les tables d'inodes des systèmes de fichiers. La mémoire haute, elle, sert principalement aux caches/buffers des systèmes de fichiers et aux allocations des applications.

Lorsque le remplissage de la zone normale atteint un certain seuil, le thread noyau kswapd est réveillé et commence à libérer de la mémoire de façon asynchrone. Si la pression mémoire devient trop forte, la libération se fait de manière synchrone, et si le noyau ne parvient toujours pas à récupérer assez de mémoire, il finit par arrêter des processus : c'est l'OOM killer (Out Of Memory).

⚠️ L'OOM killer peut intervenir même s'il reste du swap disponible et même s'il reste de la mémoire haute libre, uniquement parce que la pression sur la zone normale est trop forte — c'est un piège classique de diagnostic sur les architectures 32 bits.

Pistes pour limiter ce risque :

  • Passer à un système 64 bits sur le matériel qui le supporte — l'architecture 64 bits utilise
 un adressage différent qui ne scinde pas la mémoire entre zone normale et zone haute.
  • Augmenter lower_zone_protection (ou son équivalent moderne
 vm.lowmem_reserve_ratio, cf. sysctl) pour forcer le noyau à libérer
 la mémoire plus tôt et retarder le risque de manque.
  • Sur RHEL4, utiliser un noyau « hugemem » qui permet d'étendre la zone normale jusqu'à 4 Go
 (si la mémoire physique disponible le permet).

Ces contraintes de zones mémoire sont spécifiques aux noyaux 32 bits ; elles ne s'appliquent pas aux systèmes 64 bits actuels.

Scheduler d'entrées/sorties (I/O scheduler)

Le scheduler d'E/S détermine l'ordre et le regroupement des requêtes disque. Sur les anciens systèmes (GRUB legacy), il se fixe au boot via un paramètre noyau dans /boot/grub/grub.conf, en fin de ligne kernel :

kernel /vmlinuz-2.6.32-300.10.1.el5uek ro root=/dev/vg_root/lv_root rhgb quiet elevator=deadline

Le scheduler actif (et les autres disponibles) se consulte et se change à chaud par nœud de périphérique bloc, sans reboot :

cat /sys/block/xvdb/queue/scheduler
# [noop] anticipatory deadline cfq

echo deadline > /sys/block/xvdb/queue/scheduler   # changement à chaud

Sur les noyaux plus récents (multiqueue / blk-mq), les schedulers historiques (noop, anticipatory, cfq) ont été remplacés par none, mq-deadline, kyber et bfq — la commande cat /sys/block/<disque>/queue/scheduler reste la même pour consulter la liste réellement disponible sur un système donné (à vérifier au cas par cas selon le noyau).

Complément : http://www.gnutoolbox.com/linux-io-elevator/

TRIM et SSD

Sur SSD, l'option de montage discard (TRIM) permet au système de fichiers d'indiquer au contrôleur quels blocs ne sont plus utilisés, ce qui maximise les performances et la durée de vie du disque dans la durée. Systèmes de fichiers supportés : Btrfs, Ext4, XFS, JFS.

Vérifier que le disque supporte TRIM :

hdparm -I /dev/sda | grep TRIM

Activer l'option au montage, dans /etc/fstab :

/dev/sda1  /       ext4   defaults,noatime,discard   0  1
/dev/sda2  /home   ext4   defaults,noatime,discard   0  2

⚠️ Le TRIM synchrone (discard à chaque suppression) peut dégrader les performances sur certains contrôleurs/firmwares plus anciens ; une alternative plus sûre est un TRIM périodique via un timer fstrim.timer (systemd) plutôt que l'option discard en continu (à vérifier selon le matériel et la distribution).

Voir aussi

  • Systemctl — gestion des services sous systemd
  • Chkconfig — gestion des services sous SysV init