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

Jas*_*nes 26 linux performance central-processing-unit cpu-usage

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      
Run Code Online (Sandbox Code Playgroud)

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

Kyl*_*ndt 34

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

在此处输入图片说明

百分比被定义为“一个或数被表示为特定数目分为100份的东西份的速率”。所以在这种情况下,这些部分是离散的时间片,有些是忙碌时间片与空闲时间片——忙碌到空闲时间片的比率。

由于 CPU 以 GHz(每秒十亿个周期)运行。操作系统以称为滴答的更小的单位分割该时间。它们并不是真正的 1/10 秒。Windows 中的滴答率为每秒1000 万次滴答,而在 Linux 中为sysconf(_SC_CLK_TCK)(通常为每秒 100 次滴答)。

在类似的情况下top,繁忙的 CPU 周期会进一步细分为用户时间和系统时间等百分比。在topLinux 和 Windows 中的 perfmon 中,您经常会看到超过 100% 的显示,这是因为总数为 100% * the_number_of_cpu_cores。

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

  • 你的意思是 1000 滴答声?我所有的 Linux 系统要么是 1000 滴答(EL5 和 EL6),要么是 [1000 滴答 + 无滴答](http://lwn.net/Articles/549580/) (EL7)。或者你的意思是别的? (2认同)
  • 我还认为该 API 调用所指的 Windows“滴答声”与 [Windows 计时器中断频率](https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-兆瓦浪费/),因此实际上没有可比性。 (2认同)

Sha*_*den 15

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

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

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

  • 或者它可能使用 8 个 CPU 的 25% 和 9 个的一部分。 (5认同)