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;

Reply via email to