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í?
Respuestas:
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.swappiness
opció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 cualvm.swappiness
se 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 definemm/vmscan.c
en el árbol fuente del núcleo.Dado un
vm.swappiness
de100
, 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.swappiness
to0
evitará 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.swappiness
debe basarse en datos de referencia comparables a las cargas de trabajo reales, no solo en una intuición.fuente
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.
fuente
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
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.
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,
fuente