Quelle est la taille de swap par défaut?

16

Comment l'installateur calcule-t-il la taille de la partition de swap à créer? Vraisemblablement, il est basé sur la taille de la RAM installée, mais cela dépend-il de la quantité de RAM?

Seret
la source
Il n'y a pas de valeur par défaut, cela dépend de la quantité de RAM dont vous disposez.
Uri Herrera
1
Et bien oui, mais je cherchais un peu plus de détails que "ça dépend". S'agit-il toujours d'un multiple défini de la taille de la RAM ou cela dépend-il de la quantité de RAM disponible? Par exemple, les grandes tailles de RAM n'auraient jamais besoin de plus qu'assez pour permettre l'hibernation, mais les très petites tailles de RAM pourraient bénéficier d'un swap considérablement plus grand que 1: 1.
Seret

Réponses:

5

En fait, il n'y a pas de dphys-swapfileprogramme sur un CD d'installation Ubuntu par défaut et il n'est pas utilisé pour calculer la taille du swap .

Ce qui se passe, c'est que le programme d' ubiquityinstallation utilise les partman-autoscripts et les fichiers de configuration (appelés recettes ) pour déterminer la taille de toutes les partitions. Cela fonctionne comme ceci:

  • Partman trouve le bon fichier de recette en fonction du type d'ordinateur et de l'option choisie par l'utilisateur.
  • Il y trouve la taille minimale et maximale de la partition et sa priorité. Pour le swap, il peut être de 96 (min - en Mo) 512 (priorité) 300% (max).
  • Ensuite, il obtient la taille de la RAM (via /proc/meminfo).
  • Il utilise son propre algorithme pour calculer les tailles.

Détails:

Un fichier de recette peut ressembler à ceci:

1 1 1 free
    $iflabel{ gpt }
    method{ biosgrub } .

500 10000 -1 $default_filesystem
    $lvmok{ }
    method{ format }
    format{ }
    mountpoint{ / } .

96 512 300% linux-swap
    $lvmok{ }
    method{ swap }
    format{ } .

L'algorithme pour calculer les tailles:

for(i=1;i<=N;i++) {
   factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
   minsum = min[1] + min[2] + ... + min[N];
   factsum = factor[1] + factor[2] + ... + factor[N];
   ready = TRUE;
   for(i=1;i<=N;i++) {
      x = min[i] + (free_space - minsum) * factor[i] / factsum;
      if (x > max[i])
         x = max[i];
      if (x != min[i]) {
         ready = FALSE;
         min[i] = x;
      }
   }
}

Pour plus d'informations, voir:

organiser
la source
Débat intéressant: une meilleure référence qu'un étrange site Web Debian?
enzotib
Eh bien, j'ai trouvé cela aussi quand je l'ai recherché mais le paquet a un "Avertissement: Ce paquet est destiné à être utilisé uniquement pour construire des images de l'installateur Debian. Ne l'installez pas sur un système Ubuntu normal.". J'ai supposé que cela n'était pas utilisé, j'ai donc cherché et trouvé le code de dphys-swapfile>: - D Hmm intéressant en effet.
Rinzwind
@enzotib: pourquoi étrange?
organiser le
@arrange: étrange parce que ce n'est pas un site officiel ubuntu, et aussi en tant que site debian ne semble pas officiel.
enzotib
J'ai trouvé 2 autres méthodes pour calculer la taille du swap D: Cette méthode utilise grep ^ Mem: / proc / meminfo ou si c'est 0 grep ^ MemTotal: / proc / meminfo puis multiplie par 2 (par défaut) ou 3 (la plupart sont définies sur 300%) avec un minimum par architecture. Un mipsel-sb1-bcm91250a utilise un 512 fixe. I386-efi utilise 200%.
Rinzwind
19

Ça va être plutôt technique mais c'était amusant à découvrir alors voilà ...

  • J'ai trouvé un package dphys-swapfileet voici le code source . L'option setupest utilisée pour le configurer:
setup - indique à dphys-swapfile de calculer la taille optimale du fichier d'échange et
(re) générer un fichier d'échange approprié. Par défaut, il 2 fois la taille de la RAM.
Cela peut être appelé au démarrage, donc le fichier reste toujours le
bonne taille pour la RAM actuelle, ou exécutée à la main chaque fois que la taille de la RAM a
modifié.
  • À l'intérieur se dphys-swapfiletrouve un paramètre conf_swapsizepour une taille prédéfinie (dans Natty, cela est vide):
taille que nous voulons forcer, par défaut (vide) donne 2 * RAM
CONF_SWAPSIZE =

et un cadre pour un swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • La taille réelle est calculée un peu plus loin:

    if ["$ {CONF_SWAPSIZE}" = ""]; ensuite
      # calculer la taille optimale automatique
      echo -n "taille de calcul"
      # cela semble être le plus proche de la taille de la RAM physique, manque environ 60k
      KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `"
      # faire des MBytes qui seront arrondis exactement à 1 de trop, alors ajoutez 1
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` "
      # par défaut, sans écrasement du fichier de configuration, swap = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `"
    Fi

Comme vous pouvez le voir, la façon dont ils le calculent dans ce package dépend de la taille de /proc/kcore, puis est divisée par 1048576, +1 pour l'arrondir puis multipliée par swapfactor. Depuis ma machine:

entrez la description de l'image ici

Ainsi, la valeur par défaut pour ce système serait 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 Mo.

Rinzwind
la source