在 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使用率?
答案1
CPU 时间分配在离散的时间片(滴答声)。在一定数量的时间片中,CPU 处于忙碌状态,其他时间则不忙(由空闲进程表示)。下图中,CPU 忙碌了10 个 CPU 切片中的 6 个。6/10 = .60 = 60% 的繁忙时间(因此会有 40% 的空闲时间)。
A百分比定义为“将某事物的一定数量的部分划分为 100 个部分来表示的数字或比率”。因此,在这种情况下,这些部分是离散的时间片,事物是繁忙时间片与空闲时间片——繁忙时间片与空闲时间片的比率。
由于 CPU 以 GHz(每秒十亿个周期)运行。操作系统将时间分成更小的单位,称为“滴答”。它们实际上不是 1/10 秒。Windows 中的滴答速率是每秒 1000 万个刻度在Linux中也是如此sysconf(_SC_CLK_TCK)
(通常为每秒100个刻度)。
在类似 中top
,繁忙的 CPU 周期被进一步细分为用户时间和系统时间等百分比。在top
Linux 和 Windows 中的 perfmon 中,您经常会看到超过 100% 的显示,这是因为总数是 100% * the_number_of_cpu_cores。
在操作系统中,它是调度程序作业将这些宝贵的片段分配给进程,因此调度程序会报告这一点。
答案2
CPU 时间是进程使用 CPU 的时间 - 将其转换为百分比是通过除以实际经过的时间量来完成的。
因此,如果我有一个进程在 2 秒的时间内使用了 1 秒的 CPU 时间,那么它就使用了 50% 的 CPU。
对于您的 MATLAB 进程,217% 表示它在上一个采样间隔内每秒使用 2.17 秒的 CPU 时间 - 实际上垄断了 2 个 CPU 核心并占用了三分之一。