Messages in this thread Patch in this message | | | From | Vaidyanathan Srinivasan <> | Subject | [RFC PATCH v2 5/7] sched: nominate preferred wakeup cpu | Date | Mon, 08 Sep 2008 18:51:32 +0530 |
| |
When the system utilisation is low and more cpus are idle, then the process waking up from sleep should prefer to wakeup an idle cpu from semi-idle cpu package (multi core package) rather than a completely idle cpu package which would waste power.
Use the sched_mc balance logic in find_busiest_group() to nominate a preferred wakeup cpu.
This info can be sored in appropriate sched_domain, but updating this info in all copies of sched_domain is not practical. For now lets try with a global variable.
Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> ---
kernel/sched.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/kernel/sched.c b/kernel/sched.c index 569fc8d..4ae79f5 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -3380,6 +3380,9 @@ out_balanced: if (this == group_leader && group_leader != group_min) { *imbalance = min_load_per_task; + if (sched_mc_power_savings >= POWERSAVINGS_BALANCE_WAKEUP) + sched_mc_preferred_wakeup_cpu = + first_cpu(group_leader->cpumask); return group_min; } #endif @@ -6911,6 +6914,13 @@ static void sched_domain_node_span(int node, cpumask_t *span) int sched_smt_power_savings = 0, sched_mc_power_savings = 0; /* + * Preferred wake up cpu nominated by sched_mc balance that will be used when + * most cpus are idle in the system indicating overall very low system + * utilisation. Triggered at POWERSAVINGS_BALANCE_WAKEUP (2). + */ +unsigned int sched_mc_preferred_wakeup_cpu; + +/* * SMT sched-domains: */ #ifdef CONFIG_SCHED_SMT
| |