Combien de swap dois-je prendre pour 1 Go à 8 To de RAM sur 14.04 ou plus?

14

Je vais installer 64 bits 14.04 sur une nouvelle machine avec quelque chose comme 1 à peut-être 128 Go de RAM et encore plus de RAM plus tard. Combien d'espace dois-je allouer à la partition de swap?

Et surtout: POURQUOI ces recommandations pour ces chiffres?

(Aucune des réponses existantes ici et ici n'explique le pourquoi et sont un peu datées si l'on regarde 1 Go ou RAM et plus)

Tim
la source
6
Copie possible de J'ai 16 Go de RAM. Ai-je besoin d'un échange de 32 Go? Il y a des réponses de 2017 (ou mises à jour en 2017), donc il contient actuellement des recommandations plus récentes que celle-ci.
Melebius
1
@Melebius: Je ne suis pas d'accord: bien que cette question soit plus récente, elle est plus générique que celle que vous essayez de dupliquer. Ce Q&A englobe l'ancien, mais l'inverse n'est pas vrai! ;-)
Fabby
1
@Fabby Dans ce cas, l'autre ne devrait-il pas être marqué comme un double de celui-ci?
Melebius
1
@Melebius Si les deux questions peuvent être utilisées par les réviseurs comme des questions en double d'autres questions dans des situations différentes, alors les deux questions peuvent être laissées ouvertes pour gérer ces différentes situations, car les deux questions ont des réponses très appréciées.
karel
2
@Melebius Nous avons déjà eu une discussion sur ce sujet dans la méta et la communauté a décidé de laisser chaque stand tel quel.
Fabby

Réponses:

30

La réponse courte:

Définissez votre fichier d'échange sur:

  • round(sqrt(RAM))si vous n'utilisez pas l' hibernation
  • RAM+round(sqrt(RAM))si vous utilisez l' hibernation

Réglez votre swappinessà 10 sur un bureau, mais pas sur un serveur!

La réponse longue:

Autrefois:

La règle de base utilisée depuis 25 ans est un minimum de 1xRAM et un maximum de 2xRAM , c'est ce que vous verrez constamment cité.

Ce minimum a été repoussé à l'âge de pierre quand j'étais adolescent et les dinosaures parcouraient encore la Terre et parce que la RAM était tout simplement trop chère et que vous aviez absolument besoin de cet espace d'échange pour pouvoir accomplir quoi que ce soit.

Le maximum a été fixé à ce moment-là en raison de rendements décroissants: il est tout simplement trop lent d'avoir à échanger autant de mémoire car l'accès au disque dur est un facteur 1000 plus lent que la RAM: bon en cas d'urgence, mais pas vraiment bon pour un usage quotidien! À l'époque, lorsque vous manquiez d'espace de swap, il était temps d'ajouter plus de RAM! (ce qui est toujours vrai aujourd'hui).

Dans le présent:

  1. Si vous n'utilisez pas l'hibernation et que votre mémoire dépasse 1 Go, la nouvelle règle de base est round(sqrt(RAM))où se RAMtrouve évidemment votre taille de RAM en Go et sqrtla racine carrée. :-)

  2. Si vous utilisez l'hibernation, vous devez pouvoir échanger la totalité de la quantité de RAM + RAM déjà échangée sur le disque, ainsi la formule devient: RAM+round(sqrt(RAM))

  3. La règle des rendements décroissants s'applique toujours aujourd'hui au maximum, mais à moins de tester votre utilisation réelle, la prise de 2xRAM est juste un gaspillage d'espace disque , alors n'utilisez pas le maximum à moins que vous ne manquiez d'espace de swap en utilisant les autres méthodologies .

Tous ces éléments ensemble vous donnent le tableau suivant: (3 dernières colonnes indiquant l'espace de swap)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB
    2TB             46GB              2094GB        4TB
    4TB             64GB              4160GB        8TB
    8TB             91GB              8283GB       16TB

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 particulier est différent!

Conseil de pro: 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 SSD, peu importe où vous localisez la zone de swap car ils utilisent le tunnel quantique au lieu de déplacer les têtes et les SSD modernes utilisent toutes leurs cellules de 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":

Exécutez simplement:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

qui vous donnera une liste de tous les programmes en cours qui sont échangés (avec celui qui utilise le plus d'espace de swap 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 êtes sur un client de bureau / ordinateur portable (pas un serveur), vous voulez que votre interface graphique soit aussi réactive que possible et ne permute que lorsque vous en avez vraiment besoin . Ubuntu a été optimisé pour permuter tôt pour une utilisation sur le serveur, mais sur votre client, vous voulez éditer cette énorme image brute de 250 mégapixels gimppour être rapide , donc régler votre swappinessà 10 empêchera le noyau de permuter trop tôt, tout en s'assurant qu'il ne le fasse pas '' t échanger trop tard:

Si vous avez un sysctl.conffichier,

sudo nano /etc/sysctl.conf

OU

Si vous avez un sysctl.drépertoire mais pas de sysctl.conffichier, créez un nouveau fichier:

sudo nano /etc/sysctl.d/35_swap.conf 

et dans les deux cas ajouter:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

à la fin du fichier, enregistrez le fichier ( Ctrl+ XY+ Enteren nano) et exécutez a:

sysctl --system

pour recharger le paramètre ou adopter l'approche Window $ et redémarrer ... :-)

Fabby
la source
1
Merci. Qu'entendez-vous par «rendement décroissant»? Si la RAM et le swap sont pleinement utilisés, il est impossible d'hiberner même si le swap est de 2 * RAM, n'est-ce pas? (Parce que l'hibernation aura besoin que la taille du swap soit RAM + swap, ce qui est impossible?)
Tim
Oui, mais je ne l'ai encore jamais fait ... (et je suis vieux! Donc 2 * RAM: Quand toute la RAM est échangée, vous pouvez toujours hiberner ...
Fabby
2
"Diminution des retours" signifie simplement que l'accès au disque dur est un facteur 1000 plus lent que la RAM, donc si vous devez échanger deux fois votre RAM, vous serez mort de vieillesse avant la fin ... Il est juste là pour hiberner lorsque vous ' re déjà échangé ...
Fabby
1
@Fabby C'est à nouveau le temps de révision du CV sur la question d'origine: askubuntu.com/review/close/889454 . Voir le commentaire de Yufenyuy Veyeh Dider sous la question.
karel
1
@mrkskwsnck: C'est du même auteur ... ;-)
Fabby
6

Nécessité d'un échange

L'échange est utile pour 3 raisons:

  1. Suppression de l'encombrement de la RAM. De l' article sur kernel.org:

    "Un nombre important des pages référencées par un processus au début de sa vie ne peuvent être utilisées que pour l'initialisation, puis ne plus jamais être utilisées. Il vaut mieux échanger ces pages et créer plus de tampons de disque que de les laisser résidentes et inutilisées"

    En d'autres termes, les données stockées dans la RAM peuvent être utiles uniquement lorsqu'un processus a été démarré (comme le processus de démarrage), puis y résider simplement, en encombrant l'espace qui peut être utilisé à de meilleures fins.

  2. Il augmente la quantité de mémoire que les processus peuvent utiliser. C'est bien compris. Vous ne voulez pas que le système manque de mémoire et tombe en panne en raison de son manque. Pour cette raison spécifique, l'échange doit exister, servant de fonction de protection.

  3. Hibernation: Lorsqu'un ordinateur passe en veille prolongée, le contenu de la RAM va sur le disque.

Montant du swap

Connaissant le but du swap et en fonction de la quantité de RAM de votre machine, vous pouvez choisir une taille de swap qui correspond à votre objectif. Il n'y a pas de directives spécifiques, seulement des règles de base que vous pouvez utiliser pour adapter la taille de votre swap à votre système .

Par exemple, linux.com recommande:

Une règle d'or est la suivante: 1) pour un système de bureau, utilisez un espace d'échange de mémoire système double, car cela vous permettra d'exécuter un grand nombre d'applications (dont beaucoup peuvent être inactives et facilement échangées), ce qui rend plus de RAM disponible pour les applications actives; 2) pour un serveur, disposez d'une plus petite quantité de swap disponible (disons la moitié de la mémoire physique) afin d'avoir une certaine flexibilité pour le swap si nécessaire, mais surveillez la quantité d'espace de swap utilisé et mettez à niveau votre RAM si nécessaire; 3) pour les ordinateurs de bureau plus anciens (avec seulement 128 Mo, par exemple), utilisez autant d'espace de swap que possible, même jusqu'à 1 Go.

Par expérience personnelle, voici ce que je ferais:

En considérant une machine avec 1 à 2 Go qui n'a pas besoin d'hiberner et pour une utilisation occasionnelle, vous pouvez disposer d'un espace d'échange de 1 Go à 2 Go. Mon PC avec Ubuntu 14.04 a 1 Go de RAM et 2 Go de swap. Le montant du swap ne franchit jamais la frontière de 800 Mo, et j'utilise mon PC uniquement pour surfer sur le Web et écrire des scripts.

Avec un PC de plus de 2 Go et vous n'avez pas besoin d'hiberner, vous pouvez conserver le swap de 512 Mo à 1 Go. J'ai un ordinateur portable avec 15.04 que je n'hiberne jamais et qui a un fichier d' échange ( pas une partition ) de 512 Mo. La RAM elle-même est de 6 Go mais ne traverse jamais 2 à 3 Go. Encore une fois: une utilisation décontractée.

Cosmoscalibur et Fabby ont déjà abordé l'échange au cas où vous auriez besoin d'hiberner, donc je n'entrerai pas dans les détails. Mon humble avis est le suivant:

Si vous prévoyez d'hiberner, le contenu de la RAM devra être remplacé, vous en aurez donc besoin au moins de la même taille que votre RAM.

Sergiy Kolodyazhnyy
la source
:-) Seulement remarqué maintenant que vous avez publié quelque chose. Modifié et voté! (Comme c'est maintenant une bonne réponse après mon montage!: D: D: D)
Fabby