J'ai vu dans plusieurs sites qu'il est recommandé de réduire le swappiness à 10-20 pour de meilleures performances.
Est-ce un mythe ou pas? Est-ce une règle générale? J'ai un ordinateur portable avec 4 Go de RAM et 128 Go de disque SSD, quelle valeur recommandez-vous pour mes échanges?
Merci.
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 , car , 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. Linux dispose d’autres moyens d’améliorer la gestion de sa mémoire pour résoudre certains cas Edge, mais dans l’ensemble, le contrôle de swappiness n’est pas une solution de contournement efficace: réglez-le dans un sens et vous pouvez résoudre un problème et en créer d’autres. Si possible, installer simplement RAM plus physique (et laisser Swappiness seul) éclipsera tous les autres remèdes.
Comment Linux utilise la RAM
Tout RAM qui n'est pas utilisé par les applications peut être utilisé 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), non seulement vous ne disposerez pas d'espace pour le cache, mais vous manquerez éventuellement de mémoire et votre système devra arrêter les processus en cours. Tuer des processus est pire qu'un ralentissement, car il vous donne un système instable et imprévisible.
Comment Linux utilise 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 mourir faute de mémoire et peut récupérer un peu de cache afin que les opérations sur 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-t-il 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 dispose d’un paramètre "swappiness" qui vous aide à modifier le calcul de cette "pression". Il est souvent représenté à tort comme un "pourcentage de RAM", mais ce n'est pas 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: même si vous rencontrez une situation 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 très 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? Ne nécessitent-ils pas 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 essaient de modifier ce paramètre 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 comportant de nombreux RAM de toute façon?
Si vous avez bien plus de RAM que vous n’auriez probablement pas besoin d’applications, alors vous aurez rarement besoin d’échange. 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 il n’aura pas à le faire.
Les seules situations dans lesquelles il ferait une différence seraient dans le cas peu probable où le système manquerait de mémoire et, par conséquent, le système de cache serait entravé. et c’est dans ce type de situation que vous voudriez le plus souvent. 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 RAM vers swap est une opération lente, mais elle n’est prise que lorsque le noyau est à peu près certain que l’avantage global résultant du maintien d’une taille de cache raisonnable l'emportera sur cette situation.
ne fois que les données sont en swap, quand est-ce qu'elles sortent à nouveau?
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. Lorsque les données sont en cours d'échange et ne sont pas utilisées, cela laisse plus de mémoire pour les autres éléments utilisés et davantage de cache système.
Y a-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 le swappiness 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.
Sur un poste de travail habituel, vous avez 4-5 tâches actives qui consomment 50 à 60% de la mémoire. Si vous définissez swappiness sur 60, environ 1/4-1/3 des pages de tâches ACTIVE seront remplacées. Cela signifie que pour chaque changement de tâche, pour chaque nouvel onglet que vous avez ouvert, pour chaque exécution de JS, il y aura un processus de permutation.
La solution consiste à définir swappiness sur 10. Les observations pratiques indiquent que le système abandonne le cache disque io (qui joue peu ou pas de rôle sur le bureau, car le cache lecture/écriture n'est pratiquement pas utilisé du tout. Sauf si vous copiez constamment LARGE fichiers) au lieu de mettre quoi que ce soit dans swap. En pratique, cela signifie que le système refusera d’échanger des pages et de couper le cache io à la place, sauf s’il atteint 90% de la mémoire utilisée. Et cela, à son tour, signifie une expérience de bureau fluide, sans coupure et rapide.
Sur le serveur de fichiers, toutefois, je définirais swappiness à 60 ou même plus, car le serveur ne comporte pas d’énormes tâches de premier plan actives qui doivent être conservées dans la mémoire, mais plutôt de nombreux processus plus petits qui fonctionnent ou sont en veille, et pas vraiment changer leur état immédiatement. Au lieu de cela, le serveur envoie souvent (pardon) exactement les mêmes données aux clients, ce qui rend les caches de disque io beaucoup plus précieux. Sur le serveur, il est donc préférable d’échanger les processus en veille, en libérant de l’espace mémoire pour les demandes de cache disque.
Sur les ordinateurs de bureau, cependant, ce paramètre exact entraîne l’échange de blocs de mémoire d’applications REAL, qui modifient ou accèdent en permanence à ces données.
Curieusement, les navigateurs réservent souvent de gros morceaux de mémoire qu'ils modifient constamment. Lorsque de tels morceaux sont échangés, cela prend un certain temps si on leur demande de revenir - et en même temps, le navigateur met à jour ses caches. Ce qui provoque des latences énormes. En pratique, vous attendez 2 minutes pour charger la page Web unique dans un nouvel onglet.
Desktop ne s'intéresse pas vraiment à disk io, car desktop lit et écrit rarement en répétant de grandes portions de données pouvant être mises en cache. Couper sur le disque dur pour éviter le plus possible l’échange est beaucoup plus avantageux pour les ordinateurs de bureau, que de réserver 30% de la mémoire au cache disque avec 30% de RAM (pleins de blocs appartenant à des applications utilisées) échangé.
Lancez simplement htop, ouvrez un navigateur, GIMP, LibreOffice - chargez quelques documents là-bas, puis naviguez pendant plusieurs heures. C'est vraiment aussi simple que ça.
Si vous exécutez un serveur Java sur votre système Linux, vous devriez vraiment envisager de réduire de beaucoup le swappiness par rapport à la valeur par défaut de 60. 20 est donc un bon début. L’échange est un élément décisif pour un processus de collecte des déchets, car les collections doivent à chaque fois 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 résoudre correctement. Il est préférable d’éviter d’échanger le plus possible contre des serveurs d’applications productifs.
Je suggérerais de faire quelques expériences tout en laissant le système ouvert pour voir exactement la charge de votre machine. Je suis également équipé de 4 Go de mémoire et d’un disque SSD de 128 Go. La valeur de swappiness a été modifiée à 10, ce qui a non seulement amélioré les performances sous charge, mais En prime, la durée de vie du lecteur SSD augmentera également, car il souffrira moins d'écritures.
Pour un didacticiel vidéo simple expliquant comment faire ceci avec une explication complète, voir la vidéo YouTube ci-dessous
Je souhaite ajouter la perspective d'un ingénieur Big Data Performance afin de donner aux autres davantage d'informations sur la technologie 2017.
Mon expérience personnelle est que bien que je permette généralement aux permutations d’échanger afin de garantir le fonctionnement maximal de mes systèmes, sur mon poste de travail, pour un problème spécifique, j’ai constaté qu’un swappiness de 1 et 10 entraînait un blocage (permanent) et de longues pauses. Un swappiness de 80 pour cette application particulière conduit à des performances bien meilleures et à des pauses plus courtes que celles par défaut (60). Notez que j’avais 8 Go RAM et 4x 256 Go d’échange sauvegardé par 1 disque dur. Je ferais normalement état de statistiques précises figurant dans mes tests de performance et les spécifications matérielles complètes, mais je n’en ai pas encore fait. C’est un ordinateur de bureau bas de gamme récent qui n’est pas important ici.
De retour dans mon ancienne société, la raison pour laquelle nous n’avons pas activé Swappiness sur les nœuds Spark avec des nœuds de [500 Go à 4 To] x [10-100] est que nous avons perçu de mauvaises performances comme un signe de la refonte du pipeline de données. structures de données de manière plus efficace. Nous ne voulions pas non plus comparer les disques durs/SSD. De plus, pour échanger autant de RAM, il faudrait 10 à 30 disques par nœud avec des écritures parallèles afin de réduire le temps d'accès au disque.
Aujourd'hui, il y a 20 ans et 20 ans, il restera toujours le cas que certains problèmes sont trop importants pour la RAM. Avec un temps et de l'argent infinis, nous pouvons acheter/louer plus de matériel ou reconcevoir tout processus pour obtenir les performances souhaitées. L'échange n'est qu'un hack qui nous permet d'ignorer le vrai problème (nous n'avons pas assez de bélier 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 aperçu. Dans le passé, les HD ne disposaient que de quelques ko de cache, le cas échéant. L'interface était IDE/Parallel ATA. Le bus du processeur était également beaucoup plus lent avec RAM et bien d’autres choses encore. En bref, les systèmes étaient très lents (par rapport à aujourd'hui) dans tous les sens. Il y a quelques années, les disques durs utilisaient SATA3. Aujourd'hui, ils utilisent le protocole NVMe, qui offre des améliorations significatives en matière de latence. Les HD ont beaucoup de Mo de cache. Et la partie la plus intéressante est lorsque vous utilisez un SSD moderne (endurance et performances en lecture/écriture bien plus stables) avec NVMe ou PCIe comme stockage de swap. C'est le meilleur compromis entre coût et performance. N'essayez pas ceci avec des SSD bon marché ou anciens.
Swap + SSD! Avec le stockage volatile hautes performances, je vous recommande fortement d’expérimenter une valeur de swappiness élevée. Cela dépend principalement des modèles d'accès à la mémoire (accès aléatoire à l'ensemble de la mémoire et rarement plus), de l'utilisation de la mémoire, si la bande passante du disque est déjà saturée, et du coût réel de la compression.
Il se peut que le comportement de swapping perçu au démarrage ou à l’ouverture de programmes soit dû à la lecture par Linux des fichiers de configuration, etc., à partir du disque. Il est donc peut-être préférable d’utiliser le programme de surveillance du système avant de supposer que l’accès au disque dur est dû à l’échange.