cvs commit: src/sys/conf NOTES files options src/sys/kern
kern_clock.c kern_switch.c sched_4bsd.c sched_core.c sched_ule.c
src/sys/sys sched.h src/sys/i386/conf GENERIC src/sys/amd64/conf
davidxu at FreeBSD.org
Tue Jun 13 13:15:16 UTC 2006
davidxu 2006-06-13 13:12:57 UTC
FreeBSD src repository
sys/conf NOTES files options
sys/kern kern_clock.c kern_switch.c sched_4bsd.c
Add scheduler CORE, the work I have done half a year ago, recent,
I picked it up again. The scheduler is forked from ULE, but the
algorithm to detect an interactive process is almost completely
different with ULE, it comes from Linux paper "Understanding the
Linux 188.8.131.52 CPU Scheduler", although I still use same word
"score" as a priority boost in ULE scheduler.
Briefly, the scheduler has following characteristic:
1. Timesharing process's nice value is seriously respected,
timeslice and interaction detecting algorithm are based
on nice value.
2. per-cpu scheduling queue and load balancing.
3. O(1) scheduling.
4. Some cpu affinity code in wakeup path.
5. Support POSIX SCHED_FIFO and SCHED_RR.
Unlike scheduler 4BSD and ULE which using fuzzy RQ_PPQ, the scheduler
uses 256 priority queues. Unlike ULE which using pull and push, the
scheduelr uses pull method, the main reason is to let relative idle
cpu do the work, but current the whole scheduler is protected by the
big sched_lock, so the benefit is not visible, it really can be worse
than nothing because all other cpu are locked out when we are doing
balancing work, which the 4BSD scheduelr does not have this problem.
The scheduler does not support hyperthreading very well, in fact,
the scheduler does not make the difference between physical CPU and
logical CPU, this should be improved in feature. The scheduler has
priority inversion problem on MP machine, it is not good for
realtime scheduling, it can cause realtime process starving.
As a result, it seems the MySQL super-smack runs better on my
Pentium-D machine when using libthr, despite on UP or SMP kernel.
Revision Changes Path
1.459 +1 -0 src/sys/amd64/conf/GENERIC
1.1366 +1 -0 src/sys/conf/NOTES
1.1124 +1 -0 src/sys/conf/files
1.546 +1 -0 src/sys/conf/options
1.449 +1 -0 src/sys/i386/conf/GENERIC
1.189 +1 -0 src/sys/kern/kern_clock.c
1.122 +6 -1 src/sys/kern/kern_switch.c
1.82 +5 -0 src/sys/kern/sched_4bsd.c
1.1 +2329 -0 src/sys/kern/sched_core.c (new)
1.163 +5 -0 src/sys/kern/sched_ule.c
1.25 +1 -0 src/sys/sys/sched.h
More information about the cvs-all