linux - linux 负载计算中的权重是如何选择的?

标签 linux kernel history load algorithm

在 Linux 中,据说平均负载为 1 分钟/5 分钟/15 分钟。内核使用的公式实际上是一个指数移动平均线。

如果我们将cpuload(1)定义为cpu负载1min的第一次计算,将active()定义为返回处于“running”状态的进程数的函数"或 "runnable",那么内核用来计算第 nth cpu 负载 1min 的公式是:

enter image description here

cpuload(0) 为 0;它是第一次执行 cpuload() 之前存储在内存中的值。

我的问题是,权重 2-5.log2(e)/60 是如何选择的?在我看来,2-5/60 会更好,因为 1 分钟是进程数的半衰期(因为 (2-5/60) 12 = 1/2)。


除了上面的递归定义之外,如果我发布 cpuload(n) 的显式公式可能会有所帮助(右键单击以查看全尺寸):

enter image description here

最佳答案

考虑一个特定的负载样本 active(K),以及该样本对 cpuload(K+d) 的贡献有多大,以增加 d< 的值/em>。有几个关键观察结果:

  • active(K) 乘以某个权重 W(d) 以确定其对 cpuload(K+d) 的贡献。
  • W(d) 总是小于一。
  • W(d) 随着 d 的增加呈指数下降。
  • 计算机运算的精度有限。

总的来说,这些点意味着有一些 dmin 这样,对于 d>dminactive(K)W(d)=0 因此 active(K)cpuload(K+d) 没有影响。简而言之,cpuload(n) 仅受 dmin 先前样本的影响。

另一种看待这个问题的方法是 cpuload(n) 在定义的时间后忘记数据

  • 定义 dmin 的衰减指数,以及
  • 采样频率。

本最终解读给出了1分钟、5分钟、15分钟平均负载的含义。选择衰减和采样间隔,以便这些平均负载分别在 1、5 和 15 分钟后忘记过去。

关于linux - linux 负载计算中的权重是如何选择的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892104/

相关文章:

linux - 使用 gdb 在 Qemu 上调试 init

c - 如何将位图中的位映射到伙伴分配器中的物理页?

angularjs - Angular : how to close a sidenav with the BACK button

c++ - 为什么 c/c++ 浮点类型的命名如此奇怪?

linux - 如何通过 gdbus 发送字典数据类型( a{ias} )?

c - fwrite() 阻止调用并且不写入文件

linux - 我如何知道当前正在运行的内核的隔离 cpu 列表?

c - 防止内核代码中的双 kfree?

jquery - 2008 年 Dojo 发生了什么?

linux - 为什么 open 调用需要两个参数(struct inode *、struct file*)?