"user-cpu time"是执行用户代码所花费的时间,而"system-cpu time"是由于需要特权操作(如将I/O写入磁盘)而在内核中花费的时间。 "wall-clock time"是否真正表示进程在CPU上花费的秒数,还是名称有误导性?这个测量单位是什么?
挂钟时间是指从进程开始到现在经过的时间,一个挂在墙上的时钟(或手中的秒表)会测量出这段时间。
用户CPU时间和系统CPU时间基本上就像你所说的那样 - 用户代码执行的时间和内核代码执行的时间。
单位是秒(和子秒,可能是微秒或纳秒)。
挂钟时间不是进程在CPU上花费的秒数;它是经过的时间,包括等待其轮到运行在CPU上的时间(同时其他进程得到运行的时间)。
CPUtime = #clock_cycles / clock_rate
计算 CPU 时间不能与计算已经过时间相同。您知道我能否从 CPU 时间中获取已经过时间吗? - Bionix1441read()
或getpid()
)时,内核会代表你的程序执行代码。内核还处理抢占式多任务,以便其他程序有机会运行,并进行一些常规的维护工作,以保持系统平稳运行。这段代码在“内核代码”(也称为“内核模式”)中执行。这与你编写的代码和运行的用户库(包括系统C库)是不同的。 - Jonathan Leffler墙上时钟时间:根据计算机内部时钟流逝的时间,应该与外部世界的时间相匹配。这与 CPU 使用率无关;仅供参考。
用户 CPU 时间和系统时间:正是您想的那样。系统调用包括 I/O 调用(如read
,write
等)都是通过跳转到内核代码并执行来执行的。
如果壁钟时间 < CPU 时间,则表示您正在并行执行程序。如果墙时钟时间 > CPU 时间,则表示您正在等待磁盘、网络或其他设备。
所有时间均以秒为单位,符合 SI 标准。
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
真实时间或墙钟时间
real 7m2.444s
在一个24核处理器的系统上,该命令/进程利用所有给定的核心进行最大并行处理,完成此操作需要超过7分钟的时间。
用户时间
user 76m14.607s
该命令/进程已经使用了这么多的CPU时间。
换句话说,在单核CPU的机器上,real时间和user时间将近相等,因此同样的命令需要大约76分钟才能完成。
系统时间
sys 2m29.432s
这是内核执行所有基本/系统级别操作以运行此命令所需的时间,包括上下文切换、资源分配等。
注意:此示例假设您的命令利用并行处理/线程。
详细的手册页面:https://linux.die.net/man/1/time
(用户时间 + 系统时间) / 实际时间
来表示。) - dtcreal > (user + sys)/(num cpus)
总是成立的,因为程序还会花时间空闲或与其他程序共享,并且它可能无法100%地利用所有核心(甚至在任何时候都不行)。如果是低开销的专用机器,则非常接近。 - Jared墙钟时间就是指你挂在墙上(或手腕上)的时钟所测量的经过的时间。
用户 CPU 时间是指花费在“用户空间”的时间,也就是花费在非内核进程上的时间。
系统 CPU 时间是指花费在内核中的时间,通常是用于处理系统调用的时间。