2009-06-12

Limpiar caché de disco en GNU/Linux

Para evitar el efecto que el caché de disco tiene sobre los tests de rendimiento de findrepe he tenido que encontrar una forma de evitar dicho caché. De momento sólo se me han ocurrido dos formas:

  1. Saturar el caché - Si el caché tiene un máximo de 3GB, sólo es necesario leer 3GB para que al comenzar el test nuevamente, no se noten los efectos del caché de disco. Si el programa se interrumpe, o no se llega a dicho tamaño no funcionará. He usado este método varias noches y aunque cumple perfectamente su función en cualquier sistema operativo, no es óptimo puesto que saturar el caché requiere bastante tiempo.

  2. Limpiar el caché - Dado que, excepto en el trabajo, desarrollo en GNU/Linux, existe otra posibilidad para núcleos 2.6.16 o posteriores usar /proc/sys/vm/drop_caches

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

    • Liberar dentries e inodes
      echo 2 > /proc/sys/vm/drop_caches

    • Liberar pagecache, dentries e inodes
      echo 3 > /proc/sys/vm/drop_caches

    • No liberar nada
      echo 0 > /proc/sys/vm/drop_caches



Dado que sólo root tiene permiso para realizar esta operación será necesario hacerlo como root. Además esta operación sólo libera las páginas que ya están sincronizadas con el disco, por lo que se recomienda el uso de sync

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


Para verificar el resultado de la operación podemos usar

free -mo


un ejemplo del resultado antes de la operación

total used free shared buffers cached
Mem: 3033 1842 1191 0 72 889
Swap: 9538 0 9538

despues de la operación
total used free shared buffers cached
Mem: 3033 1011 2022 0 0 143
Swap: 9538 0 9538


Y puesto que es especifica de Linux (no de sistemas GNU) mi recomendación para los que usan windows es, ¡¡¡Cambiad a GNU/Linux!!!

2 comentarios:

Juan Luis Ortega dijo...

Si, y como utilizo los juegos de windows, como el call of duty 4...el crysis...os gastais un moton de dinero en equipo para no utilizarlos :)

flikxxi dijo...

yo no juego a esas cosas, aunque el call of duty 2 (que no el 4) sí puedes jugarlo con codewavers.

lo de infrautilizar el equipo, si es cierto en tiempo, no en potencia, a veces uso varias cosas a la vez, que se comerian sobradamente mi equipo anterior obligandome ha hacerlo secuencialmente.