Date: Tue, 13 Jun 2006 13:12:57 +0000 (UTC) From: David Xu <davidxu@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: 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 GENERIC Message-ID: <200606131312.k5DDCvbZ034813@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
davidxu 2006-06-13 13:12:57 UTC FreeBSD src repository Modified files: sys/conf NOTES files options sys/kern kern_clock.c kern_switch.c sched_4bsd.c sched_ule.c sys/sys sched.h sys/i386/conf GENERIC sys/amd64/conf GENERIC Added files: sys/kern sched_core.c Log: 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. 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200606131312.k5DDCvbZ034813>