Message ID | 1391197986-12774-1-git-send-email-zoran.markovic@linaro.org |
---|---|
State | New |
Headers | show |
Signed-off-by: Zoran Markovic <zoran.markovic@linaro.org> On 31 January 2014 11:53, Zoran Markovic <zoran.markovic@linaro.org> wrote: > From: Shaibal Dutta <shaibal.dutta@broadcom.com> > > For better use of CPU idle time, allow the scheduler to select the CPU > on which the SRCU grace period work would be scheduled. This improves > idle residency time and conserves power. > > This functionality is enabled when CONFIG_WQ_POWER_EFFICIENT is selected. > > Cc: Lai Jiangshan <laijs@cn.fujitsu.com> > Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > Cc: Dipankar Sarma <dipankar@in.ibm.com> > Signed-off-by: Shaibal Dutta <shaibal.dutta@broadcom.com> > [zoran.markovic@linaro.org: Rebased to latest kernel version. Added commit > message. Fixed code alignment.] > --- > kernel/rcu/srcu.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c > index 3318d82..a1ebe6d 100644 > --- a/kernel/rcu/srcu.c > +++ b/kernel/rcu/srcu.c > @@ -398,7 +398,7 @@ void call_srcu(struct srcu_struct *sp, struct rcu_head *head, > rcu_batch_queue(&sp->batch_queue, head); > if (!sp->running) { > sp->running = true; > - schedule_delayed_work(&sp->work, 0); > + queue_delayed_work(system_power_efficient_wq, &sp->work, 0); > } > spin_unlock_irqrestore(&sp->queue_lock, flags); > } > @@ -674,7 +674,8 @@ static void srcu_reschedule(struct srcu_struct *sp) > } > > if (pending) > - schedule_delayed_work(&sp->work, SRCU_INTERVAL); > + queue_delayed_work(system_power_efficient_wq, > + &sp->work, SRCU_INTERVAL); > } > > /* > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
On Sat, Feb 15, 2014 at 7:24 AM, Kevin Hilman <khilman@linaro.org> wrote: > From 902a2b58d61a51415457ea6768d687cdb7532eff Mon Sep 17 00:00:00 2001 > From: Kevin Hilman <khilman@linaro.org> > Date: Fri, 14 Feb 2014 15:10:58 -0800 > Subject: [PATCH] workqueue: for NO_HZ_FULL, set default cpumask to > !tick_nohz_full_mask > > To help in keeping NO_HZ_FULL CPUs isolated, keep unbound workqueues > from running on full dynticks CPUs. To do this, set the default > workqueue cpumask to be the set of "housekeeping" CPUs instead of all > possible CPUs. > > This is just just the starting/default cpumask, and can be overridden > with all the normal ways (NUMA settings, apply_workqueue_attrs and via > sysfs for workqueus with the WQ_SYSFS attribute.) > > Cc: Tejun Heo <tj@kernel.org> > Cc: Paul McKenney <paulmck@linux.vnet.ibm.com> > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Signed-off-by: Kevin Hilman <khilman@linaro.org> > --- > kernel/workqueue.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/kernel/workqueue.c b/kernel/workqueue.c > index 987293d03ebc..9a9d9b0eaf6d 100644 > --- a/kernel/workqueue.c > +++ b/kernel/workqueue.c > @@ -48,6 +48,7 @@ > #include <linux/nodemask.h> > #include <linux/moduleparam.h> > #include <linux/uaccess.h> > +#include <linux/tick.h> > > #include "workqueue_internal.h" > > @@ -3436,7 +3437,11 @@ struct workqueue_attrs *alloc_workqueue_attrs(gfp_t gfp_mask) > if (!alloc_cpumask_var(&attrs->cpumask, gfp_mask)) > goto fail; > > +#ifdef CONFIG_NO_HZ_FULL > + cpumask_complement(attrs->cpumask, tick_nohz_full_mask); > +#else > cpumask_copy(attrs->cpumask, cpu_possible_mask); > +#endif > return attrs; > fail: > free_workqueue_attrs(attrs); Can we play with this mask at runtime? I thought a better idea would be to keep this mask as mask of all CPUs initially and once any CPU enters NO_HZ_FULL mode we can remove that from mask? And ones it leaves that mode we can get that added again.. I am looking to use similar concept in case of un-pinned timers with my activity around cpuset.quiesce option.. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c index 3318d82..a1ebe6d 100644 --- a/kernel/rcu/srcu.c +++ b/kernel/rcu/srcu.c @@ -398,7 +398,7 @@ void call_srcu(struct srcu_struct *sp, struct rcu_head *head, rcu_batch_queue(&sp->batch_queue, head); if (!sp->running) { sp->running = true; - schedule_delayed_work(&sp->work, 0); + queue_delayed_work(system_power_efficient_wq, &sp->work, 0); } spin_unlock_irqrestore(&sp->queue_lock, flags); } @@ -674,7 +674,8 @@ static void srcu_reschedule(struct srcu_struct *sp) } if (pending) - schedule_delayed_work(&sp->work, SRCU_INTERVAL); + queue_delayed_work(system_power_efficient_wq, + &sp->work, SRCU_INTERVAL); } /*