2014年(2)
分类: LINUX
2014-04-17 13:54:07
资源利用情况和执行次数
Wall clock time (墙上时钟时间) 流逝的时间
User CPU time (用户CPU时间) 进程花在执行用户模式(非内核模式)代码上的时间总量
System CPU time (系统CPU时间) 花在执行内核代码上的时间总量
通过调用times 或 getrusage 可以获得这信息, 前者能给出细致时间,后者可以给出更多信息,进程的利用情况, 比如它的内存占用量只能从getrusage调用获得。
1> 进程计时
#include
clock_t time(struct tms *buf);
times返回系统自举后经过的时间滴答数, 也称为墙上时钟时间。
[root@localhost c]# cat get_times.c
点击(此处)折叠或打开
[root@localhost c]# ./get_times
elpapsed: 0.05 secs
parent times
user CPU: 0.00 secs
sys CPU: 0.00 secs
child times
user CPU: 0.02 secs
sys CPU: 0.00 secs
当程序调用system函数时, 它先产生一个子进程, 然后是子进程而不是父进程完成所有工作并消耗了CPU时间
进程的执行时间0.05并不等于用户CPU时间和系统CPU时间之和 0.02秒。 原因是子进程执行的grep操作是I/O密集型而非CPU密集型的操作。 它扫描了这里讨论所使用的系统上的多个文件, 缺少的0.03秒全部用从硬盘读取数据。
times返回的时间是相对而非绝对时间(系统自举后经过的时钟滴答数), 所以要让它有实用价值, 就必须做两次测量并使用它们的差值。 这就引入了 流逝时间, 或者称为墙上时钟时间。 resusg1通过把起止的时钟滴答数分别保存在start和end中来做到这一点。 另一种进程计时值可从
点击(此处)折叠或打开
注: 这些时间都是时钟滴答数,而不是秒数。 使用sysconf函数能把时钟滴答数转为秒数, 这个函数把它的参数转换成在运行时定义的系统限制值或选项值, 返回类型为long
_SC_CLK_TCK 是定义每秒钟有多少滴答的宏。
这个程序的关键处是doit函数, 它接受一个字符串指针和一个clock_t类型的值,然后计算并输出进程每部分实际的计时信息。