diff options
author | davidxu <davidxu@FreeBSD.org> | 2006-06-13 13:12:56 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2006-06-13 13:12:56 +0000 |
commit | 82b666ed4a1c655e74f606994b240c188d1f4a4d (patch) | |
tree | a9fec91142711752b931300f2309e4de17526aad /sys/conf | |
parent | 569fed19c7183960be11bec68284107dc89c362f (diff) | |
download | FreeBSD-src-82b666ed4a1c655e74f606994b240c188d1f4a4d.zip FreeBSD-src-82b666ed4a1c655e74f606994b240c188d1f4a4d.tar.gz |
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 2.6.8.1 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.
Diffstat (limited to 'sys/conf')
-rw-r--r-- | sys/conf/NOTES | 1 | ||||
-rw-r--r-- | sys/conf/files | 1 | ||||
-rw-r--r-- | sys/conf/options | 1 |
3 files changed, 3 insertions, 0 deletions
diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 31d195d..a9618b4 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -166,6 +166,7 @@ options ROOTDEVNAME=\"ufs:da0s2e\" # over time. # options SCHED_4BSD +#options SCHED_CORE #options SCHED_ULE ##################################################################### diff --git a/sys/conf/files b/sys/conf/files index 8455bc8..2be0954 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1324,6 +1324,7 @@ kern/linker_if.m standard kern/md4c.c optional netsmb kern/md5c.c standard kern/sched_4bsd.c optional sched_4bsd +kern/sched_core.c optional sched_core kern/sched_ule.c optional sched_ule kern/serdev_if.m optional puc | scc kern/subr_autoconf.c standard diff --git a/sys/conf/options b/sys/conf/options index e55fc8f..19cca6f 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -128,6 +128,7 @@ PPS_SYNC opt_ntp.h PREEMPTION opt_sched.h QUOTA SCHED_4BSD opt_sched.h +SCHED_CORE opt_sched.h SCHED_ULE opt_sched.h SHOW_BUSYBUFS SLEEPQUEUE_PROFILING |