iBu*_*Bug 26 linux io devices null
我正在使用以下命令清空某些 Linux 4.x 操作系统上的硬盘驱动器:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
Run Code Online (Sandbox Code Playgroud)
我打开另一个 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
Run Code Online (Sandbox Code Playgroud)
的值IO_WBYTES看起来很正常,但IO_RBYTES保持在 4 KiB 并且永远不会改变。
例如,我运行了一些其他程序
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
Run Code Online (Sandbox Code Playgroud)
并且惊讶地发现它们中没有一个生成大量IO_RBYTESor IO_WBYTES。
我认为这不是特定于任何程序的,但是为什么不读取/dev/zero和写入以/dev/{zero,null}计为 I/O 字节?
Ste*_*itt 55
它们确实算作 I/O,但不属于您正在查看的字段所衡量的类型。
在 中htop,IO_RBYTES并IO_WBYTES显示来自read_bytes和 的write_bytes字段/proc/<pid>/io,这些字段测量通过块层的字节。/dev/zero不涉及块层,因此从中读取的内容不会出现在那里。
要查看来自 的 I/O /dev/zero,您需要查看 中的rchar和wchar字段/proc/<pid>/io,它们显示htop为RCHAR和WCHAR:
rchar : 读取的字符
此任务导致从存储中读取的字节数。这只是此进程传递给的字节
read(2)和类似系统调用的总和。它包括诸如终端 I/O 之类的内容,并且不受是否需要实际物理磁盘 I/O 的影响(读取可能已从页面缓存中得到满足)。wchar : 写入的字符
此任务已导致或将导致写入磁盘的字节数。与 rchar 类似的警告在这里也适用。
查看man 5 proc和man 1 htop了解详情。