iotop mostra 1,5 MB / s di scrittura su disco, ma tutti i programmi hanno 0,00 B / s


18

Non capisco l' iotopoutput: mostra ~ 1,5 MB / s di scrittura su disco (in alto a destra), ma tutti i programmi hanno 0,00 B / s. Perché?

inserisci qui la descrizione dell'immagine

Il video è stato preso mentre stavo eliminando il contenuto di una cartella con alcuni milioni di file usando perl -e 'for(<*>){((stat)[9]<(unlink))}' , su Kubuntu 14.04.3 LTS x64.

iotopè stato lanciato utilizzando sudo iotop.

Risposte:


22

Le informazioni mostrate da iotop non sono raccolte allo stesso modo per i singoli processi e per il sistema nel suo insieme. Le cifre globali "reali" non sono la somma delle cifre per processo (questo è ciò che è "totale").

Tutte le informazioni sono raccolte dal filesystem proc .

  • Per ogni processo, iotop legge i dati , in particolare i valori e . Questi sono il numero di byte passati in e chiamate di sistema (incluse le varianti come , , , , ecc)./proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • I valori globali "attuali" vengono letti /proc/vmstat, in particolare i valori pgpgine pgpgout. Questi misurano i dati scambiati tra il kernel e l'hardware (più precisamente, questi sono i dati mescolati dal livello del dispositivo a blocchi nel kernel).

Ci sono molte ragioni per cui i dati per processo e i dati del layer del dispositivo a blocchi differiscono. In particolare:

  • La memorizzazione nella cache e il buffering indicano che l'I / O che si verifica in un livello potrebbe non avvenire contemporaneamente o nello stesso numero di volte nell'altro livello. Ad esempio, i dati letti dalla cache sono contabilizzati come una lettura dal processo che vi accede, ma non esiste una lettura corrispondente dall'hardware (già avvenuta in precedenza, possibilmente per conto di un altro processo).
  • I dati a livello di processo includono i dati scambiati su pipe, socket e altri input / output che non coinvolgono un disco sottostante o un altro dispositivo a blocchi.
  • I dati a livello di processo tengono conto solo del contenuto del file, non dei metadati.

L'ultima differenza spiega cosa stai vedendo qui. La rimozione dei file influisce solo sui metadati, non sui dati, quindi il processo non sta scrivendo nulla. È possibile che stia leggendo il contenuto della directory per elencare i file da eliminare, ma è abbastanza piccolo da poter scorrere inosservato.

Non credo che Linux offra alcun modo per monitorare gli aggiornamenti dei metadati dei file. È possibile monitorare l'I / O /sys/fsper file system tramite le voci in alcuni file system. Non penso che sia possibile tenere conto dell'I / O dei metadati rispetto a processi specifici, sarebbe molto complicato farlo nel caso generale poiché più processi potrebbero causare la lettura o la modifica degli stessi metadati.


1
Bella risposta, grazie. Consiglieresti un modo più affidabile per seguire l'evoluzione dell'output?
Rui F Ribeiro,

1
@RuiFRibeiro Puoi vedere quale file rm -rè attualmente in fase di elaborazione inserendolo strace, ma ciò non ti darà una stima molto utile della percentuale di completamento poiché l'ordine di attraversamento in ogni directory è alquanto imprevedibile. Se in quel file system è in corso solo un'operazione massiccia e non sono coinvolti troppi collegamenti fisici, guardare df -iti dice quanti file sono stati elaborati.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.