Messages in this thread | | | Subject | Re: [RFC PATCH v2 5/7] sched: nominate preferred wakeup cpu | From | Peter Zijlstra <> | Date | Mon, 08 Sep 2008 15:21:31 +0200 |
| |
On Mon, 2008-09-08 at 18:51 +0530, Vaidyanathan Srinivasan wrote: > 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;
This cannot be a global variable, what happens when we have two disjoint load-balance domains?
> +/* > * SMT sched-domains: > */ > #ifdef CONFIG_SCHED_SMT >
| |