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


12

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

我已经看过了vmstatiostatsar,但这些都不是在看一个单一的过程。相反,他们着眼于整个系统。

我已经看过了iotop,但是此刻只给了我一个视角。

-编辑-

snap的答案似乎很接近。

“文件系统输入:”是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'

Answers:


9

您未指定使用哪个操作系统。

的Linux

time foo您可以尝试使用external命令,而不是使用(通常)内置的shell /usr/bin/time foo。它提供了一些其他信息,例如文件系统输入和输出的数量(但没有有关缓存命中或字节数的信息)。请参阅man timeman getrusage了解更多说明。

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

FreeBSD

使用/usr/bin/time -l foo。它给出了输入和输出的数量。请参阅man timeman getrusage了解更多说明。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.