¿Hay alguna forma de decirle al kernel de Linux que solo use un cierto porcentaje de memoria para la memoria caché del búfer? Sé que /proc/sys/vm/drop_caches
se puede usar para borrar el caché temporalmente, pero ¿hay alguna configuración permanente que evite que crezca a más del 50% de la memoria principal?
La razón por la que quiero hacer esto es que tengo un servidor que ejecuta un OSD Ceph que constantemente sirve datos del disco y logra usar toda la memoria física como caché de búfer en unas pocas horas. Al mismo tiempo, necesito ejecutar aplicaciones que asignarán una gran cantidad (varios 10s de GB) de memoria física. Contrariamente a la creencia popular (vea el consejo dado en casi todas las preguntas relacionadas con el caché del búfer), la liberación automática de la memoria al descartar las entradas de caché limpias no es instantánea: iniciar mi aplicación puede tomar hasta un minuto cuando el caché del búfer está lleno ( *), mientras que después de borrar el caché (usando echo 3 > /proc/sys/vm/drop_caches
), la misma aplicación se inicia casi instantáneamente.
(*) Durante este minuto de tiempo de inicio, la aplicación falla en la nueva memoria pero pasa el 100% de su tiempo en el núcleo, según Vtune en una función llamada pageblock_pfn_to_page
. Esta función parece estar relacionada con la compactación de memoria necesaria para encontrar páginas enormes, lo que me lleva a creer que en realidad la fragmentación es el problema.