void jyy() { // 最低优先级
mutex_lock(&wc_lock);
// 先到先得
}
void xi_zhu_ren() { // 中优先级
while (1) ;
}
void xiao_zhang() { // 高优先级
sleep(1);
mutex_lock(&wc_lock);
...
}
jyy 在持有互斥锁的时候被赶下了处理器……
Sojourner “探路者” (PathFinder)
bc_dist
task: 分发任务 (中)bc_sched
task: 总线调度 (高)select -> pipeIoctl -> selNodeAdd -> mutex_lock
pipeWrite -> mutex_lock
Linux: 解决不了,CFS 凑合用吧
实时系统:火星车在 CPU Reset,不能摆烂啊
还没完:我们的计算机系统可是多核心、多线程的!
“And you have to realize that there are not very many things that have aged as well as the scheduler. Which is just another proof that scheduling is easy.” ——Linus Torvalds, 2001
Linus 以为调度是个挺简单的问题?
既不能简单地 “分配线程到处理器”
也不能简单地 “谁空丢给谁”
多处理器调度的两难境地
组里有一台 64-core 的服务器
更糟糕的是,优先级解决不了这个问题……
namespaces (7), cgroups (7)
Snapdragon 888
“Dark silicon” 时代的困境
软件可以配置 CPU 的工作模式
共享内存只是假象
基本的假设可能不再成立
$ time taskset -c 0 ./a.out
$ time taskset -c 0,1 ./a.out
分配了 1/2 的处理器资源,反而速度更快了
😂😂😂 我讲不下去了
复杂的系统无人可以掌控