J'ai 64 Go RAM et 240 Go SSD sur mon ordinateur, que je vais utiliser pour les calculs gourmands en mémoire ( apprentissage automatique, fouille de données, etc.). La plupart des conseils que j'ai trouvés sur Internet concernent environ 2-4-8 Go RAM et recommandent de doubler la taille de la partition swap RAM (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:
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 il se doit (par exemple, RedHat suggère 4 Go), et 16 Go d’espace disque ne sont pas vraiment un gros problème.
Vous n'avez probablement besoin que d'une petite quantité de swap. Lorsque vous avez suffisamment de RAM pour le poste 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 pourrez probablement jamais accéder en dehors de RAM afin de libérer davantage 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 soient coincées dans RAM pour toujours. Donc, vous avez besoin d'échange pour les tenir.
Vous avez besoin d’é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 cette option, le système devra refuser d'allouer de la mémoire même s'il dispose de beaucoup de mémoire physique libre [RAM] car il ne dispose pas d'une mémoire de sauvegarde insuffisante pour permettre l'utilisation simultanée de toutes ses allocations.
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 l’encombrer de courrier indésirable ni le réserver pour des cas Edge qui ne se produiront jamais.
(Je suis d'accord avec Bert sur le fait que 4 Go est probablement suffisant.)
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. Rappelez-vous, vous pouvez toujours ajouter plus d’échange 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é à moins que vous sachiez ce que vous faites. La recommandation de 4 Go est un bon point de départ.
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'allouer 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 échangé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 fréquemment 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:
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ù la configuration de l’échange était une exigence essentielle.
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
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 de quelques autres. 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 la taille, de la suppression ou de l'ajout ultérieur, 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 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 moins équivalent.
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 permet, vous devez ajouter suffisamment d'espace d'échange espace pour combler le vide. C'est à dire. 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 c'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.
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. Autrement dit, 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 1 TB. Je pourrais prétendre allouer cela et laisser le système d'exploitation effectuer une quantité incroyable de permutations inefficaces pour insérer des pages dans et hors de RAM afin de prendre en charge toutes les écritures séquentielles dans le 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 supprimé le système d'exploitation, le groupe de services en cours d'exécution, remplacé le shell et personnalisé deux couches d'allocateurs de mémoire afin de ne rien gâcher pour que l'espace d'adressage disponible pour mon processus soit aussi contigu que possible.
Le SSD peut être rapide, mais il 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.
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 centaines de gigaoctets et (celui-ci est important!), Les données sont accessibles de manière plus détaillée. ou moins d'accès-une fois la mode, vous ne voudrez jamais avoir un échange beaucoup plus grand 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 Gio fera (ou pensez de 64 Gio). 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 certaines autres configurations.
Maintenant, il est inévitable que quelqu'un objecte 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 é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 tous les satisfaire, et qu'il n'y a pas d'échange, le système d'exploitation n'a que ce choix, sauf que ...
Troisièmement, le meurtrier redouté de l’OMO 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 proviennent de personnes qui répètent quelque chose qu'elles ont entendu (et n'ont pas compris!) De quelqu'un qui a répété quelque chose qu'elles ont entendu ne comprend pas!) il y a des décennies.
La règle "utilisez 2X votre RAM" était une règle simple à 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 cela ne fonctionne pas. ne pas appliquer du tout de nos jours.
Vous devez avoir un montant d'échange raisonnable que vous pouvez facilement vous permettre (disons, un gigaoctet), afin que le système d'exploitation puisse mettre en page des données obsolètes, et que le monde ne le soit pas immédiatement terminez quand vous demandez une fois un peu plus de mémoire. Mais c'est tout.
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 suggérerais d'utiliser un lecteur flash pour votre espace d'échange. Il existe de nombreux lecteurs flash haute vitesse aussi rapides que votre SSD, mais beaucoup moins chers - assez chers pour être remplacés s’il commençait à tomber en panne. 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é du lecteur flash en tant qu'espace d'échange. Vous aurez ainsi un espace d'échange si vous en avez besoin, et l'esprit tranquille, sachant que la mémoire écrite de manière répétée est facilement remplaçable (et à moindre coût).