web-dev-qa-db-fra.com

Quelle est la taille de swap par défaut?

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

16
Seret

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

Le programme d’installation ubiquity utilise les scripts partman-auto et les fichiers de configuration (appelés recettes ) pour déterminer la taille de tous les fichiers. 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.
  • Là, il trouve la taille minimale et maximale de la partition et sa priorité. Pour swap il peut être 96 (min - en Mo) 512 (priorité) 300% (max).
  • Ensuite, il a la taille 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 voir:

5
arrange

Cela va être plutôt technique, mais c'était amusant de le découvrir alors voilà ...

  • J'ai trouvé un paquet dphys-swapfile et voici le Code source . L'option setup est utilisée pour la 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 est 2 fois RAM taille. 
 Ceci peut être appelé au démarrage, de sorte que le fichier conserve toujours la taille 
 Correcte pour la RAM actuelle, ou s'exécute manuellement lorsque RAM la taille a 
 Changé.
  • À l'intérieur de dphys-swapfile se trouve un paramètre conf_swapsize pour une taille prédéfinie (dans Natty, cela est vide):
taille que nous voulons le forcer, défaut (vide) donne 2 * RAM 
 CONF_SWAPSIZE =

et un réglage 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 sur:

    if ["$ {CONF_SWAPSIZE}" = ""]; alors 
     # calculera la taille optimale automatique 
     echo -n "taille informatique", 
     # cela semble être la plus proche de la taille physique RAM, manque environ 60 Ko 
     KCORESIZE = "` ls -l/proc/kcore | awk '{print $ 5}' '"
     # Make Les méga-octets arrondis seront exactement 1 trop peu, ajoutez donc 1 
     MEMSIZE = "` expr "$ {KCORESIZE}"/1048576 + 1` "
     # Défaut, sans écrasement du fichier de configuration, swap = 2 * RAM 
     CONF_SWAPSIZE =" `expr" $ { MEMSIZE} "'*'" $ {SWAPFACTOR} "` "
     Fi

Comme vous pouvez le constater, leur calcul dans ce package dépend de la taille de /proc/kcore, puis est divisé par 1048576, +1 pour le arrondir, puis multiplié par swapfactor. De ma machine:

enter image description here

La valeur par défaut de ce système serait donc 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 Mo.

19
Rinzwind