# 2025q1 Homework3 (kxo) contributed by < `HeatCrab` > {%hackmd NrmQUGbRQWemgwPfhzXj6g %} ## 開發環境 ```shell $ gcc --version gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 39 bits physical, 48 bits virtual CPU(s): 12 On-line CPU(s) list: 0-11 Thread(s) per core: 2 Core(s) per socket: 6 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 151 Model name: 12th Gen Intel(R) Core(TM) i5-12400 Stepping: 5 CPU MHz: 800.000 (根據 CPU(s) scaling MHz: 18% 和 max/min 推算) CPU max MHz: 4400.0000 CPU min MHz: 800.0000 BogoMIPS: 4992.00 Virtualization: VT-x L1d cache: 288 KiB L1i cache: 192 KiB L2 cache: 7.5 MiB L3 cache: 18 MiB NUMA node0 CPU(s): 0-11 ``` 在作業三的 [Load Average](https://hackmd.io/@sysprog/linux2025-kxo/%2F%40sysprog%2Flinux2025-kxo-a#Load-Average) 說明中提到 Linux 核心計算 load average 的公式是使用指數平滑運算([Exponential smoothing](https://en.wikipedia.org/wiki/Exponential_smoothing))推導而成的。指數平滑運算公式的公式定義如下:$$ S_t = \alpha \times X_t + (1 - \alpha) \times S_{t-1}, where \ 0 < α < 1 $$ 但是在作業說明中使用的是:$$ S_t = \alpha \times X_{t-1} + (1 - \alpha) \times S_{t-1}, where \ 0 < α < 1 $$ 可以發現兩者在定義實際值 $X$ 的時間點不同,兩個都可以使用,但若是要推導到 Linux 核心使用的公式的話,應該要使用 $X_t$ 而非 $X_{t-1}$ 。原因如下: Linux 核心在 `include/linux/sched/loadavg.h` 中使用的公式: ```c newload = load * exp + active * (FIXED_1 - exp); ``` `active` 這個變數根據定義是 =='RUNNABLE + TASK_UNINTERRUPTIBLE' Process 總數==,也就是 `calc_load_tasks` 這個全域變數。所以 `active` 是 `newload` 當下時間點的實際值,應該要是 $X_t$ 而非 $X_{t-1}$ ? 此外,從原本的指數平滑公式推導至 Linux 核心使用的 load averge 公式,我有些疑惑。原本的 $\alpha$ 在指數平滑公式代表的是平滑因子,依據泰勒展開後得到近似值是:$$ \alpha \approx \frac{\Delta T}{\tau} $$ 可是 Linux 核心使用的 `exp` 變數是 $e^{-\frac{\text{interval}}{\text{window}}}$ ,又因為他是定點數,也可以說 $exp = \alpha \ \times \ FIXED\_1$ 。 那問題就來了,原本的指數平滑公式, $X_t$ 是直接乘上 $\alpha$ ,而 $S_{t-1}$ 則是乘上 $(1-\alpha)$ ,我的理解是 $\alpha$ 在此處是代表一個權重,如果 $\alpha$ 的值越靠近 $1$ ,則 $S_t$ 受到 $X_t$ 值的影響越大,反之, $\alpha$ 越靠近 $0$ 則 $S_{t-1}$ 的影響較大。相較於原本的指數平滑公式,Linux 核心使用的公式不是直觀的直接使用原本的指數平滑公式而來的,而是調整了一下 `load` $(S_{t-1})$ 與 `active` $(X_t)$ 的乘數對像。但是同理來說,如果 `exp` 的值越靠近 $FIXED\_1$ ,則 `load` 對於 `newload` 的影響就越大,反之 `active` 對於 `newload` 的影響就越大?是這樣子想的嗎? 如果真是這樣,那我會覺得說為什麼要畫蛇添足改變原本的指數平滑公式中定義的乘數對象? 是因為 `load` 才是 `newload` 變數影響的主因,所以讓他直接乘上 `exp` ,而不是如同原本的指數平滑公式一樣直接讓 `active` 乘上 `exp` 呢?或是有其他的原因嗎? :::danger 後續探討呢? :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up