我完全支持这个话题。
昨天,我正在对正在编写的某个脚本进行分析,所花费时间的单位是“CPU秒'。有人能提醒我它的定义吗?
例如我得到的一些分析结果:200.750 CPU 秒。这是什么意思?在其他情况下,对于耗时的过程,我得到了:-347.977 CPU 秒,一个负数!
有什么方法可以让我将该时间转换为日历时间吗?
干杯,
答案1
CPU 秒是指 CPU 上的一秒钟的时间。
进程执行时间有两种测量方式:
- CPU 时间,即 CPU 积极运行该进程所花费的时间;以及
- 挂钟时间,或者从开始该过程到该过程结束所经过的时间量。
假设只有一个 CPU 核心,它们的关系如下:
(Wall time) - (CPU time) = (time the CPU spent doing other things)
举一个简单的例子,如果你运行一个进程,它需要 10 秒,但你得到的测量结果是 7 CPU 秒,那么在这 10 秒内,CPU 花了 3 秒来做除了执行你的进程之外的事情。
CPU 时间通常分为两种类型:
- “系统”或“内核”时间,即内核为你的进程执行操作所花费的时间——运行 I/O、计时器、互斥锁等等
- “用户”时间,或由用户空间中的进程运行的执行
例如:
$ time sleep 1
real 0m1.005s
user 0m0.000s
sys 0m0.002s
在这种情况下,我们休眠了一秒钟。系统在内核空间中花费了 2/1000 秒,可能为我们设置了计时器和中断,没有在用户空间中花费任何时间,整个过程耗时 1.005 秒,这意味着在这段时间内,计算机除了处理我们的进程之外还花费了额外的 0.003 秒来做其他事情。
我首先要弄清楚的是,为什么 CPU 时间会得到一个明显负数。
答案2
用 UNIX 术语来说,CPU 秒是用户时间加上进程本身的系统时间,而不是实际(挂钟)时间和子进程所花费的时间。
几年前,我在 AMD 双核 CPU 下看到了一些奇怪的负 CPU 时间。有一个处理器驱动程序更新解决了这个问题。基本上,两个处理器之间的时间发生了偏移,并导致了负 CPU 时间和负 ping 时间等问题。
答案3
“CPU 秒”是指运行进程或线程的一秒 CPU 周期。您可以将其除以 CPU 使用率,将其转换为实际时间:
15 CPU 秒/50% CPU 使用率 = 30 墙秒
负的 CPU 时间是测量过程中的故障,可能是溢出。