¿Por qué la mayoría de las personas recomiendan reducir el intercambio a 10-20?


65

He visto en varios sitios que recomiendan reducir el intercambio a 10-20 para un mejor rendimiento.

¿Es un mito o no? ¿Es esta una regla general? Tengo una computadora portátil con 4 GB de RAM y 128 GB de disco duro SSD, ¿qué valor me recomiendan para mi intercambio?

Gracias.


55
Los sitios que enumera no explican por qué recomiendan cambiar el valor predeterminado. Las respuestas aquí son mucho mejores, para esta difícil elección sobre un tema complicado.
nealmcb

Respuestas:


88

Porque la mayoría cree que el intercambio = malo y que si no reduce el intercambio, el sistema cambiará cuando realmente no sea necesario. Ninguno de los dos es realmente cierto. Las personas asocian el intercambio con los momentos en que su sistema se atasca; sin embargo, es principalmente un intercambio porque el sistema se atasca, no al revés. Cuando el sistema cambia, ya habrá incluido el costo de rendimiento en su decisión de cambiar, y decidió que no hacerlo tendría una penalización general mayor en el rendimiento o la estabilidad del sistema.

En general, la configuración predeterminada da como resultado un buen rendimiento general y estabilidad. Recomiendo dejarlo en el valor predeterminado. Existen otras vías para que Linux mejore su administración de memoria para resolver algunos casos extremos, pero en general el control de intercambio no es una buena solución: ajústelo en una dirección y puede solucionar un problema y crear otros problemas. Si es posible, simplemente instalando más RAM física (y dejando solo el intercambio) eclipsa todos los demás remedios.

Cómo Linux usa RAM

Cualquier RAM que no esté siendo utilizada por las aplicaciones puede usarse como "caché". La memoria caché es importante para un sistema rápido y sin problemas, ya que acelera las lecturas y escrituras en el disco.

Si sus aplicaciones aumentan el uso de su memoria hasta el punto de que están usando casi toda su RAM, su caché se reducirá y, como resultado, las operaciones de disco en promedio se ralentizarán. No es suficiente tener solo decenas de megabytes, o menos, para caché hoy en día.

Si las aplicaciones aumentan aún más su uso de memoria, suponiendo que no tenga espacio de intercambio, no solo no tendrá espacio para la memoria caché, sino que eventualmente se quedará sin memoria y su sistema tendrá que eliminar los procesos en ejecución. Los procesos de eliminación son peores que la desaceleración, ya que le proporciona un sistema inestable e impredecible.

Cómo Linux usa el intercambio

Para combatir estos dos problemas, su sistema puede reasignar alguna memoria de aplicación poco utilizada al espacio de intercambio en su disco, liberando RAM. La RAM adicional puede evitar que los procesos se mueran debido a la falta de memoria, y puede recuperar un poco de caché para que las operaciones del disco puedan funcionar sin problemas.

Sin embargo, esta reasignación no se realiza de acuerdo con un límite definido. No alcanza un cierto porcentaje de asignación después de lo cual Linux comienza a intercambiarse. Tiene un algoritmo "difuso". Tiene en cuenta muchas cosas, que se pueden describir mejor por "cuánta presión existe para la asignación de memoria". Si hay mucha "presión" para asignar nueva memoria, entonces aumentará las posibilidades de que algunas sean intercambiadas para hacer más espacio. Si hay menos "presión", disminuirá estas posibilidades.

Su sistema tiene una configuración de "intercambio" que le ayuda a ajustar cómo se calcula esta "presión". A menudo se representa falsamente como un "porcentaje de RAM", pero no lo es, es solo un valor que se usa como parte de la fórmula. Los valores de alrededor de 40 a 60 son los valores razonables recomendados, siendo 60 el valor predeterminado en la actualidad.

Permitir que su sistema cambie cuando sea necesario es, en general, algo muy bueno, incluso si tiene mucha RAM. Permitir que su sistema se intercambie si es necesario le da la tranquilidad de que si alguna vez se encuentra con una situación de poca memoria, incluso temporalmente (mientras ejecuta un proceso corto que usa mucha memoria), su sistema tiene una segunda oportunidad para mantener todo funcionando. Si llega a deshabilitar el intercambio por completo, entonces corre el riesgo de que se bloqueen los procesos debido a que no puede asignar memoria.

¿Qué sucede cuando el sistema está empantanado e intercambiando mucho?

El intercambio es una operación lenta y costosa, por lo que el sistema lo evita a menos que calcule que la compensación en el rendimiento de la memoria caché lo compensará en general, o si es necesario para evitar procesos de eliminación.

Muchas veces las personas miran su sistema que está agotando el disco y usando mucho espacio de intercambio y culpa del intercambio. Ese es el enfoque equivocado a tomar. Si el intercambio llega a este extremo, significa que el intercambio es el intento de su sistema de lidiar con problemas de poca memoria, no la causa del problema, y ​​que sin cambiar su proceso de ejecución simplemente morirá al azar.

¿Qué pasa con los sistemas de escritorio? ¿No requieren un enfoque diferente?

Los usuarios de un sistema de escritorio realmente esperan que el sistema "se sienta receptivo" en respuesta a acciones iniciadas por el usuario, como abrir una aplicación, que es el tipo de acción que a veces puede desencadenar un intercambio debido al aumento de memoria requerido.

Una forma en que algunas personas intentan modificar esto es reducir el parámetro de intercambio que puede aumentar la tolerancia del sistema a las aplicaciones que usan memoria y se quedan sin espacio en la memoria caché.

Sin embargo, esto es solo cambios en los postes. La primera aplicación ahora puede cargarse sin una operación de intercambio, pero dejará menos tiempo para la próxima aplicación que se cargue. El mismo intercambio puede ocurrir más tarde, la próxima vez que abra una aplicación. Mientras tanto, el rendimiento del sistema es más bajo en general debido al tamaño de caché reducido. Por lo tanto, cualquier beneficio de la configuración de intercambio reducido puede ser difícil de medir, reduciendo el retraso de intercambio en algunos momentos pero causando otro rendimiento lento en otros momentos. Reducir un poco la capacidad de intercambio puede estar justificado si sabe lo que está haciendo, pero reducirlo al 10% puede dejar al sistema tolerante a tamaños de caché muy bajos y es más probable que el sistema tenga que cambiar a corto plazo.

Se debe evitar deshabilitar el intercambio por completo, ya que pierde la protección adicional contra condiciones de falta de memoria que pueden causar que los procesos se bloqueen o se maten.

El remedio más efectivo, con mucho, es instalar más RAM si puede permitírselo.

¿Se puede desactivar el intercambio en un sistema que tiene mucha RAM de todos modos?

Si tiene mucha más RAM de la que probablemente necesite para las aplicaciones, rara vez necesitará un intercambio. Deshabilitar el intercambio probablemente no hará la diferencia la mayoría de las veces. Pero si tiene mucha RAM, dejar el intercambio habilitado tampoco tendrá ninguna penalización porque el sistema no se intercambia cuando no es necesario.

Las únicas situaciones en las que marcaría una diferencia serían en la situación poco probable en la que el sistema se queda sin memoria y, en consecuencia, el sistema de caché se ve obstaculizado, y es en este tipo de situación donde más desea intercambiar. Por lo tanto, puede dejar el intercambio de forma segura en su configuración normal para mayor tranquilidad sin que tenga un efecto negativo cuando tenga mucha memoria.

Pero, ¿cómo puede el intercambio acelerar mi sistema? ¿El intercambio no ralentiza las cosas?

El acto de transferir datos de la RAM al intercambio es una operación lenta, pero solo se toma cuando el núcleo está bastante seguro de que el beneficio general como resultado de mantener un tamaño de caché razonable será mayor que esto.

Una vez que los datos se intercambian, ¿cuándo vuelven a salir?

Cualquier parte de la memoria volverá a salir de intercambio tan pronto como se use, leída o escrita. Sin embargo, por lo general, la memoria que se intercambia es memoria a la que no se ha accedido durante mucho tiempo y que no se espera que sea necesaria pronto.

La transferencia de datos fuera del intercambio lleva casi tanto tiempo como ponerla allí. Su núcleo no eliminará datos si no es necesario. Mientras los datos se intercambian y no se usan, deja más memoria para otras cosas que se usan y más caché del sistema.

¿Hay casos en los que sea apropiado reducir el intercambio?

Si. Si está ejecutando un servidor dedicado a una aplicación de servidor en particular que no se beneficia de la memoria caché del sistema. Algunos servidores de bases de datos como el servidor Oracle, MySQL / MariaDB recomiendan en algunos casos reducir la capacidad de intercambio de 1 a 10, ya que estos motores de bases de datos utilizan su propio almacenamiento en caché.

Tenga en cuenta que esto es cierto solo si su sistema está dedicado a esa tarea, y en el caso de MySQL / MariaDB solo si está usando puramente InnoDB o XtraDB, y no MyISAM o Aria, etc.


Gracias por tu completa descripción. Creo que en mi caso (4 GB de RAM y 128 GB de disco duro SSD) y con mi uso (desarrollo Java EE y varios sistemas operativos en caja virtual) swappiness = 20 es adecuado. ¿Qué piensas?
Saeed Zarinfam

Creo que el valor predeterminado de 60 sería el mejor, en mi opinión.
thomasrutter

44
@BlancaHiggins, ¿leíste la publicación que comentaste? Su comentario no parece describir lo que realmente hace el intercambio.
thomasrutter

1
Esta es una excelente respuesta. Muchas gracias por tan buena explicación.
Dan Barron

2
Parte de la información en que SwapFaq es engañosa en mi opinión: que establecerlo en 100 se intercambiará "agresivamente". Creo que es más exacto decir que es una configuración muy prudente y proactiva, que se intercambia a la primera señal de que la memoria o caché disponible se está volviendo incluso un poco baja. Mientras que las configuraciones bajas como 10 son más arriesgadas y emocionantes, evitando hacer cualquier intercambio hasta que la memoria disponible sea muy baja y la memoria caché haya desaparecido por completo, dejando al sistema sin mucho margen de maniobra.
thomasrutter

14

En un escritorio habitual, tiene 4-5 tareas activas que consumen el 50-60% de la memoria. Si establece el intercambio en 60, se intercambiarán aproximadamente 1 / 4-1 / 3 de las páginas de tareas ACTIVAS. Eso significa que, por cada cambio de tarea, por cada nueva pestaña que abriste, por cada ejecución de JS, habrá un proceso de intercambio.

La solución es establecer el intercambio en 10. Por observaciones prácticas, esto hace que el sistema renuncie a la caché io de disco (que desempeña poco o ningún papel en el escritorio, ya que la caché de lectura / escritura prácticamente no se utiliza en absoluto. A menos que copie constantemente GRANDE archivos) en lugar de empujar cualquier cosa en el intercambio. En la práctica, eso significa que el sistema se negará a intercambiar páginas, cortando io cache en su lugar, a menos que llegue al 90% de la memoria utilizada. Y eso a su vez significa una experiencia de escritorio rápida, fluida e ininterrumpida.

Sin embargo, en el servidor de archivos, establecería el intercambio en 60 o incluso más, porque el servidor no tiene enormes tareas activas en primer plano que deben mantenerse en la memoria como un todo, sino muchos procesos más pequeños que funcionan o están inactivos, y no cambiar realmente su estado de inmediato. En cambio, el servidor a menudo sirve (perdón) exactamente los mismos datos a los clientes, haciendo que las memorias caché de disco sean mucho más valiosas. Entonces, en el servidor, es mucho mejor intercambiar los procesos inactivos, liberando espacio de memoria para las solicitudes de caché de disco.

Sin embargo, en los escritorios, esta configuración exacta lleva a intercambiar bloques de memoria de aplicaciones REALES, que casi constantemente modifican o acceden a estos datos.

Por extraño que parezca, los navegadores a menudo reservan grandes cantidades de memoria, que modifican constantemente. Cuando se intercambian dichos fragmentos, lleva un tiempo si se solicitan de nuevo, y al mismo tiempo, el navegador continúa actualizando sus cachés. Lo que causa enormes latencias. En la práctica, estará sentado 2 minutos esperando que se cargue la página web única en una nueva pestaña.

El escritorio realmente no se preocupa por el disco io, porque el escritorio rara vez lee y escribe en caché repitiendo grandes porciones de datos. Cortar el disco io para evitar el intercambio lo más posible es mucho más favorable para el escritorio, que tener el 30% de la memoria reservada para la caché del disco con el 30% de RAM (llena de bloques que pertenecen a aplicaciones utilizadas activamente) intercambiados.

Simplemente inicie htop, abra un navegador, GIMP, LibreOffice, cargue algunos documentos allí y luego navegue durante varias horas. Es realmente así de fácil.


3
+1 para la descripción de las diferencias entre el servidor y el escritorio. El caché de disco del servidor se puede hacer en un campo de disco.
Dee

Si este es el caso, ¿por qué las versiones de servidor y de escritorio de Ubuntu tienen un valor predeterminado de 60? Si lo que declaras es verdadero, entonces tendría más sentido que la versión de escritorio tenga un valor predeterminado de 20 o incluso 10, pero no lo es.
JAB

1
¿Referencia para la implicación de que el intercambio es un porcentaje directo de ram que se intercambia? No creo que funcione así.
Xen2050

1
No lo hace. El intercambio no está relacionado con un porcentaje de RAM. Es una perilla que modifica un algoritmo difuso para que sea más o menos probable que cambie en una situación problemática dada. También creo que la descripción de las cargas de trabajo de servidor vs escritorio en esta respuesta hace un montón de suposiciones que no siempre son válidas.
thomasrutter

9

Si ejecuta un servidor Java en su sistema Linux, debería considerar la posibilidad de reducir el intercambio por mucho del valor predeterminado de 60. Por lo tanto, 20 es un buen comienzo. El intercambio es un asesino para un proceso de recolección de basura porque las recolecciones cada vez necesitan tocar grandes partes de la memoria del proceso. El sistema operativo no tiene los medios para detectar dichos procesos y hacer las cosas bien para ellos. Es una buena práctica evitar el intercambio tanto como sea posible para servidores de aplicaciones productivos.


Es cierto que si dedica un servidor a una carga de trabajo especializada que sabe que no se beneficiará de la memoria caché del sistema (como un servidor de base de datos), entonces podría tener sentido reducir el intercambio. Sin embargo, no creo que la recolección de basura sea un caso suficientemente especializado. Si la memoria se toca con frecuencia, no se intercambiará, se mantendrá en la RAM física. El único momento en que este no es el caso es si tiene una situación grave de poca memoria, y el intercambio no es responsable.
thomasrutter

4

Sugeriría hacer algunos experimentos mientras tengo el monitor del sistema abierto para ver exactamente cuánta carga tiene su máquina, también estoy ejecutando con 4 GB de memoria y un SSD de 128 GB, por lo que cambié el valor de intercambio a 10, lo que no solo mejoró el rendimiento mientras estaba bajo carga, sino también como bonificación también aumentará la vida útil de la unidad SSD, ya que sufrirá menos escrituras.

Para un video tutorial simple sobre cómo hacer esto con una explicación completa, vea el video de YouTube a continuación

http://youtu.be/i6WihsFKJ7Q


1
Gran video que hiciste, pero el video realmente no responde a la pregunta directamente, es más un tutorial sobre cómo cambiar el intercambio.
jmunsch

+1 para la sugerencia de vida de SSD, para SSD es mejor si el sistema es lo más posible de solo lectura, el resto debe permanecer en la memoria y hoy en día, la memoria generalmente no es un gran problema en las PC de escritorio actuales.
Dee

3

Quiero agregar una perspectiva de un ingeniero de Big Data Performance para dar a otros más antecedentes sobre la tecnología 2017.

Mi experiencia personal es que, aunque normalmente he desactivado el intercambio para garantizar que mis sistemas se ejecutan a la velocidad máxima, en mi estación de trabajo por un problema específico, he descubierto que el intercambio de 1 y 10 conduce a la congelación (para siempre) y pausas largas. El intercambio de 80 para esta aplicación en particular conduce a un rendimiento mucho mejor y pausas más cortas que las predeterminadas (60). Tenga en cuenta que tenía 8 GB de RAM y 4x 256 GB de intercambio respaldados por 1 HDD. Normalmente declararía estadísticas precisas vistas en mis puntos de referencia y las especificaciones completas de hardware, pero aún no lo he hecho y es un escritorio reciente de gama baja que no es importante aquí.

De vuelta en mi antigua empresa, la razón por la que no permitimos el intercambio en servidores Spark con [500GB a 4TB] x [10-100] nodos es que vimos un bajo rendimiento como una señal para rediseñar la tubería de datos y las estructuras de datos de una manera más eficiente conducta. Tampoco queríamos comparar los HDD / SSD. Además, intercambiar tanta RAM necesitaría 10-30 discos por nodo con escrituras paralelas para minimizar el tiempo de acceso al disco.

Hoy, hace 20 años y 20 años en el futuro, el caso seguirá siendo que algunos problemas son demasiado grandes para la RAM. Con tiempo y dinero infinitos, podemos comprar / arrendar más hardware o rediseñar cualquier proceso para llevar el rendimiento a un nivel deseable. El intercambio es solo un truco que nos permite ignorar el problema real (no tenemos suficiente ram y no queremos gastar más dinero).

Para aquellos que piensan que un mayor intercambio es un mal consejo, aquí hay una pequeña perspectiva. En el pasado, los HD tenían solo unos pocos kb de caché, si los hubiera. La interfaz era IDE / ATA paralela. El bus de la CPU también fue mucho más lento junto con la RAM y muchas otras cosas. En resumen, los sistemas eran muy lentos (en relación con hoy) en todos los sentidos. Hace un par de años, los discos duros usaban SATA3. Hoy, utilizan el protocolo NVMe, que tiene mejoras de latencia significativas. Los HD tienen muchos MB de caché. Y la parte más interesante es cuando usa un SSD moderno (resistencia y rendimiento de lectura / escritura mucho más estables) con NVMe o PCIe como su almacenamiento de intercambio. Es el mejor compromiso entre costo y rendimiento. No intente esto con SSD baratos o viejos.

Intercambio + SSD! Con el almacenamiento volátil de alto rendimiento, recomendaría experimentar con un alto valor de intercambio. Depende principalmente de los patrones de acceso a la memoria (acceso aleatorio a toda la memoria versus acceso a la mayoría de las veces), el uso de la memoria, si el ancho de banda del disco ya está saturado, y el costo real de la agitación.


1

Podría ser que gran parte del comportamiento de intercambio percibido en el inicio o en la apertura de programas es la lectura de archivos de configuración de Linux, etc. desde el disco. Por lo tanto, tal vez sea mejor mirar usando el programa de monitoreo del sistema antes de asumir que el acceso al disco duro se debe a un intercambio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.