Parce que la plupart croient que l'échange = mauvais et que si vous ne réduisez pas le swappiness, le système échangera quand il n'en a pas vraiment besoin Aucune de celles-ci n'est vraiment vraie. Les gens associent les échanges aux moments où leur système est en train de s'enliser. Cependant, il s'agit surtout d'échanges parce que le système s'enlise, et non l'inverse. Lorsque le système échangera, il aura déjà pris en compte le coût de performance dans sa décision d’échanger et décidera de ne pas le faire, ce qui entraînerait une pénalité globale plus grande en termes de performance ou de stabilité du système.
Globalement, les paramètres par défaut donnent de bonnes performances et une bonne stabilité. Je recommanderais de le laisser par défaut. Il existe d’autres possibilités pour Linux d’améliorer la gestion de sa mémoire afin de résoudre certains problèmes, mais dans l’ensemble, le contrôle swappiness n’est pas une bonne solution de contournement: ajustez-le dans un sens, vous pouvez résoudre un problème et en créer d’autres. Dans la mesure du possible, installer simplement plus de RAM physique (et laisser Swappiness seul) éclipse tous les autres remèdes.
Comment Linux utilise la RAM
Toute RAM non utilisée par les applications peut être utilisée comme "cache". Le cache est important pour un système rapide et fluide, car il accélère les lectures et les écritures sur le disque.
Si vos applications augmentent leur utilisation de la mémoire au point d’utiliser presque toute votre mémoire RAM, votre mémoire cache diminuera et, en conséquence, les opérations sur les disques seront ralenties. De nos jours, il ne suffit pas d'avoir seulement des dizaines de mégaoctets, ou moins, pour le cache.
Si les applications augmentent encore davantage l'utilisation de la mémoire (en supposant que vous n'avez pas d'espace de swap), vous n'aurez non seulement pas d'espace pour le cache, mais vous manquerez éventuellement de mémoire et votre système devra arrêter les processus en cours d'exécution. Tuer des processus est pire qu'un ralentissement, car il vous donne un système instable et imprévisible.
Comment Linux utilise le swap
Pour lutter contre ces deux problèmes, votre système peut réaffecter de la mémoire d'application rarement utilisée à l'espace de permutation sur votre disque, libérant ainsi de la mémoire vive. La RAM supplémentaire peut empêcher les processus de disparaître en raison d'une insuffisance de mémoire et peut récupérer un peu de cache afin que les opérations de disque puissent fonctionner plus facilement.
Cette réallocation ne se fait toutefois pas selon un seuil défini. Vous n'atteignez pas un certain pourcentage d'allocation après lequel Linux commence à permuter. Il a un algorithme "flou". Il prend en compte de nombreux éléments, qui peuvent être décrits de la manière suivante: "quelle pression existe pour l’allocation de mémoire". S'il y a beaucoup de "pression" pour allouer une nouvelle mémoire, cela augmentera les chances que certaines personnes soient permutées pour gagner de la place. S'il y a moins de "pression", cela réduira ces chances.
Votre système possède un paramètre "swappiness" qui vous aide à modifier la manière dont cette "pression" est calculée. Il est souvent représenté à tort comme un "pourcentage de RAM", mais ce n'est pas une valeur, mais simplement une valeur utilisée dans la formule. Des valeurs comprises entre 40 et 60 sont les valeurs recommandées, 60 étant la valeur par défaut de nos jours.
Permettre à votre système d’interchanger quand il le faut est globalement une très bonne chose, même si vous avez beaucoup de RAM. Si vous permutez votre système s'il le souhaite, vous aurez l'esprit tranquille: si vous rencontrez un problème de mémoire insuffisante, même temporairement (tout en exécutant un processus court utilisant beaucoup de mémoire), votre système a une seconde chance de tout faire fonctionner. Si vous allez jusqu'à désactiver complètement le swap, vous risquez d'être tué par des processus faute d'allocation de mémoire.
Que se passe-t-il lorsque le système est embourbé et que les échanges sont importants?
L’échange étant une opération lente et coûteuse, le système l’évite sauf s’il calcule que le compromis entre les performances du cache compensera globalement ou s’il est nécessaire d’éviter la destruction des processus.
Très souvent, les gens vont regarder leur système qui écrase énormément le disque et utilise beaucoup d’espace d’échange et de blâme pour les échanger. C'est la mauvaise approche à prendre. Si la permutation atteint un jour cette limite, cela signifie que la permutation est une tentative de votre système de gérer des problèmes de mémoire insuffisante, et non la cause du problème, et que, sans permutation, le processus en cours va simplement disparaître de manière aléatoire.
Qu'en est-il des systèmes de bureau? N'ont-ils pas besoin d'une approche différente?
Les utilisateurs d'un ordinateur de bureau s'attendent en effet à ce que le système "se sente réactif" en réponse à des actions initiées par l'utilisateur telles que l'ouverture d'une application, qui est le type d'action qui peut parfois déclencher un échange en raison de l'augmentation de la mémoire requise.
Certaines personnes tentent d’y remédier en réduisant le paramètre swappiness, ce qui peut augmenter la tolérance du système aux applications utilisant de la mémoire et disposant de peu d’espace en cache.
Cependant, il ne s'agit que de déplacer des buts. La première application peut maintenant se charger sans opération d'échange, mais elle laissera moins de mou pour l'application suivante à charger. Le même échange peut se produire ultérieurement, lorsque vous ouvrez une application à la place. Dans l’intervalle, les performances du système sont globalement inférieures en raison de la taille réduite du cache. Par conséquent, il peut être difficile de mesurer tout avantage lié au paramètre swappiness réduit, ce qui réduit parfois le délai de permutation, mais ralentit les performances à un autre moment. Réduire un peu la permutation peut être justifié si vous savez ce que vous faites, mais le ramener à 10% peut laisser le système tolérant pour des tailles de mémoire cache très faibles et le rendre plus susceptible de devoir basculer à court terme.
Vous devez éviter de désactiver complètement le swap car vous perdez la protection supplémentaire contre les conditions de manque de mémoire, qui peuvent provoquer le blocage ou la mort des processus.
Le remède le plus efficace est de loin d'installer plus de RAM si vous pouvez vous le permettre.
L'échange peut-il être désactivé sur un système disposant de beaucoup de RAM, de toute façon?
Si vous disposez de beaucoup plus de RAM que nécessaire pour les applications, vous aurez rarement besoin de permuter. Désactiver le swap ne fera probablement pas de différence la plupart du temps. Mais si vous avez beaucoup de RAM, laisser le swap activé ne sera pas pénalisé, car le système ne permutera pas quand cela ne sera pas nécessaire.
Les seules situations dans lesquelles cela ferait une différence seraient dans la situation improbable où le système se trouve à court de mémoire et, par conséquent, le système de cache est entravé et c'est dans ce type de situation que vous souhaiteriez le plus échanger. Vous pouvez donc laisser en toute sécurité les paramètres normaux d’échange pour une tranquillité d’esprit accrue, sans que cela ait un effet négatif lorsque vous avez beaucoup de mémoire.
Mais comment l'échange peut-il accélérer mon système? L'échange ne ralentit-il pas les choses?
Le transfert de données de la RAM vers l’échange est une opération lente, mais il n’est pris que lorsque le noyau est pratiquement certain que l’avantage global résultant de la conservation d’une taille de cache raisonnable l'emportera sur cette éventualité.
Une fois les données échangées, quand les données sont-elles à nouveau publiées?
Toute partie donnée de la mémoire sortira de l'échange dès qu'elle sera utilisée - lue ou écrite. Cependant, la mémoire échangée est généralement la mémoire qui n'a pas été utilisée depuis longtemps et qui ne devrait pas être nécessaire bientôt.
Transférer des données hors échange prend à peu près aussi longtemps que de les insérer. Votre noyau n'en supprimera pas les données s'il n'en a pas besoin. Bien que les données est en échange et non utilisé, il laisse plus de mémoire pour d' autres choses qui sont utilisés, et plus le cache du système.
Existe-t-il des cas où la réduction de la swappiness est appropriée?
Oui. Si vous exécutez un serveur dédié à une application serveur particulière ne bénéficiant pas du cache système. Certains serveurs de base de données, tels que le serveur Oracle, MySQL / MariaDB, recommandent dans certains cas de réduire la permutation de 1 à 10, car ces moteurs de base de données utilisent leur propre mise en cache.
Notez que cela n’est vrai que si votre système est dédié à cette tâche et dans le cas de MySQL / MariaDB que si vous utilisez uniquement InnoDB ou XtraDB, et non MyISAM ou Aria, etc.