On Sun, 11 Jun 2000, Luigi Rizzo wrote:
> Hi,
> i understand that this means maybe a somwthat
> large change in the system, but what do you think
> if we have a lok at implementing the CPU scheduler using
> weights instead of strict priorities ?
> Do we have parts of the kernel which rely on priority
> to implement locking etc ?
>
> This would not be too different from what the EclipseBSD people
> did, and the code i recently committed to dummynet can be easily
> reused to this purpose, and it is efficient.
>
> With a little bit of guidance (I am not too familiar with that area
> of the code) i think we can do something good with little
> effort.
I've been thinking about this a lot. As for the current scheduler, a
NICE_WEIGHT of 1.8 seems to work nicely; see the attached patch. I
have been looking more into making things more like Eclipse. I have to
say I'm very impressed with their work in implementing QoS, and we
would do well to update some of our ancient designs to a model that
resembles theirs. I'm looking at their process and disk scheduler now,
after reading their network scheduling paper from the Usenix proceedings.
I'm very interested in finding a better algorithm than the current one,
yes :)
> cheers
> luigi
--
Brian Fundakowski Feldman \ FreeBSD: The Power to Serve! /
[EMAIL PROTECTED] `------------------------------'
Index: sys/kern/kern_synch.c
===================================================================
RCS file: /usr2/ncvs/src/sys/kern/kern_synch.c,v
retrieving revision 1.95
diff -u -r1.95 kern_synch.c
--- sys/kern/kern_synch.c 2000/07/04 11:25:23 1.95
+++ sys/kern/kern_synch.c 2000/07/08 00:20:23
@@ -916,7 +916,7 @@
if (p->p_rtprio.type == RTP_PRIO_NORMAL) {
newpriority = PUSER + p->p_estcpu / INVERSE_ESTCPU_WEIGHT +
- NICE_WEIGHT * (p->p_nice - PRIO_MIN);
+ (p->p_nice - PRIO_MIN) * NICE_WEIGHT;
newpriority = min(newpriority, MAXPRI);
p->p_usrpri = newpriority;
}
Index: sys/sys/proc.h
===================================================================
RCS file: /usr2/ncvs/src/sys/sys/proc.h,v
retrieving revision 1.106
diff -u -r1.106 proc.h
--- sys/sys/proc.h 2000/06/22 22:27:16 1.106
+++ sys/sys/proc.h 2000/07/08 00:21:14
@@ -405,10 +405,10 @@
* the range 100-256 Hz (approximately).
*/
#define INVERSE_ESTCPU_WEIGHT 8 /* 1 / (priorities per estcpu level)
*/
-#define NICE_WEIGHT 1 /* priorities per nice level */
+#define NICE_WEIGHT 9 / 5 /* priorities per nice level */
#define PPQ (128 / NQS) /* priorities per queue */
#define ESTCPULIM(e) \
- min((e), INVERSE_ESTCPU_WEIGHT * (NICE_WEIGHT * PRIO_TOTAL - PPQ) + \
+ min((e), INVERSE_ESTCPU_WEIGHT * (PRIO_TOTAL * NICE_WEIGHT - PPQ) + \
INVERSE_ESTCPU_WEIGHT - 1)
extern u_long ps_arg_cache_limit;