出力がわかりませんiotop
。約1.5MB / sのディスク書き込み(右上)が表示されますが、すべてのプログラムは0.00B / sを取得します。なぜ?
この画像は、何百万ものファイルを含むフォルダの内容を削除している間に撮影されたものです。使用 perl -e 'for(<*>){((stat)[9]<(unlink))}'
、Kubuntu 14.04.3 LTS x64。
iotop
を使用することですsudo iotop
。
答え1
iotopに表示される情報は、個々のプロセスとシステム全体で異なる方法で収集されます。 「実際の」グローバルデータは、各プロセスデータの合計(つまり「全体」)ではありません。
すべての情報は以下から収集されます。プロセスファイルシステム。
- 各プロセスについて、iotop は iotop からデータ、特に合計値を読み込みます。渡されたバイト数とシステム呼び出し(、、、、などのバリアントを含む)です。
/proc/PID/io
rchar
wchar
read
write
readv
writev
recv
send
- グローバル「実際の」値
/proc/vmstat
、特にpgpgin
合計pgpgout
値を読み取ります。カーネルとハードウェアの間で交換されるデータを測定します(より正確には、カーネルのブロックデバイス層で混在したデータです)。
プロセス固有データとブロックデバイス階層データが異なる理由はいくつかあります。特に:
- キャッシュとバッファリングは、ある階層で発生するI / Oが他の階層で同時にまたは同じ回数で発生しない可能性があることを意味します。たとえば、キャッシュから読み取られたデータはそれにアクセスするプロセスから読み取られたと見なされますが、ハードウェアではその読み取りはありません(以前は他のプロセスに代わって発生した可能性があります)。
- プロセスレベルのデータには、基本ディスクや他のブロックデバイスを含まないパイプ、ソケット、およびその他の入出力で交換されるデータが含まれます。
- プロセスレベルのデータは、メタデータではなくファイルコンテンツのみを考慮します。
この最後の違いは、ここに表示される内容を説明します。ファイルを削除すると、データではなくメタデータにのみ影響するため、プロセスには何も記録されません。削除するファイルを一覧表示するためにディレクトリの内容を読み取ることもできますが、目立たないようにスクロールできるほど小さいサイズです。
私はLinuxがファイルメタデータの更新を監視する方法を提供していないと思います。/sys/fs
特定のファイルシステムの下の項目を使用して、各ファイルシステムのI / Oを監視できます。特定のプロセスのメタデータI / Oを計算することはできないと思います。複数のプロセスが同じメタデータを読み取ったり変更したりする可能性があるため、一般的な場合はそうすることは非常に複雑です。