Skip to content
  • Nicolas Pitre's avatar
    sched/fair: Leverage the idle state info when choosing the "idlest" cpu · 83a0a96a
    Nicolas Pitre authored
    
    
    The code in find_idlest_cpu() looks for the CPU with the smallest load.
    However, if multiple CPUs are idle, the first idle CPU is selected
    irrespective of the depth of its idle state.
    
    Among the idle CPUs we should pick the one with with the shallowest idle
    state, or the latest to have gone idle if all idle CPUs are in the same
    state.  The later applies even when cpuidle is configured out.
    
    This patch doesn't cover the following issues:
    
    - The idle exit latency of a CPU might be larger than the time needed
      to migrate the waking task to an already running CPU with sufficient
      capacity, and therefore performance would benefit from task packing
      in such case (in most cases task packing is about power saving).
    
    - Some idle states have a non negligible and non abortable entry latency
      which needs to run to completion before the exit latency can start.
      A concurrent patch series is making this info available to the cpuidle
      core.  Once available, the entry latency with the idle timestamp could
      determine when the exit latency may be effective.
    
    Those issues will be handled in due course.  In the mean time, what
    is implemented here should improve things already compared to the current
    state of affairs.
    
    Based on an initial patch from Daniel Lezcano.
    
    Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: linux-pm@vger.kernel.org
    Cc: linaro-kernel@lists.linaro.org
    Link: http://lkml.kernel.org/n/tip-@git.kernel.org
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    83a0a96a