Borrar la caché de archivos para repetir las pruebas de rendimiento


¿Qué herramientas o técnicas puedo usar para eliminar el contenido de los archivos almacenados en caché para evitar que mis resultados de rendimiento sean sesgados? Creo que necesito borrar completamente o eliminar selectivamente la información almacenada en caché sobre el contenido de los 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 sean caché.

Deseo eliminar la variabilidad que veo en el tiempo de E / s cuando repito la tarea de perfilar diferentes estrategias para hacer el trabajo de procesamiento de archivos.

Estoy principalmente interesado en soluciones para Windows XP, ya que es mi principal máquina de desarrollo, pero también puedo probar usando Linux, y por lo tanto estoy interesado en respuestas para ese entorno también.

Probé SysInternals CacheSet , pero hacer clic en "Borrar" no resulta en 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 un par de veces.

Author: tvanfosson, 2009-01-26

8 answers

Use la aplicación RamMap de SysInternal .

rammap vacío en espera

La opción de menú Vacío / Lista de espera vacía borrará la caché de archivos de Windows.

 75
Author: smallest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-13 05:05:44

Un rápido googleo da estas opciones para Linux

  1. Desmonte y monte la partición que contiene los archivos
  2. sync && echo 1 > /proc/sys/vm/drop_caches
 13
Author: John Nilsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-06 13:44:54

Para Windows XP, debería poder borrar la caché de un archivo específico abriendo el archivo usando CreateFile con las opciones FILE_FLAG_NO_BUFFERING y luego cerrando el handle. Esto no está documentado, y no se si funciona en versiones posteriores de Windows, pero utilicé esto 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.

 13
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-18 19:40:11

He encontrado una técnica (aparte de reiniciar) que parece funcionar:

  1. Ejecute algunas copias de MemAlloc
  2. Con cada uno, asignar grandes trozos de memoria un par de veces
  3. Utilice Process Explorer para observar el tamaño de la Caché del Sistema reduciendo a niveles muy bajos
  4. Salga de los programas de MemAlloc

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 almacene en caché.

 3
Author: Stephen Denne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-26 01:22:48
 #include <fcntl.h>

int posix_fadvise(int fd, off_t offset, off_t len, int advice);

Con opción de asesoramiento POSIX_FADV_DONTNEED:
Los datos especificados no serán accedidos en un futuro próximo.

 3
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-07 03:48:50

Para una vista mucho mejor 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 de espera en una vista más detallada y precisa. Para Windows XP-necesita la antigua versión 1 de ATM que está disponible para descargar aquí desde V2 y V3 requieren Server 2003,Vista o superior.

Observarás que aunque el Cacheset Sysinternals reducirá el " Cache WS Min " - los datos reales siguen existiendo en forma de listas de espera desde donde se pueden utilizar hasta que se han sustituido por otra cosa. Para reemplazarlo con otra cosa, use una herramienta como MemAlloc o flushmem de Chad Austin o Consuma.exe de las Herramientas del Kit de Recursos de Windows Server 2003 .

 3
Author: robertcollier4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-20 19:00:55

Se puede encontrar una utilidad de línea de comandos aquí

De la fuente:

EmptyStandbyList.exe es una herramienta de línea de comandos para Windows (Vista y arriba) que puede vaciar:

  • conjuntos de trabajo de proceso,
  • la lista de páginas modificadas,
  • las listas de espera (prioridades 0 a 7), o
  • la lista de espera de prioridad 0 solamente.

Uso:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
 1
Author: Edwin van Mierlo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-04 12:26:46

Como la pregunta también se hizo para Linux, hay una respuesta relacionada aquí.

La herramienta de línea de comandos vmtouch permite agregar y eliminar archivos y directorios de la caché de archivos del sistema, entre otras cosas.

 0
Author: seeker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-14 12:10:45