在UNIX中,挂钟时间,用户cpu时间和系统cpu时间具体是什么?


144

我可以根据名称进行猜测,但是在UNIX中,挂钟时间,用户cpu时间和系统cpu时间具体是什么?

用户cpu时间是否是执行用户代码所花费的时间,而内核cpu时间是否是由于需要特权操作(例如从IO到磁盘)而在内核中花费的时间?

该度量单位是什么时间单位。

挂钟时间确实是进程在​​CPU上花费的秒数,还是名称只是误导?


Answers:


142

挂钟时间是指墙上的时钟(或手头的秒表)在流程开始到“现在”之间经过的时间。

用户cpu时间和系统cpu时间与您所说的差不多-用户代码所花费的时间以及内核代码所花费的时间。

单位是秒(和亚秒,可能是微秒或纳秒)。

挂钟时间不是进程在CPU上花费的秒数;它是经过的时间,包括等待其打开CPU的时间(其他进程开始运行)。


16
那么这是否意味着挂钟时间将始终大于 cpu时间?
Pacerier 2014年

35
@Pacerier:是的,在单核计算机上,但是多核计算机和多线程程序每秒可以使用1秒以上的CPU。
Jonathan Leffler 2014年

@JonathanLeffler谢谢您的回答,我想获取已过去的纳秒数,但使用公式计算CPU时间CPUtime = #clock_cycles / clock_rate不能与计算经过的时间相同。您是否知道我可以从CPU时间获得经过时间?
Bionix1441

2
@ Bionix1441:由于多种原因,您无法从CPU时间得出经过时间。首先,进程可以在任意时间段内处于空闲状态,而不消耗任何CPU时间(例如,守护程序进程正在等待客户端通过网络连接到它),因此它可能在经过一段时间后几天不做任何事情。其次,如果它正在运行,则可能有多个线程,并且如果它有4个线程,并且系统上有4个或更多内核,则它可能会花费每秒4 CPU的工作量。这些表明您没有可以使用的简单(甚至复杂)公式。
Jonathan Leffler

1
@Catbuilts:您是否知道Unix内核与用户程序分开运行。当您的程序进行系统调用时(例如read()getpid()),内核将代表您的程序执行代码。内核还处理抢先式多任务处理,以便其他程序可以轮流运行,并进行一些常规的内务整理工作,以保持系统平稳运行。该代码以“内核代码”(也在“内核模式”下)执行。这与您编写的代码和所运行的用户库(包括系统C库)不同。
乔纳森·莱夫勒

36

挂钟时间:根据计算机内部时钟所经过的时间,该时间应与外界的时间匹配。这与CPU使用率无关。仅供参考。

用户CPU时间和系统时间:正是您的想法。系统调用,包括I / O调用如readwrite等等都由跳跃执行到内核代码并执行这一点。

如果墙上时钟时间<CPU时间,则您正在并行执行程序。如果墙上时钟时间> CPU时间,则您正在等待磁盘,网络或其他设备。

根据SI,所有单位均以秒为单位。


7

墙上时钟的时间正好是它所说的,所经过的时间由墙上(或手表)上的时钟测量

用户cpu时间是在“用户土地”上花费的时间,即在非内核进程上花费的时间

系统cpu时间是在内核中花费的时间,通常是服务系统调用所花费的时间。


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

真实或挂钟

真正的7m2.444s

在具有24核心处理器的系统上,此cmd /进程需要7分钟以上的时间才能完成。通过在所有给定的内核中利用最可能的并行性。

用户

用户76m14.607s

cmd /进程已使用了这么多的cpu时间。换句话说,在具有单核CPU的计算机上,真实数和用户数几乎相等,因此同一命令将花费约76分钟才能完成。

系统

sys 2m29.432s

这是内核执行所有基本/系统级操作以运行此cmd所花费的时间,包括上下文切换,资源分配等。

注意:该示例假定您的命令使用并行性/线程。

详细的手册页:https : //linux.die.net/man/1/time


考虑到您发布的时间,难道不是并行处理的一半吗?(IM只是做(user + sys) / real来表示。
DTC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.