Parce que la plupart des gens croient que l'échange est mauvais et que si vous ne réduisez pas l'échange, le système échangera alors qu'il n'en a pas besoin. Ces deux idées ne sont pas vraies. Les gens associent le swapping à des moments où leur système s'enlise, mais c'est surtout le swapping qui est en cause. porque c'est le système qui s'enlise, et non l'inverse. Lorsque le système change, il a déjà pris en compte le coût des performances dans sa décision de changer, et a décidé que ne pas le faire aurait une plus grande pénalité globale dans les performances ou la stabilité du système.
Dans l'ensemble, les paramètres par défaut permettent d'obtenir de bonnes performances générales et une bonne stabilité. Je recommande de les laisser par défaut. Il existe d'autres moyens pour Linux d'améliorer sa gestion de la mémoire afin de résoudre certains cas limites, mais dans l'ensemble, le contrôle de la permutation n'est pas une bonne solution de rechange - en l'ajustant dans une direction, vous pouvez résoudre un problème et en créer d'autres. Dans la mesure du possible, le simple fait d'installer plus de RAM physique (et de ne pas toucher au swappiness) éclipse tous les autres remèdes.
Comment Linux utilise la RAM
Toute la RAM qui n'est pas 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 la quasi-totalité de votre RAM, votre cache va rétrécir et, en moyenne, les opérations sur le disque vont ralentir en conséquence. De nos jours, il ne suffit pas d'avoir quelques dizaines de mégaoctets, ou moins, pour le cache.
Si les applications augmentent encore leur utilisation de la mémoire - en supposant que vous n'ayez pas d'espace swap - non seulement vous n'aurez plus d'espace pour le cache, mais vous finirez par manquer de mémoire et votre système devra tuer les processus en cours. L'arrêt 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 une partie de la mémoire des applications rarement utilisées à l'espace d'échange de votre disque, libérant ainsi de la RAM. La RAM supplémentaire permet d'éviter que les processus ne meurent faute de mémoire et de récupérer un peu de cache afin que les opérations sur le disque puissent se dérouler plus facilement.
Cette réaffectation n'est cependant pas effectuée en fonction d'un seuil précis. Vous n'atteignez pas un certain pourcentage d'allocation après lequel Linux commence à échanger. Il a un algorithme "flou". Il prend en compte un grand nombre d'éléments, qui peuvent être décrits au mieux par "la pression exercée sur l'allocation de mémoire". S'il y a beaucoup de "pression" pour allouer de la nouvelle mémoire, alors il y aura plus de chances que certaines soient échangées pour faire plus de place. S'il y a moins de "pression", ces chances diminueront.
Votre système dispose d'un paramètre de "swappiness" qui vous permet d'ajuster la façon dont cette "pression" est calculée. Il est souvent faussement représenté comme un "pourcentage de RAM" mais ce n'est pas le cas, c'est juste une valeur qui est utilisée dans la formule. Les valeurs comprises entre 40 et 60 sont les valeurs raisonnables recommandées, 60 étant la valeur par défaut de nos jours.
Permettre à votre système de permuter quand il le doit est globalement une très bonne chose, même si vous avez beaucoup de RAM. En laissant votre système permuter si nécessaire, vous avez l'assurance que si vous vous trouvez dans une situation de mémoire faible, même temporairement (pendant l'exécution d'un processus court qui utilise beaucoup de mémoire), votre système a une seconde chance de continuer à fonctionner. Si vous allez jusqu'à désactiver complètement l'échange, vous risquez de tuer des processus parce qu'ils ne sont pas en mesure d'allouer de la mémoire.
Que se passe-t-il lorsque le système est embourbé et que les échanges sont nombreux ?
La permutation est une opération lente et coûteuse, aussi le système l'évite-t-il à moins qu'il ne calcule que la contrepartie en termes de performances de la mémoire cache sera globalement compensée, ou si cela est nécessaire pour éviter de tuer des processus.
Souvent, les gens regardent leur système qui fait un usage intensif du disque et qui utilise beaucoup d'espace swap, et ils accusent le swapping. C'est une mauvaise approche. Si le swapping atteint cet extrême, cela signifie que le swapping est la tentative de votre système de gérer les problèmes de mémoire faible, et non la cause du problème, et que sans swapping, votre processus en cours mourra de façon aléatoire.
Qu'en est-il des systèmes de bureau ? Ne nécessitent-ils pas une approche différente ?
Les utilisateurs d'un système de bureau s'attendent en effet à ce que le système soit "réactif" en réponse à des actions initiées par l'utilisateur, comme l'ouverture d'une application, qui est le type d'action qui peut parfois déclencher un swap en raison de l'augmentation de la mémoire requise.
L'une des façons d'y remédier est de réduire le paramètre de swappiness, ce qui peut augmenter la tolérance du système aux applications qui consomment de la mémoire et manquent d'espace cache.
Cependant, ce n'est qu'un déplacement des poteaux de but. La première application peut maintenant se charger sans opération de permutation, mais elle laissera moins de mou pour l'application suivante qui se charge. La même opération de permutation peut se produire plus tard, lorsque vous ouvrirez une autre application. Dans l'intervalle, les performances du système sont globalement inférieures en raison de la taille réduite du cache. Ainsi, tout avantage du paramètre de swappiness réduit peut être difficile à mesurer, réduisant le délai de swapping à certains moments mais causant d'autres performances lentes à d'autres moments. Réduire un peu la permutation peut être justifié si vous savez ce que vous faites, mais la réduire jusqu'à 10 peut rendre le système tolérant à des tailles de cache très faibles et le rendre plus susceptible de devoir permuter à court terme.
La désactivation complète de l'échange doit être évitée, car vous perdez la protection supplémentaire contre les conditions d'absence de mémoire qui peuvent provoquer le plantage ou la mort des processus.
Le remède le plus efficace, et de loin, est d'installer plus de RAM si vous pouvez vous le permettre.
Le swap peut-il être désactivé sur un système qui a beaucoup de RAM de toute façon ?
Si vous avez beaucoup plus de RAM que ce dont vous avez besoin pour les applications, vous aurez rarement besoin de l'échange. Par conséquent, la désactivation de l'échange ne fera probablement pas de différence dans toutes les circonstances habituelles. Mais si vous avez beaucoup de RAM, laisser l'échange activé n'aura pas non plus d'inconvénient car le système n'échange pas quand il n'en a pas besoin.
Les seules situations dans lesquelles il serait faire une différence serait dans la situation improbable où le système se retrouve à court de mémoire et par conséquent le système de cache est entravé, et c'est dans ce type de situation où vous pourriez veulent échanger la plupart. Vous pouvez donc laisser le swap sur ses paramètres normaux pour une plus grande tranquillité d'esprit sans qu'il ait jamais d'effet négatif lorsque vous avez beaucoup de mémoire.
Mais comment swap peut accélérer mon système ? L'échange ne ralentit-il pas les choses ?
Le transfert des données de la RAM vers l'espace d'échange est une opération lente, mais elle n'est effectuée que lorsque le noyau est certain que le bénéfice global résultant de la conservation d'une taille de cache raisonnable sera plus important que cela. Si votre système devient vraiment lent à cause du "thrashing" du disque, l'échange n'en est pas la cause, il essaie seulement de l'atténuer.
Une fois que les données sont dans le swap, quand est-ce qu'elles en ressortent ?
Toute partie de la mémoire revient de l'espace d'échange dès qu'elle est utilisée, en lecture ou en écriture. Cependant, la mémoire qui est échangée est généralement celle qui n'a pas été utilisée depuis longtemps et dont on ne s'attend pas à avoir besoin prochainement.
Transférer des données hors du swap prend autant de temps que de les y mettre. Votre noyau n'enlèvera pas de données s'il n'en a pas besoin. Tant que les données sont dans l'espace d'échange et ne sont pas utilisées, il reste plus de mémoire pour d'autres choses que les données. アール utilisé, et plus de cache système.
Existe-t-il des cas où la réduction de la permutation est appropriée ?
Oui. Si vous utilisez un serveur dédié à une application serveur particulière qui ne bénéficie pas du cache système. Certains serveurs de bases de données tels que le serveur Oracle, MySQL/MariaDB recommandent dans certains cas de réduire le swappiness à 1 à 10 car ces moteurs de bases de données utilisent leur propre cache.
Notez que cela n'est vrai que si votre système est dédié à cette seule tâche, et dans le cas de MySQL/MariaDB, uniquement si vous utilisez uniquement InnoDB ou XtraDB, et non MyISAM ou Aria, etc. Si l'objectif dédié de votre système est centré sur une application qui fait sa propre mise en cache et ne bénéficie pas du cache système, réduire la permutation peut être une bonne idée.