Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Mar 2004 09:23:47 +0900
From:      Taku YAMAMOTO <taku@cent.saitama-u.ac.jp>
To:        freebsd-current@freebsd.org
Subject:   [PATCH] for SCHED_ULE & libpthread issue (was Re: I like SCHED_4BSD)
Message-ID:  <20040312092348.18be60e0.taku@cent.saitama-u.ac.jp>
In-Reply-To: <4050BBCB.50302@cinci.rr.com>
References:  <XFMail.20040310213645.conrads@cox.net> <4050BBCB.50302@cinci.rr.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 11 Mar 2004 14:19:39 -0500
Mike B <meb@cinci.rr.com> wrote:
> Conrad Sabatier wrote:
(snip)
> seconds to redraw the screen. This sluggishness isn't exclusive to 
> firefox, opera and openoffice are noticeably laggy under ULE as well. I 
> WANT to like and use ULE but the performance just isn't there.

I think all of those applications are using libpthread, which utilizes
scheduler activation mechanism.

Unfortunately, due to over-optimization in sched_switch(), SCHED_ULE doesn't
give reasonable CPU time to the threads which are using scheduler activation.

Detailed analisis is described in my previous message posted to current@:
	"SCHED_ULE sometimes puts P_SA processes into ksq_next unnecessarily"
	<20040213063139.71298ea9.taku@cent.saitama-u.ac.jp>
 or
	http://docs.freebsd.org/cgi/mid.cgi?20040213063139.71298ea9.taku
, which didn't get broader audience :(

Until the problem is fully addressed, I will propose following patch
to be applied. (the least intrusive one attached in the former message)

--- sched_ule.c.orig	Fri Feb 13 05:24:48 2004
+++ sched_ule.c	Fri Feb 13 05:37:53 2004
@@ -186,7 +186,7 @@
 #define	SCHED_INTERACTIVE(kg)						\
     (sched_interact_score(kg) < SCHED_INTERACT_THRESH)
 #define	SCHED_CURR(kg, ke)						\
-    (ke->ke_thread->td_priority != kg->kg_user_pri ||			\
+    (ke->ke_thread->td_priority < kg->kg_user_pri ||			\
     SCHED_INTERACTIVE(kg))
 
 /*
@@ -1166,11 +1166,8 @@
 	 */
 	if ((ke->ke_flags & KEF_ASSIGNED) == 0) {
 		if (TD_IS_RUNNING(td)) {
-			if (td->td_proc->p_flag & P_SA) {
-				kseq_load_rem(KSEQ_CPU(ke->ke_cpu), ke);
-				setrunqueue(td);
-			} else 
-				kseq_runq_add(KSEQ_SELF(), ke);
+			kseq_load_rem(KSEQ_CPU(ke->ke_cpu), ke);
+			setrunqueue(td);
 		} else {
 			if (ke->ke_runq) {
 				kseq_load_rem(KSEQ_CPU(ke->ke_cpu), ke);


-- 
-|-__    YAMAMOTO, Taku  <taku@cent.saitama-u.ac.jp>
 | __ <



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040312092348.18be60e0.taku>