Load average(下面用 load avg 代替)用来表示进程对系统资源的需求情况 在 Linux 上计算 load avg 的时候包含了 Runnable/Running(R 状态)和 Sleeping Uninterruptible(D 状态)的进程.
每个进程占用 CPU 的时间是有限的,当前未能占用的进程会被安排在 run queue 里等待 CPU 的下一次调度. load avg 的值反映了 run queue 中等待 CPU 的进程数量情况.进程越多,load avg 值越大.
根据wikipedia的介绍,run queue 有两种模型:
我的问题是
1
libook 2022-02-21 10:16:01 +08:00
没研究过这个东西。
粗略看了一下 Wikipedia ,有这么一句话:“In the Linux operating system (prior to kernel 2.6.23), each CPU in the system is given a run queue, which maintains both an active and expired array of processes. ”就是说每个 CPU 有一个 runqueue 。 还有一句话是:“In UNIX or Linux, the sar command is used to check the run queue. ” 你可以 man sar 看看这个指令怎么用。 |
2
libook 2022-02-21 10:19:16 +08:00
|
3
Davic1 OP @libook sar 只会显示一个 r 列 所以我不太明白他究竟是代表 1 个 queue 还是说把所有 queue 的 TASK 数量都加在一起然后显示成 1 列....
|
4
libook 2022-02-21 12:27:05 +08:00 2
可以看一下源码 https://github.com/torvalds/linux/blob/master/kernel/sched/core.c
我问了对 Kernel 开发比较了解的朋友,说现在 Linux 都是每个 CPU 有一个 runqueue 。 |
6
guoooo00oohao 2022-03-21 15:16:45 +08:00
可以在 /proc/sched_debug 中看到每 cpu 的 running queue 的情况.
load 的负载还与 .nr_uninterruptible. 有直接关系. |