Desalojos de caché de Linux

8

Al observar cómo se comporta el caché VFS en mi máquina Linux, puedo ver que incluso cuando está efectivamente inactivo (crond y la mayoría de los otros demonios se detuvieron, las interfaces están inactivas), la cantidad de memoria libre aumenta gradualmente, lo que implica que los elementos se están expulsando del caché.

Busqué mucho en Google pero no puedo encontrar ninguna referencia a cómo se controla esto (a menos que sea un efecto secundario de vm_swappiness). ¿Alguien puede ponerme en el camino correcto para comprender por qué los elementos se expulsan de la memoria caché cuando no hay demanda de nueva asignación de memoria?

symcbean
fuente
«Implicando que los elementos están siendo desalojados de la memoria caché» - bueno, en ese caso vmstatmostraría un aumento en el tamaño de las memorias caché, - ¿son realmente?
poige
disminuyendo seguramente. Sí lo están (disminuyendo)
symcbean
Entonces, usted dice que la memoria libre aumenta y que el tamaño de caché / buf disminuye al mismo tiempo, ¿es correcto?
poige

Respuestas:

1

el intercambio solo afecta si la memoria de la aplicación asignada se intercambia para dejar espacio para el caché. vfs_cache_pressure es el sysctl que controla lo que estás viendo.

Bratchley
fuente
1
No: vfs_cache_pressure controla la proporción de metadatos versus retención de caché de página (al menos de acuerdo con los documentos que he leído y los experimentos que he realizado)
symcbean
1
Lo suficientemente justo. Investigué un poco más y, por lo que puedo ver, todo se ordena en una lista de pedidos de LRU y solo se observa cuando se alcanza o supera un umbral (artificial o físico). Teniendo en cuenta eso, asumiría que algo sigue sucediendo (como un hilo del núcleo que se despierta o algo así). Si es muy importante para usted resolver esto, parece que hay un script de systemtap preescrito llamado "mmreclaim.stp" que rastrea las reclamaciones del administrador de memoria. También me aseguré de que en realidad no se va a intercambiar usando "sar -A".
Bratchley
1

Linux vacía los datos del caché de la página usando un proceso llamado pdflush

pdflush es controlado por parámetros de / proc / sys / vm

#/proc/sys/vm/dirty_expire_centisecs
The hundredth of the second after which data will be considered to be expired from the page cache and will be written at the next opportunity.

#/proc/sys/vm/dirty_writeback_centisecs`    
The hundredth of a second after which the pdflush wakes up to write data to disk.

#/proc/sys/vm/vfs_cache_pressure`    
This will reclaim dentries and inodes which are also part of the cache.

Puede consultar los siguientes hilos para obtener más información:

El demonio pdflush
Teoría de operación y ajuste para cargas pesadas de escritura
Linux Cache Memory

Joe
fuente
Gracias Joe, sin embargo, las primeras 2 opciones se relacionan específicamente con los datos que deben escribirse nuevamente en el sistema de archivos (es decir, el búfer de escritura), no los datos que se han leído y no se han cambiado (el búfer de lectura). Vfs_cache_pressure controla la preferencia para desalojar metadatos de archivos en relación con el contenido del archivo.
symcbean
@symcbean Estás en lo correcto. La respuesta habla más sobre caché de escritura. La memoria caché de lectura se borra en función de LRU. Sin embargo, Linux utiliza una estrategia de dos listas en función de la cual se borra la memoria caché de lectura. Puede leer más sobre Two-List Stragety y cómo Linux limpia el caché de lectura aquí . Avísame si esto tiene sentido. En su caso supongo que después de todos los procesos se detienen, estas memorias caché de lectura entran en la lista de inactivos y se borran
Joe
Gracias, buen artículo. ¿Alguna idea de qué libro proviene el capítulo? Sin embargo, aunque explica cómo se prioriza el desalojo de una página en particular, en realidad no explica por qué se desalojan las páginas cuando no hay una demanda aparente de memoria. ¿Qué controla el proceso "para reducir el caché para que haya más RAM disponible para otros usos"? ¿Con qué los reemplaza?
symcbean
@symcbean El desalojo de caché funciona inmediatamente cuando hay una demanda de memoria. Sin embargo, no tiene sentido tenerlo en caché cuando nadie lo está utilizando activamente. Allí las páginas activas se convierten en páginas inactivas y eventualmente son desalojadas. Supongo que su pregunta se origina en el punto de que el desalojo solo ocurrirá cuando haya demanda de memoria. Linux eliminará todas las páginas inactivas cuando estén disponibles. Como [anotado en el artículo] [ jothirams.com/linux-cached-memory/] si todo está activo, se quedará sin memoria y se llamará a OOM.
Joe