Linux中time命令,我们经常用来计算 某个程序的运行耗时(real), 用户态cpu耗时(user), 系统态cpu耗时(sys)。
例如:
$ time foo
real        0m0.003s
user        0m0.000s
sys         0m0.004s$
那么这三个时间都具体代表什么意思呢?
[1] real : 表示foo程序整个的运行耗时。可以理解为foo运行开始时刻你看了一下手表,foo运行结束时,你又看了一下手表,两次时间的差值就是本次real 代表的值
举个极端的例子如下:可以看到real time恰好为2秒。
# time sleep 2real 0m2.003suser 0m0.000ssys 0m0.000s
[2] user 0m0.000s:这个时间代表的是foo运行在用户态的cpu时间,什么意思?
首先,我来讲一下用户态和核心态:
核心态(Kernel Mode):
在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。
—– In Kernel mode, the executing code has complete and unrestricted access to the underlying hardware. It can execute any CPU instruction and reference any memory address. Kernel mode is generally reserved for the lowest-level, most trusted functions of the operating system. Crashes in kernel mode are catastrophic; they will halt the entire PC.
用户态(User Mode):
在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的、底层的API来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。
—– In User mode, the executing code has no ability to directly access hardware or reference memory. Code running in user mode must delegate to system APIs to access hardware or memory. Due to the protection afforded by this sort of isolation, crashes in user mode are always recoverable. Most of the code running on your computer will execute in user mode.
为什么要区分Kernel Mode 和 User Mode呢?答案是隔离保护,使得系统更稳定。
好,讲完用户态和核心态之后,我们来看user time。我们已经说过了,这个指的是程序foo运行在用户态的cpu时间,cpu时间不是墙上的钟走过的时间,而是指CPU工作时间。
[3] sys 0m0.004s : 这个时间代表的是foo运行在核心态的cpu时间。
好,讲完上面的这些,我们来看看这三个的关系,这三者之间没有严格的关系,常见的误区有:
误区一: 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%
如:
# time sleep 2real 0m2.003suser 0m0.000ssys 0m0.000s
cpu利用率为0,因为本身就是这样的,sleep 了2秒,时钟走过了2秒,但是cpu时间都为0,所以利用率为0
误区二:real_time > user_time + sys_time
一般来说,上面是成立的,上面的情况在单cpu的情况下,往往都是对的。
但是在多核cpu情况下,而且代码写得确实很漂亮,能把多核cpu都利用起来,那么这时候上面的关系就不成立了,例如可能出现下面的情况,请不要惊奇。
real 1m47.363suser 2m41.318ssys 0m4.013s
更多讨论请参阅: http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1

理解linux time命令的输出相关推荐

  1. 理解 Linux 中 `ls` 的输出

    理解 Linux 中 ls 的输出 ls 的输出会因各 Linux 版本变种而略有差异,这里只讨论一般情况下的输出. 下面是来自 man page 关于 ls 的描述: $ man ls ls - l ...

  2. linux ls 输出对齐,理解 Linux 中 `ls` 的输出

    ls 的输出会因各 Linux 版本变种而略有差异,这里只讨论一般情况下的输出. 下面是来自 man page 关于 ls 的描述: $ man ls ls - list directory cont ...

  3. linux less 阻塞输出,linux – `less`命令显示输出所用的时间

    您的脚本通过管道与较少的通信. Pipe是一个连接两个端点的内存字节流:你的脚本和less程序,前者写入输出,后者从中读取. 由于管道在内存中,如果它们随意变大,就不会令人愉快.因此,默认情况下,在任 ...

  4. 理解linux tr命令

    2019独角兽企业重金招聘Python工程师标准>>> 1. tr 命令的功能 tr命名是简化了的sed命令.其主要的功能包括: a. 用一个字符来替换另外一个字符. b. 删除字符 ...

  5. linux输出mac,Linux(Mac)命令ll输出后各个字段的含义

    ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名 Mac下推荐iTerm2终端,并配合zsh使用.非常方便. ll命令结果字段说明 示例: 1 2 3 4 5 6 7 8 ...

  6. Linux文件管理命令大全

    1.cat命令 cat 命令用于连接文件并打印到标准输出设备上. 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数说 ...

  7. linux su命令在哪里,Linux su命令

    本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行, ...

  8. Linux基础命令-tar打包压缩文件

    Linux基础命令-echo输出信息_Linux学习中的博客-CSDN博客 Linux三剑客-grep命令_Linux学习中的博客-CSDN博客 Linux文件管理命令(3)-mv改动文件_Linux ...

  9. linux od 命令16进制,Linux od命令

    Linux od命令 Linux od命令用于输出文件内容. od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来. 语法 od [-abcdfhilovx][-A ][-j ][-N ] ...

最新文章

  1. python写炒股软件_利用 Python 构建自己的股票投资系统
  2. bootstrap算法_决策树算法之随机森林
  3. Synchronized的实现原理(一)
  4. jpa java.util.map_使用JPA存储Map String,String
  5. 如何关闭Visual Studio Development Server
  6. 利用javascript验证各种格式
  7. 使用Liquid实现简单的数据交换
  8. 泰坦尼克号数据集下载
  9. 数据分析报告4:睡眠情况分析
  10. Similarity-Preserving Knowledge Distillation
  11. HARK学习(五)--AudioStreamFromMic
  12. 4G模块中RSRP RSRQ RSSI SINR等信号值的含义和区别
  13. 【uniapp】解决uni.previewImage图片模糊问题
  14. QQ空间点赞...取消点赞
  15. UVA 12325 Zombie's Treasure Chest
  16. Blackbox_exporter概述
  17. 会声会影2022最新升级更新版本
  18. 开发Windows Mobile今日插件 -- 内存电量,桌面便笺,桌面记单词
  19. Linux下fstab参数配置详解
  20. java视频学习网(java教程视频网)

热门文章

  1. rem 前端字体_web前端入门到实战:一次搞懂CSS字体单位:px、em、rem和%
  2. 三角形周长最短问题_一道三角形周长最小值问题
  3. python io_NumPy IO
  4. qgis 图片_QGIS入门教程公告!!!
  5. mot数据集_谈谈ReID与MOT的关系
  6. AndroidStudio cmakelist找不到问题
  7. 一号信令是什么?1号信令和7号信令的区别介绍!
  8. 【渝粤教育】国家开放大学2018年秋季 0350-21T幼儿园课程论 参考试题
  9. [渝粤教育] 中国地质大学 结晶学与矿物学 复习题 (2)
  10. [渝粤教育] 西南科技大学 形式逻辑 在线考试复习资料