D'après ce que j'ai compris, le but d'une partition swap sous Linux est de libérer de la mémoire RAM certaines informations "moins fréquemment utilisées" et de les déplacer vers une partition spécifique de votre disque dur (au prix d'un ralentissement de la lecture ou de l'écriture). à), permettant essentiellement aux applications actives de bénéficier davantage de la "mémoire haute vitesse".
C'est idéal lorsque vous êtes sur une machine avec une petite quantité de RAM et que vous ne voulez pas avoir de problèmes si vous en manquez. Toutefois, si votre système dispose de 16 ou 32 Go de RAM et si vous n'exécutez pas de base de données MySQL pour StackExchange ou n'éditez pas de film 1080p de longueur complète sous Linux, une partition de swap doit-elle être utilisée?
/tmp
) après 3 jours de disponibilité.Réponses:
Oui.
Vous devez absolument toujours activer le swap, sauf s’il existe une raison très convaincante et prohibitive (par exemple, aucun disque, ou seulement un disque réseau présent). Si vous avez un échange dans l'ordre des tailles ridicules souvent recommandées (telles que, deux fois la quantité de RAM)? Eh bien non .
La raison en est que le swap n’est pas seulement utile lorsque vos applications consomment plus de mémoire qu’il n’ya de RAM physique (en fait, dans ce cas, le swap n’est pas très utile car il affecte sérieusement les performances). L’incitation principale au swap de nos jours n’est pas de convertir par magie 16 Go de RAM en 32 Go, mais bien d’utiliser plus efficacement la mémoire RAM installée et disponible.
Sur un ordinateur moderne, la RAM ne reste pas inutilisée. La RAM inutilisée est quelque chose que vous pourriez tout aussi bien ne pas avoir acheté et économisé à la place. Par conséquent, tout ce que vous chargez ou ce qui est autrement mappé en mémoire, tout ce qui pourrait éventuellement être réutilisé par quelqu'un à tout moment (limité par des contraintes de sécurité) est mis en cache. Très vite 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:
Les options 4 et 5 sont très indésirables et ne se produiront 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 3 signifie que vous déplacez quelque chose dont vous n'avez (probablement) pas besoin bientôt sur un stockage lent. C'est bien parce que maintenant, quelque chose dont vous avez besoin peut utiliser la mémoire vive rapide.
En supprimant l'option n ° 3, vous avez effectivement limité le système d'exploitation aux opérations n ° 1 ou n ° 2. Recharger une page à partir d'un disque revient à le recharger à partir d'un échange, sauf que le rechargement à partir d'un échange est généralement moins probable (en raison de la prise de décisions de pagination appropriées).
En d'autres termes, si vous désactivez le swap, vous ne gagnez rien, mais vous limitez le nombre d'options utiles du système d'exploitation pour traiter une requête en mémoire. Ce qui pourrait ne pas être , mais très probablement pourrait être un désavantage (et ne sera jamais un avantage).
[MODIFIER]
Le lecteur attentif de la
mmap
page de manuel , en particulier la description deMAP_NORESERVE
, remarquera une autre bonne raison pour laquelle l’échange est en quelque sorte une nécessité même sur un système disposant de "suffisamment" de mémoire physique:"Lorsque l’espace de swap n’est pas réservé, il est possible d’obtenir SIGSEGV lors d’une écriture si aucune mémoire physique n’est disponible."
- Attends un instant, qu'est-ce que ça veut dire?
Si vous mappez un fichier, vous pouvez accéder directement au contenu de celui-ci comme si le fichier était, par magie, dans l'espace d'adressage de votre programme. Pour un accès en lecture seule, le système d'exploitation n'a en principe besoin que 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 évidemment pas ce qui est fait, mais en principe, vous pouvez accéder à une valeur de téraoctets de données avec une seule 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 d’un espace d’échange - prêt pour chaque page écrite. Il n'y a pas d'autre moyen de conserver les données jusqu'à ce que le processus d'écriture différée de pages modifiées ait fonctionné (ce qui peut prendre plusieurs secondes). Pour cette raison, le système d’exploitation réserve (mais ne s'engage jamais nécessairement) l’espace de permutation. Ainsi, si vous écrivez sur un mappage alors qu’il n’ya aucune page physique inutilisée (c’est une condition tout à fait possible et normale), vous ' re garanti que cela fonctionnera toujours.
Maintenant, que se passe-t-il s'il n'y a pas d'échange? Cela signifie qu'aucun échange ne peut être réservé (duh!), Et dès lors qu'il ne reste plus de pages physiques libres et que vous écrivez sur une page, vous recevez une agréable surprise dans la forme de votre processus de réception une faute de segmentation, et probablement être tué.
[/MODIFIER]
Cependant, la recommandation traditionnelle de convertir deux fois la taille de la RAM est absurde. Bien que l’espace disque soit bon marché, il n’a pas de sens d’attribuer autant d’échange. Le gaspillage de quelque chose qui est bon marché est toujours une perte de temps, et vous ne voulez absolument pas être continuellement en train d'échanger des ensembles de travail de plusieurs centaines de mégaoctets (ou plus).
Il n’existe pas de taille de swap "correcte" unique (il existe autant de tailles de "correct" que 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 Mo est quelque chose que vous pouvez toujours vous permettre, même sur un petit disque. D'autre part, l'ajout de plusieurs gigaoctets de swap n'est pas mieux. Vous ne les utiliserez pas, sauf en cas de problème grave.
Même sur un disque SSD, l’échange est beaucoup plus lent que la RAM (en raison de la bande passante et de la latence du bus), et même s’il est très acceptable de déplacer un élément à échanger qui ne sera probablement plus nécessaire (c’est-à-dire que vous ne serez probablement plus nécessaire). en le remplaçant de nouveau pour que votre pool de pages disponibles soit effectivement élargi gratuitement), si vous avez vraiment besoin de quantités considérables d'échange (c'est-à-dire si vous avez une application qui utilise, par exemple, un jeu de données de 50 Go), vous êtes quasiment perdu.
Une fois que votre ordinateur commence à échanger des gigaoctets de pages, tout est analysé. 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.
la source
Je ne suis pas d'accord avec quelques opinions que je vois énoncées ici. Je créerais toujours une partition SWAP, en particulier dans un environnement de production. Je le fais aussi bien pour mes ordinateurs personnels que pour mes ordinateurs virtuels.
Ces jours-ci, je les taille environ 1 fois et demi de mémoire. 2 fois la mémoire était la règle de base. Le disque d'échange est "économique" en ce sens qu'il n'a pas besoin d'être sauvegardé ou protégé.
Si vous manquez de mémoire, votre espace de swap vous laisse un peu de temps pour vous attaquer au problème.
Réalisez que des éléments tels que / tmp peuvent résider dans l’espace de permutation.
La zone d'échange peut contenir un vidage partiel du noyau afin qu'il puisse être restauré au prochain redémarrage. Cela pourrait être intéressant pour une urgence de débogage future à laquelle vous êtes appelé.
la source
Peut être:
J'ai beaucoup réfléchi à ce sujet et j'ai vu des opinions retomber plus souvent que je ne peux en juger. Mon approche était de développer un moyen de le savoir.
Commencez avec une partition de swap active de ce que vous jugez d'une taille suffisante.
Ensuite, ouvrez un terminal dans un espace de travail et lancez la commande
free -hs 1
qui signalera l’utilisation une fois par seconde.Passez éventuellement à d'autres espaces de travail.
Faites tout ce que vous êtes susceptible de faire, puis un peu plus. Exécutez toutes vos applications courantes en même temps, parcourez plusieurs onglets et essayez désespérément de donner au système une véritable séance d’entraînement. Cela pourrait signifier de réencoder une demi-douzaine de vidéos tout en exécutant une opération de compilation et en vérifiant votre courrier électronique. Regardons les faits en face, tout dépend de la façon dont vous utilisez votre système.
Lorsque vous estimez que le système est soumis à une charge élevée (ou aussi élevée que vous êtes susceptible de l’être, puis à certains), examinez le terminal et examinez les résultats. ou mieux encore, redirigez la sortie vers un fichier en ajoutant
>output.txt
à la commande afin que vous puissiez examiner le cycle complet. Si votre échange utilisé ne dépasse jamais Mem free, vous n'avez pas besoin d'échange. Si c'est le cas, vous le faites.Je n'ai pas besoin d'échange. Peut-être que vous faites. Pourquoi ne pas découvrir?
En ce qui concerne l'échange de dimensionnement, les règles empiriques sont généralement surestimées car il s'agit d'une question basée sur l'utilisation.
la source
swap
passe au- dessusfree
?NOTE: Cela m'est arrivé dans une situation particulière et inhabituelle. Si vous résolvez un problème, cela peut être utile. Je ne veux pas dire que TOUTES les machines DOIVENT avoir un échange.
PEUT ÊTRE!
Dans le passé, j’ai rencontré des problèmes avec une «appliance» que j’ai construite et qui fonctionnait sous Linux - fonctionnant sur un périphérique compact flash, je ne voulais pas porter ma CF par swap, et il y avait suffisamment de mémoire pour l’application.
La plupart de ces appareils fonctionnaient bien, mais sur un boîtier particulièrement occupé, j'ai rencontré un problème:
FRAGMENTATION DE MEMOIRE
Sans espace d'échange, la mémoire est progressivement devenue de plus en plus fragmentée, en particulier avec des processus longs (même si j'avais beaucoup de mémoire libre, tout était très petit). J'ai mis un peu d'espace swap dedans et ai dit à Linux de ne pas l'utiliser sauf si c'était nécessaire; cela a complètement résolu le problème.
En plus de tout le reste, l’espace de permutation permet de déplacer la mémoire et de la défragmenter. Si vous avez une mémoire fragmentée et que vous avez besoin d'un seul gros morceau, les fragments seront échangés. au fur et à mesure qu'ils sont échangés, ils sont effectivement défragmentés.
Vérifiez / proc / buddyinfo - le mien ressemble à ceci en ce moment:
Les nombres représentent des blocs de différentes tailles; chaque taille correspond à la moitié de la taille du bloc suivant, de 4 Mo à gauche à 4 Ko à droite (soit 4 Mo, 2 Mo, 1 Mo, etc.). Une machine nouvellement démarrée devrait avoir tous les blocs à gauche, très peu à droite (= non fragmentés). Rappelez-vous également que la même quantité de mémoire (par exemple 4 Mo) sera représentée sous la forme de nombres différents dans les colonnes - 1 bloc dans la colonne la plus à gauche et 1024 dans la colonne la plus à droite.
La mémoire est allouée à partir du pool le plus à droite possible; Par exemple, si votre programme veut 12 Ko de mémoire (en une fois), il le prendra à partir de la colonne 16 Ko; le reste apparaîtra dans la colonne de 4ko. S'il n'y a pas de blocs de 16kb, les blocs de 32kb seront utilisés, ce qui laissera un reste de 4kb et 16kb, et ainsi de suite.
S'il n'y a pas assez de blocs de mémoire ET QUE VOUS AVEZ SWAP SPACE, par exemple, si vous voulez 16 Ko de mémoire, il trouvera le bloc de 16 Ko le moins utilisé (pouvant par exemple contenir un bloc utilisé de 4 Ko, un bloc disponible de 4 Ko, et 2 autres blocs de 4 Ko utilisés), déplacez les parties USED uniquement pour les permuter et allouez la mémoire libérée à la nouvelle application.
Dans la boîte qui s'est écrasée, j'avais des centaines de milliers de blocs de 4 et 8 Ko, et pas grand chose d'autre.
DÈS QUE JE PEUX DIRE (en passant par les machines plantées!), Le noyau se déplacera de mémoire en permutation, et en mémoire, mais ne se déplacera jamais de mémoire en mémoire.
la source
Une partition de swap a une valeur significative qui va au-delà de la simple utilisation de RAM supplémentaire lorsque vous en manquez.
D'une part, Linux utilise autant de mémoire que possible pour mettre en cache les fichiers et les opérations d'E / S. Si vous effectuez un échange, vous constaterez peut-être que davantage de mémoire est utilisée pour la mise en cache d'E / S, ce qui accélère le processus (en réduisant au minimum l'accès au disque et en réduisant l'usure des disques SSD). conserver des données qu'un programme a allouées mais qu’elles n’utilisent qu’une fois toutes les 12 heures, ce qui peut être le cas pour certains démons.
De plus, Linux utilise une stratégie d’allocation de mémoire optimiste selon laquelle il permettra aux pages d’être attribuées nominalement, même s’il n’est pas certain de disposer de la mémoire réelle pour les remplir. Cela est plus efficace que de faire une vérification appropriée et de cartographier chaque allocation et ne pose généralement aucun problème. Cependant, les heuristiques utilisées par le noyau pour déterminer si autoriser une allocation est judicieuse incluent le niveau de swap disponible sur le système. Par conséquent, les allocations peuvent être plus rapides si le système dispose de suffisamment de swap, même s'il est peu utilisé.
Ces facteurs réunis m'amènent à croire personnellement qu'il est préférable d'effectuer un échange sur presque tous les systèmes normaux. Cependant, pour les tailles de bélier de grande taille, j'ignore la règle de ram * 2 et je limite simplement mon échange à 4-8 Go (en fonction de la taille du disque). ).
la source
Vous ne devriez jamais avoir une taille d'échange supérieure à la taille maximale tolérée dans l'attente de la permutation du noyau; sinon, vous créez simplement un nouveau mode de défaillance pour votre système (vous vous retrouvez avec un enlisement irrécupérable). Notez que, bien que les disques modernes puissent transférer de l’ordre de Go / s, Linux n’est généralement capable de transférer les échanges qu’à des débits de plusieurs centaines de Ko, ou au mieux quelques Mo par seconde. Un échange si important peut rendre votre système inutilisable pendant des minutes, des heures ou même des jours.
Si vous avez suffisamment de mémoire physique pour ce que vous faites, la taille idéale pour le swap est de la faire correspondre à la quantité de «données indésirables» que les processus conservent sans jamais utiliser. Ceci est probablement de l'ordre de quelques centaines à quelques centaines de mégaoctets. Cette stratégie permet d'utiliser toute votre mémoire physique pour mettre en cache des informations utiles plutôt que comme stockage permanent pour des données qui ne seront probablement plus jamais utilisées.
Si vous ne disposez pas de suffisamment de mémoire physique, vous devez évaluer si vous pouvez tolérer un ralentissement important dû à un échange important. Si tel est le cas, l'utilisation de 1 à 2 Go d'échange peut sembler logique, et peut-être jusqu'à 4 Go si vous avez des disques extrêmement rapides. Mais pas plus que cela ne fera qu'empirer les modes de défaillance de votre système et vous devriez envisager d'acheter plus de RAM à la place.
la source
Seulement si vous voulez pouvoir passer en veille prolongée pour permuter (cette fonction s'appelle également "suspendre sur le disque" et implique la sauvegarde de tout le contenu de la RAM et la mise hors tension). Généralement, cela n’est utilisé que sur les ordinateurs portables et autres appareils mobiles, donc cela dépend.
la source
Il n'y a pas de réponse claire et universelle car cela dépend de la tâche que vous allez effectuer. Si vous êtes sur le point d’exécuter un serveur de base de données, HTTP, de virtualisation ou de cache, vous ne devez jamais activer aucun type de swap, quel que soit le montant de votre RAM. Si vous avez un ordinateur de bureau ou un hôte multitâche et que vous avez plus de 16 Go de RAM rapide, consultez la page suivante: zRam
la source
Il n'y a aucun moyen de savoir si vous avez besoin d'espace de swap ou non si le seul paramètre que nous connaissons est la quantité de RAM installée.
Dans tous les cas, il existe une idée fausse commune selon laquelle disposer d'un espace d'échange affecte négativement les performances du système. Ceci est une erreur. Tant que vous avez assez de RAM, le fait d'avoir une zone d'échange, quelle que soit sa taille, ne nuit pas du tout aux performances. Ce qui affecte les performances est la pénurie de RAM et l'utilisation efficace de l'espace de permutation.
cas 1: Si vous n'avez pas d'espace d'échange et que vous n'avez plus de RAM, le noyau Linux choisira un ou plusieurs processus qu'il pense être de bons candidats et les tuera.
cas 2: si vous avez un espace de swap et que vous n'avez plus de RAM, le noyau choisira moins de pages de mémoire utilisées et les placera sur la zone de swap pour libérer de la RAM. Cela ralentira le système mais vos applications ne seront pas affectées autrement.
Je préfère toujours le cas 2, car je me sens mal à l'aise de perdre certaines parties ou la totalité de mon travail car le noyau pense que mes applications valent la peine d'être éliminées. De plus, avec la taille actuelle d'un disque moyen se situant dans la plage de la tuberculose, réserver quelques pour cent au swap ne devrait pas poser de problème.
la source
Ma règle d'appliquer swap dans n'importe quel système est d'avoir la réponse à cela:
Lorsque je reçois une réponse pour cette information, je redimensionne le système en conséquence. Les années précédentes, je faisais la règle de Sun Microsystem. Jusqu'à 16 Go, deux fois plus de RAM pour SWAP, à partir de 16 Go, le même montant. Par contre, si vous disposez de suffisamment de RAM et que vos applications n'utilisent pas SWAP de force, vous pouvez omettre le swap. Si vous avez besoin, il vous suffit de mettre un nouveau disque ou un nouveau disque et de configurer le SWAP. la règle de Sun s’appliquait principalement parce que sous Solaris, en cas de "panique du noyau", la mémoire serait entièrement vidée afin d’être remplacée par une analyse ultérieure.
la source
Un échange sera nécessaire si vous ne disposez pas de suffisamment de RAM pour exécuter tous vos programmes.
Vous dites que vous ne faites rien qui nécessite beaucoup de RAM. Donc, vous avez assez de RAM.
Ensuite, vous n'avez pas besoin d' espace d'échange.
Mais , si vous pensez qu'à un moment donné, malgré ce que vous sous-entendez dans votre question, vos programmes utiliseront, disons plus de la moitié (ou deux tiers) de votre RAM (règle empirique), alors veuillez lire l'autre "échange pro" " réponses. Vous n'aurez pas besoin d' échange, mais cela pourrait améliorer les performances de votre système.
la source
La réponse courte:
Oui, vous avez toujours besoin de permuter, juste au cas où une application ne se soucierait même pas de mapper la mémoire mais mapperait directement la mémoire virtuelle.
Définissez votre fichier d'échange sur:
RAM+round(sqrt(RAM))
si vous utilisez l'hibernationround(sqrt(RAM))
si vous ne le faites pasRéglez votre
swappiness
à 10 sur un bureau, mais pas sur un serveur!La réponse longue:
Autrefois:
La règle empirique en vigueur au cours des 25 dernières années est un minimum de 1xRAM et un maximum de 2xRAM , c’est ce que vous verrez tout le temps.
Ce minimum a été mis en place à l'âge de pierre
quand j'étais adolescent et que les dinosaures erraient toujours sur Terre etque la RAM était trop chère et que vous aviez absolument besoin de cet espace d'échange pour pouvoir accomplir n'importe quoi.Le maximum a été défini à ce moment-là en raison de rendements décroissants: il est tout simplement trop lent pour échanger autant de mémoire, car l'accès au disque dur est 1000 fois plus lent que la mémoire vive: bon en cas d'urgence, mais pas vraiment pour un usage quotidien! À l'époque, lorsque vous manquiez d'espace d'échange, il était temps d'ajouter plus de RAM! (ce qui est encore vrai aujourd'hui).
Dans le présent:
Si vous n'utilisez pas le mode hibernation et que votre mémoire est supérieure à 1 Go, la nouvelle règle empirique est la suivante:
round(sqrt(RAM))
oùRAM
est évidemment la taille de votre RAM en Go?Si vous utilisez le mode hibernation, vous devez pouvoir échanger la quantité totale de RAM + RAM déjà échangée sur le disque. La formule devient alors:
RAM+round(sqrt(RAM))
La règle des rendements décroissants reste valable aujourd'hui pour le maximum, mais si vous ne testez pas votre utilisation réelle, l'utilisation de 2xRAM n'est qu'un gaspillage d'espace disque. N'utilisez donc pas le maximum, à moins que vous n'ayez plus d'espace d'échange (swap) à l'aide des autres méthodes .
Tous ces éléments réunis vous donnent le tableau suivant: (3 dernières colonnes indiquant l’espace de permutation)
Ce qui précède est juste une règle de base; ce n'est pas la loi de la gravité!
Vous pouvez enfreindre cette règle (contrairement à la loi de la gravité) si votre cas d'utilisation est différent!
Astuce: allouez toujours SWAP au début d’un disque dur, car les têtes doivent se déplacer moins à l’intérieur du disque.
Oui: sur les disques SSD, l'emplacement de la zone d'échange importe peu car ils utilisent le tunnel quantique au lieu de têtes mobiles et que les disques SSD modernes utilisent toutes leurs cellules mémoire (même l'espace non alloué) pour empêcher la dégradation quantique.
Comment tester si votre utilisation du swap est différente de la règle "générique":
Il suffit d'exécuter:
qui vous donnera une liste de tous les programmes en cours qui sont échangés (avec celui qui utilise le plus d'espace d'échange en haut)
Si vous utilisez plus de quelques Ko: redimensionnez à plus que le minimum, sinon, ne vous embêtez pas ...
Si vous êtes sur un serveur, arrêtez de lire maintenant: vous êtes prêt!
Si vous utilisez un client de bureau / ordinateur portable (pas un serveur), vous voulez que votre interface graphique soit aussi réactive que possible et permute uniquement lorsque vous en avez vraiment besoin . Ubuntu a été optimisé pour un échange précoce pour une utilisation sur serveur, mais sur votre client, vous souhaitez modifier
gimp
rapidement cette image brute de 250 mégapixels . Par conséquent, définir votre valeurswappiness
sur 10 empêchera le noyau de procéder à une permutation trop tôt, tout en garantissant qu'il ne le sera pas. t swap trop tard:et ajouter:
à la fin du fichier, enregistrez le fichier ( Ctrl+ XY+ Enteren nano) et exécutez la commande:
pour recharger le paramètre ou juste pour l'amour du passé, utilisez l'approche Window $ et redémarrez ... :-)
la source
Réponse de compromis: cela dépend de la signification de "devrait".
Avez-vous besoin d’ une partition d’échange en ce sens que quelque chose de grave se produira si vous n’en avez pas dans les conditions de fonctionnement que vous décrivez? Non.
Il est sage d'avoir une partition d'échange juste au cas où vous engendriez une armée de porcs à mémoire de façon accidentelle pour avoir une chance de les tuer avant que le tueur de MOO n'intervienne? Oui.
Si votre RAM physique dépasse "considérablement" l'utilisation de la mémoire de données de tous les programmes que vous exécuterez simultanément, il n'y a aucun avantage en termes de performances à effectuer un échange. S'il dépasse, mais pas "beaucoup", il peut y avoir un avantage en termes de performances si le système d'exploitation est capable d'échanger de la mémoire rarement utilisée pour conserver en mémoire la quantité de données de fichiers fréquemment utilisée.
En résumé, c'est génial d'avoir 16 Go de RAM. Mais, si vous avez également un disque de 1 To, ne pouvez-vous pas en réserver 16 Go à permuter? Ce n'est que 1,5% du disque.
la source