¿Qué herramientas o técnicas puedo utilizar para eliminar el contenido del archivo almacenado en caché para evitar que los resultados de mi rendimiento se desvíen? Creo que necesito borrar completamente o eliminar selectivamente la información almacenada en caché sobre el contenido de archivos y directorios.
La aplicación que estoy desarrollando es una utilidad de compresión especializada y se espera que haga mucho trabajo leyendo y escribiendo archivos que el sistema operativo no ha tocado recientemente y cuyos bloques de disco es poco probable que se almacenen en caché.
Deseo eliminar la variabilidad que veo en el tiempo IO cuando repito la tarea de perfilar diferentes estrategias para realizar el trabajo de procesamiento de archivos.
Estoy interesado principalmente en soluciones para Windows XP, ya que es mi máquina de desarrollo principal, pero también puedo probar usando Linux, por lo que también estoy interesado en las respuestas para ese entorno.
Probé SysInternals CacheSet , pero hacer clic en "Borrar" no da como resultado un aumento medible (restauración del tiempo después de un arranque en frío) en el tiempo para volver a leer los archivos que acabo de leer algunas veces.
fuente
Respuestas:
Utilice la aplicación RAMMap de SysInternal .
La opción de menú Empty / Empty Standby List borrará el caché de archivos de Windows.
fuente
Para Windows XP, debería poder borrar el caché de un archivo específico abriendo el archivo usando CreateFile con las opciones FILE_FLAG_NO_BUFFERING y luego cerrando el identificador. Esto no está documentado y no sé si funciona en versiones posteriores de Windows, pero lo usé hace mucho tiempo al escribir código de prueba para comparar bibliotecas de compresión de archivos. No recuerdo si el acceso de lectura o escritura afectó este truco.
fuente
Una búsqueda rápida en Google ofrece estas opciones para Linux
sync && echo 1 > /proc/sys/vm/drop_caches
fuente
Puede encontrar una utilidad de línea de comando aquí
de la fuente:
fuente
con opción de aviso
POSIX_FADV_DONTNEED
:No se accederá a los datos especificados en un futuro próximo.
fuente
Encontré una técnica (además de reiniciar) que parece funcionar:
Sin embargo, no es selectivo. Idealmente, me gustaría poder borrar las porciones específicas de memoria que se utilizan para almacenar en caché los bloques de disco de los archivos que quiero que ya no se almacenen en caché.
fuente
Para una mejor vista de la caché del sistema de archivos de Windows XP, pruebe ATM de Tim Murgent , le permite ver tanto el tamaño del conjunto de trabajo de la caché del sistema de archivos como el tamaño de la lista en espera en una vista más detallada y precisa. Para Windows XP: necesita la versión antigua 1 de ATM, que está disponible para descargar aquí, ya que V2 y V3 requieren Server 2003, Vista o superior.
Observará que aunque Sysinternals Cacheset reducirá el "Cache WS Min", los datos reales aún continúan existiendo en forma de listas en espera desde donde se pueden usar hasta que se reemplacen con otra cosa. Para luego reemplazarlo con otra cosa, use una herramienta como MemAlloc o flushmem de Chad Austin o Consume.exe de las herramientas del Kit de recursos de Windows Server 2003 .
fuente
Dado que la cuestión también pidió para Linux, hay una respuesta relacionada aquí .
La herramienta de línea de comandos vmtouch permite agregar y eliminar archivos y directorios del caché de archivos del sistema, entre otras cosas.
fuente
Hay una llamada a la API de Windows https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize que se puede usar para vaciar el caché del sistema de archivos. También se puede utilizar para limitar el tamaño de la caché a un valor muy pequeño. Parece perfecto para este tipo de pruebas.
fuente