lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ