我正在使用以下命令清空某些Linux 4.x OS上的硬盘驱动器:
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
或大量的细菌IO_WBYTES
。
我认为这并非特定于任何程序,但是为什么不读取/dev/zero
和写入/dev/{zero,null}
计数为I / O字节呢?
5
我很好奇,为什么您认为它们应该算作I / O?
—
marcelm
@marcelm我认为任何输入/输出都应计为I / O,包括文件R / W,网络I / O等。
—
iBug
但是这些操作对硬件(分别是磁盘和网卡)执行I / O ,并且必须通过某些I / O总线(例如PCI-express)进行传输,所有这些都会成为很大的瓶颈。写,例如,
—
marcelm
/dev/null
不要最终与此类硬件接口,也不要阻塞I / O总线。极端的 是对内存的读取/写入还是I / O?当然,对这些事情没有硬性描述,这全都取决于您对这些事情的看法,以及这种看法最终对您有用的程度。
请注意,我的第一条评论旨在引起您(和其他人)对这些观点的思考,并找出您为什么采纳您的观点。我并不是要暗示你错了;我什至认为情况并非如此。但就我个人而言,我对实际硬件(很可能是瓶颈)的I / O统计信息要比对
—
marcelm
/dev/{null,zero}
(通常不是瓶颈)感兴趣。不过,这只是我的观点:)
@marcelm但我最初以为任何
—
iBug
read(2)
和write(2)
计数为I / O,这是它自己的意义非常合理的。