es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo mantener las páginas de ejecución respaldadas por archivos evitadas de la memoria RAM en Linux?

Intenté usar madvise(MADV_DONTNEED) y verifiqué con /proc/pid/pagemap que las páginas se desasignaron correctamente. A pesar de que no se accede a ninguna de las funciones de la página, algunas de ellas se asignan de nuevo muy pronto. Según lo que he leído, hay dos listas – Activa e Inactiva. madvise(MADV_DONTNEED) hará que las páginas se eliminen de ambas listas. Si esto es correcto, ¿hay algo más que un acceso de CPU a una dirección en la página que puede hacer que la página se cargue de nuevo? Las referencias al código serán muy útiles. Mi objetivo es mantener la página desasignada y que no sea asignada de nuevo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es cierto que madvise(MADV_DONTNEED) eliminará páginas de ambas listas, Activas e Inactivas, indicando que están disponibles para ser reclamadas por el kernel. Sin embargo, es importante tener en cuenta que el kernel utiliza una variedad de heurísticas para determinar qué páginas eliminar y cuáles mantener, y estas heurísticas pueden hacer que las páginas sean cargadas de vuelta en la memoria aunque hayan sido liberadas.

    Una causa común por la que las páginas son cargadas de vuelta en memoria es cuando el kernel intenta acceder a una página que ha sido eliminada. Esto puede ocurrir si la página contiene datos necesarios para el funcionamiento del sistema o de una aplicación. En este caso, el kernel cargará la página de vuelta en memoria, incluso si se ha marcado como libre con madvise(MADV_DONTNEED).

    Otros factores que pueden hacer que las páginas sean cargadas de vuelta en memoria incluyen la presión sobre la memoria, el tamaño y la frecuencia de acceso a la página, y diversas configuraciones como el swappiness.

    Si su objetivo es mantener una página en particular eliminada y evitar que se cargue de vuelta en la memoria, puede considerar usar una estrategia de gestión de memoria más específica. Por ejemplo, podría usar la función mlock() para bloquear la página en memoria y evitar que se elimine en primer lugar. Alternativamente, puede utilizar herramientas como cgroups o numactl para controlar la ubicación de los procesos y su memoria asociada.

Comments are closed.