Cuando deseamos configurar un sistema Linux, hay una sugerencia común para configurar el espacio de intercambio dos veces más grande que su memoria física. Quiero saber por qué necesitamos esto y cómo es esta sugerencia.
Cuando deseamos configurar un sistema Linux, hay una sugerencia común para configurar el espacio de intercambio dos veces más grande que su memoria física. Quiero saber por qué necesitamos esto y cómo es esta sugerencia.
Respuestas:
La respuesta corta es "No tienes que".
Dependiendo del tipo de núcleo / sistema, puede tener sentido dimensionar el espacio de intercambio de esa manera, por ejemplo, en la página de manual de tuning (7) de FreeBSD encontramos la siguiente razón detrás de un tamaño de intercambio de al menos 2 veces el tamaño de la memoria física:
Por lo general, debe dimensionar su espacio de intercambio a aproximadamente 2x de memoria principal para sistemas con menos de 2GB de RAM, o aproximadamente 1x de memoria principal si tiene más. Sin embargo, si no tiene mucha RAM, generalmente querrá mucho más intercambio. No se recomienda configurar menos de 256M de intercambio en un sistema y debe tener en cuenta la futura expansión de la memoria al dimensionar la partición de intercambio. Los algoritmos de paginación de VM del kernel están ajustados para funcionar mejor cuando hay al menos 2x swap versus memoria principal. La configuración de un intercambio demasiado pequeño puede generar ineficiencias en el código de escaneo de la página de VM y crear problemas más adelante si agrega más memoria a su máquina. Finalmente, en sistemas más grandes con múltiples discos SCSI (o múltiples discos IDE que operan en diferentes controladores), Recomendamos encarecidamente que configure el intercambio en cada unidad. Las particiones de intercambio en las unidades deben ser aproximadamente del mismo tamaño. El núcleo puede manejar tamaños arbitrarios, pero las estructuras de datos internas se escalan a 4 veces la partición de intercambio más grande. Mantener las particiones de intercambio cerca del mismo tamaño permitirá que el núcleo distribuya de manera óptima el espacio de intercambio en los N discos. No se preocupe por exagerar un poco, el espacio de intercambio es la gracia salvadora de UNIX e incluso si normalmente no usa mucho intercambio, puede darle más tiempo para recuperarse de un programa desbocado antes de verse obligado a reiniciar. Mantener las particiones de intercambio cerca del mismo tamaño permitirá que el núcleo distribuya de manera óptima el espacio de intercambio en los N discos. No se preocupe por exagerar un poco, el espacio de intercambio es la gracia salvadora de UNIX e incluso si normalmente no usa mucho intercambio, puede darle más tiempo para recuperarse de un programa desbocado antes de verse obligado a reiniciar. Mantener las particiones de intercambio cerca del mismo tamaño permitirá que el núcleo distribuya de manera óptima el espacio de intercambio en los N discos. No se preocupe por exagerar un poco, el espacio de intercambio es la gracia salvadora de UNIX e incluso si normalmente no usa mucho intercambio, puede darle más tiempo para recuperarse de un programa desbocado antes de verse obligado a reiniciar.
Otros factores pueden ser importantes cuando decide cuánto espacio de intercambio asignar, dónde asignarlo, etc. Por ejemplo, si está instalando un servidor grande con 128 GB de memoria física, probablemente sea una buena idea evitar preasignar 256 GB de espacio en disco para el intercambio que nunca se utilizará.
Por otro lado, tener algo de espacio de intercambio a menudo hace posible obtener volcados de kernel (por ejemplo, en Open-, Net- y FreeBSD). Por lo tanto, es una buena idea tener al menos suficiente espacio de intercambio para obtener un volcado de kernel completo en pánico.
No existe una regla absoluta que se ajuste a todos los casos. Debe leer sobre el comportamiento de su sistema específico, aprender cómo funciona, pensar sobre el uso previsto del sistema y decidir el mejor tamaño de espacio de intercambio que se adapte a sus necesidades.
No es necesario en absoluto. Las versiones antiguas de Windows tratarían cada página de memoria asignada como esencialmente un mmap en el archivo de intercambio, por lo que necesita al menos el tamaño total de RAM física en el intercambio para que sea útil; este ya no es el caso hoy, y nunca fue el caso en Linux, pero el rumor persiste.
Sin embargo, hay un caso en el que es deseable tener al menos tanto intercambio como RAM: la hibernación. Dado que Linux usa el archivo de intercambio para la hibernación (también conocido como suspensión en disco), necesita suficiente intercambio para mantener todos los datos en la RAM, más todos los datos que ya se intercambiaron (menos la memoria caché de la RAM). Este es solo el caso de las máquinas que necesitan hibernar, como las computadoras portátiles, por supuesto.
Finalmente, tener demasiado intercambio puede ser algo malo , a pesar de lo que otros puedan decir. Piensa: si tienes 4G de RAM y además necesitas 8G adicionales de intercambio, ¿crees que tu sistema seguirá siendo utilizable, con todo el intercambio hacia / desde el disco que está haciendo? A menudo es mejor hacer que se acabe el proceso de acumulación de memoria de inmediato cuando se queda sin memoria, en lugar de hacer que todo el sistema disminuya a un nivel inutilizable cuando comienza a pasar todo su tiempo ordenando datos dentro y fuera del intercambio.
Hace mucho tiempo, había una variante común de Unix (creo que era un BSD, pero no puedo encontrar la referencia en este momento) que asignaría cada página de memoria virtual en el espacio de intercambio. Entonces, si tuviera tanto intercambio como RAM, el tamaño de su memoria virtual seguiría siendo el mismo que su RAM. La recomendación habitual era tener el doble de intercambio que RAM, lo que hacía que la memoria virtual fuera el doble de RAM.
Los unices modernos no se comportan de esa manera, por lo que la razón de la regla es obsoleta (creo que ya era obsoleta en 1992, por lo que nunca fue relevante para Linux). Pero, curiosamente, la regla sobrevivió. Si lo sigue ahora, obtiene una memoria virtual que es tres veces su cantidad de RAM, mientras que la intención original era obtener el doble.
El hecho de que la razón histórica detrás de la regla sea incorrecta no significa que sea estúpida. El espacio en disco se ha vuelto más barato, por lo que puede tener sentido asignar más intercambio. La cantidad de intercambio que debe tener depende mucho de la cantidad de RAM que tenga y de cómo la use. Puede ejecutar un sistema sin intercambio, pero luego no tiene la oportunidad de elegir qué programas matar si su RAM se llena, y el sistema puede ser más lento (a veces es mejor usar RAM para caché e intercambiar memoria de algún programa fuera). Asignar demasiado intercambio cuesta una pequeña cantidad de RAM (para estructuras de datos del núcleo) y, por supuesto, espacio en disco (pero hoy en día eso es generalmente muy barato, excepto en SSD). Es necesario tener suficiente intercambio para adaptarse a toda su memoria virtual si desea hibernar.
Una recomendación antigua basada en suposiciones sobre la capacidad típica de memoria del sistema, la velocidad del bus de memoria frente a la velocidad del disco y el porcentaje de tiempo que los procesos pasan en varios estados de espera. Soy escéptico de que en estos días desearía más de la mitad de la memoria física en el espacio de intercambio, lo suficiente para evitar la muerte aleatoria de OOM cuando se ejecuta cerca de la utilización de la memoria completa. Pero depende completamente de su carga de trabajo típica, YMMV, etc.