On 10 January 2013 00:19, Tejun Heo tj@kernel.org wrote:
On Mon, Jan 07, 2013 at 11:37:22PM +0530, Viresh Kumar wrote:
We are talking about a core being idle from schedulers perspective :)
But it's not like cpu doesn't consume power if scheduler considers it idle, right? Can you please explain in detail how this contributes to saving power? Is it primarily about routing work items to lower power CPUs? And please don't point to presentation slides. They don't seem to explain much better and patches and the code should be able to describe themselves. Here, more so, as the desired behavior change and the resulting powersave are rather subtle.
I got your concerns. Firstly, when cpu is idle from schedulers perspective, it consumes a lot of power.
queue_work_on_any_cpu() would queue the work on any other cpu only when current cpu is idle from schedulers perspective, and this can only happen when the cpu was actually idle (in low power state), woke up due to some interrupt/timer and is asked to queue a work..
The idea is to choose other non-idle cpu at this point, so that current cpu can immediately go into deeper idle state. With this cpus can stay longer at deeper idle state, rather than running works.
And in cases, where works are rearmed from the handler, this can cause sufficient power loss, which could be easily saved by pushing this work to non-idle cpus.
The same approach is taken for deffered timers too, they are already using such routine. .