[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20140928211321.GB8349@mtj.dyndns.org>
Date: Sun, 28 Sep 2014 17:13:21 -0400
From: Tejun Heo <tj@...nel.org>
To: Joe Lawrence <joe.lawrence@...atus.com>
Cc: linux-kernel@...r.kernel.org
Subject: Re: schedule_delayed_work with a 0 jiffy delay
Hello, Joe.
On Sun, Sep 28, 2014 at 12:39:34PM -0400, Joe Lawrence wrote:
> On Sun, 28 Sep 2014, Tejun Heo wrote:
> > Hello, Joe.
> >
> > On Fri, Sep 26, 2014 at 10:52:27AM -0400, Joe Lawrence wrote:
> > ...
> > > I was wondering if such behavior was expected on !PREEMPT kernels,
> > > especially after b22ce2785d97 "workqueue: cond_resched() after
> > > processing each work item". In the ftraces I've observed from the RCU
> > > stall, cond_resched() never seems to schedule. Under what conditions
> > > would it be expected to do so?
> >
> > Hmmm... it should yield if there's a higher priority task scheduled.
> > Maybe the workqueue in question is a highpri one?
>
> I don't believe any high priority tasks or workqueues are involved here.
> Consider a synthetic repro module like:
...
> When I load this, "kworker/4:1" goes to 100% CPU and the RCU grace
> periods reported by rcusched freeze on CPU4 for minutes at a time.
>
> > > Changing the worker function to reschedule with at least 1 jiffy avoids
> > > this problem -- I was just curious if a fix at that end was appropriate.
> >
> > The fact that 0 delay means immediate execution is depended upon in
> > multiple places and changing it will break other things. The
> > workqueue user itself sounds buggy to me. Can't that be fixed?
>
> Certainly modifying the workqueue user should be sufficient here. I was
> only wondering if the cond_resched in process_one_work was expected to
> give the CPU some breathing room in this scenario.
It yields iff there are other higher priority tasks to run. I haven't
dug the code but if sched RCU is using and sched RCU implements grace
periods passively (e.g. something like if all tasks have switched
since point X), cond_resched() is gonna be able stall RCU grace
periods by running continuously in the absense of higher priority task
to run on the same CPU.
That said, RCU could have implemented a workaround for situations like
that in the meantime so it could be worthwhile to test mainline.
Thanks.
--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists