我想跟踪磁盘IO,一个给定的命令一样。getrusage()
可以在C语言中使用;我能以某种方式在命令行中得到相同的结果吗?
time
并times
显示用户和系统花费的时间,后者包括自己/孩子的故障,其他所有位(例如磁盘io,swap,峰值内存)又如何呢?
一个例子:
[user@hsot ~]$ time sqlite3 haha.db vacuum
real 1m6.439s
user 0m7.407s
sys 0m10.000s
# what I'd like in addition
blocks in 1228349
blocks out 34523
maxrss 45634953
...
理想情况下,将这样的东西内置到bash(或您使用的任何shell)中。不幸的是,没有这样的东西AFAIK。
但是使用getrusage()创建自己的包装器很简单:
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
int main(int argc, char** argv) {
system(argv[1]);
struct rusage ru;
getrusage(RUSAGE_CHILDREN, &ru);
printf("\nblocks in:\t%li\nblocks out:\t%li\nmaxrss:\t\t%li\n",
ru.ru_inblock, ru.ru_oublock, ru.ru_maxrss);
}
编译:
$ gcc -o process_io process_io.c
并使用它:
$ ./process_io "dd if=/dev/urandom of=foobar bs=1k count=10000"
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.922149 s, 11.1 MB/s
blocks in: 0
blocks out: 80128
maxrss: 1676
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句