2008-10-02 15 views
5

Cuando se ejecutan pruebas de rendimiento, el "caché" del sistema de archivos puede afectar significativamente los resultados de las pruebas. Por lo tanto, en general, antes de ejecutar dichas pruebas, los archivos utilizados se expulsan de la memoria caché del sistema. ¿Cómo hacer eso en Linux?¿Cómo desalojar el archivo de la memoria caché del sistema en Linux?

aclaración: Si es posible, la solución no debería requerir privilegios de administrador.

Respuesta

9

Ha, tengo la respuesta:

#include <unistd.h> 
#include <fcntl.h> 
int main(int argc, char *argv[]) { 
    int fd; 
    fd = open(argv[1], O_RDONLY); 
    fdatasync(fd); 
    posix_fadvise(fd, 0,0,POSIX_FADV_DONTNEED); 
    close(fd); 
    return 0; 
} 

Esto es de http://insights.oetiker.ch/linux/fadvise.html

11

Como superusuario puede hacer lo siguiente:

Para pagecache libre:

  • echo 1>/proc/sys/vm/drop_caches

Para dentries y tres inodos:

  • eco 2>/proc/sys/vm/drop_caches

Para memoria intermedia de páginas libres, dentries y ínodos:

  • Echo 3>/proc/sys/vm/drop_caches

Esta operación no va a "perder" cualquier dato (cachés se escriben en disco antes de que se eliminen sus datos), sin embargo, para asegurarse de que todo el caché esté limpio, primero debe sincronizar. P.ej. todos los cachés deben borrarse si se ejecuta

sync; echo 3 > /proc/sys/vm/drop_caches 

Como he dicho, sólo un superusuario (root) puede hacerlo.

0

En cuanto al uso de O_DIRECT: eso perturbaría los resultados de otra manera. El núcleo intentará DMA los datos del sistema de archivos directamente en su memoria intermedia de lectura(), por lo que puede entregarse a su aplicación sin que se realice ninguna copia adicional. Sin O_DIRECT el núcleo DMAs los datos del archivo en la memoria caché de la página, y los copia de la memoria caché de la página a su buffer de lectura().

Esto está bien si su aplicación realmente va a usar O_DIRECT en producción. Si ejecuta pruebas de rendimiento con O_DIRECT y luego elimina O_DIRECT para producción, su prueba de rendimiento no será realista.

-1

Si usted puede poner los datos de prueba en un sistema de archivos por separado y luego montar el sistema de ficheros de nuevo para la prueba le dará cachés vacías .

Si lista del fileystem prueba en/etc/fstab con la opción "usuario", entonces se puede montar para la prueba sin ser superusuario

Cuestiones relacionadas