Comment gérer l'utilisation de l'échange dans Linux

Vous avez peut-être rencontré des ralentissements système, une utilisation élevée de l’échange ou des problèmes de mémoire faible dans votre système Linux. Un conseil habituel est de “diminuer la valeur de swappiness”, pour réduire l’utilisation de l’échange. Mais qu’est-ce que le swappiness ? Et est-il vraiment bon de le modifier ?

Remarque : nous n’allons pas entrer dans les détails de la partition d’échange. Vous pouvez tout lire à ce sujet dans notre article sur ce que vous devez savoir sur la partition d’échange dans Linux.

Swappiness

Il existe une valeur appelée swappiness dans les systèmes de type UNIX qui détermine comment les pages en mémoire seront gérées. Sa valeur par défaut sur la plupart des systèmes est “60”, mais elle peut être définie à n’importe quel niveau entre 0 et 100. Si la mémoire devient faible, le noyau évacuera soit certains caches de fichiers pour avoir plus de RAM libre pour les processus, soit il échangera certaines pages de processus de la RAM vers le disque.

Une valeur par défaut de 60 signifie que l’échange sera utilisé moins souvent, et que les caches d’E/S seront plus susceptibles d’être libérés pour réallouer la RAM. L’éviction des caches est considérée comme “moins coûteuse” (moins gourmande en ressources), tandis que l’échange de pages implique des lectures et écritures sur disque, ce qui les rend plus “coûteuses”. Avec une valeur de ‘60’, l’utilisation de l’échange sera légèrement inférieure à celle de la réutilisation du cache. Si la valeur de swappiness est augmentée à 100, l’échange et l’éviction des caches de fichiers seront utilisés avec un poids égal. Cela signifie plus d’échange et des E/S plus rapides qu’en par défaut. Des valeurs plus basses comme “10” signifient que l’échange sera utilisé beaucoup moins, et que les caches d’E/S pourront être évacués beaucoup plus tôt au profit des processus. Cela pourrait augmenter l’interactivité mais pourrait également nuire à la vitesse des E/S.

Diminuer le swappiness

Vous verrez souvent le conseil sur les sites Web et les forums de réduire le swappiness à environ “10”. Cela est censé accélérer les choses en utilisant moins d’échange et en gardant plus de processus dans la RAM physique. Cette logique pourrait être un peu trop simpliste et ne pas être une “solution universelle”.

Diminuer la valeur du swappiness pourrait être bénéfique dans les scénarios suivants :

  • Pour les systèmes de bases de données, ou si vous utilisez beaucoup d’applications gourmandes en bases de données : Les bases de données gèrent généralement le caching de fichiers beaucoup mieux que le système d’exploitation. Si vous réduisez le swappiness, vous limiterez le caching de fichiers du système d’exploitation, donnant ainsi la chance à la base de données de gérer ses propres caches.
  • Pour l’interactivité : Si vous multitâchez beaucoup mais manipulez peu de fichiers ou n’ouvrez pas de grands documents, cela pourrait améliorer la fluidité de votre système. Moins de processus seront écrits sur disque, et comme l’accès à la RAM est beaucoup plus rapide, votre ordinateur peut sembler plus rapide. Vous devez également garder à l’esprit que cela peut réduire les performances des E/S. Si vous avez des disques lents ou faites quoi que ce soit de gourmand en E/S, cela pourrait même nuire aux performances.
  • Pour le placebo : Beaucoup pensent qu’un lower swappiness va accélérer le système. Sérieusement, si vous pensez que votre système est plus rapide, cela peut également avoir pour effet de le percevoir comme étant plus rapide.

Gardez à l’esprit que diminuer le swappiness pourrait entraîner des plantages et des processus tués aléatoirement par le système afin de libérer de la mémoire. Diminuer le swappiness sera mieux si vous avez suffisamment de RAM disponible pour faire fonctionner votre système en douceur. Mais vous devriez garder la valeur au-dessus de “10”, car une certaine utilisation de l’échange est bonne à avoir.

Augmenter le swappiness

Augmenter le swappiness peut avoir l’avantage général d’accélérer les E/S. Bien que cela ne soit pas souvent conseillé, augmenter le swappiness pourrait être utile si :

  • Vous effectuez des opérations intensives d’E/S, et vous avez des HDD vieux et lents. Par exemple : effectuer des sauvegardes ou modifier en masse des images peut être gourmand en E/S (Une notable exception est les bases de données qui sont naturellement intensives en E/S mais pourraient bénéficier d’une valeur de swappiness plus basse comme indiqué ci-dessus.).
  • Vous avez peu de mémoire mais disposez de disques relativement rapides. Dans ce scénario peu probable, une valeur de swappiness plus élevée pourrait aider à gérer la mémoire plus efficacement (bien que la régler trop haut puisse à nouveau nuire aux performances.).

Comment gérer le swappiness

Tout d’abord, vous devriez envisager si vous devez toucher à cette valeur ou non. Avez-vous des problèmes de performances ? Et plus important encore, avez-vous déjà essayé d’autres ajustements système ? Sinon, il est probablement préférable de chercher ailleurs en premier. Mais si vous avez un scénario spécifique en tête, vous pourriez vouloir continuer.

Ensuite, quelle est la lourdeur de votre utilisation de l’échange ? Vous pouvez le découvrir avec n’importe quel outil de surveillance de performances de votre choix ou avec la commande free. free -m vous donnera un aperçu de l’utilisation de la mémoire en mégaoctets. Pour un suivi continu, vous voudrez peut-être utiliser watch.

watch -n 1 free -m

Cela exécutera la commande free -m chaque seconde et affichera sa sortie jusqu’à ce que vous appuyiez sur “Ctrl + C.”

swappiness-free-m

Comme vous le voyez ci-dessus, très peu d’échange est utilisé par le système sur lequel cet article est écrit.

Maintenant, si vous constatez que de l’échange se produit, vous pourriez être intéressé de savoir combien d’entre eux est actif. La commande vmstat vous dira tout ce que vous avez besoin de savoir sur l’utilisation de la mémoire virtuelle de votre système (échange et RAM physique ensemble).

vmstat 1

swappiness-vmstat

Vous devez vérifier la colonne swapsi signifie “swap in”, et so signifie “swap out”. Si les chiffres sont élevés, cela signifie une grande activité d’échange, ce qui est un indicateur de problèmes de mémoire faible. Si vous voyez une utilisation d’échange par free mais peu d’échanges actifs, il est peut-être temps de modifier le swappiness.

Il est également bon d’établir d’autres jalons de performance comme les E/S de disque, les moyennes de charge, etc., afin que lorsque vous testez vos nouvelles valeurs de swappiness, vous ayez quelque chose à comparer.

Pour tester une valeur de swappiness différente, vous pouvez la définir temporairement avec la commande sysctl. Cela ne nécessite pas de redémarrage, et l’effet est immédiat. En fait, redémarrer rétablira la valeur par défaut, il est donc assez sûr d’expérimenter :

sudo sysctl vm.swappiness=10

Bien sûr, vous pouvez mettre n’importe quelle valeur à la place de “10” (entre “0” et “100”).

Une fois que vous avez trouvé la valeur que vous préférez, vous pouvez modifier la configuration système de façon permanente en éditant “ /etc/sysctl.conf “

sudo nano /etc/sysctl.conf

et en ajoutant les lignes

# Définir la valeur du swappiness  
vm.swappiness=10

à la fin de ce fichier, avec la valeur réglée à nouveau selon votre préférence, bien sûr.

Conclusion

Abaisser le swappiness à “10” est souvent conseillé comme une solution universelle, mais l’utilisation réelle de la technique pourrait être un peu plus compliquée que cela. En établissant des benchmarks, en connaissant votre système, comment vous l’utilisez, et ce que vous en attendez, vous pouvez affiner votre utilisation de l’échange et obtenir une augmentation des performances (soit d’interactivité, soit d’E/S).