linux time命令总结

1、CPU资源的统计包括实际使用时间(real time)用户态使用时间(the process spent in user mode)内核态使用时间(the process spent in kernel mode)。例如:下面的小程序,

#include<stdio.h>
#include <stdlib.h>

#if 0
int square(int value) __attribute__((const));
#else
int square(int value);
#endif
int square(int value)
{
    return value*value;
}

int main(int argc, char* argv[])
{
    long long i = 0;
    int num = 0;

    for(i = 0; i < 1000000000; i++)
    {
        num = square(5)+i;
    }

测试结果:

@debian69:~/algoAndSturct/selfTest$ gcc attribute005.c       
@debian69:~/algoAndSturct/selfTest$ time ./a.out       

real    0m3.073s
user    0m3.044s
sys     0m0.028s

核心态(Kernel Mode):

       在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。

用户态(User Mode):

扫描二维码关注公众号,回复: 5926500 查看本文章

       在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。

我们来看看这三个的关系,这三者之间没有严格的关系,常见的误区有:

误区一: real_time = user_time + sys_time

我们错误的理解为,real time 就等于 user time + sys time,这是不对的,real time是时钟走过的时间user time 是程序在用户态的cpu时间sys time 为程序在核心态的cpu时间。

利用这三者,我们可以计算程序运行期间的cpu利用率如下:

%cpu_usage = (user_time + sys_time)/real_time * 100%

误区二:real_time > user_time + sys_time

        一般来说,上面是成立的,上面的情况在单cpu的情况下,往往都是对的。但是在多核cpu情况下,而且代码写的确实很漂亮,能把多核cpu都利用起来,那么这时候上面的关系就不成立了。

2、time的 -v

但是简单的使用time命令并不能得到内存和I/O的统计数据。

猜你喜欢

转载自blog.csdn.net/qq_28090573/article/details/89349300
今日推荐