¿Cuáles son las condiciones exactas en función de las cuales Linux intercambia la memoria de los procesos de la RAM a un archivo de intercambio?

StackOverflow https://stackoverflow.com/questions/2029015

Pregunta

Mi servidor tiene 8 GB de RAM y 8 GB configurados para archivos de intercambio.Tengo aplicaciones que consumen mucha memoria en ejecución.Estas aplicaciones tienen cargas máximas durante las cuales encontramos un aumento en el uso de intercambio.Se utiliza aproximadamente 1 GIG de swap.

Tengo otro servidor con 4 GB de RAM y 8 GB de intercambio y aplicaciones similares con uso intensivo de memoria ejecutándose en él.Pero aquí el uso del swap es muy insignificante.Alrededor de 100 MB.

Me preguntaba cuales son los exacto condiciones o un fórmula aproximada en función de lo cual Linux realizará un intercambio de una memoria de proceso en RAM al archivo de intercambio.Sé que se basa en el factor de intercambio.¿En qué más se basa?¿Cambiar tamaño de archivo?Cualquier sugerencia sobre la documentación/código fuente del kernel de Linux que explique esto será excelente.

¿Fue útil?

Solución

He visto a mucha gente publicar explicaciones subjetivas de lo que esto hace.Es de esperar que aquí haya una respuesta más completa.

En la LRU dividida en la versión posterior a 2.6.28, el intercambio de Linux es un multiplicador que se usa para modificar arbitrariamente la fracción que se calcula determinando la presión acumulada en ambas LRU.

Entonces, por ejemplo, en un sistema al que no le queda memoria libre, el valor de la memoria existente que tiene se mide en función de la tasa de memoria que aparece como "Activa" y la tasa de frecuencia con la que las páginas se promueven a activas después. caer en la lista de inactivos.

Una LRU con muchas promociones/degradaciones de páginas entre activas e inactivas es de mucha utilidad.

Por lo general, el almacenamiento respaldado por archivos es más económico y seguro de desalojar cuando se está quedando sin memoria y automáticamente recibe un modificador de 200 (esto hace que la memoria respaldada por archivos sea 200 veces menos valiosa que la memoria respaldada por intercambio (que tiene un valor de 0) cuando se multiplica esto fracción.

Lo que hace el intercambio es modificar este valor deduciendo el número de intercambio que proporcionó (predeterminado 60) a la memoria del archivo y agregando el valor de intercambio que proporcionó como multiplicador a la memoria anónima.Por lo tanto, el intercambio predeterminado deja la memoria anónima 80 veces más valiosa que la memoria de archivos (200-60 para archivos, 0+60 para anon).Por lo tanto, en un sistema Linux típico que ha consumido toda su memoria, la memoria caché de página tendría que ser 80 VECES más activa que la memoria anónima para que la memoria anónima se intercambie a favor de la memoria caché de página.

Si establece el intercambio en 100, esto le dará inmediatamente un modificador de 100 y la memoria de archivos un modificador de 100 (200 - 100), dejando ambas LRU con el mismo peso.Por lo tanto, en un sistema con muchos archivos que desea un caché de página, siempre que la memoria anónima no sea tan activa como el caché de página, la memoria anónima se intercambiará al disco para dejar espacio para el caché de página adicional.

Otros consejos

Linux (o cualquier otro sistema operativo) divide la memoria en páginas (normalmente 4 KB). Cada una de estas páginas representan un trozo de memoria. información de uso de estas páginas se mantiene, lo que básicamente contiene información sobre si la página es libre o está en uso (parte de algún proceso), si se ha accedido recientemente, qué tipo de datos que contiene (datos de proceso, el código ejecutable etc. ), propietario de la página, etc. Estas páginas también se puede dividir en dos categorías - páginas sistema de archivos o la memoria caché de la página (en la que todos los datos de lectura / escriben en su sistema de archivos reside) y las páginas que pertenecen a los procesos.

Cuando el sistema está quedando sin memoria, el kernel inicia el canje de páginas en función de su uso. El uso de una lista de páginas ordenadas w.r.t reciente de acceso es común para determinar qué páginas se pueden intercambiar (núcleo de Linux tiene una lista de este tipo también).

Durante el intercambio, núcleo de Linux tiene que decidir qué compensación cuando bombardear las páginas en memoria y enviarlos a intercambiar. Si se intercambia páginas del sistema de archivos de forma demasiado agresiva, más lecturas son necesarios desde el sistema de archivos para leer esas páginas atrás cuando se necesitan. Sin embargo, si se intercambia las páginas de proceso de forma más agresiva que puede hacer daño a la interactividad, ya que cuando el usuario intenta utilizar los procesos llevados a swap tendrán que ser leído desde el disco. Ver una buena discusión aquí en esto.

Al establecer swappiness = 0, le está diciendo al núcleo de Linux no a intercambiar páginas pertenecientes a los procesos. Al establecer swappiness = 100 en vez, le dice al kernel para intercambiar páginas pertenecientes a los procesos de manera más agresiva. Para ajustar el sistema, trate de cambiar el parámetro swappiness en pasos de 10, monitorear el desempeño y las páginas que se intercambian de entrada / salida en cada ajuste con el comando "vmstat". Mantenga el valor que le da los mejores resultados. Recuerda hacer esto de las pruebas durante las horas pico. :)

Para las aplicaciones de bases de datos, swappiness = 0 se recomienda generalmente. (Incluso entonces, probar diferentes ajustes en sus sistemas para llegar a un buen valor).

Referencias:
http: //www.linuxvox. com / 2009/10 / que-es-el-linux-kernel-parámetro-vm-swappiness /
http://www.pythian.com/news/1913/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top