[PATCH] for SCHED_ULE & libpthread issue (was Re: I like
SCHED_4BSD)
Taku YAMAMOTO
taku at cent.saitama-u.ac.jp
Thu Mar 11 16:23:54 PST 2004
On Thu, 11 Mar 2004 14:19:39 -0500
Mike B <meb at 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 at 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 at cent.saitama-u.ac.jp>
| __ <
More information about the freebsd-current
mailing list