76 votes

Pourquoi la plupart des gens recommandent-ils de réduire la swappiness à 10-20 ?

J'ai vu sur plusieurs sites qui recommandent de réduire la swappiness à 10-20 pour de meilleures performances.

Est-ce un mythe ou non? Est-ce une règle générale? J'ai un ordinateur portable avec 4 Go de RAM et un disque dur SSD de 128 Go, quelle valeur me recommandez-vous pour ma swappiness?

Merci.

108voto

thomasrutter Points 33791

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.

19voto

Linux dude Points 207

Sur un ordinateur de bureau classique, vous avez 4 à 5 tâches actives qui consomment 50 à 60 % de la mémoire. Si vous définissez la swappiness à 60, alors environ 1/4 à 1/3 des pages des tâches ACTIVES seront échangées. Cela signifie que, pour chaque changement de tâche, pour chaque nouvel onglet ouvert, pour chaque exécution de JS, il y aura un processus d'échange.

La solution consiste à régler la swappiness à 10. Par des observations pratiques, cela amène le système à renoncer au cache d'E/S disque (qui joue un rôle minime voire nul sur un bureau, car le cache de lecture/écriture n'est pratiquement pas utilisé du tout. Sauf si vous copiez constamment de GROS fichiers) plutôt que de pousser quoi que ce soit dans le swap. En pratique, cela signifie que le système refusera d'échanger des pages, réduisant le cache d'E/S, sauf s'il atteint 90 % de mémoire utilisée. Et cela signifie à son tour une expérience de bureau fluide, sans swap, rapide.

Sur le serveur de fichiers, cependant, je définirais la swappiness à 60 ou même plus, car le serveur n'a pas de tâches actives importantes à l'avant-plan qui doivent être maintenues en mémoire dans leur intégralité, mais plutôt beaucoup de processus plus petits qui travaillent ou dorment, et ne changent pas immédiatement leur état. Au lieu de cela, le serveur sert souvent (pardonnez-moi) les mêmes données aux clients, rendant les caches d'E/S disque beaucoup plus précieux. Ainsi, sur le serveur, il est bien meilleur d'échanger les processus inactifs, libérant de l'espace mémoire pour les requêtes de cache disque.

Sur les ordinateurs de bureau, cependant, ce réglage exact conduit à l'échange de blocs de mémoire d'APPLICATIONS RÉELLES, qui modifient ou accèdent presque constamment à ces données.

Curieusement, les navigateurs réservent souvent de larges blocs de mémoire, qu'ils modifient constamment. Lorsque ces blocs sont échangés, il faut un certain temps pour les récupérer s'ils sont demandés à nouveau - et en même temps, le navigateur continue de mettre à jour ses caches. Ce qui entraîne d'énormes latences. En pratique, vous passerez 2 minutes à attendre que la seule page web dans un nouvel onglet se charge.

Le bureau se fiche en réalité d'E/S disque, car il lit et écrit rarement des portions de données répétitives et mémorisables. Réduire l'E/S disque pour simplement éviter de swapper autant que possible est beaucoup plus favorable au bureau que de réserver 30 % de mémoire pour le cache disque avec 30 % de RAM (remplis de blocs appartenant à des applications activement utilisées) échangés.

Lancez simplement htop, ouvrez un navigateur, GIMP, LibreOffice - chargez quelques documents et naviguez pendant plusieurs heures. C'est vraiment aussi simple que ça.

11voto

Praveen Points 294

Si vous exécutez un serveur Java sur votre système Linux, vous devriez vraiment envisager de réduire considérablement la swappiness par rapport à la valeur par défaut de 60. Ainsi, 20 est en effet un bon point de départ. Le swapping est un vrai problème pour un processus de collecte de déchets car chaque collecte nécessite de toucher de grandes parties de la mémoire du processus. Le système d'exploitation n'a pas les moyens de détecter de tels processus et de les gérer correctement. Il est préférable d'éviter au maximum le swapping pour les serveurs d'applications productives.

6voto

Tech-Compass Points 61

Je suggère de faire quelques expériences tout en ayant le moniteur du système ouvert pour voir exactement la charge sous laquelle votre machine se trouve. Je travaille également avec 4 Go de mémoire et un SSD de 128 Go, j'ai donc modifié la valeur de swappiness à 10, ce qui a non seulement amélioré les performances sous charge, mais en prime augmentera la durée de vie du SSD car il subira moins d'écritures.

Pour un tutoriel vidéo simple sur la façon de faire cela avec une explication complète, consultez la vidéo YouTube ci-dessous

http://youtu.be/i6WihsFKJ7Q

5voto

ldmtwo Points 150

Je veux ajouter un peu de perspective d'un ingénieur en performance Big Data pour donner aux autres plus d'informations sur la technologie de 2017.

Mon expérience personnelle est que, bien que j'aie généralement désactivé le swapping pour garantir que mes systèmes fonctionnent à pleine vitesse, sur mon poste de travail pour un problème spécifique, j'ai constaté que le swappiness de 1 et 10 entraînait des blocages (pour toujours) et de longues pauses. Un swappiness de 80 pour cette application particulière entraîne des performances bien meilleures et des pauses plus courtes que la valeur par défaut (60). Notez que j'avais 8 Go de RAM et 4x 256 Go de swap pris en charge par 1 disque dur. Normalement, je donnerais des statistiques précises vues dans mes benchmarks et les spécifications matérielles complètes, mais je ne l'ai pas encore fait et c'est un bureau récent de bas de gamme qui n'est pas important ici.

De retour dans mon ancienne entreprise, la raison pour laquelle nous n'avons pas activé le swappiness sur les serveurs Spark avec [500 Go à 4 To] x [10-100] nœuds était que nous avons constaté des performances médiocres comme un signe pour redessiner le pipeline de données et les structures de données de manière plus efficace. Nous ne voulions pas non plus faire des benchmarks des disques durs/SSD. De plus, échanger autant de RAM nécessiterait 10-30 disques par nœud avec des écritures parallèles pour minimiser le temps d'accès au disque.

Aujourd'hui, il y a 20 ans et 20 ans dans le futur, le cas restera toujours que certains problèmes sont trop grands pour la RAM. Avec un temps et de l'argent infinis, nous pouvons acheter/louer plus de matériel ou redessiner n'importe quel processus pour obtenir les performances à un niveau souhaitable. L'échange est juste un hack pour nous permettre d'ignorer le problème réel (nous n'avons pas assez de RAM et nous ne voulons pas dépenser plus d'argent).

Pour ceux qui pensent qu'un swappiness plus élevé est un mauvais conseil, voici un petit point de vue. Dans le passé, les disques durs avaient seulement quelques ko de cache, si tant est qu'ils en avaient. L'interface était IDE/Parallel ATA. Le bus du CPU était également beaucoup plus lent ainsi que la RAM et beaucoup d'autres choses. Bref, les systèmes étaient très lents (relativement à aujourd'hui) à tous égards. Il y a quelques années, les disques durs utilisaient la norme SATA3. Aujourd'hui, ils utilisent le protocole NVMe, qui présente des améliorations significatives en termes de latence. Les disques durs ont plusieurs Mo de cache. Et la partie la plus intéressante est lorsque vous utilisez un SSD moderne (avec une endurance en lecture/écriture beaucoup plus stable et des performances) avec NVMe ou PCIe comme stockage swap. C'est le meilleur compromis entre coût et performance. S'il vous plaît, ne pas essayer cela avec des SSD bon marché ou anciens.

Swap+SSDs! Avec un stockage volatil à haute performance, je recommanderais vivement d'expérimenter avec une valeur de swappiness élevée. Cela dépend principalement des schémas d'accès à la mémoire (accéder aléatoirement à toute la mémoire vs accéder rarement à la plupart), de l'utilisation de la mémoire, si la bande passante du disque est déjà saturée et du coût réel du thrashing.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X