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

91

Por lo que entiendo, el propósito de una partición de intercambio 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 hacerlo más lento para leer o escribir a), esencialmente permitiendo aplicaciones activas más de la "memoria de alta velocidad".

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

IQAndreas
fuente
16
@mikeserv Sabes, me encantaría aceptar esas dos letras como respuesta solo para un efecto cómico.
IQAndreas
3
@ Janis: cuesta mucho. Y podría haberlo hecho fácilmente sin cambiar incluso la máquina de 1 GB si hubiera implementado la gestión de memoria de sonido. El rendimiento de los costos de intercambio: cuando lo tenga, el núcleo lo usará inevitablemente. Por lo tanto, en un disco de 1 TB o de cualquier tamaño que haga una partición de intercambio es una invitación al kernel para colocar páginas de memoria en el disco, en lugar de mantenerlas en la RAM o soltarlas por completo. Con 16 gb, un usuario típico nunca se acercará a usarlo todo: tengo 24 gb de RAM con 2 gb usados ​​y 10 gb en caché (porque hice un torrent /tmp) después de 3 días de tiempo de actividad.
mikeserv
55
@mikeserv, te equivocas, me temo; He observado constantemente las métricas del disco que se muestran. Mientras haya memoria libre, el intercambio no se ha utilizado, solo cuando se completó el intercambio de memoria. Creo que depende de cómo uses tu computadora; un sistema de escritorio que se apaga todas las noches rara vez se encuentra con problemas de memoria, sin embargo, mi sistema tuvo un tiempo de actividad de meses. Sí, el intercambio cuesta rendimiento, pero si no queda espacio RAM, su sistema puede continuar funcionando. ¿Cuál es la opción que tienes? Tal vez pueda elaborar el argumento de administración de memoria. Yo uso mi sistema Linux como preconfigurado.
Janis
40
@mikeserv ¿cómo publicaste un comentario de menos de 15 caracteres?
user253751
11
@immibis hay 12 espacios de ancho cero allí
Dave

Respuestas:

98

Si.

Definitivamente, siempre debe tener habilitado el intercambio, excepto si hay una razón muy convincente y prohibitiva (como no tener ningún disco o solo hay un disco de red presente). ¿Debería cambiar el orden de los tamaños ridículos que se recomiendan a menudo (como el doble de RAM)? Pues no .

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

En una computadora moderna, la RAM no se deja de usar. La RAM no utilizada es algo que también podría no haber comprado y ahorrado el dinero. Por lo tanto, cualquier cosa que cargue o cualquier cosa que sea de otra forma correlacionada con la memoria, todo lo que podría posiblemente ser reutilizado por cualquier persona en cualquier momento posterior (limitado por las restricciones de seguridad) está siendo almacenado en caché. Muy pronto después de que la máquina se haya iniciado, toda la 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 debe tomar una decisión informada:

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

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

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

Al eliminar la opción # 3, ha limitado efectivamente el sistema operativo a hacer # 1 o # 2. Recargar una página desde el disco es lo mismo que recargarla desde el intercambio, excepto que tener que volver a cargar desde el intercambio generalmente es menos probable (debido a la toma de 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. Lo cual puede no ser , pero muy posiblemente sea una desventaja (y nunca será una ventaja).

[EDITAR]

El lector cuidadoso de la página de mmap 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 memoria física "suficiente":

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

- Espera un momento, ¿qué significa eso?

Si asigna un archivo, puede acceder a los contenidos del archivo directamente como si el archivo estuviera de algún modo, por arte de magia, en el espacio de direcciones de su programa. Para el acceso de solo lectura, el sistema operativo no necesita, en principio, más de una sola página de memoria física que puede repoblar con diferentes datos cada vez que acceda a una página virtual diferente (por razones de eficiencia, por supuesto, eso no es lo que se hace, pero en principio, podría acceder a terabytes de datos con una sola página de memoria física). ¿Y si tú tambiénescribir en un mapeo 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 manera de mantener los datos hasta que el proceso de reescritura de páginas sucias haya hecho su trabajo (que puede tomar 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 un mapeo mientras no haya una página física sin usar (es una condición bastante posible y normal), usted ' Está 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 gratuitas, y esté escribiendo en una página, recibirá una agradable sorpresa en la forma de su proceso de recepción una falla de segmentación, y probablemente ser asesinado.

[/EDITAR]

Sin embargo, la recomendación tradicional de hacer el intercambio dos veces el tamaño de RAM no tiene sentido. Aunque el espacio en disco es barato, no tiene sentido asignar tanto intercambio. El desperdicio de algo que es barato sigue siendo un desperdicio, y absolutamente no desea intercambiar continuamente conjuntos de trabajo de varios cientos de megabytes (o más grandes) de tamaño.

No existe un único tamaño de intercambio "correcto" (hay tantos tamaños "correctos" como usuarios y opiniones). Por lo general, asigno un 512MiB fijo, independientemente del tamaño de la RAM, que me funciona muy bien. El razonamiento detrás de eso es que 512MiB es algo que siempre puede 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 utilizar, excepto si algo va muy mal.

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

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

Damon
fuente
77
Completamente falso: podría ser una ventaja para el kernel no usar el disco, especialmente si ha configurado OOM según sus especificaciones. Si el asesino OOM está configurado para manejar su limpieza, entonces es ventajoso
mikeserv
22
¿Cuál es la diferencia entre tener 8 GB de RAM y 8 GB de intercambio y 16 GB de RAM sin intercambio? Si su computadora decide que necesita 16.001 GB de memoria, ¿no comenzará a purgar / matar cosas de la misma manera (pero el rendimiento se reducirá antes de que comience a suceder)?
Nick T
55
@NickT: El intercambio no es por más RAM sino por una bandera roja de que algo va a morir pronto. Me gusta tener una bandera roja antes de matar, en lugar de hacer que un proceso "al azar" desaparezca ante mis ojos.
Mooing Duck
10
-1 esta respuesta no tiene sentido. ¿Por qué el tener una memoria (intercambio) más lenta tendría un mejor rendimiento que la misma cantidad de memoria (RAM) más rápida? en algún momento debe reconocer suficiente RAM, lo que significa que no es necesario el intercambio ..
Mehrdad
14
@Mehrdad: Ciertamente tiene sentido. La memoria más lenta (intercambio) mejora el rendimiento en la medida en que "más lento" no importa para las cosas a las que accede rara vez o nunca. El intercambio aumenta efectivamente la cantidad de memoria disponible para los datos "activos" al mover los datos "inactivos". Un ejemplo de ello son los demonios que solo ejecutan algo una vez por hora o memoria asignada por un módulo del núcleo que se carga de manera predeterminada pero que nunca se usa. Puede intercambiar los , o en su lugar puede colocar páginas de la memoria caché. ¿Cuál es mejor?
Damon
50

No voy a estar de acuerdo con algunas de las opiniones que veo aquí. Todavía estaría creando una partición SWAP, especialmente en un entorno de producción. Lo hago también para mis máquinas domésticas y máquinas virtuales.

En estos días los estoy midiendo alrededor de 1-1.5 veces la memoria. 2 veces la memoria solía ser la regla general. El disco de intercambio es "barato", ya que no necesita una copia de seguridad o protección.

Si se queda sin memoria, su espacio de intercambio le brinda un poco de tiempo y protección para resolver el problema.

Tenga en cuenta que cosas como / tmp pueden residir en el espacio de intercambio.

El área de intercambio puede contener un volcado parcial del núcleo para que pueda restaurarse en el próximo reinicio. Esto podría ser bueno para una futura emergencia de depuración que debe realizar.

mdpc
fuente
16
+1. Tener un intercambio significa la diferencia entre el rendimiento perjudicado con poca memoria y un bloqueo duro.
Davidmh
66
@mikeserv no importa cómo lo configure, si su programa intenta asignar más memoria de la que está disponible, algo se bloqueará o el sistema operativo comenzará a matarlos.
Davidmh
66
@Davidmh: Por ese razonamiento, su archivo de intercambio debe ser infinitamente grande, de lo contrario, sus programas seguirán fallando cuando agoten el archivo de intercambio.
Mehrdad
66
@Mehrdad pero también es más caro. Dado que tiene X GB de RAM, ya que eso es todo lo que puede pagar, es estrictamente peor que tener X GB de RAM e Y de intercambio, para algunos valores razonables de Y (eso dependerá de su uso y tamaño de tu HD).
Davidmh
99
"su espacio de intercambio le da un poco de tiempo y amortiguación para abordar el problema". También significa que tengo que sentarme mucho más tiempo frente a una máquina que no responde hasta que una pérdida de memoria se "resuelva".
Raphael
23

Tal vez:

He pensado mucho en este tema y he visto opiniones que llegan a ambos lados del argumento más veces de las que puedo contar. Mi enfoque era desarrollar una forma de averiguarlo.

Comience con una partición de intercambio activa de lo que cree que tiene un tamaño suficiente.

Luego, abra una terminal en un espacio de trabajo y emita el comando free -hs 1que informará el uso una vez por segundo.

Opcionalmente, cambie a otros espacios de trabajo.

Haz todo lo que puedas hacer y luego un poco más. Ejecute todas sus aplicaciones comunes a la vez, explore varias pestañas e intente desesperadamente darle al sistema un entrenamiento real para usted, esto podría significar volver a codificar 1/2 docena de videos mientras ejecuta una operación de compilación y revisa su correo electrónico o lo que sea. Vamos a enfrentar los hechos, esto es todo acerca de cómo usted utiliza su sistema.

Cuando sienta que tiene el sistema bajo una carga alta (o tan alta como sea probable que llegue y algo más), mire la terminal y examine los resultados. o mejor aún, redirija la salida a un archivo agregando >output.txtal comando para que pueda examinar la ejecución completa. Si su Swap usado nunca excede Mem free, no necesita swap. Si lo hace, lo haces. free.png

No necesito intercambio Tal vez lo hagas. ¿Por qué no descubrirlo?

En lo que respecta al cambio de tamaño, las reglas generales generalmente están sobrevaloradas, ya que esta es una pregunta basada en el uso.

Elder Geek
fuente
2
Entonces, ¿estás diciendo que el intercambio solo se usa cuando tu sistema lo requiere absolutamente? En ese caso, ¿hay alguna penalización por tener el intercambio habilitado, por si acaso? Otros comentarios parecen sugerir que incluso la presencia de intercambio puede ser perjudicial para el rendimiento.
MrWhite
3
@ w3d No, no estoy diciendo eso. Como puede ver en mi salida anterior, el intercambio se usa incluso si no es necesario. Esto se puede ajustar un poco con el factor de intercambio. Estoy hablando de la necesidad de tener un intercambio o no.
Élder Geek
Puede que esta secuencia de comandos para incrementar intercambio hacia arriba cualquier momento swapalto free?
JFA
@JFA No he visto esto hecho. Personalmente, tengo dificultades con el concepto de reservar una cantidad indeterminada de espacio de intercambio para este propósito. Teóricamente todas las cosas son posibles. Es la fase de implementación lo que se pone interesante.
Élder Geek
17

NOTA: Esto me sucedió en una situación específica e inusual. Si está solucionando un problema, esto puede ser útil. No quiero decir que TODAS las máquinas DEBEN tener intercambio.

¡TAL VEZ!

He tenido problemas en el pasado con un "dispositivo" que construí, ejecutando Linux - ejecutándose en un dispositivo flash compacto, no quería usar mi CF usando swap, y había suficiente memoria para la aplicación.

La mayoría de estos dispositivos funcionaban bien, pero en una caja particularmente ocupada, me encontré con un problema:

FRAGMENTACIÓN DE MEMORIA

Sin espacio de intercambio, la memoria gradualmente se volvió más y más fragmentada, especialmente con procesos de ejecución prolongada (aunque tenía mucha memoria libre, todo estaba en bits muy pequeños). Puse algo de espacio de intercambio y le dije a Linux que no lo usara a menos que fuera necesario; Esto resolvió el problema por completo.

Además de todo lo demás, el espacio de intercambio permite mover la memoria y desfragmentarla. Si tiene memoria fragmentada y necesita un solo fragmento grande, los fragmentos se intercambiarán; A medida que se vuelven a intercambiar, se desfragmentan efectivamente.

Echa un vistazo a / proc / buddyinfo: el mío se ve así ahora:

Node 0, zone      DMA      9      5      3      4      2      3      2      2      3      3      1 
Node 0, zone    DMA32  33901   1149      0      0      0      0      0      0      0      0      1 
Node 0, zone   Normal   2414   1632    259     22      3      0      2      0      1      1      0 

Los números representan bloques de diferentes tamaños; cada tamaño es la mitad del tamaño del siguiente bloque, desde bloques de 4 mb a la izquierda hasta 4 kb a la derecha (es decir, 4 mb, 2 mb, 1 mb, etc.). Una máquina recién iniciada debe tener todos los bloques a la izquierda, muy pocos a la derecha (= no fragmentados). Recuerde también que la misma cantidad de memoria (por ejemplo, 4 mb) se representará como números diferentes en las columnas: 1 bloque en la columna más a la izquierda, 1024 en la columna más a la derecha.

La memoria se asigna desde el grupo que está lo más a la derecha posible; por ejemplo, si su programa quiere 12kb de memoria (de una vez), lo tomará de la columna de 16kb; el resto aparecerá en la columna de 4kb. Si no hay bloques de 16kb, entonces tomará de los bloques de 32kb, lo que dará como resultado 16kb y 4kb sobrantes, y así sucesivamente.

Si no hay bloques de memoria lo suficientemente grandes, Y TIENE ESPACIO DE INTERCAMBIO, entonces, por ejemplo, si desea 16 kb de memoria, encontrará el bloque menos utilizado de 16 kb (que podría, por ejemplo, contener un bloque usado de 4 kb, un bloque disponible de 4 kb, y 2 bloques de 4kb más usados), mueva las porciones USADAS solo para intercambiar y asigne la memoria liberada a la nueva aplicación.

En la caja que se estrelló, tenía cientos de miles de bloques de 4 kb y 8 kb, y no mucho más.

POR LO QUE PUEDO DECIR (¡pasando por las máquinas bloqueadas!), El núcleo se moverá de memoria a intercambio, e intercambiará a memoria, pero nunca se moverá de memoria a memoria.

AMADANON Inc.
fuente
3
Su caso parece bueno para asignar / implementar páginas enormes. Evitaría problemas de fragmentación (porque una página enorme de cierto tamaño, una vez asignada, se asignará de nuevo en adelante y para siempre solo en ese tamaño) .
mikeserv
2
Esa es la mejor razón por la que he leído a favor de usar una partición de intercambio. Intenté una búsqueda rápida y no encontré ninguna referencia al respecto, me pregunto por qué esta característica no se documenta con mayor frecuencia.
A 마 SE
1
Es posible que su aplicación no pueda utilizar las páginas enormes (no transparentes). Por lo general, las aplicaciones que necesitan toneladas de memoria pueden usarlas; por ejemplo, servidores de bases de datos, java jvm. Deben estar habilitados explícitamente y se convierten en un grupo de memoria separado que no se puede usar para otros fines. Esto puede ser bueno o malo, dependiendo de sus circunstancias. Además, aprenda sobre las enormes páginas transparentes. Estos intentan mover las cosas para que esté usando páginas enormes (para mejorar su rendimiento) a pesar de que sus aplicaciones no saben cómo. Si la memoria está fragmentada, las cosas pueden ir hacia el sur, ya que la gran barredora tiene más que ver.
Dan Pritts
1
No dudo de su experiencia con su dispositivo flash, simplemente no estoy convencido de que el caso de uso único que presentó equivale probablemente a necesitar un intercambio y no estoy convencido de que la fragmentación de la memoria esté relacionada con tener un intercambio o no. Plantea una pregunta interesante que podría ser fácilmente probada y probada o refutada.
Élder Geek
1
Pregunta de seguimiento . ¿Qué quiere decir con "fragmentación de la memoria"? A la MMU no le importa si las páginas físicas utilizadas para páginas consecutivas en algún espacio de direcciones virtuales son consecutivas o no. Las páginas físicas están fragmentadas, pero esto no importa (siempre y cuando se trate de memoria de aplicación normal en una máquina física de un solo clúster y no, por ejemplo, páginas de memoria utilizadas por un periférico o un hipervisor). Cuando un programa solicita 16kB, obtiene cuatro páginas, que pueden o no estar muy cerca en la memoria física.
Gilles
15

Una partición de intercambio tiene un valor significativo por encima y más allá de simplemente actuar como algo de RAM adicional cuando se agota.

Por un lado, Linux usa la mayor cantidad de memoria posible para almacenar en caché los archivos y las operaciones de E / S, si tiene algún intercambio, puede encontrar que se destina más memoria al almacenamiento en caché de E / S y lo hace más rápido (minimizando el acceso al disco y también reduciendo el desgaste de los SSD) para mantener datos que algún programa ha asignado pero que solo usa una vez cada 12 horas, lo que puede ser el caso de algunos demonios.

Además, Linux utiliza una estrategia optimista de asignación de memoria mediante la cual permitirá que las páginas se asignen nominalmente incluso si no está seguro de tener memoria real para llenarlas. Esto es más eficiente que hacer una verificación adecuada y mapear cada asignación y generalmente no causa problemas. Sin embargo, las heurísticas que utiliza el núcleo para determinar si permitir una asignación es razonable incluyen el nivel de intercambio disponible en el sistema, por lo tanto, las asignaciones pueden ser más rápidas si el sistema tiene mucho intercambio, incluso si no se usa mucho.

Estos factores juntos me llevan a creer personalmente que es mejor tener un intercambio en casi todos los sistemas normales, sin embargo, para tamaños de ram grandes, ignoro la regla de ram * 2 y simplemente limito mi intercambio a 4-8GB (dependiendo del tamaño del disco )

La realidad
fuente
99
Incluso 4 GB es demasiado grande para una computadora de escritorio. Prefiero que el asesino OOM se active antes de esperar que se complete ese cambio si algo sale mal. (Si alguna vez me encuentro con un caso en el que necesito más, podría dd y mkswap cambiar un ARCHIVO de intercambio antes de ejecutar cualquier trabajo enorme que necesite más memoria virtual que mi máquina tenía RAM. Es decir, si salir de mi navegador web no se liberó lo suficiente ...)
Peter Cordes
@PeterCordes Eso probablemente depende de qué tipo de tareas estás haciendo, entiendo completamente. Personalmente, descubro que me beneficio de los altos niveles de intercambio, ya que a menudo hago compilaciones largas con baja prioridad en segundo plano mientras uso mi máquina, y luego se intercambian cuando la memoria es escasa (por lo general, cuando la máquina está demasiado ocupada para compilar de todas formas). Aún así, estoy de acuerdo en que es algo muy personal basado en la carga de trabajo, uno siempre debe pensar en su propio uso antes de decidir.
Vality
1
historia divertida: justo hoy, en mi computadora portátil con 4GB de RAM, 0.5G swap (SSD), firefox activó el OOM killer (que eligió firefox). No me había pasado eso antes. (Aunque estaba usando mi computadora portátil más de lo habitual). Prácticamente no se estaba ejecutando nada más (solo gnome-terminal en xfce). Así que creo que estoy de acuerdo, ya que Firefox debería saber mejor que atar tanta RAM. Vi a alguien decir hace un tiempo "los navegadores web existen para probar el subsistema de memoria virtual", o algo así. Firefox es bastante malo para liberar cachés para pestañas que no se han usado durante días, etc.
Peter Cordes
3
Un caso en el que Linux considera el espacio de intercambio disponible es cuando un proceso grande intenta iniciar un elemento secundario: las llamadas al sistema fork () + exec () comienzan duplicando aproximadamente la asignación del elemento primario; el núcleo no puede garantizar que el nuevo elemento secundario sea más pequeño que el padre El espacio de intercambio generalmente no se usa, pero a menos que esté disponible, el fork () puede fallar. Un ejemplo típico en un cliente es un navegador que inicia un complemento o en un servidor cuando un contenedor de aplicaciones grande invoca un programa auxiliar. 1/2 o 1GiB de intercambio suele ser suficiente para resolver el problema. Google "Java Exec no puede asignar memoria"
James
13

Nunca debería tener un intercambio mayor que el tamaño máximo que podría tolerar esperar a que el kernel entre / salga; de lo contrario, solo está creando un nuevo modo de falla para su sistema (se está empantanando irremediablemente). Tenga en cuenta que, a pesar de que las unidades modernas pueden transferir en el orden de GB / seg, Linux normalmente solo puede mover swap a velocidades más altas en la línea de cientos de kB, o en el mejor de los casos, algunos MB, por segundo. Por lo tanto, un gran intercambio puede dejar su sistema inutilizable durante minutos, horas o incluso días.

Si tiene suficiente memoria física para lo que está haciendo, el tamaño ideal para el intercambio es hacer que coincida con la cantidad de "datos basura" que los procesos mantienen pero nunca usan. Esto probablemente esté en el rango de unos pocos a unos cientos de megabytes. Esta estrategia permite que toda su memoria física se utilice para almacenar en caché información útil en lugar de almacenarla de manera permanente para datos que probablemente nunca se volverán a utilizar.

Si no tiene suficiente memoria física, debe evaluar si puede tolerar una desaceleración severa por un intercambio excesivo. Si es así, tener hasta 1-2 GB de intercambio puede tener sentido, y quizás hasta 4 GB si tiene unidades extremadamente rápidas. Pero nada más que eso solo empeorará los modos de falla de su sistema, y ​​debería considerar comprar más RAM en su lugar.

R ..
fuente
2
Creo que esta es la mejor respuesta. Si tiene demasiado espacio de intercambio, puede hacer que la máquina no responda totalmente debido a todo el intercambio. Significa que no puedes matar el proceso ofensivo. Si reduce el espacio de intercambio, el asesino OOM automáticamente hará su trabajo por usted. Los argumentos en otras respuestas sobre el almacenamiento en caché del búfer de archivos son totalmente poco convincentes. Debería haber intercambiado para que el núcleo pueda mover las memorias intermedias de archivos para intercambiar ... ¿cuál está en el disco? Por favor.
Timmmm
El único argumento en contra del espacio de intercambio que puedo encontrar es este: "algún programa pierde memoria". ¿Y? Si el asesino OOM mata algo importante que no guardaste, efectivamente perdiste tu trabajo. Lo que significa que este argumento se vuelve completamente irrelevante, solo puedo forzar el apagado de mi máquina para que tenga exactamente el mismo efecto mientras sigo teniendo un alto espacio de intercambio para tareas de baja prioridad que usan mucha memoria y que a menudo se intercambian. Si su máquina se atasca en ese estado, es su culpa. La única vez que me pasó fue cuando yo mismo escribí un programa para llenar toda la memoria de trabajo.
Sahsahae
11

Solo si desea poder hibernar para intercambiar (esta característica también se llama "suspender en disco" e implica guardar todo el contenido de RAM y apagar la alimentación). Por lo general, esto solo se usa en computadoras portátiles y otros dispositivos móviles, por lo que depende.

hanetzer
fuente
6

No hay una respuesta universal y clara porque depende de una tarea que está a punto de realizar. Si está a punto de ejecutar un servidor de DB, HTTP, virtualización o caché, nunca debe habilitar ningún tipo de intercambio, independientemente de la cantidad de memoria RAM que tenga. Si tiene un host de escritorio o de tareas mixtas y tiene más de 16 Gb de RAM rápida, eche un vistazo aquí: zRam

Alexey Vesnin
fuente
zRam es una gran opción. Lo he usado junto con pequeños sistemas de memoria flash con buenos resultados.
Élder Geek
1
@ElderGeek También lo he usado en un entorno sin disco, por ejemplo, arranque de red. Gran trabajo, pero hay algunas advertencias: primero, no solo necesitas más carnero, necesitas uno RÁPIDO. Los módulos RAM lentos y baratos, que probablemente se adaptarían a usted en un caso clásico habitual, pueden causar un problema. El bus frontal de la CPU también debe tenerse en cuenta: incluso en el caso de que pueda tener una frecuencia de CPU más lenta, pero una frecuencia FSB más rápida mejorará su rendimiento en gran medida. La segunda preocupación es una serie de particiones de intercambio zRam. Pruebe los números del 1 al número de núcleos de su CPU. ¡No lo use en sistemas de un solo núcleo!
Alexey Vesnin
Buenos puntos válidos todos. Como soy un geek del rendimiento y siempre diseño y construyo mis propios sistemas, no estoy personalmente plagado de tales preocupaciones
Elder Geek
@ElderGeek yo también :) encantado de conocerte! También he notado una cosa extraña en el comportamiento de zRam. Aparece y desaparece en diferentes versiones y configuraciones del núcleo, pero es altamente reproducible en el núcleo HZ 100 y 1000. zRam funciona bien para 1,2,4, pero no más particiones. Incluso en 8 y 16 núcleos físicos en el hardware superior en tareas casi inactivas. ¡Tenlo en cuenta jugando con ajustes! ¡Saludos desde Rusia!
Alexey Vesnin
No estoy de acuerdo con "si ejecuta un db, ... nunca debe habilitar ningún tipo de intercambio, independientemente del montaje de ram que tenga". El intercambio generalmente es preferible al asesino OOM que mata procesos aleatorios. Sí, debe tener suficiente memoria para las aplicaciones que está ejecutando, y sí, el uso de grandes cantidades de intercambio puede ralentizar su sistema. Te envidio viviendo en un mundo ideal.
AMADANON Inc.
5

No hay forma de saber si necesita espacio de intercambio o no si el único parámetro que conocemos es la cantidad de RAM instalada.

En cualquier caso, existe una idea errónea común de que tener un espacio de intercambio está afectando negativamente el rendimiento del sistema. Esto es incorrecto. Siempre que tenga suficiente RAM, tener un área de intercambio sea cual sea su tamaño no perjudica en absoluto el rendimiento. Lo que afecta el rendimiento es tener poca RAM y usar el espacio de intercambio de manera efectiva.

  • caso 1: Si no tiene espacio de intercambio y está sin RAM, el kernel de Linux elegirá uno o más procesos que considere buenos candidatos y los matará.

  • caso 2: si tiene un espacio de intercambio y no tiene RAM, el núcleo seleccionará las páginas de memoria menos usadas y las colocará en el área de intercambio para liberar RAM. Esto ralentizará el sistema, pero sus aplicaciones no se verán afectadas de otra manera.

Siempre prefiero el caso 2, ya que me siento incómodo al perder partes o todo mi trabajo porque el núcleo piensa que vale la pena matar mis aplicaciones. Además, con el tamaño actual de un disco promedio en el rango de TB, reservar un pequeño porcentaje para el intercambio no debería ser un problema.

jlliagre
fuente
66
Prefiero el caso 1, porque la única vez que me quedo sin RAM es cuando tengo un programa fuera de control. El asesino OOM generalmente es bastante bueno para identificar fugitivos, y realmente prefiero que lo maten de inmediato que después de unas horas de intercambio pesado.
Mark
1
@ Mark, ese es un punto válido. Todavía trato de evitar delegar en un algoritmo el rodaje primero, piense en un enfoque posterior.
jlliagre
2
el caso 2 es válido solo si tiene algo que le advierte sobre esta situación y tiene tiempo suficiente para "hacer algo" manualmente antes de que el sistema se quede sin intercambio. Pero en su lugar, podría monitorear el porcentaje de RAM utilizada para obtener los mismos resultados.
Totor
1
Según su razonamiento, el monitoreo del uso de RAM es suficiente .
Totor
1
@ Motor Prefiero que la aplicación de monitoreo de mi computadora portátil no me despierte en medio de la noche porque lancé un lote que procesa un montón de archivos y agotó la RAM. Prefiero que se haga el trabajo, incluso si toma un par de horas más debido a la reducción del tamaño de la RAM que interrumpir todo el proceso.
jlliagre
3

Mi regla para aplicar el intercambio en cualquier sistema es tener la respuesta para esto:

  • ¿Cuál es el propósito del sistema?
  • ¿Cuánta memoria consumirán las aplicaciones?
  • ¿Es este un sistema crítico?
  • ¿Necesito un espacio de disco temporal para las transferencias de archivos?
  • ¿Tasa de crecimiento prevista de las aplicaciones?

Cuando obtengo respuesta para esta información, dimensiono el sistema en consecuencia. En años anteriores estaba haciendo la regla general de Sun Microsystem. Hasta 16 GB el doble de RAM para SWAP, desde 16 GB hasta la misma cantidad. Pero, por otro lado, si tiene suficiente RAM de sobra y sus aplicaciones no usan SWAP a la fuerza, puede omitir el intercambio. Si lo necesita es solo cuestión de poner un nuevo disco o lun y configurar el SWAP. la regla de Sun se aplicaba principalmente porque en Solaris en caso de "kernel panic", la memoria se volcaría por completo para intercambiarla para un análisis más detallado.

BitsOfNix
fuente
1

Se necesitará el intercambio si no tiene suficiente RAM para ejecutar todos sus programas.

Dices que no estás haciendo nada que requiera mucha RAM. Entonces, tienes suficiente RAM.

Entonces, no necesita espacio de intercambio.

Pero , si cree que en algún momento, a pesar de lo que implica en su pregunta, sus programas usarán, digamos más de la mitad (o dos tercios) de su RAM (regla general), luego lea el otro "pro-swap" "respuestas. No necesitará intercambio, pero podría mejorar el rendimiento de su sistema.

Totor
fuente
Usar el intercambio puede ayudar a evitar un choque catastrófico, pero nunca mejorará el rendimiento, al igual que un paracaídas no acelerará un ferrari. ;-)
Élder Geek
@ElderGeek Puede ser un caso marginal, pero el intercambio puede ayudar. Hay momentos en los que tiene suficiente RAM para todo, pero los programas inactivos podrían cambiarse para hacer un mejor uso de la RAM (por ejemplo, alguna caché de disco útil). Solía ​​ver esto a finales de los 90. Veo esto a veces ahora cuando tengo <1 GB de RAM libre (incluida la caché de disco), sin necesidad de espacio de intercambio.
jbo5112
@ jbo5112 No descartaré la posibilidad por completo si lo dices, mi experiencia ha demostrado lo contrario hasta ahora. Esto no es demasiado sorprendente, ya que se trata de cómo se usa el sistema más que una regla dura y rápida (que todo el mundo parece buscar).
Élder Geek
@ElderGeek Solo puedo verlo ahora porque mis discos tienen una década y necesitan desesperadamente caché. Por lo general, existe un problema adicional de que el intercambio se establece demasiado alto para casi cualquier caso, lo que hace que el espacio de intercambio se use de manera demasiado agresiva. Bajar el valor de 60 a 10 parece una recomendación común. Puede bajar aún más, pero en algún momento volcará demasiada caché de disco, lo que provocará una gran cantidad de E / S adicionales al intercambiar.
jbo5112
@ jbo5112 Buen punto. Siempre es un acto de equilibrio entre los diferentes subsistemas. Recuerdo que en el pasado ajusté los thimgs como la intercalación del disco duro y la frecuencia de actualización de RAM para exprimir el rendimiento máximo de los sistemas 80286 con unidades Seagate ST225 y ST238. Siempre tenemos que abordar las cosas caso por caso para obtener el máximo rendimiento y confiabilidad. ¡Felicidades, por cierto! La última vez que pude sacar una década de una unidad fue un Micropolis que contenía un total de 600 MB.
Élder Geek
0

La respuesta corta:

Sí, siempre necesita un intercambio, solo en el improbable caso de que una aplicación ni siquiera se moleste en asignar memoria, sino que asigna memoria virtual directamente.

Establezca su archivo de intercambio en:

  • RAM+round(sqrt(RAM)) si usas hibernación
  • round(sqrt(RAM)) si no lo haces

¡Establezca su swappiness10 en un escritorio, pero no en un servidor!

La respuesta larga:

En el pasado:

La regla general en uso durante los últimos 25 años ha sido un mínimo de 1xRAM y un máximo de 2xRAM, así que eso es lo que verá citado todo el tiempo.

Ese mínimo se estableció en la edad de piedra cuando era un adolescente y los dinosaurios aún deambulaban por la Tierra y porque la RAM era demasiado costosa y necesitabas absolutamente ese espacio de intercambio para poder lograr cualquier cosa.

El máximo se estableció en ese momento debido a los rendimientos decrecientes: es demasiado lento para tener que intercambiar tanta memoria, ya que el acceso al HDD es un factor de 1000 más lento que la RAM: ¡es bueno en una emergencia, pero no es realmente bueno para el uso diario! En ese momento, cuando se quedó sin espacio de intercambio, ¡era hora de agregar más RAM! (que sigue siendo cierto hoy).

En el presente:

  1. Si no utiliza la hibernación y su memoria supera los 1 GByte, la nueva regla general es round(sqrt(RAM))dónde RAMestá, obviamente, el tamaño de su RAM en GB.

  2. Si usa la hibernación, debe poder intercambiar la cantidad total de RAM + RAM ya intercambiada al disco, por lo que la fórmula se convierte en: RAM+round(sqrt(RAM))

  3. La regla de rendimientos decrecientes aún se mantiene hoy en día para el máximo, pero a menos que pruebe su uso real, tomar 2xRAM es solo una pérdida de espacio en disco , así que no use el máximo A menos que se quede sin espacio de intercambio utilizando las otras metodologías .

Todos estos juntos le dan la siguiente tabla: (últimas 3 columnas que denotan espacio de intercambio)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB

Lo anterior es solo una regla general; ¡No es la ley de la gravedad!
¡ Puede romper esta regla (a diferencia de la ley de gravedad) si su caso de uso particular es diferente!

Consejo profesional: siempre asigne SWAP al comienzo de un HDD ya que los cabezales necesitan moverse menos en el interior del disco.
Sí: en los SSD, ya no importa dónde ubique el área de intercambio, ya que usan túneles cuánticos en lugar de cabezas móviles y los SSD modernos usan todas sus celdas de memoria (incluso el espacio no asignado) para evitar la degradación cuántica.

Cómo probar si su uso de intercambio es diferente de la regla "genérica":

Solo ejecuta:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

que le dará una lista de todos los programas en ejecución que se intercambian (con el que usa más espacio de intercambio en la parte superior)

Si está utilizando más de unos pocos KB: cambie el tamaño a más del mínimo, de lo contrario, no se moleste ...

Si estás en un servidor, deja de leer ahora: ¡estás listo!


Si está en un cliente de escritorio / portátil (no servidor), desea que su GUI sea lo más receptiva posible y solo se intercambie cuando realmente lo necesite . Ubuntu ha sido optimizado para intercambiarse temprano para el uso del servidor, pero en su cliente desea editar esa enorme imagen sin procesar de 250 megapíxeles gimppara que sea rápida , por lo que establecer su valor swappinessen 10 evitará que el kernel se intercambie demasiado pronto, al tiempo que se asegura de que no t cambiar demasiado tarde:

sudo nano /etc/sysctl.conf

y añadir:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

al final del archivo, guarde el archivo ( Ctrl+ XY+ Enteren nano) y ejecute un:

sysctl --system

para recargar el parámetro o simplemente por los viejos tiempos, tome el enfoque Window $ y reinicie ... :-)

Fabby
fuente
-1

Respuesta de compromiso: depende del significado de "debería".

¿ Necesita una partición de intercambio en el sentido de que algo malo sucederá si no tiene una en las condiciones de funcionamiento que describe? No.

¿Es aconsejable tener una partición de intercambio en caso de que accidentalmente genere un ejército de cerdos de memoria para que tenga la oportunidad de matarlos antes de que el asesino OOM entre en acción? Si.

Si su RAM física "excede" en gran medida el uso de la memoria de datos de todos los programas que ejecutará simultáneamente en todo momento, entonces no hay beneficio de rendimiento al tener el intercambio. Si excede, pero no "en gran medida", puede haber un beneficio de rendimiento si el sistema operativo es capaz de cambiar la memoria de uso poco frecuente para mantener en la memoria los archivos de acceso más frecuente.

En resumen, es genial que tengas 16 GB de RAM. Pero, si también tiene un disco de 1TB, ¿no puede reservar 16GB para intercambiar? Es solo el 1.5% del disco.

Atsby
fuente