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?
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?
Réponses:
En fait, il n'y a pas de dphys-swapfile
programme 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' ubiquity
installation utilise les partman-auto
scripts et les fichiers de configuration (appelés recettes ) pour déterminer la taille de toutes les partitions. Cela fonctionne comme ceci:
/proc/meminfo
).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:
Ça va être plutôt technique mais c'était amusant à découvrir alors voilà ...
dphys-swapfile
et voici le code source . L'option setup
est 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é.
dphys-swapfile
trouve un paramètre conf_swapsize
pour 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:
Ainsi, la valeur par défaut pour ce système serait 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 Mo.