我正在使用以下命令清空某些 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
or IO_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
:有关详细信息,请参见
man 5 proc
和man 1 htop
。