lkml.org 
[lkml]   [2008]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [RFC PATCH v4 3/7] sched: nominate preferred wakeup cpu
    From
    Date
    On Fri, 2008-11-21 at 14:01 +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. Hence this information is stored in root_domain
    > struct which is one copy per partitioned sched domain.
    > The root_domain can be accessed from each cpu's runqueue
    > and there is one copy per partitioned sched domain.
    >
    > Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
    > ---
    >
    > kernel/sched.c | 15 +++++++++++++++
    > 1 files changed, 15 insertions(+), 0 deletions(-)
    >
    > diff --git a/kernel/sched.c b/kernel/sched.c
    > index 79b71f3..d28cd98 100644
    > --- a/kernel/sched.c
    > +++ b/kernel/sched.c
    > @@ -493,6 +493,17 @@ struct root_domain {
    > #ifdef CONFIG_SMP
    > struct cpupri cpupri;
    > #endif
    > +#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
    > +
    > + /*
    > + * 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;
    > +
    > +#endif
    > +
    > };
    >
    > /*

    Do we really need that extra whitespace?

    > @@ -3090,6 +3101,7 @@ static int move_one_task(struct rq *this_rq, int this_cpu, struct rq *busiest,
    > return 0;
    > }
    >
    > +
    > /*
    > * find_busiest_group finds and returns the busiest CPU group within the
    > * domain. It calculates and returns the amount of weighted load which

    Ditto?

    > @@ -3406,6 +3418,9 @@ out_balanced:
    >
    > if (this == group_leader && group_leader != group_min) {
    > *imbalance = min_load_per_task;
    > + if (sched_mc_power_savings >= POWERSAVINGS_BALANCE_WAKEUP)
    > + cpu_rq(this_cpu)->rd->sched_mc_preferred_wakeup_cpu =
    > + first_cpu(group_leader->cpumask);

    While not strictly needed, I prefer braces around multi-line statments.
    It's easier on the eyes.

    > return group_min;
    > }
    > #endif
    >



    \
     
     \ /
      Last update: 2008-11-23 03:07    [W:0.022 / U:153.040 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site