GNU/Linux >> Tutoriels Linux >  >> Linux

Ai-je besoin d'espace d'échange si j'ai plus qu'assez de RAM ?

D'après ce que j'ai compris, le but d'un échange partition sous Linux consiste à libérer certaines informations "moins fréquemment consultées" de la RAM et à les déplacer vers une partition spécifique de votre disque dur (au prix de ralentir la lecture ou l'écriture), permettant essentiellement aux applications actives de disposer de plus de "mémoire à grande vitesse".

C'est idéal lorsque vous êtes sur une machine avec une petite quantité de RAM et que vous ne voulez pas rencontrer de problèmes si vous en manquez. Toutefois, si votre système dispose de 16 Go ou 32 Go de RAM, et en supposant que vous n'exécutez pas une base de données MySQL pour StackExchange ou que vous ne modifiez pas un film complet en 1080p sous Linux, devriez-vous utiliser une partition d'échange ?

Réponse acceptée :

Oui.

Vous devriez très certainement toujours avoir swap activé, sauf s'il y a une raison très impérieuse et interdisant (comme, pas de disque du tout, ou seulement un disque réseau présent). Devriez-vous avoir un échange de l'ordre des tailles ridicules souvent recommandées (par exemple, deux fois la quantité de RAM) ? Eh bien, non .

La raison en est que l'échange n'est pas seulement utile lorsque vos applications consomment plus de mémoire qu'il n'y a de RAM physique (en fait, dans ce cas, l'échange n'est pas très utile du tout car cela impacte sérieusement les performances). La principale incitation à l'échange de nos jours n'est pas pour transformer comme par magie 16 Go de RAM en 32 Go, mais pour utiliser plus efficacement la RAM disponible installée.

Sur un ordinateur moderne, la RAM ne reste pas inutilisée. La RAM inutilisée est quelque chose que vous auriez tout aussi bien pu ne pas acheter et économiser de l'argent à la place. Par conséquent, tout ce que vous chargez ou tout ce qui est autrement mappé en mémoire, tout ce qui pourrait éventuellement être réutilisé par n'importe qui plus tard (limité par des contraintes de sécurité) est mis en cache. Très peu de temps après le démarrage de la machine, toute la RAM physique aura été utilisée pour quelque chose .

Chaque fois que vous demandez une nouvelle page mémoire au système d'exploitation, le gestionnaire de mémoire doit prendre une décision éclairée :

  1. Purger une page du cache tampon
  2. Purger une page d'un mappage (en fait le même que #1, sur la plupart des systèmes)
  3. Déplacez une page qui n'a pas été consultée depuis longtemps - de préférence jamais - pour l'échanger (cela peut même se produire de manière proactive, pas nécessairement au tout dernier moment)
  4. Tuez votre processus ou tuez un processus aléatoire (OOM)
  5. Panique du noyau

Les options 4 et 5 sont très indésirables et ne se produira que si le système d'exploitation n'a absolument pas d'autre choix. Les options 1 et 2 signifient que vous jetez quelque chose dont vous aurez peut-être besoin bientôt. Cela a un impact négatif sur les performances.

L'option n ° 3 signifie que vous déplacez quelque chose dont vous n'avez (probablement) pas besoin de sitôt sur un stockage lent. C'est bien parce que maintenant quelque chose dont vous avez besoin peut utiliser la RAM rapide.

En supprimant l'option #3, vous avez effectivement limité le système d'exploitation à faire soit #1 ou #2. Recharger une page à partir du disque revient à la recharger à partir du swap, sauf qu'il est généralement moins probable de devoir recharger à partir du swap (en raison de la prise de décisions de pagination appropriées).

En d'autres termes, en désactivant le swap, vous ne gagnez rien, mais vous limitez le nombre d'options utiles du système d'exploitation pour traiter une demande de mémoire. Ce qui pourrait ne pas l'être , mais très probablement peut-être un inconvénient (et ne sera jamais un avantage).

Connexe :Électricité - J'ai branché un radiateur à la prise, maintenant la prise ne fonctionne pas. L'alimentation est toujours allumée ?

[MODIFIER]

Le lecteur attentif du mmap page de manuel, en particulier la description de MAP_NORESERVE , remarquerez une autre bonne raison pour laquelle le swap est en quelque sorte une nécessité, même sur un système avec "suffisamment" de mémoire physique :

"Lorsque l'espace d'échange n'est pas réservé, on peut obtenir SIGSEGV lors d'une écriture si aucune mémoire physique n'est disponible."

— Attendez un instant, qu'est-ce que cela signifie ?

Si vous mappez un fichier, vous pouvez accéder directement au contenu du fichier comme si le fichier était en quelque sorte, par magie, dans l'espace d'adressage de votre programme. Pour un accès en lecture seule, le système d'exploitation a besoin en principe pas plus d'une seule page de mémoire physique qu'il peut repeupler avec des données différentes chaque fois que vous accédez à une page virtuelle différente (pour des raisons d'efficacité, ce n'est bien sûr pas ce qui est fait, mais en principe, vous pouvez accéder à des téraoctets de données avec un seul page de mémoire physique). Et si vous aussi écrire dans un mappage de fichier ? Dans ce cas, le système d'exploitation doit disposer d'une page physique (ou espace d'échange) prête pour chaque page écrite. Il n'y a pas d'autre moyen de conserver les données jusqu'à ce que le processus de réécriture des pages modifiées ait fait son travail (ce qui peut prendre plusieurs secondes). Pour cette raison, le système d'exploitation réserve (mais ne valide jamais nécessairement) de l'espace d'échange, donc si vous écrivez dans un mappage alors qu'il n'y a pas de page physique inutilisée (c'est une condition tout à fait possible et normale), vous' est garanti que cela fonctionnera toujours.

Et s'il n'y a pas d'échange ? Cela signifie qu'aucun échange ne peut être réservé (duh !), et cela signifie que dès qu'il ne reste plus de pages physiques libres et que vous écrivez sur une page, vous obtenez une agréable surprise sous la forme de la réception de votre processus un défaut de segmentation, et probablement tué.

[/MODIFIER]

Cependant, la recommandation traditionnelle de faire un swap de deux fois la taille de la RAM est absurde. Bien que l'espace disque soit bon marché, cela n'a pas de sens d'affecter autant de swap. Gaspiller quelque chose qui n'est pas cher est toujours un gaspillage, et vous ne voulez absolument pas pour échanger continuellement des ensembles de travail de plusieurs centaines de mégaoctets (ou plus).

Il n'y a pas un seul "correct" taille d'échange (il y a autant de tailles "correctes" qu'il y a d'utilisateurs et d'opinions). J'attribue généralement un 512 Mo fixe, quelle que soit la taille de la RAM, ce qui fonctionne très bien pour moi. Le raisonnement derrière cela est que 512 MiB est quelque chose que vous pouvez toujours se permettre de nos jours, même sur un petit disque. D'un autre côté, ajouter plusieurs gigaoctets de swap n'est pas mieux. Vous n'allez pas les utiliser, sauf si quelque chose ne va vraiment pas.

Même sur un SSD, le swap est des ordres de grandeur plus lent que la RAM (en raison de la bande passante du bus et de la latence), et bien qu'il soit très acceptable pour déplacer quelque chose à échanger qui ne sera probablement plus nécessaire (c'est-à-dire que vous ne l'échangerez probablement plus, donc votre pool de pages disponibles est effectivement agrandi gratuitement), si vous avez vraiment besoin des quantités considérables d'échange (c'est-à-dire que vous avez une application qui utilise, par exemple, un ensemble de données de 50 Gio), vous êtes quasiment perdu.

En relation:Le vide sanitaire a-t-il besoin d'être ventilé?

Une fois que votre ordinateur commence à échanger des gigaoctets de pages, tout se passe en boucle. Donc, pour la plupart des gens (y compris moi), ce n'est pas une option, et avoir autant d'échange n'a donc aucun sens.


Linux
  1. Une introduction à l'espace d'échange sur les systèmes Linux

  2. Df dit que j'ai utilisé 20g d'espace disque de plus que Du. Pourquoi??

  3. Échangez de l'espace sur des serveurs cloud

  4. Comment ajouter un espace d'échange sur Ubuntu 22.04

  5. Comment augmenter l'espace d'échange sous Linux

Comment effacer le cache et la mémoire tampon de la mémoire RAM et l'espace d'échange sous Linux

Pourquoi utiliser Swap lorsqu'il y a plus qu'assez d'espace libre dans la RAM ?

Xubuntu est-il plus gourmand en ressources que Windows XP ? ?

Comment vérifier l'espace d'échange sous Linux

Zorin OS 15 plus beau et utile que jamais

Comment supprimer Swap Space de Centos 7.x ?