2024年6月14日 星期五

Linux System Load Average

Linux 的系統平均負載可在 uptimetop、cat /proc/loadavg、w(ho) 等看到,有三組數字,分別表示最近 1 分鐘、5 分鐘、和 15 分鐘的平均負載。

平均負載在 Linux kernel 紀錄在 avenrun[],每 5 秒更新一次,公式為

new = old * exp_n + active * (1 - exp_n)

採用定點表示,計算式變成

new = old * EXP_N + active * (FIXED_1 - EXP_N);
if (active >= old)
    new += FIXED_1 - 1;
new /= FIXED_1;

小數部份有 11 bits,相乘擴充為 22 bits,所以精確度為 10 bits 整數,加上 11 bits 小數。FIXED_1 為 1.0,是 (1<<11)。EXP_N 在 1 分鐘、5 分鐘、和 15 分鐘分別是

#define EXP_1   1884    /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5   2014    /* 1/exp(5sec/5min) */
#define EXP_15  2037    /* 1/exp(5sec/15min) */

1/exp5/60 * FIXED_1 = 1884

包含 TASK_UNINTERRUPTIBLE?

參考

  1. Dr. Neil Gunther 的 UNIX Load Average Part 1: How It Works, Part 2: Not Your Average Average

https://hackmd.io/@RinHizakura/S1K4fQtaF

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...