CPU时间和CPU使用率如何相同?


23

在Wikipedia页面上的CPU时间,它说

CPU时间以时钟滴答或秒为单位。通常,以CPU容量的百分比来衡量CPU时间是很有用的,这称为CPU使用率。

我不明白如何用百分比代替持续时间。当我看时top,难道不%CPU告诉我我MATLAB使用的是2.17内核吗?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

为了更好地了解什么是CPU使用率,我如何自己计算CPU使用率?


在您打开“ top”(顶部)时按“ 1”,以按核心收集更多的粒度。
彼得

那是第一位(1)。
迈克尔·汉普顿

让Linux告诉您每个处理器在处理此命令行请求时有多忙。mpstat -P ALL 5 3进入5秒3间隔的多处理器状态。将报告的%CPU除以您的内核数即可得出平均CPU繁忙%。iostat -xm 5 3输入将告诉您您有多少个内核/ CPU。
威尔逊·哈克

Answers:


32

CPU时间以离散时间片(滴答)分配。对于一定数量的时间片,CPU处于繁忙状态,而其他时间则不繁忙(由空闲进程表示)。在下面的图片中,CPU忙于10个CPU片中的6个。6/10 = .60 =繁忙时间的60%(因此将有40%的空闲时间)。

在此处输入图片说明

百分比被定义为“一个或数被表示为特定数目分为100份的东西份的速率”。因此,在这种情况下,这些部分是离散的时间片,而繁忙时间片与空闲时间片的关系即繁忙时间与空闲时间片的比率。

由于CPU的工作频率为GHz(每秒数十亿个周期)。操作系统以称为“滴答”的较小单位将时间切分。它们不是真正的1/10秒。Windows中的滴答速度是每秒一千万个滴答声,而在Linux中是sysconf(_SC_CLK_TCK)(通常每秒100个滴答声)。

top然后,将诸如CPU之类的繁忙周期进一步细分为诸如用户时间和系统时间之类的百分比。在topLinux和Windows的perfmon中,您通常会得到超过100%的显示,这是因为总数为100%* the_number_of_cpu_cores。

在操作系统中,将这些宝贵的片分配给进程是调度程序的工作,因此调度程序负责报告此情况。


1
时间片的度量单位不是十亿分之一秒。他们不是那么短。它们更有可能在0.1毫秒至10毫秒之间。API中时间值的解析与计时器中断的速率不同。Linux中的某些API调用指定的时间以纳秒为单位,但是您不希望计时器中断如此频繁。如果每秒有一百万个中断,则将所有CPU时间花费在上下文切换上。
kasperd 2014年

2
你是说1000滴答声吗?我所有的Linux系统要么是1000 ticks(EL5和EL6),要么是1000 ticks + less tickless(EL7)。还是您还有其他意思?
迈克尔·汉普顿

1
手册页说:“相应的变量已过时。” 我认为这不能依靠。我在/boot/config-2.6.32中检查了内核配置,无论这个月是什么...
Michael Hampton

1
啊哈,不,他们的报道不一样。CLK_TCK是显式用于用户空间的缩放值,无论内核实际使用多少个滴答声,CLK_TCK始终为100。发现SO(一些很好的解释12
迈克尔汉普顿

2
我还认为该API调用所指的Windows“滴答声”与Windows计时器中断频率不同,因此实际上没有可比性。
迈克尔·汉普顿

15

CPU时间是进程使用CPU的时间-将其转换为百分比可以通过除以经过的实时时间来完成。

因此,如果我有一个进程在2秒钟的时间内使用了1秒的CPU时间,则它正在使用50%的CPU。

就您的MATLAB流程而言,有217%表示在上一个采样间隔内每秒使用了2.17秒的CPU时间-有效地,垄断了2个CPU内核,并占用了三分之一。


5
或者,它可能使用8个CPU的25%,占十分之一。
鲍勃·贾维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.