La información mostrada por iotop no se recopila de la misma manera para procesos individuales y para el sistema en su conjunto. Las cifras globales "reales" no son la suma de las cifras por proceso (eso es lo que es "total").
Toda la información se recopila del sistema de archivos proc .
- Para cada proceso, iotop lee datos de , específicamente los valores y . Estos son el número de bytes aprobadas en y llamadas al sistema (incluyendo variantes tales como , , , , etc.).
/proc/PID/io
rchar
wchar
read
write
readv
writev
recv
send
- Los valores globales "reales" se leen
/proc/vmstat
, específicamente los valores pgpgin
y pgpgout
. Estos miden los datos intercambiados entre el kernel y el hardware (más precisamente, estos son los datos que la capa del dispositivo de bloques revuelve en el kernel).
Hay muchas razones por las cuales los datos por proceso y los datos de la capa del dispositivo de bloque difieren. En particular:
- El almacenamiento en caché y el almacenamiento en búfer significan que las E / S que ocurren en una capa pueden no estar ocurriendo al mismo tiempo, o la misma cantidad de veces, en la otra capa. Por ejemplo, los datos leídos de la memoria caché se contabilizan como una lectura del proceso que accede a ella, pero no hay una lectura correspondiente del hardware (que ya sucedió anteriormente, posiblemente en nombre de otro proceso).
- Los datos a nivel de proceso incluyen datos intercambiados en tuberías, enchufes y otras entradas / salidas que no involucran un disco subyacente u otro dispositivo de bloque.
- Los datos de nivel de proceso solo representan el contenido del archivo, no los metadatos.
Esa última diferencia explica lo que estás viendo aquí. La eliminación de archivos solo afecta a los metadatos, no a los datos, por lo que el proceso no escribe nada. Puede estar leyendo el contenido del directorio para enumerar los archivos a eliminar, pero eso es lo suficientemente pequeño como para que pueda pasar desapercibido.
No creo que Linux ofrezca ninguna forma de monitorear las actualizaciones de metadatos de archivos. Puede monitorear las E / S por sistema de archivos a través de las entradas /sys/fs
de algunos sistemas de archivos. No creo que pueda contabilizar E / S de metadatos en procesos específicos, sería muy complicado hacerlo en el caso general, ya que múltiples procesos podrían estar causando la lectura o el cambio de los mismos metadatos.
Gilles 'SO- deja de ser malvado'
fuente
rm -r
se está procesando actualmente ingiriéndolostrace
, pero eso no le dará una estimación muy útil del porcentaje de finalización ya que el orden de recorrido en cada directorio es algo impredecible. Si solo hay una operación masiva en ese sistema de archivos, y no hay demasiados enlaces duros involucrados, la observacióndf -i
le indica cuántos archivos se han procesado.