iotop muestra 1.5 MB / s de escritura en disco, pero todos los programas tienen 0.00 B / s

18

No entiendo el iotopresultado: muestra ~ 1.5 MB / s de escritura en disco (arriba a la derecha), pero todos los programas tienen 0.00 B / s. ¿Por qué?

ingrese la descripción de la imagen aquí

El video fue tomado cuando estaba borrando el contenido de una carpeta con unos pocos millones de archivos usando perl -e 'for(<*>){((stat)[9]<(unlink))}' , en Kubuntu 14.04.3 LTS x64.

iotopfue lanzado usando sudo iotop.

Franck Dernoncourt
fuente

Respuestas:

22

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/iorcharwcharreadwritereadvwritevrecvsend
  • Los valores globales "reales" se leen /proc/vmstat, específicamente los valores pgpginy 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/fsde 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
1
Muy buena respuesta, gracias. ¿Recomendaría una forma más confiable de seguir la evolución de la salida?
Rui F Ribeiro
1
@RuiFRibeiro Puede ver qué archivo rm -rse está procesando actualmente ingiriéndolo strace, 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ón df -ile indica cuántos archivos se han procesado.
Gilles 'SO- deja de ser malvado'