Iotop menunjukkan 1,5 MB / s disk write, tetapi semua program memiliki 0,00 B / s


18

Saya tidak mengerti iotopkeluaran: ini menunjukkan ~ 1,5 MB / s dari penulisan disk (kanan atas), tetapi semua program memiliki 0,00 B / s. Mengapa?

masukkan deskripsi gambar di sini

Video diambil saat saya menghapus konten folder dengan jutaan file yang digunakan perl -e 'for(<*>){((stat)[9]<(unlink))}' , pada Kubuntu 14.04.3 LTS x64.

iotopdiluncurkan menggunakan sudo iotop.

Jawaban:


22

Informasi yang ditunjukkan oleh iotop tidak dikumpulkan dengan cara yang sama untuk proses individu dan untuk sistem secara keseluruhan. Angka global "aktual" bukanlah jumlah dari angka per-proses (itulah "total").

Semua informasi dikumpulkan dari sistem file proc .

  • Untuk setiap proses, iotop membaca data dari , khususnya nilai dan . Ini adalah jumlah byte berlalu dalam dan panggilan sistem (termasuk varian seperti , , , , dll)./proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • Nilai "aktual" global dibaca dari /proc/vmstat, khususnya nilai pgpgindan pgpgout. Ini mengukur data yang dipertukarkan antara kernel dan perangkat keras (lebih tepatnya, ini adalah data yang dikocok oleh lapisan perangkat blok di kernel).

Ada banyak alasan mengapa data per-proses dan data lapisan perangkat blok berbeda. Khususnya:

  • Caching dan buffering berarti bahwa I / O terjadi pada satu lapisan mungkin tidak terjadi pada waktu yang sama, atau jumlah yang sama kali, pada lapisan lainnya. Misalnya, data yang dibaca dari cache dicatat sebagai pembacaan dari proses yang mengaksesnya, tetapi tidak ada pembacaan yang sesuai dari perangkat keras (yang sudah terjadi sebelumnya, mungkin atas nama proses lain).
  • Data tingkat proses mencakup pertukaran data pada pipa, soket, dan input / output lainnya yang tidak melibatkan disk yang mendasarinya atau perangkat blok lainnya.
  • Data tingkat proses hanya menyumbang konten file, bukan metadata.

Perbedaan terakhir itu menjelaskan apa yang Anda lihat di sini. Menghapus file hanya memengaruhi metadata, bukan data, jadi prosesnya tidak menulis apa pun. Mungkin membaca isi direktori untuk membuat daftar file yang akan dihapus, tapi itu cukup kecil sehingga dapat bergulir tanpa diketahui.

Saya tidak berpikir Linux menawarkan cara untuk memantau pembaruan metadata file. Anda dapat memonitor I / O sistem per-file melalui entri di bawah /sys/fsuntuk beberapa sistem file. Saya tidak berpikir Anda dapat memperhitungkan metadata I / O terhadap proses tertentu, akan sangat rumit untuk dilakukan dalam kasus umum karena beberapa proses dapat menyebabkan metadata yang sama dibaca atau diubah.


1
Jawaban yang cukup bagus, terima kasih. Apakah Anda menyarankan cara yang lebih dapat diandalkan untuk mengikuti evolusi output?
Rui F Ribeiro

1
@RuiFRibeiro Anda dapat menonton file mana rm -ryang sedang diproses straceolehnya, tetapi itu tidak akan memberi Anda perkiraan persentase penyelesaian yang sangat berguna karena urutan traversal di setiap direktori agak tidak dapat diprediksi. Jika hanya ada satu operasi besar yang terjadi di sistem file itu, dan tidak ada terlalu banyak tautan keras yang terlibat, menonton df -imemberi tahu Anda berapa banyak file yang telah diproses.
Gilles 'SANGAT berhenti menjadi jahat'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.