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
我已经查看了vmstat
、iostat
、 和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 time
和man getrusage
以获得进一步说明。
请注意,此功能需要 Linux 内核版本 2.6.22 或更高版本。
自由BSD
使用/usr/bin/time -l foo
。它给出了输入和输出的数量。看man time
和man getrusage
以获得进一步说明。