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 en get_scan_count()
definido en mm/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 que vm.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 que vm.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
). Establecer vm.swappiness
a cero evitará que el kernel expulse páginas anónimas a favor de las páginas del caché de archivos.