Según la documentación del kernel:
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase aggressiveness, lower values
decrease the amount of swap.
Sin embargo, esto es un poco vago. Estoy tratando de averiguar exactamente qué controla el parámetro en última instancia. Sé que ajusta cuán agresivamente el núcleo intenta intercambiar páginas, pero ¿qué proceso de toma de decisiones en el código del núcleo afecta?
¿Ajusta hace cuánto tiempo se debe haber accedido a una página antes de que el núcleo la cambie? Si es así, ¿qué representa el valor predeterminado de 60? ¿Y cuánto cambia un incremento / decremento de 1 (una fórmula sería buena)?
¿O intercambia páginas según su frecuencia de acceso?
¿O algo mas?
Respuestas:
Desde la versión del kernel 2.6.28, Linux usa una estrategia de reemplazo de página Split Least Latest Used (LRU). Las páginas con una fuente del 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.
La
vm.swappiness
opción entra en juego enget_scan_count()
definido enmm/vmscan.c
.get_scan_count()
determina cuán agresivamente se deben escanear las listas de LRU anónimas y de archivo cuando se buscan páginas para desalojar. El valor de cada caso está determinado por el promedio flotante de las relaciones recientemente rotadas y escaneadas recientemente, donde las referencias más recientes tienen más peso que las anteriores para tener en cuenta la carga de trabajo cambiante del sistema.El
vm.swappiness
es un modificador que cambia el equilibrio entre el intercambio de páginas de caché de archivos a favor de páginas anónimas.vm.swappiness
es el valor de prioridad dado a las páginas anónimas, por defecto establecido en 60 . El caché del archivo tiene un valor de prioridad de 200 del quevm.swappiness
se deduce el modificador (file_prio=200-anon_prio
). 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
). Sin embargo, cuando el sistema está cerca de una condición de falta de memoria , las listas de LRU anónimas y de archivo se analizan por igual, a menos quevm.swappiness
se establezca en cero.Cuando
vm.swappiness
se establece en 100, las prioridades serían iguales (anon_prio=100
,file_prio=200-100=100
). Establecervm.swappiness
a cero evitará que el kernel expulse páginas anónimas a favor de las páginas del caché de archivos.fuente
Hay una fórmula que se usa para calcular qué página se intercambiará. En
vmscan.c
puedes ver este algoritmo:Aquí puede ver que swappiness es una escala, que se agrega en algún algoritmo y puede controlar con este parámetro cómo se comportará el núcleo cuando deba intercambiar. Puede calcularlo como un porcentaje de probabilidad de que se intercambie alguna página de memoria inactiva. Si establece el intercambio en 100, no hay probabilidad, pero hay una garantía de que se intercambiará y si lo establece en 0, el núcleo intentará no intercambiar en absoluto mientras tenga algo de memoria vacía.
fuente
Se ha dicho (creo que Norman 1986) que a menudo el botón "CERRAR PUERTA" en un elevador está roto o nunca estaba conectado a nada en primer lugar. Esto hace que el control de Ersatz no sea una forma de manipular el elevador sino de apaciguar al jinete demasiado apresurado.
De manera similar, el intercambio tiene un efecto no relacionado con su control determinista bien definido de un predicado del núcleo. Como señaló @neon_overlord en askubuntu.com
Entonces, ¿qué controla realmente ? Una respuesta válida, además de las excelentes respuestas ya proporcionadas, es que modifica su expectativa de que tiene más control sobre su sistema y que girar un botón le permitirá ejercer ese control de manera significativa.
fuente