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

106

¿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.

Stephen Denne
fuente
1
¿Por qué se eliminó esta pregunta ?
Dan Dascalescu

Respuestas:

82

Utilice la aplicación RAMMap de SysInternal .

rammap vacío en espera

La opción de menú Empty / Empty Standby List borrará el caché de archivos de Windows.

pequeñísimo
fuente
2
RAMMap no se ejecuta en Windows XP. ¿Esas opciones de menú hacen algo diferente al botón "Borrar" en la aplicación SysInternals Cacheset?
Stephen Denne
@stephen ¡esta técnica funcionó perfectamente para mí en Windows 8! Windows XP tiene ahora 12 años, ¿alguna razón por la que no puede probar esto en Vista, Windows 7 o Windows 8?
Jeff Atwood
@Jeff Ya no trabajo con esas limitaciones. Entonces, "Vaciar lista en espera" da como resultado la siguiente lectura de un archivo leído recientemente que requiere E / S de disco.
Stephen Denne
2
Presione F5 para actualizar la lista de archivos después de hacer clic en la lista de espera vacía
JoshG
3
Para obtener un enfoque programático, consulte esta publicación de SO: stackoverflow.com/a/23085045/430360
snemarch
16

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
Funciona perfectamente para mí en Windows 7 SP1, x64. ¡Buen consejo!
cxxl
2
¿Entonces eso debe repetirse para cada archivo ? Entonces, si, por ejemplo, copia un directorio que contiene 100 MB repartidos en 30 archivos en 10 subdirectorios, ¿debe abrir todos y cada uno por separado para asegurarse de leer el disco real en lugar del caché?
Synetech
Otras respuestas en el sitio afirman que esto también funciona en Win7 y 8. Supongo que funciona en vista. Y sí, tiene que ejecutarlo en cada archivo, pero no lleva tanto tiempo. Todo lo que necesita hacer es abrir y cerrar cada archivo, y cuando cierra, Windows borra el caché. Después de hacer esto, ENTONCES ejecuta su prueba de rendimiento.
Mooing Duck
1
Esta fue una respuesta perfecta. Simple de codificar, efectivo y debería funcionar en la mayoría de los sistemas operativos Windows (incluido XP, solo lo he probado en Win7x64). Abrí los archivos con privilegios de lectura y sin compartir. No estoy seguro de qué combinación importa.
Rosco
Funcionalidad similar en Linux (2.4.10 en adelante) con el indicador O_DIRECT en la llamada al sistema open (2). Bueno, más precisamente, por lo que tengo entendido, O_DIRECT no borra el caché de ese archivo, trata de evitarlo.
kaiwan
14

Una búsqueda rápida en Google ofrece estas opciones para Linux

  1. Desmontar y montar la partición que contiene los archivos
  2. sync && echo 1 > /proc/sys/vm/drop_caches
John Nilsson
fuente
2
Gracias, parece muy útil, aunque posiblemente me gustaría hacer eco de 3 en lugar de 1. Estoy principalmente interesado en Windows XP, por eso no lo había encontrado en mi búsqueda en Google.
Stephen Denne
Desafortunadamente, el entorno Linux en el que pude hacer uso de esto tiene la versión 2.6.9 del kernel. drop_caches se agregó en el kernel 2.6.16
Stephen Denne
Muchas otras publicaciones que he leído sugieren que puede desmontar y montar el sistema de archivos para eliminar todos los elementos chached para él, supongo que ese fue el caso antes de 2.6.16, así como en los núcleos más recientes.
Taft
12

Puede encontrar una utilidad de línea de comando aquí

de la fuente:

EmptyStandbyList.exe es una herramienta de línea de comandos para Windows (Vista y superior) 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
Edwin van Mierlo
fuente
3
Respuesta altamente subestimada en medio de todo el ruido, utilidad simple que hace un trabajo y lo hace bien. Probablemente debería incluir más detalles en la respuesta para obtener los votos a favor que se merece.
Prometeo
3

Encontré una técnica (además de reiniciar) que parece funcionar:

  1. Ejecute algunas copias de MemAlloc
  2. Con cada uno, asigne grandes cantidades de memoria varias veces
  3. Utilice Process Explorer para observar la reducción del tamaño de la caché del sistema a niveles muy bajos
  4. Salir de los programas 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 almacenen en caché.

Stephen Denne
fuente
Eso tiene el efecto secundario de introducir cosas en el archivo de paginación, lo que matará el rendimiento durante bastante tiempo después. Si va a recurrir a un kludge, entonces puede simplemente leer algún otro archivo grande; al menos eso solo borra el caché del disco y nada más.
Synetech
3

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 .

robertcollier4
fuente
0

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.

buscador
fuente