Linux: ¿no creas una partición de intercambio?

9

Me preguntaba desde que escuché que el intercambio se usa cuando estás fuera o RAM y cambiar demasiado es malo, ya que tengo mucha RAM (8 GB) ...

¿Qué pasa si no creo una partición de intercambio?

Además, ¿lo necesito para la hibernación o no es imprescindible?

Mihai Bratulescu
fuente
debes crear el intercambio, una vez intenté no crear el intercambio, no pude continuar con la instalación
Lynob
¿Qué sucede cuando instalas dentro de Windows? Hice eso y también parecía un poco lento para mi plataforma en comparación con Windows, pero no
creé
Nunca intenté instalar un Linux dentro de Windows, siempre creo una partición separada
Lynob

Respuestas:

13

Los sistemas operativos modernos requieren un espacio de intercambio para hacer un uso eficiente de la RAM. Incluso si su sistema tiene mucha RAM, el desperdicio de RAM da como resultado una memoria caché de búfer más pequeña, lo que significa un aumento de E / S de disco. Entonces, no importa cuánta RAM tenga, aún desea que el sistema lo use de manera eficiente. Usarlo de manera eficiente significa sacar cosas de la RAM a las que es extremadamente difícil acceder.

Cuando inicia un sistema típico, se inicia una gran cantidad de servicios. Los programas ejecutan el código de inicialización y modifican las asignaciones de memoria privada en el proceso. Varios de estos servicios nunca volverán a ejecutarse. Muchos de ellos no funcionarán durante horas. Sin intercambio, el sistema operativo no tiene más remedio que mantener las asignaciones de memoria privada modificadas asociadas con esos servicios en la RAM para siempre. Esa es la RAM que nunca se puede usar como caché de disco.

Por lo tanto, desea intercambiar si lo necesita o no.

David Schwartz
fuente
8
"Así que quieres cambiar si lo necesitas o no". - Parece que usted hizo el caso de que necesita un intercambio, lo quiera o no.
aserrín
2
Suponga que tengo mucha RAM y puedo permitirme perder 2GB. ¿Por qué necesitaría un archivo de intercambio?
Tarik
1
En ese caso, no necesita un archivo de intercambio. Pero como dije, quieres uno. Porque si está o no puede permitirse perder la memoria RAM, que no debería querer usar la memoria RAM de forma ineficiente cuando no tiene que hacerlo.
David Schwartz el
Estoy ejecutando un servidor CLI sin intercambio y funciona perfectamente. Ejecutando un servidor teamspeak3, apache2, node.js Nunca veo que se usen más de 500M de RAM. Por lo tanto, no me molesta usar RAM "ineficientemente" RENUNCIA: La función de servidor web de este servidor es exclusivamente para el desarrollo, por lo que la carga siempre es baja de todos modos. Y si tengo una pérdida de memoria durante el desarrollo, prefiero que el asesino de OOM lo mate tan pronto como me quede sin RAM que empuje todas esas tonterías al disco.
Native Coder
12

He estado ejecutando un sistema de escritorio sin ningún intercambio durante un par de años, ¡y me ha ido genial! Hay algunos comportamientos que son diferentes; algunos de estos son ventajosos y otros podrían hacerle daño. Todo depende de lo que estés haciendo.

Una diferencia importante es cómo se comporta el sistema cuando se agota la memoria:

Si no hay una partición de intercambio, el asesino OOM se ejecuta inmediatamente. Si tiene un programa que pierde memoria, es probable que sea el que se mate. Eso sucede y recuperas el sistema casi al instante.

Si no es una partición de intercambio, el núcleo empuja el contenido de la memoria en el intercambio. El proceso errante puede continuar asignando memoria. Esto sigue sucediendo hasta que se agote el intercambio, que podría ser de diez minutos a una hora si tiene una gran partición de intercambio. Mientras hace esto, su sistema se ralentiza a un rastreo. Se hace imposible abrir una terminal y matar el proceso. Por lo general, desconecto el cable de alimentación cuando esto sucede.

Por lo tanto, dado que voy a perder mis datos de todos modos cuando el OOM del sistema, prefiero la primera opción para al menos tener una (alta) posibilidad de recuperación.

Jeff Taylor
fuente
Esta ha sido mi experiencia también. Linux no maneja los intercambios lo suficientemente bien como para permitirle matar el programa ofensivo usted mismo. Es más confiable que el asesino OOM lo haga por sí mismo. Por supuesto, este es un diseño horrible: uno mejor sería congelar el proceso ofensivo en lugar de matarlo y proporcionar una buena GUI para permitirle descongelar o matarlo, pero ... Linux.
Timmmm
3
Por fin una respuesta que tiene sentido y coincide con mi propia experiencia. No puedo comprender la razón detrás de "debe tener una partición de intercambio". Excepto si queremos hibernar el sistema.
Tarik
5

El intercambio es necesario para la hibernación, de lo contrario, puede sobrevivir sin que esté bien.

psusi
fuente
Por lo tanto, el tamaño del área de intercambio debe ser un poco superior al tamaño de la memoria instalada en su sistema.
mdpc
@mdpc, no necesariamente; solo tiene que ser lo suficientemente grande como para contener la memoria RAM utilizada que no se puede descartar (es decir, datos respaldados por un archivo en el disco).
psusi
¿Y cómo estimarías eso en la creación? ¿No le parece que la planificación adecuada y la preparación para el peor de los casos ya que la partición generalmente es difícil de cambiar una vez que se establece?
mdpc
2

Es un error común pensar que tener un área de intercambio afecta negativamente el rendimiento. Lo que afecta gravemente el rendimiento es no tener suficiente RAM. El área de intercambio per se no tiene ningún efecto negativo en el rendimiento a menos que no le importe la fiabilidad. Puede tener un impacto positivo en el rendimiento incluso si cree que tiene suficiente RAM (y no se informa de falta de RAM).

Hay esencialmente tres casos a considerar:

  • 1: Hay suficiente RAM para las necesidades internas del kernel, para que todas sus aplicaciones tengan su conjunto de páginas de trabajo en RAM y aún tengan RAM "libre" para que la memoria caché del búfer almacene la mayoría de los datos activos del sistema de archivos.

  • 2: igual que el anterior, excepto que no tiene suficiente RAM libre para que la memoria caché del búfer sea completamente eficiente.

  • 3: No hay suficiente RAM para incluso almacenar las páginas usadas de sus aplicaciones.

En el caso 1, que debería ser la norma para una máquina de producción, tener un área de intercambio o no no cambia nada (al menos en sistemas operativos basados ​​en Linux y otros sistemas operativos que comprometen demasiado la memoria).

En el caso 2, tener un área de intercambio podría mejorar el rendimiento general al permitir que el sistema pase páginas de uso muy poco frecuente y luego permita que el caché del búfer desempeñe mejor su papel.

En el caso 3, tener un área de intercambio permite que la aplicación siga ejecutándose a expensas de una degradación del rendimiento debido a la paginación. Por otro lado, la falta de un área de intercambio (o una lo suficientemente grande) hará que las aplicaciones se bloqueen al azar. Además, dependiendo de la configuración del sistema operativo, el asesino de OOM también podría decidir eliminar la mayoría de las aplicaciones que requieren mucha memoria si hay una fuerte demanda de RAM sin siquiera darles la oportunidad de guardar sus (sus) datos críticos.

Este último caso es uno con el que tienes que elegir. Ciertamente, hay algunos casos de uso en los que la eliminación de procesos es la opción preferida, como los sistemas donde el tiempo de respuesta es crucial y donde perder una transacción / proceso no es gran cosa.

Sin embargo, tiendo a creer en la mayoría de las situaciones, es mejor permitir que el usuario / administrador note la escasez de RAM y actúe en consecuencia sin correr el riesgo de perder datos.

jlliagre
fuente
1

Si no desea utilizar una partición de intercambio, puede usar un archivo de intercambio: una imagen del sistema de archivos almacenada en un archivo normal y utilizada como su espacio de intercambio.

Los siguientes artículos explican cómo hacerlo en detalle:

Joseph R.
fuente
¿Cuál es la diferencia entre un archivo de intercambio y una partición de intercambio? ¿Y qué pasaría si no tengo ninguno?
Mihai Bratulescu
velocidad de acceso ....
mdpc
2
Si se usa SÍ, es bastante significativo. Si usa una partición, es un direccionamiento simple, si usa un archivo, debe hacer toda la sobrecarga del sistema de archivos para usar un archivo de intercambio y NO PUEDE garantizar en qué parte del disco residirán los segmentos.
mdpc
2
@mdpc La sobrecarga del sistema de archivos es insignificante a partir del kernel 2.6. Se omiten los metadatos, el caché y el código del sistema de archivos. Se accede directamente a los bloques de disco sin procesar.
jlliagre
1
@mdpc Un archivo de intercambio no debe estar significativamente fragmentado si es que lo hace, a menos que lo haya creado últimamente. Además, el acceso de intercambio rara vez es secuencial, sino principalmente aleatorio debido a cómo funciona la paginación de demanda, por lo que la fragmentación no debería ser un problema.
jlliagre
0

Es un poco peligroso, pero PUEDES correr sin un espacio de intercambio. Pero si finalmente excede la cantidad de memoria que tiene, su sistema se bloqueará casi inmediatamente sin previo aviso.

Básicamente, el intercambio es extenso pero mucho más lento para tu memoria. Si lo supera, comenzará a intercambiar, realmente le quitará la vida a su sistema ... SIN EMBARGO, al eliminar los procesos errantes, aún puede salvar su sistema.

Algunos programas insisten en asignar (pero no usar) espacio de intercambio, algunos de estos son programas de bases de datos, si mal no recuerdo. Nuevamente, al no tener espacio de intercambio, puede limitar los programas que se pueden ejecutar.

Finalmente, mira SWAP es BARATO en el hecho de que no tienes que hacer una copia de seguridad del área. (Espero que sea uno de estos excelentes administradores de sistemas que respaldan sus sistemas).

Así que créalo.

Mi regla de oro solía ser 2 * tamaño de memoria ..... pero ahora estoy bien en muchos casos con 1 * tamaño de memoria pero generalmente uso 1.5 * (tamaño de memoria). No tiene que crear esta gran cantidad, pero yo lo haría ... especialmente si hay algún tipo de trabajo de producción que esté haciendo.

Ah, sí, y para la hibernación, se requiere el intercambio para mantener una imagen total de la memoria. Y, por lo tanto, el tamaño si está considerando la h8ibernation debe ser AL MENOS (1 * tamaño de memoria) + 100 MB ... los 100 MB son para la posible sobrecarga necesaria en el proceso.

mdpc
fuente
entonces ... para algunos programas, ¿necesitas un área de intercambio para que se ejecuten? No me preocupa quedarme sin RAM con 8GB (aunque no imposible)
Mihai Bratulescu
La regla del tamaño de la memoria 2x es antigua y obsoleta. Pero tener un intercambio no es una mala idea. No utiliza demasiado espacio en disco, por lo que no perderá el espacio utilizado; generalmente no se usa si tiene suficiente RAM, y le permite volcar el núcleo en su intercambio.
Hennes
@Hennes - lee mi nota ... "solía ser"
mdpc
0

El intercambio de Linux parece tener un requisito bastante difícil tan pronto como hay presión de memoria. El síntoma es que si los procesos activos utilizan casi toda la RAM, el sistema se detiene y el disco duro se está volviendo loco.

¿Por qué?

Las páginas sin un archivo de respaldo (generalmente de la asignación de memoria dinámica) no se pueden expulsar de la RAM cuando no hay intercambio. El núcleo recurre a páginas con un archivo de respaldo, incluso si realmente se necesitan pronto nuevamente, i. mi. destrozando incluso sin intercambio!

Para más detalles sobre este sutil problema, vea esta publicación de blog.

Conclusión : siempre tenga un intercambio.

Y para el tamaño como una guía aproximada, use algo entre 4 y 8 GB, incluso para sistemas con mucha RAM, suponiendo que no hiberne. Para obtener más detalles, consulte la documentación de Red Hat sobre el espacio de intercambio .

finalmente
fuente