Linux

為什麼不從 /dev/zero 讀取算作 IO_RBYTES?

  • March 9, 2019

我正在使用以下命令清空某些 Linux 4.x 作業系統上的硬碟:

sudo sh -c 'pv -pterb /dev/zero > /dev/sda'

我打開另一個 tty 並開始sudo htop並註意到這一點:

 PID USER      PRI  NI CPU%   RES   SHR   IO_RBYTES   IO_WBYTES S   TIME+  Command
4598 root       20   0 15.5  1820  1596        4096    17223823 D  1:14.11 pv -pterb /dev/zero

的值IO_WBYTES看起來很正常,但IO_RBYTES保持在 4 KiB 並且從未改變。

我執行了一些其他程序,例如

dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero

並且驚訝地發現它們都沒有產生很多IO_RBYTESor IO_WBYTES

我認為這不是特定於任何程序的,但為什麼不讀取/dev/zero和寫入/dev/{zero,null}算作 I/O 字節呢?

它們確實算作 I/O,但不屬於您正在查看的欄位所衡量的類型。

htopIO_RBYTESIO_WBYTES中顯示read_byteswrite_bytes欄位/proc/<pid>/io,這些欄位測量通過塊層的字節。/dev/zero不涉及塊層,因此從中讀取的內容不會出現在那裡。

要查看來自 的 I/O /dev/zero,您需要查看 中的rcharandwchar欄位/proc/<pid>/io,它們顯示htopRCHARand WCHAR

rchar : 讀取的字元

此任務導致從儲存中讀取的字節數。這只是該程序傳遞給read(2)和類似系統呼叫的字節的總和。它包括諸如終端 I/O 之類的東西,並且不受是否需要實際的物理磁碟 I/O 的影響(可能已經從頁面記憶體中滿足了讀取)。

wchar : 寫入的字元

此任務已導致或將導致寫入磁碟的字節數。與 rchar 類似的警告在這裡適用。

有關詳細資訊,請參見man 5 procman 1 htop

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