iotopは1.5 MB / sのディスク書き込みを示しますが、すべてのプログラムには0.00 B / sがあります


18

iotop出力がわかりません。約1.5 MB / sのディスク書き込み(右上)が表示されますが、すべてのプログラムには0.00 B / sがあります。どうして?

ここに画像の説明を入力してください

このビデオは、Kubuntu 14.04.3 LTS x64 で、数百万のファイル 含むフォルダーのコンテンツをを使用して削除するときに撮影されましたperl -e 'for(<*>){((stat)[9]<(unlink))}'

iotopを使用して起動されましたsudo iotop

回答:


22

iotopが表示する情報は、個々のプロセスやシステム全体について同じ方法で収集されるわけではありません。「実際の」グローバル数値は、プロセスごとの数値の合計ではありません(これが「合計」です)。

すべての情報は、procファイルシステムから収集されます

  • プロセスごとに、iotopはからデータを読み取り、具体的にはおよび値を読み取ります。これらは、渡されたバイトの数であると(例えば、変異体を含むシステムコール、、、、など)。/proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • グローバルな「実際の」値は/proc/vmstat、具体的にpgpginおよびから読み取られpgpgoutます。これらは、カーネルとハードウェアの間で交換されるデータを測定します(より正確には、これはカーネル内のブロックデバイスレイヤーによってシャッフルされるデータです)。

プロセスごとのデータとブロックデバイスレイヤーのデータが異なる理由は多数あります。特に:

  • キャッシングとバッファリングは、1つの層で発生するI / Oが他の層で同時に、または同じ回数で発生しない可能性があることを意味します。たとえば、キャッシュから読み取られたデータは、キャッシュにアクセスするプロセスからの読み取りとしてカウントされますが、ハードウェアからの対応する読み取りはありません(以前に、おそらく別のプロセスのために行われた)。
  • プロセスレベルのデータには、パイプ、ソケット、および基盤となるディスクやその他のブロックデバイスを含まないその他の入出力で交換されるデータが含まれます。
  • プロセスレベルのデータはファイルの内容のみを考慮し、メタデータは考慮しません。

最後の違いが、ここで見ているものを説明しています。ファイルを削除してもメタデータのみが影響を受け、データは影響を受けないため、プロセスは何も書き込みません。削除するファイルをリストするためにディレクトリの内容を読み込んでいる可能性がありますが、それは気付かないうちにスクロールするほど小さいものです。

Linuxがファイルメタデータの更新を監視する方法を提供するとは思わない。/sys/fs一部のファイルシステムでは、エントリを介してファイルシステムごとのI / Oを監視できます。特定のプロセスに対してメタデータI / Oを説明することはできないと思います。複数のプロセスが同じメタデータを読み取ったり変更したりする可能性があるため、一般的な場合は非常に複雑になります。


1
とてもいい答えです、ありがとう。出力の進化を追跡するより信頼性の高い方法をアドバイスしますか?
ルイFリベイロ

1
@RuiFRibeiroどのファイルrm -rが現在処理されているかを確認することで確認できますがstrace、各ディレクトリでのトラバーサルの順序はいくぶん予測不可能であるため、完了率の非常に有用な推定値は得られません。そのファイルシステムで進行中の大規模な操作が1つだけで、ハードリンクがあまり多くないdf -i場合、監視は処理されたファイルの数を示します。
ジル「SO-悪であるのをやめる」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.