UNIX 中的 wall-clock-time、user-cpu-time 和 system-cpu-time 具体是啥?
Posted
技术标签:
【中文标题】UNIX 中的 wall-clock-time、user-cpu-time 和 system-cpu-time 具体是啥?【英文标题】:What specifically are wall-clock-time, user-cpu-time, and system-cpu-time in UNIX?UNIX 中的 wall-clock-time、user-cpu-time 和 system-cpu-time 具体是什么? 【发布时间】:2011-11-12 06:00:00 【问题描述】:我可以根据名称进行猜测,但 UNIX 中的 wall-clock-time、user-cpu-time 和 system-cpu-time 具体是什么?
user-cpu time 是执行用户代码所花费的时间,而 kernel-cpu time 是由于需要特权操作(如 IO 到磁盘)而在内核中花费的时间吗?
这个测量的时间单位是什么?
挂钟时间真的是进程在 CPU 上花费的秒数,还是名称只是误导?
【问题讨论】:
What do 'real', 'user' and 'sys' mean in the output of time(1)?的可能重复 【参考方案1】:挂钟时间是指挂在墙上的时钟(或手中的秒表)测量的从流程开始到“现在”之间经过的时间。
user-cpu time 和 system-cpu time 和你说的差不多——花在用户代码上的时间和花在内核代码上的时间。
单位是秒(和亚秒,可能是微秒或纳秒)。
挂钟时间不是进程在 CPU 上花费的秒数;它是经过的时间,包括等待其启动 CPU 所花费的时间(而其他进程开始运行)。
【讨论】:
那么这是否意味着挂钟时间总是大于 CPU时间? @Pacerier:在单核机器上,是的,但是多核机器和多线程程序每秒可以使用超过 1 个 CPU 秒。 @JonathanLeffler 谢谢你的回答,我想得到已经过去的纳秒数,但使用公式CPUtime = #clock_cycles / clock_rate
计算 CPU 时间不能与计算时间相同。你知道我是否可以从 CPU 时间中获取经过的时间吗?
@Bionix1441:由于多种原因,您无法从 CPU 时间推导出经过的时间。首先,一个进程可以空闲,不消耗任何 CPU 时间,任意时间段(例如,一个守护进程等待客户端通过网络连接到它),所以它可能在经过的时间几天内什么都不做.其次,如果它正在运行,它可能有多个线程,并且如果它有 4 个线程并且系统上有 4 个或更多内核,它可能会在每秒经过的时间内花费 4 个 CPU 秒的工作量。这些表明没有可以使用的简单(甚至复杂)公式。
@Catbuilts:你知道 Unix 内核独立于用户程序运行吗?当您的程序进行系统调用(例如,read()
或 getpid()
)时,内核会代表您的程序执行代码。内核还处理先发制人的多任务,以便轮到其他程序运行,并执行一些一般的内务工作以保持系统平稳运行。此代码在“内核代码”中执行(也在“内核模式”中)。这与您编写的代码以及您运行的用户库(包括系统 C 库)不同。【参考方案2】:
挂钟时间:根据计算机内部时钟经过的时间,应与外界时间一致。这与 CPU 使用率无关;供参考。
用户 CPU 时间和系统时间:正是您的想法。系统调用,包括read
、write
等I/O调用,都是通过跳转到内核代码执行的。
如果挂钟时间 CPU 时间,您正在等待磁盘、网络或其他设备。
所有都以秒为单位,根据SI。
【讨论】:
【参考方案3】: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 的机器上,real 和 user 几乎相等,所以相同的命令需要大约 76 分钟才能完成。
系统
系统 2m29.432s
这是内核执行所有基本/系统级别操作以运行此 cmd 所花费的时间,包括上下文切换、资源分配等。
注意:该示例假设您的命令使用并行/线程。
详细手册页:https://linux.die.net/man/1/time
【讨论】:
考虑到您发布的时间,并行度不是大约一半吗? (我只是在做(user + sys) / real
来代表它。
我来晚了,但是real > (user + sys)/(num cpus)
,总是这样,因为程序也会花时间闲置或与其他程序共享,另外它可能不会 100% 使用所有内核时间(甚至任何时候)。它可能非常接近,但如果它是例如低开销的专用机器。【参考方案4】:
挂钟时间正是它所说的,由墙上(或手表)上的时钟测量所经过的时间
用户cpu时间是在“用户空间”上花费的时间,即在非内核进程上花费的时间
系统 cpu 时间是在内核中花费的时间,通常是用于服务系统调用的时间。
【讨论】:
以上是关于UNIX 中的 wall-clock-time、user-cpu-time 和 system-cpu-time 具体是啥?的主要内容,如果未能解决你的问题,请参考以下文章