ULE 3.0
Jeff提交了ULE调度器的3.0版(sched_ule.c,v 1.200,巧合?:) 这个版本对调度器本身的上锁进行了细化,从而带来了性能改善(最上面那根黄线,之前是下面那根青色的线)。
共 7 篇文章。
Jeff提交了ULE调度器的3.0版(sched_ule.c,v 1.200,巧合?:) 这个版本对调度器本身的上锁进行了细化,从而带来了性能改善(最上面那根黄线,之前是下面那根青色的线)。
Today, Jeff Roberson has committed his version 2.0 ULE scheduler. This new version has addressed several design issues as well as several bugs.
The new scheduler has adopted a circular queue, instead of the double-queue structure which is also found in the Linux O(1) scheduler. The latter has lead to difficulty implementing nice correctly.
For uniprocessor case, ULE is now faster.
MP algorithm has been simplified a bit.
A lot of bugfixes, etc.
To quote the original commit message:
ULE 2.0:
Bug fixes/Clean up:
Tested on: up x86/amd64, 8way amd64.
今天 David Xu commit了他的新调度器(SCHED_CORE),这个调度器基于ULE调度器,但改变了一系列算法。打算抽时间好好看一看代码。
Now I got (partially) the point:
Interestingly this does not happen in !PREEMPTION case.
Now my question are:
I have done several experiments/asserts to ensure that the panic is related to ULE+PREEMPTION case only.
ULE: no panic
4BSD: no panic
4BSD+PREEMPTION: no panic
My latest progress is that I found that sched_switch in ULE for the threaded case, can decide whether subsequent call would panic. Investigating.
You can obtain latest list from sys/sys/proc.h:
| |
It seems that I have hit a bug, where kseq_nice_rem is being called too much. Have read the code and added some KASSERT/MPASS’es.