UNIX中的wall-clock-time,user-cpu-time和system-cpu-time具体是什么?

Joh*_*0te 130 unix operating-system

我可以根据名称进行猜测,但具体是UNIX中的wall-clock-time,user-cpu-time和system-cpu-time?

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

这个测量的时间单位是.

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

Jon*_*ler 127

挂钟时间是指墙上的时钟(或手表中的秒表)在过程开始和"现在"之间经过的时间.

用户CPU时间和系统CPU时间就像你说的那样 - 用户代码花费的时间和内核代码花费的时间.

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

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

  • @Pacerier:在单核机器上,是的,但是多核机器和多线程程序每秒可以使用超过1个CPU秒. (29认同)
  • 那么这是否意味着挂钟时间总是比**时间**更大**? (11认同)
  • @ Bionix1441:由于多种原因,您无法从CPU时间中获取经过的时间.首先,进程可以空闲,不占用任何CPU时间,任意时间段(例如,等待客户端通过网络连接到它的守护进程),因此它可能在经过时间的几天内无效.其次,如果它正在运行,则可能有多个线程,如果有,说,4个线程,并在系统中有4个或更多的内核,它可能架了每经过时间花费二努力的4个CPU秒.这些表明您没有简单(甚至复杂)的公式可供使用. (2认同)
  • @Catbuilts:您是否知道 Unix 内核与用户程序分开运行。当您的程序进行系统调用(例如,“read()”或“getpid()”)时,内核会代表您的程序执行代码。内核还处理抢占式多任务处理,以便其他程序轮流运行,并执行一些常规内务工作以保持系统平稳运行。该代码在“内核代码”(也在“内核模式”)中执行。这与您编写的代码以及您运行的用户库(包括系统 C 库)不同。 (2认同)

Fre*_*Foo 35

挂钟时间:根据计算机的内部时钟经过的时间,它应该与外界的时间相匹配.这与CPU使用无关; 它是供参考的.

用户CPU时间和系统时间:正是您的想法.系统调用,包括I/O调用诸如read,write等被跳进内核代码和执行该执行.

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

根据SI,所有都以秒为单位进行测量.


enn*_*ler 7

挂钟时间正如它所说的那样,通过墙壁(或手表)上的时钟测量的时间

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

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


147*_*.3k 7

time [WHAT-EVER-COMMAND]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

真实的或挂钟

真正的7m2.444s

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

用户

用户76m14.607s

cmd /进程已经利用了这么多的cpu时间.换句话说,在具有单核CPU的机器上,真实和用户将几乎相等,因此相同的命令将需要约76分钟才能完成.

SYS

sys 2m29.432s

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

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

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

  • 我在这里有点晚了,但是总是`real &gt; (user + sys)/(num cpus)`,因为该程序也会花费时间空闲或与其他程序共享,此外它可能不会利用所有核心100% 的时间(甚至任何时间)。如果它是例如开销较低的专用机器,则它可以非常接近。 (2认同)