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:
- Si je n'ai pas d'échange, j'obtiens une erreur 'Mémoire insuffisante'
- 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.
la source
mmap
pour allouer vos pages d’ensemble de travail. Ensuite, votre montant d'échange sera exactement le montant dont vous avez besoin pour votre processus.discard
un 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).Réponses:
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:
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.
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.)
la source
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.
la source
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:
Quand vous n'en avez plus besoin:
Remarques:
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.
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:
la source
If I have no swap, I get an 'out of memory' error
- qui estfalse
- 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.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.
la source
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.
la source
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.
la source
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).
la source
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.
la source