用户CPU时间 vs 系统CPU时间?

105

您能更详细地解释一下 "用户CPU时间" 和 "系统CPU时间" 吗?我已经阅读了很多,但我还是不能理解得很好。


4个回答

80

差别在于时间是花费在用户空间还是内核空间。 用户 CPU 时间是在处理器上运行程序代码(或者库中的代码)所花费的时间; 系统 CPU 时间是为您的程序代表运行操作系统内核中的代码所花费的时间。


1
用于运行“*.dll”文件的是哪一个? - user472221
4
@user472221,"dll"是Windows概念。你的问题与操作系统无关。 - Dr. belisarius
1
@user472221 我的答案基于UNIX/Linux;相同的概念应该适用于Windows。我猜测大多数DLL是用户空间的,尽管我不确定Windows画哪条线。如果你真的想找出程序在哪里使用CPU时间,请使用分析工具。 - Michael Ekstrand
1
“用户空间”和“内核空间”是否与“用户/内核模式”相同?如果内核正在运行,但处于用户模式下,这算作用户时间还是系统时间?或者这只有在微内核上才有实际区别? - Antonis Christofides
1
为什么要区分用户空间和内核空间?例如,内核是否是单线程的,因此如果我的进程正在使用系统调用占用内核,那么其他进程就必须等待? - JohnMudd
2
@JohnMudd:程序员可能对他们期望耗费时间的地方有一些直觉,如果实际情况与之不符,他们可能希望相应地更改代码。例如,如果预计程序在调用epoll()等待I/O响应时只进行非常短暂的处理,但是它意外地花费了相当一部分时间在用户模式下,则程序员可能想要调查原因和位置。例如,如果Web服务器这样做,可能是有人设法让JavaScript虚拟货币挖掘器运行。 - Tony Delroy

37

用户 CPU 时间: 处理器在特定程序上工作的时间。

系统 CPU 时间: 处理器在与该特定程序相关联的操作系统功能上工作的时间。


7
这段文字的来源是什么? - keypress
13
计算机组织与设计:硬件/软件接口 - 作者David A. Patterson, John L. Hennessy -- 第30页 - N Randhawa
2
如果我理解正确的话,如果内核在特定线程上没有执行任何操作,则某些进程可能具有0系统时间。 - HoCo_

28

“用户 CPU 时间”这个术语可能一开始有点误导。要清楚,总时间(实际 CPU 时间)是CPU为程序执行某些操作以及CPU代表程序执行系统调用所花费的时间的组合。当一个程序循环遍历一个数组时,它会积累用户 CPU 时间。相反,当一个程序执行诸如 exec 或 fork 等系统调用时,它会积累系统 CPU 时间。


6

根据wikipedia:

  • 用户时间是CPU在用户空间执行代码的时间。
  • 系统时间是CPU在内核空间执行代码的时间。如果该值针对线程或进程报告,则表示内核代表执行上下文进行工作的时间,例如,在线程发出系统调用后。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接