Optimiser le swap sous linux pour réduire les ralentissements et prolonger la vie des disques

Sous Linux, le swap est un espace sur le disque utilisé comme extension de la mémoire RAM lorsque celle-ci est saturée. Par défaut, le noyau Linux commence à swapper dès que l’utilisation de la RAM atteint environ 60 %, ce qui peut entraîner des ralentissements sur les disques durs (HDD) en raison des lectures/écritures fréquentes, et accélérer l’usure des SSD à cause des cycles d’écriture. Ce tutoriel explique pourquoi ce comportement par défaut peut poser problème, comment augmenter le seuil de swappiness (pour retarder l’utilisation du swap), et comment réduire l’usage du swap pour optimiser les performances et prolonger la durée de vie de vos disques. Suivez ce guide pas à pas pour configurer votre système Linux de manière efficace !

⚠️ Avertissement : Les modifications des paramètres système peuvent affecter la stabilité. Sauvegardez vos données et testez les changements dans un environnement non critique.

Comprendre le Swap et le Paramètre Swappiness

Le swap permet à Linux de déplacer des pages mémoire rarement utilisées de la RAM vers le disque, libérant ainsi de la mémoire pour les processus actifs. Le paramètre swappiness, qui varie de 0 à 100 (ou 200 dans les noyaux récents), contrôle l’équilibre entre l’utilisation de la RAM et du swap :

  • vm.swappiness = 60 (par défaut) : Le système commence à swapper dès que la RAM est utilisée à 60 %, même si de la mémoire est encore disponible.
  • vm.swappiness = 10 : Le swap est utilisé seulement quand la RAM est presque saturée, réduisant les accès disque.
  • vm.swappiness = 0 : Le swap est presque désactivé, sauf en cas de nécessité absolue (peut causer des erreurs OOM sur les systèmes à faible RAM).

Problèmes du swappiness par défaut :

  • Ralentissements sur HDD : Les lectures/écritures fréquentes sur un disque dur mécanique sont lentes, entraînant des latences perceptibles.
  • Usure des SSD : Les écritures répétées réduisent la durée de vie des SSD en consommant leurs cycles d’écriture limités.
  • Performance : Le swap est moins efficace que la RAM, ce qui peut dégrader les performances sur les systèmes avec beaucoup de RAM.

Prérequis

Avant de commencer, assurez-vous d’avoir :

  • Un système Linux (par exemple, Ubuntu 22.04, Debian 12, ou Fedora).
  • Un accès administrateur (sudo) pour modifier les paramètres système.
  • Un terminal pour exécuter les commandes.
  • Une sauvegarde des fichiers système critiques (par exemple, /etc/sysctl.conf).
  • De la RAM suffisante (au moins 8 Go recommandé) pour réduire la dépendance au swap.

Astuce : Vérifiez votre configuration actuelle du swap :

cat /proc/sys/vm/swappiness

Une sortie de 60 indique la valeur par défaut.

Étape 1 : Vérifier l’Utilisation Actuelle du Swap

Avant de modifier les paramètres, évaluez l’utilisation du swap sur votre système.

1.1 Afficher l’utilisation de la mémoire et du swap

Exécutez la commande suivante pour voir la mémoire et le swap utilisés :

free -h

Exemple de sortie :

              total        used        free      shared  buff/cache   available
Mem:           15Gi       7.2Gi       5.0Gi       1.2Gi       3.5Gi       7.8Gi
Swap:          2.0Gi       0.5Gi       1.5Gi

Si le swap est utilisé (0.5Gi dans cet exemple) alors que la RAM a encore de l’espace libre (5.0Gi), cela indique un swappiness trop agressif.

1.2 Identifier les processus utilisant le swap

Utilisez la commande top ou htop pour voir les processus consommant du swap :

htop

Dans htop, appuyez sur F2, ajoutez la colonne SWAP, et triez pour identifier les processus gourmands. Cela peut vous aider à optimiser les applications avant de modifier le swap.

Étape 2 : Modifier le Paramètre Swappiness

Pour retarder l’utilisation du swap et augmenter le seuil d’utilisation de la RAM, réduisez la valeur de vm.swappiness.

2.1 Tester une nouvelle valeur temporairement

Modifiez swappiness temporairement pour tester l’impact :

sudo sysctl vm.swappiness=10

Vérifiez la nouvelle valeur :

cat /proc/sys/vm/swappiness

Une sortie de 10 confirme le changement. Cette modification est temporaire et sera réinitialisée au redémarrage.

2.2 Rendre la modification permanente

Pour appliquer la valeur de manière permanente :

  1. Éditez le fichier de configuration /etc/sysctl.conf :
    sudo nano /etc/sysctl.conf

  2. Ajoutez ou modifiez la ligne suivante à la fin du fichier :
    vm.swappiness=10

  3. Enregistrez (Ctrl+O, Enter, Ctrl+X) et appliquez les changements :
    sudo sysctl -p

Recommandation : Une valeur de 10 est un bon compromis pour les systèmes avec 8 Go de RAM ou plus. Pour les systèmes avec moins de 4 Go, essayez 20 pour éviter les erreurs OOM (Out of Memory). Testez différentes valeurs pour trouver le meilleur équilibre.

Étape 3 : Ajuster la Pression du Cache (Facultatif)

Le paramètre vm.vfs_cache_pressure contrôle la priorité donnée à la mise en cache des fichiers par rapport à la mémoire des processus. Une valeur élevée peut pousser le système à swapper plus tôt. Par défaut, il est à 100.

3.1 Modifier vfs_cache_pressure

Pour réduire la pression sur le cache :

  1. Testez temporairement :
    sudo sysctl vm.vfs_cache_pressure=50

  2. Vérifiez :
    cat /proc/sys/vm/vfs_cache_pressure

  3. Rendez permanent en ajoutant dans /etc/sysctl.conf :
    vm.vfs_cache_pressure=50

  4. Appliquez :
    sudo sysctl -p

Note : Une valeur de 50 réduit la priorité du cache, favorisant la mémoire des processus. Soyez prudent, car une valeur trop basse peut affecter les performances des systèmes de fichiers.

Étape 4 : Réduire l’Usage du Swap sur SSD

Pour minimiser l’usure des SSD, configurez le swap sur un disque HDD si possible ou optimisez son utilisation.

4.1 Déplacer le Swap vers un HDD (Si Applicable)

Si vous avez un HDD et un SSD, déplacez le swap sur le HDD :

  1. Désactivez le swap actuel :
    sudo swapoff -a

  2. Créez un fichier swap sur le HDD (par exemple, /mnt/hdd/swapfile) :
    sudo fallocate -l 2G /mnt/hdd/swapfile
    sudo chmod 600 /mnt/hdd/swapfile
    sudo mkswap /mnt/hdd/swapfile

  3. Activez le nouveau swap :
    sudo swapon /mnt/hdd/swapfile

  4. Mettez à jour /etc/fstab pour rendre permanent :
    sudo nano /etc/fstab

    Ajoutez :
    /mnt/hdd/swapfile none swap sw 0 0

  5. Vérifiez :
    swapon --show

4.2 Optimiser pour SSD

Si le swap reste sur un SSD :

  • Réduisez la taille du swap (par exemple, 1-2 Go pour 16 Go de RAM) pour limiter les écritures.
  • Activez TRIM pour optimiser les performances SSD :
    sudo systemctl enable fstrim.timer

Étape 5 : Surveiller et Tester les Performances

Après avoir modifié les paramètres, surveillez l’impact sur les performances.

5.1 Surveiller l’utilisation du swap

Vérifiez régulièrement l’utilisation :

watch -n 5 free -h

Cette commande actualise l’utilisation toutes les 5 secondes. Si le swap reste peu utilisé, vos modifications sont efficaces.

5.2 Tester les performances

Simulez une charge mémoire pour tester le comportement :

stress-ng --vm 4 --vm-bytes 80% --timeout 60s

Installez stress-ng si nécessaire (sudo apt install stress-ng). Surveillez avec htop pour voir si le swap est utilisé prématurément.

Étape 6 : Dépannage et Bonnes Pratiques

Pour éviter les problèmes :

  • Erreurs OOM : Si le système plante avec un swappiness trop bas, augmentez légèrement la valeur (par exemple, 20) ou ajoutez de la RAM.
  • Performances dégradées : Si les applications sont lentes, vérifiez si le cache est trop réduit (vm.vfs_cache_pressure) et ajustez.
  • Swap non détecté : Assurez-vous que le fichier swap est activé :
    swapon --show

  • SSD : Surveillez l’usure du SSD avec smartctl :
    sudo apt install smartmontools
    sudo smartctl -a /dev/nvme0

  • Support : Consultez Ask Ubuntu ou Reddit r/linuxadmin pour des conseils communautaires.

Conclusion

Le swap sous Linux est une fonctionnalité essentielle, mais son comportement par défaut (swappiness à 60 %) peut entraîner des ralentissements sur HDD et une usure prématurée des SSD. En réduisant vm.swappiness à 10, en ajustant vm.vfs_cache_pressure, et en optimisant la configuration pour SSD ou HDD, vous pouvez minimiser l’usage du swap, améliorer les performances, et prolonger la durée de vie de vos disques. Ce tutoriel vous a guidé à travers la vérification de l’utilisation, la modification des paramètres, et la surveillance des résultats. Testez vos réglages et ajustez-les selon vos besoins pour un système Linux optimal.

Des questions ou des problèmes ? Partagez-les dans les commentaires ou rejoignez la communauté sur Reddit r/linux ou Ask Ubuntu. Bonne optimisation !

Romain D.

Passionné d'informatique perdu dans une trame Ethernet. Ce blog est mon bloc-notes public.

Ajouter un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Romain D.

Passionné d'informatique perdu dans une trame Ethernet. Ce blog est mon bloc-notes public.