||
Linux中time命令输出的Real time, User time and Sys time
在运行的程序之前加 time 最后得出三个时间 real、 user、 sys, real是程序的实际运行时间,sys是内核态的时间,user是用户态的时间,单核情况,real远远大于user和sys之和。
real,从程序开始到程序执行结束时所消耗的时间,包括CPU的用时和所有延迟程序执行的因素的总和。CPU用时被划分为user和sys两块。user表示程序本身,以及它所调用的库中的子例程使用的时间。sys是由程序直接或间接调用的系统调用执行的时间。
real=cpu用时+其他因素时间
cpu 用时=user+sys
所以: real> user + sys (单核情况)
time命令结果有三行组成:real、user和sys。CPU用时被划分为user和sys两块。
real值表示从程序开始到程序执行结束时所消耗的时间,包括CPU的用时。
user值表示程序本身,以及它所调用的库中的子例程使用的时间。
sys是由程序直接或间接调用的系统调用执行的时间。
在单处理器上,real值和整个CPU用时之差,也就是real - ( user + sys )是所有延迟程序执行的因素的总和。
在SMP上,这个值近似为real * number_of_processors - ( user + sys )。这些因素包括:
•调入程序文本和数据的IO操作
•获取程序实际使用内存的IO操作
•由其它程序消耗的CPU用时
•由操作系统消耗的CPU用时
* Real 是时钟时间,程序从开始至结束的总时间。他包括期间其他进程所占用的时间片和进程被阻塞的时间(如IO等待的时间)
* User 被测试程序在用户模式下所花的CPU时间。他是进程执行的正真的CPU时间。其他进程调度的时间片以及阻塞(如IO)的时间不包含在内。
* Sys 是进程在内核中所花费的CPU时间。他表示进程在内核调用中所花的CPU时间,而程序的库调用仍然运行在用户空间下。
User+Sys表示程序所执行的CPU时间(不包括IO以及其他进程的CPU时间).
Real指的是实际经过的时间,User和Sys指的是该进程使用的CPU时间。
1. Real是墙上时间(wall clock time),也就是进程从开始到结束所用的实际时间。这个时间包括其他进程使用的时间片和进程阻塞的时间(比如等待I/O完成)。
2. User指进程执行用户态代码(核心之外)所使用的时间。这是执行此进程所消耗的实际CPU时间,其他进程和此进程阻塞的时间并不包括在内。
3. Sys指进程在内核态消耗的CPU时间,即在内核执行系统调用所使用的CPU时间。
那么,为什么进程开始到结束所经过的时间会比进程所消耗的用户时间和系统时间(user time + sys time)小呢?
User+Sys为进程所使用的实际CPU时间。注意,如果有多个线程,User+Sys的时间有可能大于Real时间。同时,User和Sys时间包括子进程所使用的时间。
time命令的输出数据是由几个不同的系统调用得来的。User time和Sys time从ait(2)或times(2)系统调用(依赖不同的系统)得来。Real time是由gettimeofday(2)中结束时间和起始时间相减得到。不同的操作系统还可能有其他的信息,比如time可以记录上下文切换的次数。
在多处理器的系统上,一个进程如果有多个线程或者有多个子进程可能导致Real time比CPU time(User + Sys time)要小,这是因为不同的线程或进程可以并行执行。
内容综合整理自:
http://blog.csdn.net/nevasun/article/details/7004355
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-25 10:11
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社