Skip to the content.

sched PELT

这组实验不是为了“证明调度器怎么选进程”,而是为了直接观察 PELT 的 3 类核心信号:

最直接的观察入口是:

通用观察命令

程序跑起来后,先记下输出中的 pidtid

watch -n 0.2 "grep -E 'se.avg|load_avg|runnable_avg|util_avg|util_est' /proc/<tid>/sched"

(不过的确,是需要理解这个输出的)

🧀  grep -E 'se.avg|load_avg|runnable_avg|util_avg|util_est' /proc/self/sched
se.avg.load_sum                              :                47355
se.avg.runnable_sum                          :             24223524
se.avg.util_sum                              :             24223524
se.avg.load_avg                              :                 1024
se.avg.runnable_avg                          :                  510
se.avg.util_avg                              :                  510
se.avg.last_update_time                      :      452700891902976
se.avg.util_est                              :                    0

实验 1: 一直跑

./pelt-busy-demo.out 10 1

这个程序会把自己绑到一个 CPU 上持续忙跑 10 秒。

预期现象:

要点:

实验 2: 跑一会,睡一会

./pelt-burst-demo.out 10 1 5 20

参数含义:

预期现象:

要点:

实验 3: 两个线程抢一个 CPU

./pelt-contention-demo.out 10 1

这个程序会创建两个 SCHED_OTHER 线程,绑到同一个 CPU,同时忙跑。

预期现象:

这个实验最想说明的是:

一个好用的对照顺序

按下面顺序跑,最容易建立直觉:

  1. ./pelt-busy-demo.out 10 1
  2. ./pelt-burst-demo.out 10 1 5 20
  3. ./pelt-contention-demo.out 10 1

对照关系:

几个容易混的点

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。