![为什么所有 cpu 的平均负载范围不是 0-1+?](https://linux22.com/image/67565/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%89%80%E6%9C%89%20cpu%20%E7%9A%84%E5%B9%B3%E5%9D%87%E8%B4%9F%E8%BD%BD%E8%8C%83%E5%9B%B4%E4%B8%8D%E6%98%AF%200-1%2B%EF%BC%9F.png)
我知道每个 cpu 的平均负载是 0-1(或 0-1024)。例如,繁忙的四核的平均负载可以为 4.0 或更高。 (例如,如果有很多任务)。我知道它可能很大,比如 100+ 等。
我也明白它不是CPU利用率(即它可以超过100%),但它确实反映了CPU的能力。
但为什么它不自动除以系统中CPU的数量呢?
这更多的是一个历史问题。为什么是:
(load)
并不是 :
(load) / (# of cores)
考虑到所有CPU?为什么是每个CPU?每个 cpu 都有它意味着我首先必须找出系统有多少个 cpu,然后将该数字除以得到一个有意义的数字。当管理许多不同的系统时,这很麻烦。
这是针对 Linux 的。
答案1
负载平均值不仅仅涵盖使用 CPU 时间或等待 CPU 时间的进程。它还涵盖了那些处于不间断睡眠状态的进程(这通常意味着等待磁盘 I/O)。
除以 CPU 数量会得到一些奇怪的(而且通常是无用的)数字。如果您的系统有 4 个核心和 7 个进程等待单个磁盘,则根据您的定义,平均负载将收敛于 1.75。但这个数字没有任何意义。在测量 I/O 限制工作负载时除以核心数量将得到毫无意义的结果。
当然可以计算等待 CPU 的平均进程数和处于不间断睡眠状态的平均进程数。这两个数字的总和就是传统的平均负载。在某些情况下,等待 CPU 的平均进程数除以 CPU 数也可能是一个有意义的数字。
然而,不可中断睡眠中的平均进程数除以磁盘数是没有意义的。毕竟处于不可中断睡眠状态并不意味着它正在等待哪个磁盘,而且也不清楚磁盘数量是否也应计入虚拟设备。
答案2
你没有说,但我假设这是针对 Linux 的。尽管您正在寻找每个 CPU 的历史原因,但您的问题表明您仍在考虑 CPU 利用率方面的平均负载,而不是真正的内核作业队列。如果您想查看每个 CPU 的使用百分比,您仍然可以在 top 等程序中查看 CPU 利用率。
如果您有 4 个 CPU 核心,则意味着内核可以同时为 4 个 CPU 排队 4 个任务。因此,您最终会携带 4 件行李+一些行李。如果内核在正在运行的任务后面排队更多任务,则该数字会高于 4。它根本不是 0 到 100% 的范围,并且该数字会根据工作负载而达到所需的高度。我曾经看到由于故障网络文件系统上的 IO 作业积压,负载上升到超过 15,000。实际上,这个数字在达到 1024 后就会重置。