Messages in this thread | | | Date | Mon, 8 Sep 2008 19:13:17 +0530 | From | Vaidyanathan Srinivasan <> | Subject | Re: [RFC PATCH v2 5/7] sched: nominate preferred wakeup cpu |
| |
* Peter Zijlstra <a.p.zijlstra@chello.nl> [2008-09-08 15:21:31]:
> 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?
Agreed this is certainly a problem. I tried adding this to the sched_domain, but accessing the correct 'copy' for sched_domain that holds this variable from any cpu is not fast.
Thank you for pointing this out. I will find a alternative implementation.
--Vaidy
| |