Linux

iotop 顯示 1.5 MB/s 的磁碟寫入,但所有程序都有 0.00 B/s

  • January 12, 2017

我不明白iotop輸出:它顯示約 1.5 MB/s 的磁碟寫入(右上角),但所有程序都有 0.00 B/s。為什麼?

在此處輸入圖像描述

該影片是在我使用 perl -e 'for(<*>){((stat)[9]<(unlink))}'Kubuntu 14.04.3 LTS x64 刪除包含數百萬個文件的文件夾內容時拍攝的。

iotop使用sudo iotop.

iotop 顯示的資訊對於單個程序和整個系統的收集方式不同。“實際”全域數字不是每個程序數字的總和(這就是“總計”的含義)。

所有資訊都是從proc 文件系統收集的。

  • 對於每個程序,iotop 從 中讀取數據,特別是和值。這些是傳入的字節數和系統呼叫(包括變體,如、、、等)。/proc/*PID*/io``rchar``wchar``read``write``readv``writev``recv``send
  • 全域“實際”值是從 中讀取的/proc/vmstat,特別是pgpginpgpgout值。這些測量核心和硬體之間交換的數據(更準確地說,這是核心中的塊設備層打亂的數據)。

每個程序數據和塊設備層數據不同的原因有很多。尤其:

  • 記憶體和緩衝意味著在一層發生的 I/O 可能不會在另一層同時發生或發生相同的次數。例如,從記憶體中讀取的數據被認為是從訪問它的程序中讀取的,但沒有從硬體中相應的讀取(之前已經發生過,可能代表另一個程序)。
  • 程序級數據包括在不涉及底層磁碟或其他塊設備的管道、套接字和其他輸入/輸出上交換的數據。
  • 程序級數據只考慮文件內容,而不考慮元數據。

最後一個區別解釋了您在這裡看到的內容。刪除文件只會影響元數據,不會影響數據,因此該過程不會寫入任何內容。它可能正在讀取目錄內容以列出要刪除的文件,但這足夠小以至於它可能會在不被注意的情況下滾動。

我不認為 Linux 提供任何方法來監視文件元數據更新。/sys/fs您可以通過某些文件系統下的條目來監控每個文件系統的 I/O 。我認為您不能針對特定程序計算元數據 I/O,在一般情況下這樣做會非常複雜,因為多個程序可能會導致讀取或更改相同的元數據。

引用自:https://unix.stackexchange.com/questions/248197