GNU/Linux >> Tutoriales Linux >  >> Linux

¿Necesito espacio de intercambio si tengo una cantidad de RAM más que suficiente?

Por lo que entiendo, el propósito de un intercambio partición en Linux es liberar parte de la información "a la que no se accede con tanta frecuencia" de la RAM y moverla a una partición específica en su disco duro (a costa de hacer que sea más lento para leer o escribir), esencialmente permitiendo que las aplicaciones activas tengan más de la "memoria de alta velocidad".

Esto es genial para cuando estás en una máquina con una pequeña cantidad de RAM y no quieres tener problemas si se te acaba. Sin embargo, si su sistema tiene 16 GB o 32 GB de RAM, y asumiendo que no está ejecutando una base de datos MySQL para StackExchange o editando una película completa de 1080p en Linux, ¿debería usarse una partición de intercambio?

Respuesta aceptada:

Sí.

Definitivamente deberías siempre tenga el intercambio habilitado, excepto si hay una razón muy convincente que lo prohíba (como, ningún disco en absoluto, o solo un disco de red presente). ¿Debería tener un intercambio del orden de los tamaños ridículos que a menudo se recomiendan (como el doble de la cantidad de RAM)? Bueno, no .

La razón es que el intercambio no solo es útil cuando sus aplicaciones consumen más memoria que RAM física (en realidad, en ese caso, el intercambio no es muy útil en absoluto porque afecta seriamente el rendimiento). El principal incentivo para el intercambio hoy en día es no para convertir mágicamente 16 GiB de RAM en 32 GiB, pero para hacer un uso más eficiente de la RAM disponible instalada.

En una computadora moderna, la memoria RAM no pasa desapercibida. La memoria RAM no utilizada es algo que podrías no haber comprado y haber ahorrado el dinero. Por lo tanto, cualquier cosa que cargue o cualquier cosa que esté mapeada en la memoria, cualquier cosa que podría posiblemente ser reutilizado por cualquier persona en cualquier momento posterior (limitado por restricciones de seguridad) se almacena en caché. Muy pronto después de que la máquina haya arrancado, toda la memoria RAM física se habrá utilizado para algo. .

Cada vez que solicita una nueva página de memoria del sistema operativo, el administrador de memoria tiene que tomar una decisión informada:

  1. Purgar una página del caché del búfer
  2. Purgar una página de un mapeo (efectivamente lo mismo que #1, en la mayoría de los sistemas)
  3. Mueva una página a la que no se ha accedido durante mucho tiempo, preferiblemente nunca, para intercambiar (esto podría incluso suceder de manera proactiva, no necesariamente en el último momento)
  4. Elimine su proceso o elimine un proceso aleatorio (OOM)
  5. Pánico en el kernel

Las opciones #4 y #5 son muy indeseables y solo sucederá si el sistema operativo no tiene absolutamente otra opción. Las opciones n.º 1 y n.º 2 significan que tiras algo que posiblemente volverás a necesitar pronto. Esto afecta negativamente al rendimiento.

La opción n.º 3 significa que mueve algo que (probablemente) no necesitará pronto a un almacenamiento lento. Eso está bien porque ahora algo que necesitas puede usar la RAM rápida.

Al eliminar la opción n.º 3, ha limitado de forma efectiva el sistema operativo para que haga la n.º 1 o la n.º 2. Volver a cargar una página desde el disco es lo mismo que volver a cargarla desde el intercambio, excepto que tener que volver a cargar desde el intercambio suele ser menos probable (debido a que se toman las decisiones de paginación adecuadas).

En otras palabras, al deshabilitar el intercambio no gana nada, pero limita la cantidad de opciones útiles del sistema operativo para tratar una solicitud de memoria. Que podría no ser , pero muy posiblemente puede ser una desventaja (y nunca será una ventaja).

Relacionado:Eléctrico:conecté un calentador de espacio al tomacorriente, ahora el tomacorriente no funciona. ¿Sigue encendido?

[EDITAR]

El lector cuidadoso del mmap página de manual, específicamente la descripción de MAP_NORESERVE , notará otra buena razón por la cual el intercambio es algo necesario incluso en un sistema con "suficiente" memoria física:

“Cuando el espacio de intercambio no está reservado, se puede obtener SIGSEGV en una escritura si no hay memoria física disponible”.

— Espera un momento, ¿qué significa eso?

Si mapea un archivo, puede acceder a los contenidos del archivo directamente como si el archivo estuviera de alguna manera, por arte de magia, en el espacio de direcciones de su programa. Para el acceso de solo lectura, el sistema operativo necesita en principio no más que una sola página de memoria física que puede repoblar con diferentes datos cada vez que accede a una página virtual diferente (por razones de eficiencia, eso no es lo que se hace, por supuesto, pero en principio podría acceder a terabytes de datos con un solo página de memoria física). Ahora, ¿qué pasa si también escribir en una asignación de archivos? En este caso, el sistema operativo debe tener una página física, o espacio de intercambio, lista para cada página escrita. No hay otra forma de conservar los datos hasta que el proceso de reescritura de páginas sucias haya hecho su trabajo (que puede tardar varios segundos). Por esta razón, el sistema operativo reserva (pero no necesariamente compromete) espacio de intercambio, por lo que en caso de que esté escribiendo en una asignación mientras no haya ninguna página física sin usar (esa es una condición muy posible y normal), re garantizado que seguirá funcionando.

Ahora, ¿qué pasa si no hay intercambio? Significa que no se puede reservar ningún intercambio (¡duh!), y esto significa que tan pronto como no queden páginas físicas libres y esté escribiendo en una página, recibirá una agradable sorpresa en la forma de que su proceso reciba una falla de segmentación, y probablemente ser asesinado.

[/EDITAR]

Sin embargo, la recomendación tradicional de hacer que el intercambio duplique el tamaño de la RAM no tiene sentido. Aunque el espacio en disco es barato, no tiene sentido asignar tanto intercambio. Desperdiciar algo que es barato sigue siendo un despilfarro y absolutamente no quieres estar continuamente intercambiando conjuntos de trabajo de varios cientos de megabytes (o más) de tamaño.

No existe un único “correcto” swap size (hay tantos tamaños “correctos” como usuarios y opiniones). Suelo asignar 512MiB fijos, independientemente del tamaño de la RAM, lo que me funciona muy bien. El razonamiento detrás de eso es que 512MiB es algo que puede siempre permitirse hoy en día, incluso en un disco pequeño. Por otro lado, agregar varios gigabytes de intercambio no es mejor. No los va a usar, excepto si algo va muy mal.

Incluso en una SSD, el intercambio es mucho más lento que la RAM (debido al ancho de banda del bus y la latencia), y aunque es muy aceptable para mover algo para intercambiar que probablemente no se necesitará nuevamente (es decir, lo más probable es que no vuelva a intercambiarlo, por lo que su conjunto de páginas disponibles se amplía efectivamente de forma gratuita), si realmente necesita cantidades considerables de intercambio (es decir, tiene una aplicación que usa, por ejemplo, un conjunto de datos de 50 GiB), está prácticamente perdido.

Relacionado:¿El espacio de acceso necesita ventilación?

Una vez que su computadora comienza a intercambiar gigabytes de páginas, todo se acelera. Por lo tanto, para la mayoría de las personas (incluyéndome a mí) esta no es una opción y, por lo tanto, tener tanto intercambio no tiene sentido.


Linux
  1. Cómo agregar espacio de intercambio en Debian 11

  2. Cómo aumentar el espacio de intercambio en Linux

  3. Cómo unir líneas que tienen más de un número específico de caracteres especiales

  4. ¿Cómo compilo algo para Linux si no tengo suficiente espacio para instalar GCC?

  5. ¿Puedes tener más de un archivo ~/.ssh/config?

Cómo borrar el caché de la memoria RAM, el búfer y el espacio de intercambio en Linux

¿Por qué usar el intercambio cuando hay más que suficiente espacio libre en RAM?

¿Xubuntu consume más recursos que Windows Xp?

Cómo verificar el espacio de intercambio en Linux

Zorin OS 15 más hermoso y útil que nunca

¿Cómo eliminar Swap Space de Centos 7.x?