我可以根据名称进行猜测,但是 Unix 中的 wall-clock-time、user-cpu-time 和 system-cpu-time 具体是什么?
用户CPU时间是执行用户代码所花费的时间,而内核CPU时间是由于需要特权操作(例如磁盘I/O)而在内核中花费的时间吗?
这个测量的时间单位是什么?
挂钟时间真的是进程在 CPU 上花费的秒数还是这个名称只是误导?
挂钟时间是指墙上的时钟(或手中的秒表)测量的过程开始到“现在”之间经过的时间。
用户 cpu 时间和系统 cpu 时间与您所说的差不多 - 用户代码花费的时间和内核代码花费的时间。
单位是秒(和亚秒,可能是微秒或纳秒)。
挂钟时间不是进程在CPU上花费的秒数;它是经过的时间,包括等待 CPU 开启的时间(当其他进程开始运行时)。
挂钟时间:根据计算机内部时钟流逝的时间,该时间应与外界时间匹配。这与 CPU 使用率无关;仅供参考。
用户CPU时间和系统时间:正是你所想的。系统调用,包括 I/O 调用,如
read
、write
等,是通过跳转到内核代码并执行来执行的。
如果挂钟时间 < CPU time, then you're executing a program in parallel. If wall clock time > 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
真实时钟或挂钟
真实7m2.444s
在具有 24 个核心处理器的系统上,此命令/进程需要 7 分钟以上才能完成。通过利用所有给定核心的最可能的并行性。
用户
用户76m14.607s
cmd/进程已经使用了这么多的 CPU 时间。
换句话说,在单核CPU的机器上,真实的和用户的几乎相等,所以相同的命令大约需要76分钟才能完成。
系统
系统2分29.432秒
这是内核执行运行此cmd的所有基本/系统级操作所花费的时间,包括上下文切换、资源分配等
注意:该示例假设您的命令使用并行性/线程。
挂钟时间正如其所言,是通过墙上的时钟(或手表)测量的经过的时间
用户CPU时间是花费在“用户空间”的时间,即花费在非内核进程上的时间。
系统 CPU 时间是在内核中花费的时间,通常是用于服务系统调用的时间。
实时是从程序开始到程序结束的时间。 *实时也称为挂钟时间或墙上时间。
用户CPU时间是程序在用户空间上使用CPU的时间量。 *用户空间是应用程序的内存空间。
系统CPU时间是程序在内核空间上使用CPU的时间量。 *内核空间是操作系统核心kernel的内存空间。
例如,您可以在 Linux 或 Windows 上使用 Git 检查它们,如下所示:
$ time sleep 3
real 0m3.039s
user 0m0.046s
sys 0m0.015s