On 29 April 2013 21:49, Tejun Heo tj@kernel.org wrote:
On Mon, Apr 29, 2013 at 12:06:28PM +0530, Viresh Kumar wrote: Yeap, !WQ_UNBOUND workqueues == per-cpu workqueues.
Sigh!! You were talking about thread per cpu here... Sorry for missing it earlier :(
At this time local cpu may be busy or idle (Atleast according to scheduler). We don't want a idle cpu (From schedulers perspective) to be used for running this work's handler due to two reasons.
- idle cpu may be in WFI or deeper idle states and so we can avoid waking it up.
I have no idea what WFI is but the physical CPU is already awake at that time. It can't be idle - it's running queue_work(). It could be running in lower freq tho, which each code piece doesn't really have much control over.
Stupid point. WFI: Wait for interrupt (low power mode of cpu).
- We will make idle cpu look busy and so other kernel stuff may be scheduled on it now. But we could have kept it idle for a long time.
Hmmm... yeah, about the same thing I wrote, it's not really about not waking up the CPU right now physically but avoiding forcing the scheduler scheduling a pinned task on an otherwise quiescent CPU. This effectively allows the scheduler to migrate such work items towards a CPU which the scheduler considers to be better (in power or whatever) leading to noticeable powersave.
Correct.
And what timer are you talking about? I am not talking about deffered work only, but normal work too.
Deferred work item == timer + work item.
Ya, i knew that :)
I might have wrongly phrased some part of my patch (maybe used workqueue instead of work), will fix that up.
I think it'd be necessary to distinguish the physical CPU being idle and the scheduler considers it to be idle (no task to schedule on it) and explain how increasing the latter can lead to powersave. As it's currently written, it seemingly, to me anyway, suggests that the proposed change somehow avoids waking up actually idle CPU, which isn't the case as queue_work() *always* schedules on the local CPU. The local CPU can't be idle by definition.
Yes you are correct. I will fix it.