Échangez la taille de la partition sur un ordinateur de 64 Go de RAM pour un travail exigeant en mémoire


36

J'ai 64 Go de RAM et 240 Go SSD sur mon ordinateur, que je vais utiliser pour les calculs gourmands en mémoire (apprentissage machine, extraction de données, etc.). La plupart des conseils que j'ai trouvés sur Internet concernent entre 2 et 4 et 8 Go de mémoire vive, et ils recommandent de doubler la taille de la partition de mémoire vive (soit 128 Go).

Est-il raisonnable de créer une partition swap de 128 Go? Quels sont les avantages d'une grande partition de swap?

Dois-je bien comprendre que, au cas où je manquerais de RAM physique:

  1. Si je n'ai pas d'échange, j'obtiens une erreur 'Mémoire insuffisante'
  2. Si j'ai swap, certaines pages RAM seront copiées sur la partition swap et le programme continuera à s'exécuter (bien que plus lentement).

Certaines personnes disent que la permutation sur SSD est une mauvaise idée, car le nombre de cycles de lecture / écriture est limité. À quelle vitesse utiliser swap épuisera-t-il les cycles de lecture / écriture SSD (autant que je sache, il s'agit d'environ 50000 écriture IOPS)?

J'utilise Linux ( Ubuntu 14.04 (Trusty Tahr)).

Nous allons définir un échange de 16 Go pour le moment, comme cela devrait suffire (par exemple, RedHat suggère 4 Go), et 16 Go d’espace disque ne sont pas vraiment un gros problème.


1
Au lieu de vous fier explicitement à l’échange, si vous connaissez la taille de votre environnement de travail ou souhaitez gérer un peu plus la mémoire de bas niveau, envisagez d’utiliser mmappour allouer vos pages d’ensemble de travail. Ensuite, votre montant d'échange sera exactement le montant dont vous avez besoin pour votre processus.
moelleux

5
Le conseil recommandant "deux fois plus de RAM" remonte à l'époque où les ordinateurs avaient peu de RAM. Plusieurs documents indiquent qu'il est principalement applicable aux ordinateurs dotés de moins de 2 Go de RAM. En outre, la taille de l’échange est principalement liée à ce que vous faites avec la machine.
John WH Smith

Voir également cette faille de serveur. Q & A - si vous utilisez Java (et éventuellement d'autres applications), vous voulez vous assurer que vous avez suffisamment de swap pour qu'ils puissent augmenter leurs allocations de mémoire. Personnellement, je m'en tiens au standard RHEL de RAM + 2 pour ma partition de swap
warren le

2
C'est dommage, la plupart des commentaires ont été supprimés. Ajout de retour: Il convient de mentionner, incidemment, que si votre noyau le supporte, vous souhaiterez peut-être monter votre partition de swap avec discardun disque SSD. De plus (et cela a été mentionné dans une réponse ci-dessous), n'oubliez pas que vous pouvez utiliser un fichier au lieu d'une partition pour une gestion potentiellement plus facile (et aucune performance ne peut être atteinte sur un disque SSD en raison, par exemple, d'une fragmentation).
Jason C

1
Si vous avez une application gourmande en mémoire, telle que l'apprentissage SVM, et que vous manquez de mémoire vive et que vous commencez à permuter, tout deviendra trop lent pour pouvoir être récupéré et votre seul mouvement disponible sera de vous débrouiller (cela m'est arrivé plusieurs fois) . Vous voulez probablement que votre processus soit éliminé du MOO s'il commence à échanger, afin de pouvoir au moins modifier des éléments et recommencer. Peut-être qu'avec les disques SSD, ce n'est pas si grave. Je vérifiais également les paramètres OOMK - il m'est arrivé sous Ubuntu que des processus soient parfois tués par MMO alors qu'il restait encore beaucoup de RAM, car ils allouaient de manière agressive
pqnet

Réponses:


36

Vous n'avez probablement besoin que d'une petite quantité de swap. Lorsque vous disposez de suffisamment de RAM pour l'ensemble de travail typique de votre ordinateur, ce que je suis sûr de faire, il vous suffit d'échanger vos données pour deux choses:

  1. Vous devez effectuer un échange pour obtenir des informations auxquelles vous ne serez probablement jamais accédé en dehors de la RAM afin de libérer plus d'espace pour le cache disque. De nombreuses applications s'exécutent au démarrage du système et ne seront plus jamais utilisées. Vous ne voulez pas que les pages qu'ils salissent restent bloquées dans la RAM pour toujours. Donc, vous avez besoin d'échange pour les tenir.

  2. Vous avez besoin d’un échange pour couvrir des allocations qui ne seront jamais remplies. Cet espace doit simplement être disponible, même s'il ne sera pas utilisé. Sans ce dernier, le système devra refuser d'allouer de la mémoire même s'il dispose de suffisamment de RAM physique, car il ne dispose pas d'une mémoire de sauvegarde insuffisante pour pouvoir utiliser toutes ses allocations en même temps.

Aucun de ceux-ci nécessite une grande quantité d'échange. 16 Go, par exemple, devrait être plus que suffisant. L’objectif n’est pas de vous laisser utiliser de plus grands ensembles de travail au détriment de la vitesse. L’objectif est de vous permettre d’utiliser votre 64 Go de manière efficace et de ne pas avoir à le boucher avec de la malbouffe ou à le réserver pour des cas extrêmes qui ne se produiront jamais.

(Je suis d'accord avec Bert sur le fait que 4 Go est probablement suffisant.)


2
@wrwt Placez votre partition swap à la fin du lecteur (ou du moins après votre partition de données), le redimensionnement sera plus rapide et moins gourmand en écriture si vous choisissez de l'ajuster (plus précisément, le redimensionnement de la partition de données pour s’adapter plus simplement, puisque vous n’avez pas à déplacer le début). Il n’existe aucun lien entre la position et les performances sur les disques SSD comme il en existe parfois sur les disques mécaniques.
Jason C

Bien que cette réponse soit probablement suffisante pour la plupart des amateurs, elle est donc un mauvais conseil pour les vrais serveurs - la réponse dépend de la manière dont l’application est écrite, car le manque d’espace de permutation fera que le tueur à court de mémoire lancera et mettra fin à une processus par hasard (oui vous avez bien lu; "aléatoire")
Soren

3
@ Soren C'est le superutilisateur, pas serverfault. ;) Il est certainement vrai que la configuration de l'espace de swap n'est pas la seule décision à prendre pour les "vrais serveurs". Vous devez également prendre des décisions concernant des problèmes tels que le sur-engagement, vous devrez peut-être ajuster le tueur OOM, etc. (Et les réponses deviennent beaucoup plus compliquées si vous vous attendez à ce que votre groupe de travail dépasse la RAM physique. Mais presque personne ne gère plus les machines de cette façon.)
David Schwartz

5
Linux surchargera la mémoire même sans swap activé. OOMK ne fera que traiter lorsque trop de mémoire est réellement utilisée. Donc, le deuxième point de la réponse est faux.
Ruslan

1
@MaciejPiechotka Ou utilisez un fichier.
Jason C

29

RedHat recommande 4 Go sur une machine de 64 Go. .

Cependant, le swap de dimensionnement est plus un art qu'une science. Cela dépend de l'utilisation de la machine, de l'espace disque et de la mémoire dont vous disposez et d'autres facteurs. Rappelles toi, vous pouvez toujours ajouter plus de swap plus tard.

L'utilisation de la règle de mémoire physique 2X est obsolète avec la quantité de mémoire disponible sur les systèmes. Mais exécuter avec zéro swap n'est pas recommandé, sauf si vous savez ce que vous faites. La recommandation de 4 Go est un bon point de départ.


12
+1 pour le dernier paragraphe. La recommandation 2x remonte à l'époque où la plupart des ordinateurs ne disposaient pas de suffisamment de mémoire RAM pour éviter une permutation en utilisation normale. Subjectivement, en utilisant des ordinateurs alors, la limite de 2x semble avoir été sélectionnée comme un nombre suffisamment important pour que l'ordinateur devienne inutilement lent avant de manquer de permutation.
Dan Neely

1
2X fonctionnait également bien lorsque les systèmes disposaient de 4 Go / 8 Go de RAM et de centaines de giga-octets d’espace disque. Bien sûr, c'était probablement plus que nécessaire, mais quel était le mal? Mais maintenant que les systèmes disposent de 16 Go / 64 Go de RAM et de SSD 128 Go / 256 Go, le mal est évident.
David Schwartz

12

Sous Linux, vous devez effectuer suffisamment de permutation pour que la mémoire virtuelle totale disponible (RAM + SWAP) soit suffisante pour tous les processus que vous souhaitez exécuter en même temps et leur encombrement virtuel maximal.

Si vous avez moins de swap que cela, ou aucun échange, la situation suivante se produit: le système manque de mémoire pour essayer d'attribuer une page. Cependant, il s’agit toujours d’une défaillance logicielle même s’il n’ya pas d’échange, car le système dispose de nombreuses pages "victimes" qui peuvent être supprimées pour gagner de la place: à savoir les pages de tous les mappages de mémoire sauvegardée sur fichier, tels que les exécutables. et bibliothèques partagées!

Au fur et à mesure que votre système exige de plus en plus d'espace pour les données (qui ne peuvent pas être permutées), le code exécutable (bibliothèques partagées et exécutables) sera de plus en plus évacué, ce qui entraînera de terribles compressions, alors que l'ensemble de travail est coupé en un ensemble de plus en plus étroit. pages.

L’espace de permutation atténue ce problème en fournissant un emplacement pour les pages anonymes (non mappées de fichiers) à échanger: les pages utilisées pour les allocations de mémoire, afin que le code exécutable puisse rester en mémoire.

Même dans ce cas, si vous n'exécutez pas souvent des tâches gourmandes en mémoire, vous pourrez peut-être vous échapper la plupart du temps en swapless et configurer manuellement un fichier d'échange (au lieu d'une partition dédiée) lorsque vous en aurez besoin. Pour créer un fichier d'échange à la volée, devenez root et:

dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768  # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile

Quand vous n'en avez plus besoin:

swapoff /path/to/swapfile
rm /path/to/swapfile

Remarques:

  1. Vous n'avez certainement pas besoin de configurer au moins autant de swap que de RAM. Cette règle empirique remonte aux systèmes d’exploitation où c’était une exigence essentielle en raison de la façon dont l’échange a été conçu.

  2. Il existe des moyens de faire échouer Linux lorsque aucune mémoire n'est disponible, notamment en manipulant les valeurs de ces entrées sysctl:

    vm.overcommit_memory
    vm.overcommit_ratio
    

2
+1 pour se référer réellement aux paramètres de configuration du noyau - La clé réside dans la partie de la question If I have no swap, I get an 'out of memory' error- qui est false- la vérité est que lorsque vous manquez d'espace de permutation, le tueur de mémoire insuffisante va tuer et tuer un processus aléatoire pour libérer de l'espace - la quantité d'espace de swap nécessaire dépend donc de la manière dont votre application est écrite.
Soren

@ Soren Il est probable que la majeure partie de la RAM sera remplie avec les données réelles, de sorte que le destructeur de mémoire insuffisante ne fera pas beaucoup de différence. Thx pour «la vérité» de toute façon.
écrit le

3

Il y a plus de considérations. Si vous avez besoin / voulez que la suspension fonctionne, il vous faut au moins la taille de votre RAM, puis quelques-unes. Cependant, il semble peu probable que vous en ayez besoin, étant donné que vous semblez principalement construire un cheval de travail informatique.

Dans ce cas, envisagez d'utiliser un fichier d'échange au lieu d'une partition. Vous n'avez pas besoin de vous soucier de dimensionner beaucoup, de vous en débarrasser ou de l'ajouter plus tard, ne nécessitant pas de repartitionnement. Il n’existe aucune pénalité (perceptible) en termes de performances lors de l’utilisation d’un fichier sur une partition. Si vous en avez besoin, examinez la taille et cela vous donnera également de bons conseils.


1
@Kaz Je pense que vous parlez de quelque chose de différent de kaste. kaste dit que si vous voulez pouvoir suspendre / hiberner votre ordinateur, l'éteindre et reprendre là où vous l'avez laissé plus tard, vous avez besoin de suffisamment d'espace d'échange pour stocker toute votre RAM (sinon, où irait-il?).
Amalloy

@ amalloy Si vous avez stocké votre RAM dans votre espace de swap, où va le swap (rappelez-vous que le swap est traité comme de la mémoire - s'il est perdu, cela revient à perdre de la mémoire vive).
NPSF3000

2

La charge de travail que vous souhaitez appliquer à la machine nécessite une certaine quantité de mémoire pour s'exécuter (n'oubliez pas d'ajouter suffisamment d'équation pour gérer les pics de charge), et vous devez configurer votre ordinateur pour qu'il en soit au minimum.

Les systèmes d'exploitation modernes fournissent la mémoire virtuelle sous la forme d'une combinaison de mémoire physique et d'espace d'échange. Si vous avez besoin de plus de mémoire que la machine ne vous en avez, vous devez ajouter suffisamment d'espace d'échange pour combler le vide. Par exemple, si vous avez besoin de 80 Go maximum et que la machine dispose de 64 Go, vous avez besoin d’un échange de 16 Go.

En règle générale, les installateurs de système d’exploitation vous demandent de créer une zone de swap initiale (car c’est la plus simple et permet même l’installation d’ordinateurs minuscules). trois fois la mémoire physique, donc cela est généralement suggéré. Cependant, vous en savez plus sur le modèle d'utilisation afin de pouvoir le modifier comme il convient.

Il n’ya rien de mal à travailler sans swapspace si votre pression sur la mémoire est toujours inférieure. Linux utilisera de manière transparente toute mémoire inutilisée en tant que cache de disque.


2

Une bien meilleure idée que d’avoir «beaucoup d’échange» est de (ré) organiser votre travail de manière à ce que les ensembles de travail tiennent dans la mémoire, puis d’utiliser le système de fichiers pour stocker et récupérer le travail que vous effectuez. Ainsi, au lieu de forcer le système d'exploitation à deviner quels seront vos modèles d'utilisation de la mémoire, utilisez ce que vous savez de vos problèmes pour contrôler vos modèles d'utilisation de la mémoire.

Comme un exemple aléatoire qui m’intéresse tout de suite cet été ... Lors de la mise en place du tamis quadratique, il faut un grand tableau (apparemment) contigu à annoter (avec un algorithme compliqué dont les détails n’importent pas vraiment pour cet exemple). Le tableau doit contenir environ 100 Giga-entrées, donc facilement dans la plage de 1 To. Je pourrais prétendre allouer cela et laisser le système d'exploitation effectuer une quantité incroyable de permutation inefficace pour obtenir des pages dans et hors de la RAM afin de prendre en charge toutes les écritures séquentielles du tableau. Au lieu de faire quelque chose d'aussi stupide, j'ai arrangé pour allouer un tableau beaucoup plus petit qui tient exactement dans la mémoire, puis réutiliser ce petit tableau pour couvrir de manière itérative le reste du grand tableau en tranches. J'ai également dépouillé l'OS, dépouillé l'ensemble des services en cours d'exécution, remplacé le shell,

Le SSD peut être rapide, mais ce n’est pas aussi rapide que d’organiser votre calcul pour effectuer le même ensemble d’opérations sans jamais perdre votre temps à permuter.


1

Comme d'autres l'ont mentionné, une partition swap est une bonne idée même si vous avez beaucoup de RAM. Ce n'est pas une bonne idée de le mettre sur un SSD; les écritures fréquentes d'une partition de swap finiront par user votre lecteur.

Si vous avez un port USB 3.0 de rechange, je vous conseillerais d'utiliser un lecteur flash pour votre espace d'échange. Il existe de nombreux lecteurs flash haute vitesse qui sont aussi rapides que votre SSD, mais beaucoup moins chers - assez bon marché pour les remplacer s'ils échouaient. Une recherche rapide sur Amazon montre qu’il existe de nombreux lecteurs flash USB 3.0 de 16 Go à moins de 20 dollars, et même des disques de 64 Go à moins de 60 dollars.

Partitionnez l'intégralité de la clé USB en tant qu'espace de permutation. Vous aurez ainsi une capacité de permutation si vous en avez besoin. Vous aurez l'esprit tranquille en sachant que la mémoire écrite de manière répétée est facilement remplaçable (et à moindre coût).


3
+1 pour ne pas permuter sur SSD, -1 pour permuter sur un composant dont la durée de vie est très courte lorsqu'il est utilisé comme ça.
Aviator45003

1
@TC a raison, ArmanX - si vous essayez d'éviter d'utiliser le flash (SSD), pourquoi voudriez-vous utiliser le flash sur USB? C'est irrationnel.
Warren

2
@TC: Ne pas utiliser le SSD pour le swap à cause de l'usure du support est une légende urbaine injustifiée. L'échange ne se produit pas "tout le temps", mais rarement. En outre, c'est une question qui a fait l'objet de nombreuses recherches chez Microsoft après la publication de Win7, de sorte que les schémas d'accès d'échange typiques sont tout à fait acceptables pour les disques SSD (c'est Windows et non Ubuntu, mais il est probable que Linux ne fonctionne pas beaucoup moins bien). Vous avez cent (ou mille) fois plus d'opérations d'écriture qui usent votre disque SSD à cause de fichiers journaux stupides que personne ne lit jamais (généralement, la synchronisation de chaque ligne).
Damon

La logique est erronée: si la clé USB est en effet aussi rapide que le SSD, pourquoi est-elle moins chère?
Agent_L

C'est un équilibre. D'un côté, c'est une bonne idée d'avoir un fichier d'échange. D'autre part, si un fichier d'échange épuise un disque SSD (ce qui ne changera probablement rien, vous avez raison), il serait préférable d'utiliser un disque de rechange bon marché - et un lecteur flash à 20 $ est bien meilleur que un SSD pour plus de 100 $.
ArmanX

1

Tout ira bien même avec 1 Go (et probablement moins) de swap. Mon ordinateur de travail n'utilise généralement pas plus de 140 à 150 Mio. Un gigaoctet, c'est beaucoup de sur-approvisionnement pour cela.
À moins que vous ne calculiez des tâches nécessitant des jeux de données de plusieurs centaines de giga - octets et (celui-ci étant important!), L'accès aux données s'effectue de manière plus ou moins unique, vous ne voudrez jamais obtenir un échange beaucoup plus volumineux que cela. Mais là encore, le mappage en mémoire d’un fichier de données fonctionne tout aussi bien pour cette application.

Mais plus d'échange aide plus, non? Plus de tout est toujours mieux!

Considérez quelle différence un échange de, disons, de 16 Go (ou de 64 Go) fera. Si vous n'utilisez jamais ces 16 Go, vous pouvez également ne pas les mettre de côté. Mais si vous les utilisez, que se passe-t-il? Le disque, comparé à la mémoire principale, est extrêmement lent. Même avec un SSD SATA-600, le transfert de 16 Go prend entre 30 et 40 secondes, et 2 à 4 fois plus longtemps sur d'autres configurations.
Maintenant, quelqu'un objectera inévitablement que vous faites plutôt une pagination d'une douzaine de pages 4kiB et non de 16GiB en une fois. Bien que cela soit vrai, le point est néanmoins valable. Si vous devez seulement échanger quelques pages, vous n'avez pas besoin de 16 Go de swap, mais si vous en avez besoin de 16 Go, vous allez également les transférer (d'une manière ou d'une autre).

En théorie, 99,9% de tous les utilisateurs pourraient même utiliser une machine 64GiB (ou n’importe quelle machine 8+ GiB) sans aucun échange, et très probablement jamais rien manquant. Cependant, cela n'est pas conseillé.
Tout d’abord, il est sous-optimal car le système d’exploitation dispose de moins de choix quant à ce qu’il peut ignorer lorsqu’il manque de mémoire physique. Il peut faire deux choses: échanger quelque chose qui n'est pas utilisé ou jeter des pages du cache de mémoire tampon. Si vous n'avez pas de swap, il n'y a qu'une seule chose à faire. Le fait de jeter des pages du cache de mémoire tampon est sans danger, mais peut avoir un impact notable sur les performances.
Deuxièmement, les mappages anonymes privés peuvent tout simplement échouer s’il n’ya pas d’échange. Cela n'arrivera généralement pas, mais finalement, quand il n'y a pas assez de mémoire physique disponible pour les satisfaire tous, et qu'il n'y a pas d'échange, le système d'exploitation n'a que ce choix, sauf que ...
Troisièmement, le tueur redouté du MOO peut intervenir Ce qui signifie qu'un processus plus ou moins aléatoire peut être tué. Non, merci. Ce n'est pas quelque chose que vous voulez qu'il se passe.

Cela dit, des conseils tels que vous avez besoin d'un échange X fois la quantité de RAM installée viennent de personnes qui répètent quelque chose qu'ils ont entendu (et n'ont pas compris!) De quelqu'un qui a répété quelque chose qu'ils ont entendu (et qui n'ont pas compris!) Des décennies. depuis.
La règle "utiliser 2X votre RAM" était une règle facile à retenir dans les années 1980 et 1990, ce n'était jamais la "vérité d'or" (juste quelque chose qui fonctionnait bien pour la plupart des utilisateurs), et elle ne s'applique plus du tout de nos jours .

Vous devez disposer d’une quantité d’échange raisonnable que vous pouvez facilement vous permettre (disons, un gigaoctet), de sorte que le système d’exploitation puisse afficher des données obsolètes et que le monde ne s’arrête pas immédiatement lorsque vous demandez un peu plus de mémoire. Mais c'est tout.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.