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 时间和系统时间:正是您的想法。系统调用,包括readwrite等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 具体是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UNIX为啥要把PCB分为进程表项proc区和U区

如何自己写一门简单的编程语言(Unix系统编程第一次实验 / U language 解释型语言)

《Linux/Unix系统编程》第七八章学习笔记

用于删除 CSV 文件第一行的 Unix 脚本

[转帖]Unix版权史

访问超过4G的文件,在Linux或Unix下该怎么做