¿Cómo calcula el instalador qué tamaño de partición de intercambio crear? Presumiblemente se basa en el tamaño de RAM instalado, pero ¿eso depende de la cantidad de RAM?
¿Cómo calcula el instalador qué tamaño de partición de intercambio crear? Presumiblemente se basa en el tamaño de RAM instalado, pero ¿eso depende de la cantidad de RAM?
Respuestas:
En realidad, no hay ningún dphys-swapfile
programa en un CD de instalación de Ubuntu predeterminado y no se usa para calcular el tamaño de intercambio .
Lo que sucede es que el ubiquity
instalador usa los partman-auto
scripts y los archivos de configuración (llamados recetas ) para determinar los tamaños de todas las particiones. Funciona así:
/proc/meminfo
).Detalles:
Un archivo de receta puede verse así:
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{ } .
El algoritmo para calcular los tamaños:
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;
}
}
}
Para más ver:
Esto va a ser bastante técnico, pero fue divertido descubrirlo, así que aquí va ...
dphys-swapfile
y aquí está el código fuente . La opción setup
se usa para configurarlo:setup: le dice a dphys-swapfile que calcule el tamaño óptimo del archivo de intercambio y (re) generar un archivo de intercambio apropiado. Predeterminado 2 veces el tamaño de RAM. Esto se puede llamar en el momento del arranque, por lo que el archivo siempre permanece tamaño correcto para la RAM actual, o ejecutar a mano siempre que el tamaño de RAM tenga cambiado
dphys-swapfile
hay una configuración conf_swapsize
para un tamaño predefinido (en Natty esto está vacío):tamaño que queremos forzar a que sea, por defecto (vacío) da 2 * RAM CONF_SWAPSIZE =
y un escenario para swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
El tamaño real se calcula un poco más adelante:
if ["$ {CONF_SWAPSIZE}" = ""]; luego # calcular tamaño óptimo automático echo -n "tamaño informático" # este parece ser el más cercano al tamaño de RAM física, carece de aproximadamente 60k KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `" # hacer MBytes que redondeado hacia abajo será exactamente 1 muy pocos, así que agregue 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` " # predeterminado, sin sobrescritura del archivo de configuración, intercambio = 2 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" fi
Como puede ver, la forma en que lo calculan en este paquete depende del tamaño de /proc/kcore
, luego se divide por 1048576, +1 para redondearlo y luego se multiplica por factor de intercambio. De mi maquina:
Entonces, el valor predeterminado para este sistema sería 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.