summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-06-13 13:12:56 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-06-13 13:12:56 +0000
commit82b666ed4a1c655e74f606994b240c188d1f4a4d (patch)
treea9fec91142711752b931300f2309e4de17526aad /sys/i386
parent569fed19c7183960be11bec68284107dc89c362f (diff)
downloadFreeBSD-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/i386')
-rw-r--r--sys/i386/conf/GENERIC1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC
index 9300993..4fcbb7a 100644
--- a/sys/i386/conf/GENERIC
+++ b/sys/i386/conf/GENERIC
@@ -30,6 +30,7 @@ makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
#options SCHED_ULE # ULE scheduler
options SCHED_4BSD # 4BSD scheduler
+#options SCHED_CORE # CORE scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
options INET6 # IPv6 communications protocols
OpenPOWER on IntegriCloud