测量程序的磁盘 I/O 使用情况

测量程序的磁盘 I/O 使用情况

time如果您想计算给定命令占用了多少 CPU 时间,这是一个出色的命令。

我正在寻找类似的东西,可以测量程序和任何子程序的磁盘 I/O。最好应该区分已缓存的 I/O(因此不会导致磁盘旋转)和未缓存的 I/O。

所以我想做:

iomeassure my_program my_args

并获得类似于以下内容的输出:

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

我已经查看了vmstatiostat、 和sar,但这些都没有考虑单个进程。相反,他们着眼于整个系统。

我已经看过了iotop,但这只能让我立即看到。

- - 编辑 - -

快照的答案似乎很接近。

“文件系统输入:”是 512 字节块中的非缓存读取。

“文件系统输出:”是 512 字节块中的缓存写入。

您可以使用以下命令强制清空缓存:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

我测试过:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'

答案1

您没有指定您使用的操作系统。

Linux

您可以尝试使用外部命令,而不是使用time foo(通常)内置的 shell /usr/bin/time foo。它提供了一些附加信息,例如文件系统输入和输出的数量(但没有有关缓存命中或字节量的信息)。看man timeman getrusage以获得进一步说明。

请注意,此功能需要 Linux 内核版本 2.6.22 或更高版本。

自由BSD

使用/usr/bin/time -l foo。它给出了输入和输出的数量。看man timeman getrusage以获得进一步说明。

相关内容