iotop 显示 1.5 MB/s 的磁盘写入,但所有程序都有 0.00 B/s

Fra*_*urt 24 linux process monitoring io

我不明白iotop输出:它显示大约 1.5 MB/s 的磁盘写入(右上角),但所有程序都有 0.00 B/s。为什么?

在此处输入图片说明

该视频是在我使用 perl -e 'for(<*>){((stat)[9]<(unlink))}', 在 Kubuntu 14.04.3 LTS x64 上删除包含数百万个文件的文件夹的内容时拍摄的。

iotop是使用sudo iotop.

Gil*_*il' 27

iotop 显示的信息对于单个进程和整个系统的收集方式不同。“实际”全局数字不是每个进程数字的总和(这就是“总数”)。

所有信息都是从proc 文件系统收集的。

  • 对于每个进程,iotop 从 读取数据,特别是和值。这些都是在传递的字节数和系统调用(包括变体,如,,,,等等)。/proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • 全局“实际”值是从 中读取的/proc/vmstat,特别是pgpginpgpgout值。这些测量内核和硬件之间交换的数据(更准确地说,这是内核中块设备层混洗的数据)。

每个进程数据和块设备层数据不同的原因有很多。特别是:

  • 缓存和缓冲意味着在一层发生的 I/O 可能不会在另一层同时或相同的次数发生。例如,从缓存读取的数据被视为从访问它的进程读取,但没有从硬件读取相应的数据(之前已经发生过,可能代表另一个进程)。
  • 进程级数据包括在管道、套接字和其他不涉及底层磁盘或其他块设备的输入/输出上交换的数据。
  • 进程级数据只考虑文件内容,而不是元数据。

最后一个差异解释了您在这里看到的内容。删除文件只会影响元数据,不会影响数据,因此该过程不会写入任何内容。它可能正在读取目录内容以列出要删除的文件,但这足够小以至于它可能会被忽视。

我认为 Linux 没有提供任何方法来监视文件元数据更新。您可以通过/sys/fs某些文件系统下的条目监视每个文件系统的 I/O 。我认为您不能针对特定进程计算元数据 I/O,在一般情况下这样做会非常复杂,因为多个进程可能会导致读取或更改相同的元数据。