Listar todos los archivos que están presentes en el caché

8

Esta pregunta responde a la pregunta sobre cómo encontrar qué es parte de la memoria caché. Sin embargo, en el fincoreejecutable debe pasar el nombre de archivo para verificar si es parte de la memoria caché.

¿Existe alguna herramienta o método para encontrar todas las entradas que forman parte de la memoria en caché sin pasar los nombres de archivo?

PD: Lo estamos ejecutando en un sistema integrado, y ejecutar un bucle for y pasar todos los archivos a fincoresí mismo es un proceso que consume más tiempo y memoria. Por lo tanto, estoy buscando otros métodos.

Joe
fuente

Respuestas:

6

No conozco ningún lugar donde el kernel exponga los nombres de archivo asociados con los bloques que ha almacenado en caché. De acuerdo con esta respuesta

https://stackoverflow.com/a/4941371

Lo mejor que probablemente podría hacer incluso con un módulo de kernel personalizado sería obtener una lista de inodos y dispositivos. A partir de ahí, es probable que necesite recorrer el sistema de archivos en busca de esos archivos.

Luego puede preguntar "Pero, ¿cómo fincoresabe acerca de los archivos que he enumerado?" O tal vez no, pero el método me pareció bastante inteligente, así que aquí está. La fincoreherramienta funciona haciendo lo siguiente:

La mincorellamada al sistema le indica si las páginas de memoria dadas están en la memoria central (es decir, no causarían una falla de página al acceder). Como mmapcarga perezosamente el archivo mapeado y aún no hemos leído ninguna de las regiones mapeadas, cualquier página que no cause un fallo de página debe ser parte de nuestro caché.

Steven D
fuente