Medición del uso de E / S de disco de un programa

12

time es un comando brillante si desea calcular cuánto tiempo de CPU tarda un comando determinado.

Estoy buscando algo similar que pueda medir la E / S de disco del programa y cualquier niño. Preferiblemente, debe distinguir entre las E / S que se almacenaron en caché (y, por lo tanto, no hicieron que el disco gire) y las E / S que no se almacenaron en caché.

Entonces me gustaría hacer:

iomeassure my_program my_args

y obtener una salida similar a:

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

He mirado vmstat, iostaty sar, pero ninguno de ellos está mirando a un solo proceso. En cambio, miran todo el sistema.

Lo he mirado iotop, pero eso solo me da una vista en este instante.

--- editar ---

la respuesta de snap parece cercana.

'Entradas del sistema de archivos:' son las lecturas no almacenadas en caché en bloques de 512 bytes.

'Salidas del sistema de archivos:' son las escrituras almacenadas en caché en bloques de 512 bytes.

Puede forzar el caché vacío con:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

Probé con:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'
Ole Tange
fuente

Respuestas:

9

No especificó qué sistema operativo utiliza.

Linux

En lugar de usar time foocuál es (generalmente) un shell incorporado, puede probar el comando externo /usr/bin/time foo. Proporciona información adicional, como la cantidad de entradas y salidas del sistema de archivos (pero no información sobre los aciertos de caché o las cantidades de bytes). Ver man timey man getrusagepara más instrucciones.

Tenga en cuenta que esta característica requiere el kernel de Linux versión 2.6.22 o posterior.

FreeBSD

Uso /usr/bin/time -l foo. Da el número de entradas y salidas. Ver man timey man getrusagepara más instrucciones.

chasquido
fuente