¿Por qué necesitamos establecer un espacio de intercambio dos veces más grande que nuestra memoria física?

¿Por qué necesitamos establecer un espacio de intercambio dos veces más grande que nuestra memoria física?

Cuando queremos configurar un sistema Linux, existe una sugerencia común de configurar el espacio de intercambio dos veces más grande que su memoria física. Quiero saber por qué necesitamos esto y cómo surgió esta sugerencia.

Respuesta1

La respuesta corta es "Notenera".

Dependiendo del tipo de kernel/sistema, puede tener sentido dimensionar el espacio de intercambio de esa manera, por ejemplo en FreeBSD.sintonización(7)En la página de manual encontramos la siguiente justificació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, debería dimensionar su espacio de intercambio a aproximadamente 2x memoria principal para sistemas con menos de 2 GB de RAM, o aproximadamente 1x memoria principal si tiene más. Sin embargo, si no tienes mucha RAM, generalmente necesitarás mucho más intercambio. No se recomienda configurar menos de 256 M de intercambio en un sistema y debe tener en cuenta la expansión futura 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 el doble de intercambio que la memoria principal. Configurar muy poco intercambio puede provocar ineficiencias en el código de escaneo de la página de la máquina virtual, así como 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 funcionan en diferentes controladores), le recomendamos encarecidamente que configure el intercambio en cada unidad. Las particiones de intercambio de las unidades deben tener aproximadamente el mismo tamaño. El kernel puede manejar tamaños arbitrarios, pero las estructuras de datos internas escalan hasta 4 veces la partición de intercambio más grande. Mantener las particiones de intercambio cerca del mismo tamaño permitirá que el kernel distribuya de manera óptima el espacio de intercambio entre los N discos. No se preocupe por exagerar un poco, el espacio de intercambio es la salvación de UNIX e incluso si normalmente no usa mucho intercambio, puede darle más tiempo para recuperarse de un programa fuera de control antes de verse obligado a reiniciar.

Otros factores pueden ser importantes a la hora de decidir 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 la preasignación de 256 GB de espacio en disco para intercambio que nunca se utilizará.

Por otra parte, teneralgunoEl espacio de intercambio a menudo hace posible capturar volcados del kernel (por ejemplo, en Open, Net y FreeBSD). Por lo tanto, es una buena idea tener al menos suficiente espacio de intercambio para realizar un volcado completo del kernel en caso de pánico.

No existe una regla absoluta que se ajustetodocasos. Debe leer sobre el comportamiento específico de su sistema, aprender cómo funciona, pensar en el uso previsto del sistema y decidir el mejor tamaño de espacio de intercambio que se ajuste.sunecesidades.

Respuesta2

No es necesario en absoluto. Las versiones antiguas de Windows trataban cada página de memoria asignada como esencialmente un mmap en el archivo de intercambio, por lo que necesitaba al menos el tamaño total de su RAM física en el intercambio para que fuera útil; este ya no es el caso hoy en día, y nunca fue así. 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 contener todos los datos en la RAM, más todos los datos que ya se intercambiaron (menos la RAM de caché). 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 unmalocosa, a pesar de lo que otros puedan decir. Piense: si tiene 4 G de RAM y, además, necesita 8 G adicionales de intercambio, ¿cree que su sistema seguirá siendo utilizable, con todo el intercambio hacia/desde el disco que está realizando? A menudo es mejor eliminar el proceso que acapara la memoria de inmediato cuando se queda sin memoria, en lugar de que todo el sistema se ralentice hasta un nivel inutilizable cuando comienza a gastar todo su tiempo reuniendo datos dentro y fuera del intercambio.

Respuesta3

Hace mucho tiempo, había una variante común de Unix (creo que era un BSD, pero no puedo encontrar la referencia ahora) 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 entonces era tener el doble de swap que de RAM, lo que hacía que la memoria virtual fuera dos veces más grande que la RAM.

Los Unices modernos no se comportan de esa manera, por lo que el motivo de la regla es obsoleto (creo que ya estaba obsoleto en 1992, por lo que nunca fue relevante para Linux). Pero, curiosamente, la regla sobrevivió. Si lo sigues ahora, obtendrás una memoria virtual que es tres veces tu cantidad de RAM, mientras que la intención original era obtener el doble.

Sólo porque 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 swap que deberías tener depende en gran medida de la cantidad de RAM que tengas y de cómo la utilices. Puede ejecutar un sistema sin intercambio, pero entonces no tendrá la oportunidad de elegir qué programas eliminar si su RAM se llena, y el sistema puede ser más lento (a veces es mejor usar RAM como caché e intercambiar parte de la memoria del programa). afuera). Asignar demasiado swap cuesta una pequeña cantidad de RAM (para las estructuras de datos del kernel) y, por supuesto, espacio en disco (pero hoy en día eso suele ser muy barato, excepto en SSD). Es necesario tener suficiente intercambio para que quepa toda su memoria virtual si desea hibernar.

Respuesta4

Una recomendación antigua basada en suposiciones sobre la capacidad típica de memoria del sistema, la velocidad del bus de memoria versus 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 quieras más de la mitad de la memoria física en el espacio de intercambio, lo suficiente para evitar la eliminación aleatoria de OOM cuando estás ejecutando casi la máxima utilización de la memoria. Pero depende completamente de su carga de trabajo típica, YMMV, etc.

información relacionada