¿Cuál es el tamaño de intercambio predeterminado?


16

¿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?


No hay un valor predeterminado, depende de la cantidad de RAM que tenga.
Uri Herrera

1
Bueno, sí, pero estaba buscando un poco más de detalle que "depende". ¿Es siempre un múltiplo del tamaño de RAM o depende de la cantidad de RAM que hay? Por ejemplo, los tamaños de RAM grandes nunca necesitarían más que suficiente para permitir la hibernación, pero los tamaños de RAM muy pequeños podrían beneficiarse de un intercambio considerablemente mayor que 1: 1.
Seret

Respuestas:


5

En realidad, no hay ningún dphys-swapfileprograma 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 ubiquityinstalador usa los partman-autoscripts y los archivos de configuración (llamados recetas ) para determinar los tamaños de todas las particiones. Funciona así:

  • Partman encuentra el archivo de receta correcto según el tipo de computadora y la opción que el usuario haya elegido.
  • Allí encuentra el tamaño mínimo y máximo de la partición y su prioridad. Para el intercambio puede ser 96 (min - en MB) 512 (prioridad) 300% (max).
  • Luego obtiene el tamaño de RAM (vía /proc/meminfo).
  • Utiliza su propio algoritmo para calcular los tamaños.

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:


Interesante debate: ¿una mejor referencia que un extraño sitio web de Debian?
enzotib

Bueno, eso también lo encontré cuando lo busqué, pero el paquete tiene una "Advertencia: este paquete está destinado para el uso en la construcción de imágenes de Debian-Installer únicamente. No lo instale en un sistema Ubuntu normal". Supuse que esto no se usaba, así que busqué y encontré el código para dphys-swapfile>: - D Hmm realmente interesante.
Rinzwind

@enzotib: ¿por qué extraño?
organizar el

@arrange: extraño porque no es un sitio oficial de ubuntu, y también como sitio de debian no parece oficial.
enzotib

Encontré 2 métodos más para calcular el tamaño de intercambio D: este método usa grep ^ Mem: / proc / meminfo o si es 0 grep ^ MemTotal: / proc / meminfo y luego se multiplica por 2 (predeterminado) o 3 (la mayoría están configurados en 300%) con un mínimo por arquitectura. Un mipsel-sb1-bcm91250a usa un 512 fijo. I386-efi usa 200%.
Rinzwind

19

Esto va a ser bastante técnico, pero fue divertido descubrirlo, así que aquí va ...

  • Encontré un paquete dphys-swapfiley aquí está el código fuente . La opción setupse 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
  • Dentro dphys-swapfilehay una configuración conf_swapsizepara 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:

ingrese la descripción de la imagen aquí

Entonces, el valor predeterminado para este sistema sería 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.