Linux
為什麼不從 /dev/zero 讀取算作 IO_RBYTES?
我正在使用以下命令清空某些 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_RBYTES
orIO_WBYTES
。我認為這不是特定於任何程序的,但為什麼不讀取
/dev/zero
和寫入/dev/{zero,null}
算作 I/O 字節呢?
它們確實算作 I/O,但不屬於您正在查看的欄位所衡量的類型。
在
htop
,IO_RBYTES
和IO_WBYTES
中顯示read_bytes
和write_bytes
欄位/proc/<pid>/io
,這些欄位測量通過塊層的字節。/dev/zero
不涉及塊層,因此從中讀取的內容不會出現在那裡。要查看來自 的 I/O
/dev/zero
,您需要查看 中的rchar
andwchar
欄位/proc/<pid>/io
,它們顯示htop
為RCHAR
andWCHAR
:rchar : 讀取的字元
此任務導致從儲存中讀取的字節數。這只是該程序傳遞給
read(2)
和類似系統呼叫的字節的總和。它包括諸如終端 I/O 之類的東西,並且不受是否需要實際的物理磁碟 I/O 的影響(可能已經從頁面記憶體中滿足了讀取)。wchar : 寫入的字元
此任務已導致或將導致寫入磁碟的字節數。與 rchar 類似的警告在這裡適用。
有關詳細資訊,請參見
man 5 proc
和man 1 htop
。