¿Por qué el intercambio se establece en 60 de forma predeterminada?

109

Acabo de leer algunas cosas sobre el intercambio en Linux. No entiendo por qué el valor predeterminado se establece en 60.

Según yo, este parámetro debe establecerse en 10 para reducir el intercambio. Swap está en mis discos duros, por lo que es mucho más lento que mi memoria.

¿Por qué configuraron el núcleo así?

Hugo
fuente
2
@ Mat Vea esto para saber cómo hacer un benchmarking de intercambio.
Geremia

Respuestas:

133

Desde el kernel 2.6.28, Linux utiliza una estrategia de reemplazo de página Split Least Latest Used (LRU). Las páginas con una fuente de sistema de archivos, como el texto del programa o las bibliotecas compartidas pertenecen al caché de archivos. Las páginas sin respaldo del sistema de archivos se denominan páginas anónimas y consisten en datos de tiempo de ejecución, como el espacio de pila reservado para aplicaciones, etc. Por lo general, las páginas que pertenecen al caché de archivos son más baratas de desalojar de la memoria (ya que estas pueden leerse desde el disco cuando sea necesario) . Dado que las páginas anónimas no tienen respaldo del sistema de archivos, deben permanecer en la memoria siempre que un programa las necesite a menos que haya espacio de intercambio para almacenarlas.

Es un error común pensar que una partición de intercambio de alguna manera ralentizaría su sistema. No tener una partición de intercambio no significa que el núcleo no expulse las páginas de la memoria, solo significa que el núcleo tiene menos opciones con respecto a qué páginas expulsar. La cantidad de intercambio disponible no afectará la cantidad que se usa.

Linux puede hacer frente a la ausencia de un espacio de intercambio porque, de forma predeterminada, la política de contabilidad de la memoria del núcleo puede comprometer en exceso la memoria . La desventaja es que cuando la memoria física se agota, y el núcleo no puede intercambiar páginas anónimas al disco, el mecanismo de eliminación de memoria ( asesino OOM) comenzará a eliminar los procesos "deshonestos" que acaparan la memoria para liberar memoria para otros procesos

La vm.swappinessopción es un modificador que cambia el equilibrio entre el intercambio de páginas de caché de archivos a favor de páginas anónimas. El caché del archivo tiene un valor de prioridad arbitrario de 200 del cual vm.swappinessse deduce el modificador ( file_prio=200-vm.swappiness). Las páginas anónimas, por defecto, comienzan con 60 ( anon_prio=vm.swappiness). Esto significa que, por defecto, los pesos de prioridad son moderadamente favorables a las páginas anónimas ( anon_prio=60, file_prio=200-60=140). El comportamiento se define mm/vmscan.cen el árbol fuente del núcleo.

Dado un vm.swappinessde 100, las prioridades serían iguales ( file_prio=200-100=100, anon_prio=100). Esto tendría sentido para un sistema pesado de E / S si no se desea que las páginas del caché de archivos se desalojen en favor de páginas anónimas.

Por el contrario, configurar vm.swappinessto 0evitará que el kernel expulse páginas anónimas a favor de páginas del caché de archivos. Esto podría ser útil si los programas hacen la mayor parte de su almacenamiento en caché, lo que podría ser el caso con algunas bases de datos. En los sistemas de escritorio, esto podría mejorar la interactividad, pero la desventaja es que el rendimiento de E / S probablemente se verá afectado.

El valor predeterminado probablemente se haya elegido como un punto medio aproximado entre estos dos extremos. Al igual que con cualquier parámetro de rendimiento, el ajuste vm.swappinessdebe basarse en datos de referencia comparables a las cargas de trabajo reales, no solo en una intuición.

Thomas Nyman
fuente
44
¿Cómo afecta la instalación del sistema operativo en un dispositivo de estado sólido a la compensación?
gerrit
3
@gerrit El tipo de medio de almacenamiento subyacente es irrelevante. Ese tipo de detalle no es visible para el subsistema de administración de memoria.
Thomas Nyman
El tipo de medio de almacenamiento subyacente es irrelevante desde una perspectiva de uso de memoria. Puede considerar reducir la capacidad de intercambio de que el medio admite una cantidad limitada de lectura / escritura (es decir, memoria flash) para aumentar su longevidad.
MatrixManAtYrService
2
@MatrixManAtYrService Gracias a la nivelación interna del desgaste y la redundancia incorporada, se ha demostrado que los SSD modernos (a los que se refiere la pregunta en el comentario anterior) duran hasta 2 PB (!) De escrituras antes de exhibir errores. Incluso las unidades más baratas en esos experimentos duraron 300 TB antes de que ocurrieran errores, mucho más allá de la calificación de garantía oficial de alrededor de 100 TB. Al menos en mi opinión, ajustar el intercambio para acomodar un SSD en estaciones de trabajo o computadoras portátiles no está realmente garantizado.
Thomas Nyman
2
@ThomasNyman haces un buen punto, para la mayoría de los usuarios no vale la pena preocuparse. El caso que me trajo a esta publicación involucró el espacio de intercambio en una tarjeta SD, lo cual reconozco que es un caso marginal.
MatrixManAtYrService
9

El problema es que no hay un valor predeterminado que satisfaga todas las necesidades. Establecer la opción de intercambio en 10 puede ser una configuración adecuada para los escritorios, pero el valor predeterminado de 60 puede ser más adecuado para los servidores. En otras palabras, el intercambio debe modificarse según el caso de uso: escritorio versus servidor, tipo de aplicación, etc.

Además, el kernel de Linux usa memoria para caché de disco; de lo contrario, la RAM no se usaría y esto no es eficiente ni previsto. Tener datos de disco en el caché significa que si algo necesita los mismos datos nuevamente, es probable que los obtenga de la memoria. Obtener los datos desde allí es mucho más rápido que obtenerlos del disco nuevamente. Y la opción de intercambio es un mecanismo de cuánto prefiere el kernel de Linux cambiar al disco para reducir la caché del disco. ¿Debería más bien eliminar datos antiguos de la memoria caché o debería intercambiar algunas páginas del programa?

Este artículo también puede arrojar algo de luz sobre el tema. Especialmente, cómo se estima la tendencia de intercambio.

dsmsk80
fuente
No entiendo por qué 60 es más adecuado para servidores. Tengo servidores y algunos procesos se intercambian incluso si tenemos 40% de RAM libre. no tiene sentido para mi
Hugo
77
Tiene sentido mover partes de la memoria al intercambio si es muy poco probable que se acceda a ellas, de esa manera Linux mantiene la mayor cantidad de RAM libre posible para estar listo para situaciones cuando realmente lo necesita.
reproducir
2
Por favor, evite las URL acortadas
Dres
El enlace al artículo está inactivo, pero aún puede verlo desde Wayback Machine
2014
El artículo vinculado es informativo. Gracias por compartirlo.
Pistos
5

Añadiendo más detalles a las respuestas anteriores.
A medida que usamos VM cada vez más, un host de Linux puede ser una máquina virtual en uno de estos entornos de nube. En los ejemplos 1 y 2 tenemos una buena idea de las aplicaciones que se están ejecutando y, por tanto, cuánta RAM consumen. En 3, no tanto

  • Ejemplo 1
    Una nube privada de alto rendimiento (piense en el tipo por el que la mayoría de los bancos pagarían millones) una en la que el disco es provisto por una matriz de almacenamiento muy costosa con MUY buena E / S. Parte de ese almacenamiento puede estar en RAM (en la matriz de discos) respaldada por discos SSD, respaldada por discos regulares con husillos. En esta situación, el disco que ve la VM puede ser solo un poco más lento que la RAM a la que puede acceder. Para un solo vm no hay mucha diferencia entre swap y ram.
  • Ejemplo 2
    Lo mismo que en el ejemplo 1 pero en lugar de un solo vm tienes cientos, miles o más. En esta situación, descubrimos que la RAM del servidor (hipervisor) es barata y abundante donde la RAM de almacenamiento es costosa (relativamente hablando). Si dividimos los requisitos de RAM entre Hypervisor RAM y SWAP proporcionados por nuestra matriz de almacenamiento muy costosa, encontramos que usamos rápidamente toda la RAM en la matriz de almacenamiento, los bloques son atendidos por los SSD y finalmente por los husillos. De repente, todo comienza a volverse muy lento. En este caso, es probable que queramos asignar mucha RAM (desde el hipervisor) a la VM y establecer la capacidad de intercambio en 0 (solo intercambio para evitar condiciones de falta de memoria) ya que el efecto acumulativo de todos esos vm tendrá un efecto en el rendimiento de el almacenamiento,
  • Ejemplo 3 Una computadora portátil o de escritorio moderna probablemente con un SSD. Los requisitos de memoria se consideran desconocidos. Qué navegador usará el usuario, cuántas pestañas abrirán, también editarán un documento, una imagen RAW o posiblemente un video, todos consumirán RAM. Establecer el intercambio en un valor bajo y realizar otros ajustes del sistema de archivos significará que hay menos escrituras en el SSD y, por lo tanto, durará más.
Timoteo c
fuente
3
Las preocupaciones de resistencia de escritura de SSD para un sistema de usuario final están sobrevaloradas. Los SSD modernos generalmente sobreviven a volúmenes de escritura de muchos cientos de terabytes. Es poco probable que un sistema de escritorio típico, incluso con un uso intensivo de intercambio, lo use durante muchos años de funcionamiento.
Julio