Necesito hacerlo para una evaluación comparativa más predecible.Cómo depurar cachés de E/S de disco en Linux
Respuesta
Parece que desea el comando sync, o la función sync().
Si quieres disco caché de descarga: echo 3 | sudo tee /proc/sys/vm/drop_caches
'sync' es 100% no relacionado. Estoy hablando de cachés de lectura de varios GB de larga duración, cantidades no triviales de datos no escritos de corta duración con los que 'sync' trata (y que se escriben en el disco cada 10 segundos aproximadamente). – taw
¿Estás hablando de cachés de disco? Prueba 'echo 3 | sudo tee/proc/sys/vm/drop_caches' –
Acepto su comentario, pero eso no es posible. – taw
Desmontando y volver a montar el disco bajo prueba se restablecerá todas las cachés y tampones.
No siempre. Ejemplo: 'mount/dev/sda1/mnt', mire ahora la partición que abre'/dev/sda' (observe el '1' faltante), luego modifique un archivo bajo'/mnt'. Puede ver que esto no se refleja en '/ dev/sda', ya que utiliza diferentes cachés. 'umount/mnt' no ayuda en ese caso, ya que no afecta'/dev/sda', incluso eso es físicamente la misma unidad. – Tino
Puede hacerlo de esta manera:
# synC# (move data, modified through FS -> HDD cache) + flush HDD cache
# echo 3 > /proc/sys/vm/drop_caches # (slab + pagecache) -> HDD (https://www.kernel.org/doc/Documentation/sysctl/vm.txt)
# blockdev --flushbufs /dev/sda
# hdparm -F /dev/sda
# NEXT COMMAND IS NOT FOR BENCHMARKING:
# should be run before unplug, flushes everything possible guaranteed.
# echo 1 > /sys/block/sdX/device/delete
Es posible utilizar strace para ver que estos son tres llamadas al sistema diferentes
Además, puede ser deseable para desactivar la memoria caché del disco duro usando hdparm, no está seguro qué cosa estás evaluando
De ninguna manera, no puede evitar que HDD almacene en caché los últimos 64/32/16 MB de datos utilizados recientemente. Para matar ese caché, solo escriba una cierta cantidad de ceros (y purgue) + lea algún lugar no relacionado del HDD. Esto es necesario ya que la memoria caché se puede dividir en parte de lectura y parte de escritura. Después de eso, puedes comparar el HDD.
+1 'blockdev' era exactamente lo que estaba buscando. – Tino
'blockdev --flushbufs/dev/sda' funciona con mi unidad USB, pero no tiene ningún efecto con la unidad SATA SSD. 'echo 3 | sudo tee/proc/sys/vm/drop_caches' funciona con ambas unidades. –
El último comando elimina el disco del kernel. Definitivamente no podrá comparar el disco después (o utilizar el disco de ninguna manera) y si el disco está en uso, es peligroso. No hay ninguna razón para incluirlo junto con los otros comandos. Aquí hay un ejemplo de cuándo usar este comando y qué hace: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/removing_devices.html – ndemou
disco caché purga: documentación echo 3 | sudo tee /proc/sys/vm/drop_caches
Comando: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Escribiendo a esto hará que el kernel para caer en memoria caché limpias, dentries y ínodos de la memoria, haciendo que la memoria para ser libre.
Para pagecache libre:
echo 1 > /proc/sys/vm/drop_caches
Para dentries y tres inodos:
echo 2 > /proc/sys/vm/drop_caches
Para memoria intermedia de páginas libres, dentries y ínodos:
echo 3 > /proc/sys/vm/drop_caches
Como esta es una operación no destructiva, y los objetos sucios no son liberables, el usuario debe ejecutar primero la "sincronización" para asegurarse de que se liberen todos los objetos en caché.
Breve respuesta bastante buena: (copiar y pegar amigable)
DISK=/dev/sdX # <===ADJUST THIS===
sync
echo 3 > /proc/sys/vm/drop_caches
blockdev --flushbufs $DISK
hdparm -F $DISK
Explicación:
sync
: Desde la página del manual: amortiguadores del sistema de archivos de descarga. Fuerza los bloques cambiados a disco, actualiza el superbloque.
echo 3 > /proc/sys/vm/drop_cache
: from the kernel docsEsto hará que el núcleo descarte cachés limpias
blockdev --flushbufs /dev/sda
: desde la página del manual: ioctl de dispositivos de bloque llamada [a] amortiguadores de descarga.
hdparm -F /dev/sda
: desde la página del manual: Vaciar el búfer de caché de escritura en la unidad de disco (unidades más antiguas no pueden poner en práctica este)
Aunque los comandos blockdev y hdparm un aspecto similar según an answer above emiten diferentes ioctls a el dispositivo.
largo probablemente mejor manera:
(voy a suponer que usted ha formateado el disco, pero se puede adaptar estos comandos si desea escribir directamente en el disco)
Ejecutar sólo una vez antes de la primera referencia:
MOUNT=/mnt/test # <===ADJUST THIS===
dd if=/dev/urandom of=$MOUNT/temp-hddread.tmp bs=64M count=16
Ejecutar esto cada vez que desea vaciar la caché:
DISK=/dev/sdX # <===ADJUST THIS===
MOUNT=/mnt/test # <===AND THIS===
dd if=/dev/urandom of=$MOUNT/temp-hddwrite.tmp bs=64M count=16
rm $MOUNT/temp-hddwrite.tmp
sync
echo 3 > /proc/sys/vm/drop_caches
blockdev --flushbufs $DISK
hdparm -F $DISK
dd if=$MOUNT/temp-hddread.tmp of=/dev/null
Ejecuta esto cuando termines.
MOUNT=/mnt/test # <===ADJUST THIS===
rm $MOUNT/temp-hddread.tmp
Explicación:
El HDD puede tener H caches/W que no se borrará por los comandos anteriores. Estoy escribiendo y leyendo datos pseudoaleatorios para llenarlos de basura. La cantidad de datos depende de qué tan grande sea la memoria caché de HDD. Estoy usando/dev/urandom porque es rápido y no nos importa verdadero aleatoriedad. Estoy creando /mnt/test/temp-hddread.tmp desde el principio y lo uso cada vez que quiero leer suficientes datos aleatorios. Estoy creando y eliminando /mnt/test/temp-hddwrite.tmp cada vez que quiero escribir suficientes datos aleatorios.
Créditos
He escrito esta respuesta basada en las mejores partes de las respuestas existentes.
- 1. Cómo limpiar los cachés utilizados por el kernel de Linux
- 2. Lectura de sectores de disco duro en C++ en Linux
- 3. Emular un disco duro en Linux
- 4. Múltiples cachés en Memcached
- 5. Cómo depurar programas escritos en fasm en Linux usando gdb?
- 6. ¿Hay alguna herramienta para inspeccionar/depurar los contenidos de las cachés de Oracle Coherence?
- 7. Linux/C++ Cómo depurar la aplicación de lanzamiento
- 8. ¿Cómo usar múltiples cachés en los rieles?
- 9. ¿Cómo depurar el kernel de Linux con GDB y QEMU?
- 10. Cómo depurar Java -JNI usando GDB en Linux?
- 11. Cómo depurar un proceso colgado multiproceso en Linux?
- 12. Sistema de archivos Linux respaldado automáticamente por disco pero alojado por completo en la memoria?
- 13. . Cachés simples en memoria .Net
- 14. ¿Es posible escribir datos en el propio stdin en Linux
- 15. ¿Cómo se pueden vencer los cachés?
- 16. cómo almacenar un archivo en un bloque de disco continuo en Linux
- 17. ¿Cómo obtengo de manera programática el espacio libre en disco para un directorio en Linux?
- 18. ¿Cómo obtener el tamaño de archivo en el disco en Linux?
- 19. ¿Cómo averiguar el espacio libre en disco para una ruta determinada en un shell de Linux?
- 20. Depurar etapa previa a la descompresión del kernel de Linux
- 21. ¿Cuál es exactamente la "información" que los daps cachés?
- 22. Crear OpenSSL en Linux con -g para depurar
- 23. Uso de cachés de texturas OpenGL ES en lugar de glReadPixels para obtener datos de textura
- 24. ¿Cuál es el equivalente de ldd de Linux en Windows?
- 25. Cómo expirar el tiempo Cachés de fragmentos de rieles?
- 26. Cómo hacer que la GUI de Linux sea "utilizable" cuando hay mucha actividad de disco
- 27. Lógica en Desfragmantación de disco y comprobación de disco
- 28. ¿Es posible depurar Global.asax?
- 29. Clonación de disco rápido
- 30. ¿Cómo "hibernar" un proceso en Linux almacenando su memoria en el disco y restaurándola más tarde?
'sync' no lo está haciendo? – imm
'sync' está descargando, no purgando. – Tino