如何selectLinux负载计算的权重?

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

如果我们将cpuload(1)定义为CPU负载1min的第一个计算,而active()作为返回系统中状态为“running”或“runnable”的进程数的函数,那么内核使用的公式计算第n个 CPU的负载1min是:

在这里输入图像说明

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

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


也许这是有帮助的,除了上面的recursion定义之外,我发布了cpuload(n)的显式公式(单击鼠标右键以查看全尺寸):

在这里输入图像说明

考虑一个特定的负载样本活动(K) ,以及该样本对于增加d值的贡献大小(K + d) 。 有几个关键的意见:

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

在一起,这些点意味着有dmin这样d> dmin活动(K)W(d)= 0 ,所以活动(K)Cpuload(K + d)没有影响。 简而言之, cpuload(n)只受到dmin先前样本的影响。

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

  • 衰变指数,它定义了dmin ,和
  • 采样频率。

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

我猜他们希望一个正在运行的进程的贡献的平均寿命是一分钟。