L'utilisation d'un espace d' échange au lieu de la RAM peut considérablement ralentir un PC.
Alors pourquoi, quand j’ai assez de RAM, mon système Linux (Arch) utilise-t-il l’échange?
Commander ma sortie de conky ci-dessous:
De plus, cela pourrait-il être la cause des problèmes de vitesse et de réactivité système que je rencontre?
Sortie de free -m
:
$ free -m
total used free shared buffers cached
Mem: 1257 1004 252 0 51 778
-/+ buffers/cache: 174 1082
Swap: 502 144 357
performance
swap
Stefan
la source
la source
Réponses:
Il est normal que les systèmes Linux utilisent un échange, même s'il reste encore de la mémoire vive. Le noyau Linux échangera des pages de mémoire qui sont très rarement utilisées (par exemple, les
getty
instances dans lesquelles vous utilisez uniquement X11 et un autre démon inactif).L'utilisation de l'espace d'échange devient un problème uniquement lorsque la quantité de RAM disponible est insuffisante et que le noyau est obligé de déplacer en permanence les pages de la mémoire pour les échanger et les retourner en RAM, uniquement pour que les applications continuent de fonctionner. Dans ce cas, les applications de surveillance du système afficheraient une grande activité d'E / S de disque.
À des fins de comparaison, mon système Ubuntu 10.04, avec deux utilisateurs connectés avec des sessions X11 et deux exécutant le bureau GNOME, utilise environ 600 Mo de swap et ~ 1 Go de RAM (sans compter les tampons et le cache fs), je dirais donc que vos chiffres d'échange l'utilisation semble normale.
la source
Ce comportement peut être configuré en définissant la valeur de:
La valeur par défaut est 60. Définir cette valeur sur 0 signifie ne jamais utiliser de permutation lorsqu'il reste de la RAM et que 100 remplace la mémoire dès que possible.
Pour modifier temporairement la valeur (perdue au redémarrage):
Pour changer la valeur de façon permanente, éditez le fichier:
en tant que root (par exemple
sudo nano /etc/sysctl.conf
) et modifiez ou ajoutez (si ce n’est pas le cas) la ligne:à la valeur désirée. Si ce fichier n'existe pas (par exemple dans Arch Linux), essayez
/etc/sysctl.d/99-sysctl.conf
plutôt.Il y a eu un débat sur le point de savoir si le remplacement avec de la mémoire libre disponible est bon ou mauvais, mais l' aide d'Ubuntu recommande en effet une valeur de 10 pour les systèmes de bureau . Voir également ce tutoriel sur Digital Ocean for CentOS .
la source
swappiness
la valeur n'a aucun effet sur mon système. Même en le mettant à 0, les pages cruciales et fréquemment utilisées (par exemple, l'index de mon IDE) continueront à être échangées lorsqu'il reste encore 2 Go de RAM libre.Linux commence à permuter avant que la RAM ne soit pleine. Ceci est fait pour améliorer les performances et la réactivité:
Les performances sont améliorées, car parfois la RAM est mieux utilisée pour le cache disque que pour stocker la mémoire programme. Il est donc préférable d’échanger un programme inactif depuis un certain temps et de conserver les fichiers fréquemment utilisés dans le cache.
La réactivité est améliorée en remplaçant les pages lorsque le système est inactif, plutôt que lorsque la mémoire est saturée et qu'un programme est en cours d'exécution et demande plus de RAM pour mener à bien une tâche.
Bien entendu, l’échange ralentit le système - mais l’alternative à l’échange n’est pas l’échange, c’est plus de mémoire vive ou moins de mémoire vive.
la source
Ceci est un vieux post, cependant, je prendrais toujours la liberté de faire part de mes pensées ici.
À partir de l’en bas, Linux divisera d’abord la mémoire en pages (généralement 4 Ko par page sur un système x86_64). Ensuite, une mémoire virtuelle est créée, dont le mappage est effectué avec une mémoire physique à l'aide de la MMU (unité de gestion de la mémoire).
Les processus se voient allouer de la mémoire à partir de la zone de mémoire virtuelle. Veuillez noter que lorsque vous voyez / proc / meminfo, vous verrez VMalloc * en tant que détails de la mémoire virtuelle.
Disons que vous avez un processus qui demande de la mémoire (disons 300 Mo - un navigateur Web). Le processus se verrait allouer 300 Mo à partir de la mémoire virtuelle. Toutefois, il n'est pas nécessaire que la mémoire soit mappée (c'est-à-dire mappée sur la mémoire physique). Il existe un concept de "copie sur écriture" pour la gestion de la mémoire. Ainsi, si vos processus utilisent réellement la mémoire allouée à partir de la mémoire virtuelle (c’est-à-dire qu’elle enregistre sur la mémoire), elle est alors mappée sur la mémoire physique. Cela aide le noyau à fonctionner correctement dans un environnement multi-processus.
Que sont les caches?
Une grande partie de la mémoire utilisée par les processus est partagée. Disons que la bibliothèque glibc est utilisée par presque tous les processus. Quel est l'intérêt de conserver plusieurs copies de glibc dans la mémoire, alors que chaque processus peut accéder au même emplacement mémoire et effectuer le travail. Ces ressources fréquemment utilisées sont conservées dans le cache de sorte que, lorsque les processus le demandent, elles puissent être référencées au même emplacement mémoire. Cela aide à accélérer les processus, car lire à nouveau glibc (etc.) à partir du disque prendrait beaucoup de temps.
Ce qui précède concernait les bibliothèques partagées proprement dites, il en va de même pour la lecture de fichiers. Si vous lisiez un fichier volumineux (disons 100-200 Mo) pour la première fois, cela prendrait beaucoup de temps. Cependant, lorsque vous essayez de refaire la même lecture, ce serait plus rapide. Les données ont été mises en cache en mémoire et la relecture n'a pas été effectuée pour tous les blocs.
Qu'est-ce qu'un tampon?
En ce qui concerne la mémoire tampon, lorsqu'un processus effectue un fichier d'E / S, il utilise la mémoire tampon du noyau pour écrire des données sur le disque. Les processus demandent au noyau de faire le travail. Ainsi, au nom du processus, le noyau écrit les données dans son "tampon" et indique au processus que l'écriture est terminée. De manière asynchrone, le noyau continuera à synchroniser ces données dans la mémoire tampon sur le disque. De cette façon, les processus comptent sur le noyau pour choisir le bon moment pour synchroniser les données sur le disque et les processus pourraient continuer. Rappelez-vous qu’il s’agit d’entrées / sorties générales effectuées par des processus normaux. Cependant, les processus spécialisés, qui doivent confirmer que les E / S sont réellement effectuées sur le disque, peuvent utiliser un autre mécanisme pour effectuer des E / S sur le disque. Certains des utilitaires opensource sont libaio. En outre, il existe des moyens d'appeler la synchronisation explicite aux FD ouverts dans le contexte de vos processus,
Quels sont les défauts de page alors?
Prenons un exemple, lorsque vous démarrez un processus (par exemple un navigateur Web), dont le fichier binaire fait environ 300 Mo. Cependant, les 300 Mo complets du binaire du navigateur Web ne commencent pas à fonctionner instantanément. Le processus continue de passer de fonctions en fonctions dans son code. Comme indiqué précédemment, la mémoire virtuelle consomme 300 Mo. Toutefois, la mémoire n’est pas entièrement mappée sur la mémoire physique (la mémoire résidente RSS serait inférieure, voir la sortie ci-dessus). Lorsque l'exécution du code atteint un point pour lequel la mémoire n'est pas physiquement mappée, une erreur de page pose problème. Le noyau mapperait cette mémoire sur physique, associerait la page mémoire à votre processus. Un tel défaut de page est appelé "Défauts de page mineurs". De même, lorsqu'un processus est en train de faire un fichier, les erreurs de page majeures sont levées.
Quand et pourquoi Swap Out se produit?
Situation 1:
En ligne avec les détails ci-dessus, considérons un scénario où la bonne quantité de mémoire devient mappée en mémoire. Et maintenant, un processus démarre, ce qui nécessite de la mémoire. Comme discuté ci-dessus, le noyau devra effectuer un certain mappage de la mémoire. Cependant, il n'y a pas assez de RAM physique disponible pour mapper la mémoire. Maintenant, le noyau va d'abord regarder dans le cache, il aura quelques anciennes pages de mémoire qui ne sont pas utilisées. Il videra ces pages sur une partition séparée (appelée SWAP), libérera certaines pages et mappera les pages libérées sur la nouvelle requête à venir. Comme l'écriture sur disque est beaucoup plus lente que la RAM à l'état solide, ce processus prend beaucoup de temps, ce qui entraîne un ralentissement.
Situation 2:
Disons que vous voyez beaucoup de mémoire libre disponible dans le système. Même à ce moment-là, vous voyez qu'il y a beaucoup d'échanges en cours. Il pourrait y avoir un problème de fragmentation de la mémoire. Prenons un processus qui requiert 50 Mo de mémoire contiguë du noyau. (garder à l'esprit contiguë). De toute évidence, le noyau aurait alloué des pages au hasard à différents processus et en aurait libéré certains. Cependant, lorsque nous demandons une mémoire contiguë, il faudra rechercher un bloc qui satisfasse à la demande des processus. S'il ne parvient pas à obtenir une telle mémoire, il devra échanger certaines anciennes pages de mémoire, puis allouer des pages contiguës. Même dans de tels cas, SWAP out aurait lieu. À partir de la version 2.6 et supérieure, les problèmes de fragmentation ont considérablement diminué. Toutefois, si le système fonctionne pendant longtemps, de tels problèmes peuvent toujours survenir.
Voir cet exemple ( sortie vmstat )
@ 2016-10-30 03:57:04, nous constatons qu'il reste encore une bonne quantité de mémoire RAM disponible. Cependant, même alors, l'échange est arrivé. À ce stade, nous avons vérifié l’arbre des processus et nous n’avons vu aucun processus nécessitant une telle quantité de mémoire (plus que de la mémoire libre). Le soupçon évident était la situation 2 décrite ci-dessus. Nous avons vérifié les journaux buddyinfo et zoneinfo ci-dessus (utilisez echo m> / proc / sysrq-trigger pour les vérifier, la sortie passe dans syslogs).
Pour un système normal, la comparaison des informations de zone est la suivante. Et les graphiques pour cache / free / low mem sont également mentionnés ci-dessous
En regardant les informations, il est clair qu'il existe une fragmentation de la mémoire dans le noeud 0 et le noeud 1 normal (le noeud est une machine basée sur NUMA, donc plusieurs noeuds (voir numactl pour vérifier les informations sur votre système)).
La fragmentation de la mémoire est également une raison pour laquelle l'utilisation de l'échange peut augmenter même lorsque la mémoire disponible est là.
la source
Avoir plus de mémoire disponible
Comme tout le monde l’a dit, oui, l’échange vous aidera à vous débarrasser de la mémoire inutilisée et à disposer de plus de mémoire.
En hibernation
Mais swap peut également être utilisé en veille prolongée, ce qui peut s'avérer très utile lorsque vous avez un ordinateur portable ou que vous souhaitez économiser de l'énergie et mettre votre ordinateur en veille prolongée avant de quitter le travail. Vous pouvez donc commencer plus rapidement le lendemain matin.
Le fait d’avoir une fonction d’hibernation est l’une des principales raisons pour lesquelles nous voyons encore aujourd’hui le conseil d’avoir au moins la taille de la RAM pour le swap. De cette façon, le système peut mettre toute la RAM utilisée dans la permutation et passer en veille prolongée.
Les carences
Veillez à ce qu'une fois les données de processus échangées, les données de processus puissent être lues même après l'arrêt, à moins que l'échange ne soit crypté (bien sûr).
L'utilisation de l'échange crypté avec la mise en veille prolongée ne fonctionne pas avec toutes les distributions. Vous devez utiliser une clé de chiffrement constante (certaines configurations génèrent de manière aléatoire la clé de chiffrement d'espace de swap à chaque démarrage) et un initrd / initramfs pour activer le volume chiffré avant de le reprendre.
la source
Un grand nombre de programmes modernes sont construits sur des frameworks surchargés qui entraînent beaucoup de courrier indésirable dont vous n'avez pas réellement besoin pour exécuter le programme. L'échange de ces pages inutilisées libère de la RAM pour le cache et les programmes qui peuvent en réalité utiliser la RAM.
Je parle d'une expérience personnelle douloureuse ici.
L'année dernière, j'ai remplacé l'un de mes sites Web par un nouveau framework de serveur Web prometteur, construit sur Firefox. Il peut sembler étrange de créer un système côté serveur au-dessus d’un programme axé sur le client tel que Firefox, mais cela présentait d’énormes avantages. Firefox est très puissant, offre des services internes vraiment impressionnants et réduit l'inadéquation de l'impédance entre le serveur et le client si les deux plates-formes sont similaires.
Mais il y a un inconvénient: Firefox est grand. Vraiment gros. Il s’agissait d’un projet de la version 1.x, de sorte qu’ils n’avaient pas eu l’impression de supprimer le support de l’interface graphique. t autoriser l’espace de permutation, ce code graphique et toutes les autres parties de Firefox que je n’utilisais pas utilisaient de la vraie RAM. J'ai fini par avoir besoin de 512 Mo de RAM minimum pour pouvoir exécuter le site sans plantage dû à l'épuisement de la mémoire. Si mon VPS disposait d'un espace d'échange, j'aurais probablement pu me débrouiller avec un forfait de 256 Mo.
[*] Supprimer le code de l'interface graphique de la structure n'était peut-être même pas souhaitable, car l'un des avantages de cette plate-forme était le grattage Web haute fidélité, car la structure côté serveur pouvait télécharger des pages Web depuis un autre site et les manipuler. comme vous le feriez côté client. Pensez aux mashups. Beaucoup de ce genre de choses casseraient si vous ne pouviez pas "rendre" la page Web dans un contexte graphique.
À propos, ce framework web est pratiquement mort maintenant, il est donc inutile de le nommer. Il vaut mieux prendre la leçon plus générale à coeur: oui, le swap est toujours utile même si vous avez des concerts de RAM libre.
la source
D'après Ubuntu Swap FAQ auquel Marcel s'est associé
Je pense que vous devriez augmenter votre espace d'échange dans votre système. Le swap accélère l'allocation de mémoire RAM en permettant de supprimer les données déjà paginées.
la source
Je pense que "Gilles" a déjà mentionné le fait que, même si vous disposez de suffisamment de mémoire RAM, l’échange peut être utile lors de certaines "insuffisances", tout en préservant certaines données même après des arrêts - ou ai-je tort de supposer cela? depuis que la RAM est épuisée après les redémarrages), j'ai 12 Go de RAM disponible sur mon système, et moi aussi, j'ai déjà réfléchi à cette question. À un moment donné, lorsque j'avais désactivé tous les échanges et que je ne comptais que sur ma RAM, j'avais des expériences péniblement difficiles à essayer de déboguer une erreur système, un plantage, etc. après l'arrêt du système. Depuis lors, j'ai réactivé la partition de swap.
la source