summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_synch.c
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1999-02-22 16:57:48 +0000
committerbde <bde@FreeBSD.org>1999-02-22 16:57:48 +0000
commitd51135c0c3ce43b173e455e0e5a42cf324e3e282 (patch)
tree66a439581aefbaba2f0a011c5e92e24bcc7ef58a /sys/kern/kern_synch.c
parent4e6745d688eb7cb27f48a71861157be87705f8c1 (diff)
downloadFreeBSD-src-d51135c0c3ce43b173e455e0e5a42cf324e3e282.zip
FreeBSD-src-d51135c0c3ce43b173e455e0e5a42cf324e3e282.tar.gz
Improved scheduling in uiomove(), etc. resched_wanted() is true too
often for it to be a good criterion for switching kernel cpu hogs -- it is true after most wakeups. Use the criterion "has been running for >= 2 quanta" instead.
Diffstat (limited to 'sys/kern/kern_synch.c')
-rw-r--r--sys/kern/kern_synch.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index f8baf85..bea45f7 100644
--- a/sys/kern/kern_synch.c
+++ b/sys/kern/kern_synch.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_synch.c 8.9 (Berkeley) 5/19/95
- * $Id: kern_synch.c,v 1.71 1999/01/08 17:31:10 eivind Exp $
+ * $Id: kern_synch.c,v 1.72 1999/01/10 01:58:24 eivind Exp $
*/
#include "opt_ktrace.h"
@@ -66,6 +66,7 @@ static void rqinit __P((void *));
SYSINIT(runqueue, SI_SUB_RUN_QUEUE, SI_ORDER_FIRST, rqinit, NULL)
u_char curpriority; /* usrpri of curproc */
+int hogticks;
int lbolt; /* once a second sleep address */
static void endtsleep __P((void *));
@@ -94,6 +95,7 @@ sysctl_kern_quantum SYSCTL_HANDLER_ARGS
error = EINVAL;
}
}
+ hogticks = 2 * (hz / quantum);
return (error);
}
@@ -360,6 +362,7 @@ sleepinit()
{
int i;
+ hogticks = 2 * (hz / quantum);
for (i = 0; i < TABLESIZE; i++)
TAILQ_INIT(&slpque[i]);
}
@@ -828,6 +831,8 @@ mi_switch()
p->p_switchtime = switchtime;
else
microuptime(&p->p_switchtime);
+ switchticks = ticks;
+
splx(x);
}
OpenPOWER on IntegriCloud