From: Tejun Heo <tj@kernel.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: pjt@google.com, paul.mckenney@linaro.org, tglx@linutronix.de,
suresh.b.siddha@intel.com, venki@google.com, mingo@redhat.com,
peterz@infradead.org, rostedt@goodmis.org,
linaro-kernel@lists.linaro.org, robin.randhawa@arm.com,
Steve.Bannister@arm.com, Liviu.Dudau@arm.com,
charles.garcia-tobin@arm.com, Arvind.Chauhan@arm.com,
linux-rt-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH V3 3/7] workqueue: Add helpers to schedule work on any cpu
Date: Wed, 20 Mar 2013 17:12:11 -0700 [thread overview]
Message-ID: <20130321001211.GC31256@htj.dyndns.org> (raw)
In-Reply-To: <fb2e721fc43fbc3517a7ebb905aa573b12bb83a5.1363617402.git.viresh.kumar@linaro.org>
Hello, Viresh.
On Mon, Mar 18, 2013 at 08:53:25PM +0530, Viresh Kumar wrote:
> queue_work() queues work on current cpu. This may wake up an idle CPU, which is
> actually not required.
>
> Some of these works can be processed by any CPU and so we must select a non-idle
> CPU here. The initial idea was to modify implementation of queue_work(), but
> that may end up breaking lots of kernel code that would be a nightmare to debug.
>
> So, we finalized to adding new workqueue interfaces, for works that don't depend
> on a cpu to execute them.
>
> This patch adds following new routines:
> - queue_work_on_any_cpu
> - queue_delayed_work_on_any_cpu
>
> These routines would look for the closest (via scheduling domains) non-idle cpu
> (non-idle from schedulers perspective). If the current cpu is not idle or all
> cpus are idle, work will be scheduled on local cpu.
For some reason, I've been always unsure about this patchset. I've
been thinking about it past few days and I think I now know why.
I can see that strategy like this being useful for timer, and
impressive power saving numbers BTW - we definitely want that. While
workqueue shares a lot of attributes with timers, there's one
important difference - scheduler is involved in work item executions.
Work item scheduling for per-cpu work items artificially removes the
choice of CPU from the scheduler with the assumption that such
restrictions would lead to lower overall overhead. There is another
variant of workqueue - WQ_UNBOUND - when such assumption wouldn't hold
too well and it would be best to give the scheduler full latitude
regarding scheduling work item execution including choice of CPU.
Now, this patchset, kinda sorta adds back CPU selection by scheduler
in an ad-hoc way, right? If we're gonna do that, why not just make it
unbound workqueues? Then, the scheduler would have full discretion
over them and we don't need to implement this separate ad-hoc thing on
the side. It's the roundaboutness that bothers me.
I'm not sure about other workqueues but the block one can be very
performance sensitive on machines with high IOPS and it would
definitely be advisable to keep it CPU-affine unless power consumption
is the overriding concern, so how about introducing another workqueue
flag, say WQ_UNBOUND_FOR_POWER (it's terrible, please come up with
something better), which is WQ_UNBOUND on configurations where this
matters and becomes noop if not?
Thanks.
--
tejun
next prev parent reply other threads:[~2013-03-21 0:12 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-18 15:23 [PATCH V3 0/7] Create sched_select_cpu() and use it for workqueues Viresh Kumar
2013-03-18 15:23 ` [PATCH V3 1/7] sched: Create sched_select_cpu() to give preferred CPU for power saving Viresh Kumar
2013-03-18 15:39 ` Frederic Weisbecker
2013-03-18 15:44 ` Viresh Kumar
2013-03-18 15:57 ` Frederic Weisbecker
2013-03-19 5:15 ` Viresh Kumar
2013-03-19 12:30 ` Peter Zijlstra
2013-03-19 12:52 ` Viresh Kumar
2013-03-19 13:22 ` Viresh Kumar
2013-03-18 15:23 ` [PATCH V3 2/7] timer: hrtimer: Don't check idle_cpu() before calling get_nohz_timer_target() Viresh Kumar
2013-03-18 15:23 ` [PATCH V3 3/7] workqueue: Add helpers to schedule work on any cpu Viresh Kumar
2013-03-19 5:15 ` Viresh Kumar
2013-03-19 13:23 ` Viresh Kumar
2013-03-21 0:12 ` Tejun Heo [this message]
2013-03-21 10:57 ` Viresh Kumar
2013-03-21 18:29 ` Tejun Heo
2013-03-28 18:13 ` Tejun Heo
2013-03-29 2:39 ` Viresh Kumar
2013-03-29 7:27 ` Viresh Kumar
2013-03-29 17:40 ` Tejun Heo
2013-03-29 17:56 ` Tejun Heo
2013-03-30 3:30 ` Viresh Kumar
2013-03-18 15:23 ` [PATCH V3 4/7] PHYLIB: queue " Viresh Kumar
2013-03-18 17:33 ` David Miller
2013-03-18 15:23 ` [PATCH V3 5/7] mmc: " Viresh Kumar
2013-03-19 7:58 ` Ulf Hansson
2013-03-22 17:09 ` Chris Ball
2013-03-22 17:26 ` Chris Ball
2013-03-22 17:27 ` Viresh Kumar
2013-03-22 17:30 ` Chris Ball
2013-03-18 15:23 ` [PATCH V3 6/7] block: " Viresh Kumar
2013-03-22 15:05 ` Jens Axboe
2013-03-23 6:44 ` Viresh Kumar
2013-03-18 15:23 ` [PATCH V3 7/7] fbcon: " Viresh Kumar
2013-03-19 5:00 ` [PATCH V3 0/7] Create sched_select_cpu() and use it for workqueues Viresh Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130321001211.GC31256@htj.dyndns.org \
--to=tj@kernel.org \
--cc=Arvind.Chauhan@arm.com \
--cc=Liviu.Dudau@arm.com \
--cc=Steve.Bannister@arm.com \
--cc=charles.garcia-tobin@arm.com \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=paul.mckenney@linaro.org \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=robin.randhawa@arm.com \
--cc=rostedt@goodmis.org \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--cc=venki@google.com \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).