Hi Vikram,
On 11/11/2015 11:16 AM, Vikram Mulukutla wrote:
I'm using the EASv5 3.18 tree with cpufreq_sched. With the sched governor enabled I've noticed that after a migration or after a switch from a non-fair task to the idle task, the source CPU goes idle and its (possibly max) capacity request stays in place, preventing other requests from going through until that source CPU decides to wake up and take up some work.
I haven't been able to reconcile this behavior with the code. There are hooks in dequeue_task_fair and the migration paths that should update the CFS capacity vote if the CPU CFS runqueue is empty.
Since the dequeue_task_fair path calls cpufreq_sched_reset_cap, it will zero out the CPU's capacity vote but this API does not trigger a re-evaluation of the overall required cluster capacity and set a new OPP. Another event (on any CPU in the cluster) will need to occur which will cause the cluster capacity to be re-evaluated. Any chance this is what you are seeing?
I know that there are some ongoing discussions about how to actually enforce a frequency reduction when a CPU enters idle to save power, but this seems to be a more immediate problem since the other CPU(s)' requests are also basically ignored.
If there's a sequence where we can ignore a CPU's request for higher capacity then agreed, that is a more immediate problem.
thanks, Steve