Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Sep 2013 09:58:48 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-stable@freebsd.org
Cc:        J David <j.david.lists@gmail.com>, Eric van Gyzen <eric@vangyzen.net>, avg@freebsd.org, dave@mischler.com
Subject:   Re: unexpected idprio 31 behavior on 9.2-BETA2 and 9.2-RC1
Message-ID:  <201309040958.48377.jhb@freebsd.org>
In-Reply-To: <5203AE08.30504@vangyzen.net>
References:  <1375737316.96778.10.camel@firkin.mischler.com> <5203A90D.6020008@vangyzen.net> <5203AE08.30504@vangyzen.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday, August 08, 2013 10:41:12 am Eric van Gyzen wrote:
> On 08/08/2013 09:19, Eric van Gyzen wrote:
> > On 08/06/2013 14:23, J David wrote:
> >> On Tue, Aug 6, 2013 at 1:59 PM, Eric van Gyzen <eric@vangyzen.net> wrote:
> >>>> on an otherwise idle amd64 system with 4 CPUs.  The first command in 
the
> >>>> build.log file:
> >>>>
> >>>>     rm -rf /usr/obj/home/freebsd/tmp
> >>>>
> >>>> took over three minutes.  It should have taken about three /seconds/.
> >>>>
> >>>> "uptime" reported a load average of around 1.00.
> >>>> "top" showed no threads (user or kernel) using CPU.
> >>>> "iostat" showed an average of less than 20 tps on ada0.
> >>>> "rm" was usually in the RUN state.
> >> We are looking at something similar.  Would you be able to try to
> >> reproduce it using a kernel with:
> >>
> >> nooptions	SCHED_ULE
> >> options		SCHED_4BSD
> >>
> >> to see if it makes a difference?  It seems to, but the problem is
> >> inconsistent enough that I can't be sure.
> > The 4BSD scheduler does //not// exhibit this problem.  I tested with the
> > latest releng/9.2 (r254054) and an otherwise GENERIC config.
> 
> To be thorough, I built a GENERIC kernel at the same rev, and it still
> exhibits the problem.

Please try this change:

Index: sched_ule.c
===================================================================
--- sched_ule.c	(revision 255020)
+++ sched_ule.c	(working copy)
@@ -243,7 +243,7 @@ struct tdq {
 	int		tdq_transferable;	/* Transferable thread count. */
 	short		tdq_switchcnt;		/* Switches this tick. */
 	short		tdq_oldswitchcnt;	/* Switches last tick. */
-	u_char		tdq_lowpri;		/* Lowest priority thread. */
+	u_short		tdq_lowpri;		/* Lowest priority thread. */
 	u_char		tdq_ipipending;		/* IPI pending. */
 	u_char		tdq_idx;		/* Current insert index. */
 	u_char		tdq_ridx;		/* Current removal index. */
@@ -2323,7 +2323,7 @@ sched_choose(void)
 		tdq->tdq_lowpri = td->td_priority;
 		return (td);
 	}
-	tdq->tdq_lowpri = PRI_MAX_IDLE;
+	tdq->tdq_lowpri = PRI_MAX_IDLE + 1;
 	return (PCPU_GET(idlethread));
 }
 

-- 
John Baldwin



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