Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Apr 2004 03:32:30 +0300
From:      Nikos Ntarmos <ntarmos@ceid.upatras.gr>
To:        current@FreeBSD.org
Subject:   P_NOLOAD + ULE = high load averages
Message-ID:  <20040421003230.GA17810@diogenis.ceid.upatras.gr>

next in thread | raw e-mail | index | archive | help

--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi all.

There was a thread on "unusually high load averages" when running
under sched_ule, which (afaik) came at an abrupt halt in January 2004.
Anyway, I've been looking at this thing lately and have come to
believe that "pagezero" is (one of) the culprit(s). IMO the source of
the problem lies in /sys/kern/sched_ule.c having no provision for
processes with P_NOLOAD set. With pagezero not running at PRI_ITHD,
kseq_load_{add,rem} count pagezero as oh-another-normal-process, thus
the "expected-plus-one" load reported in the above thread. The
attached diff should fix this (at least it has fixed it here --
running 5.2-CURRENT on a PCA56, just cvsup'ed from
cvsup.gr.freebsd.org). Could someone please review/commit the changes
or should I better send-pr it?

\n\n

-- 
 Nikos "Noth" Ntarmos    | < ntarmos at ceid dot upatras dot gr >
 NetCINS Lab. @ C.E.I.D. | [ http://{noth,p2p}.ceid.upatras.gr/ ]
 U. of Patras - Greece   | ( 38.2594N, 21.7428E ) ( 1024D / CF95160A )

--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="sched_ule+P_NOLOAD.patch"

--- sys/kern/sched_ule.c.orig   Wed Apr 21 03:10:29 2004
+++ sys/kern/sched_ule.c        Wed Apr 21 03:20:34 2004
@@ -357,7 +357,7 @@
        if (class == PRI_TIMESHARE)
                kseq->ksq_load_timeshare++;
        kseq->ksq_load++;
-       if (class != PRI_ITHD)
+       if (class != PRI_ITHD && (ke->ke_proc->p_flag & P_NOLOAD) == 0)
 #ifdef SMP
                kseq->ksq_group->ksg_load++;
 #else
@@ -380,7 +380,7 @@
        class = PRI_BASE(ke->ke_ksegrp->kg_pri_class);
        if (class == PRI_TIMESHARE)
                kseq->ksq_load_timeshare--;
-       if (class != PRI_ITHD)
+       if (class != PRI_ITHD  && (ke->ke_proc->p_flag & P_NOLOAD) == 0)
 #ifdef SMP
                kseq->ksq_group->ksg_load--;
 #else

--IJpNTDwzlM2Ie8A6--



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