lkml.org 
[lkml]   [2009]   [Nov]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [BUG] cpu controller can't provide fair CPU time for each group
    > On Wed, 2009-11-11 at 15:21 +0900, Yasunori Goto wrote:
    > > > Someone needs to fix that if they really care.
    > >
    > > To be honest, I don't have any good idea because I'm not familiar with
    > > schduler's code.
    >
    > You could possible try something like the below, its rather gross but
    > might maybe work,.. has other issues though.

    Thank you very much for your patch. I'm very glad.

    Unfortunately, my test staff and I don't have test box today,
    I'll report the result later.

    Thanks again for your time.

    >
    >
    > ---
    > kernel/sched.c | 9 +++++++--
    > 1 files changed, 7 insertions(+), 2 deletions(-)
    >
    > diff --git a/kernel/sched.c b/kernel/sched.c
    > index 91642c1..65629a3 100644
    > --- a/kernel/sched.c
    > +++ b/kernel/sched.c
    > @@ -1614,7 +1614,7 @@ static void update_group_shares_cpu(struct task_group *tg, int cpu,
    > */
    > static int tg_shares_up(struct task_group *tg, void *data)
    > {
    > - unsigned long weight, rq_weight = 0, shares = 0;
    > + unsigned long weight, rq_weight = 0, sum_weight = 0, shares = 0;
    > unsigned long *usd_rq_weight;
    > struct sched_domain *sd = data;
    > unsigned long flags;
    > @@ -1630,6 +1630,7 @@ static int tg_shares_up(struct task_group *tg, void *data)
    > weight = tg->cfs_rq[i]->load.weight;
    > usd_rq_weight[i] = weight;
    >
    > + rq_weight += weight;
    > /*
    > * If there are currently no tasks on the cpu pretend there
    > * is one of average load so that when a new task gets to
    > @@ -1638,10 +1639,14 @@ static int tg_shares_up(struct task_group *tg, void *data)
    > if (!weight)
    > weight = NICE_0_LOAD;
    >
    > - rq_weight += weight;
    > + sum_weight += weight;
    > +
    > shares += tg->cfs_rq[i]->shares;
    > }
    >
    > + if (!rq_weight)
    > + rq_weight = sum_weight;
    > +
    > if ((!shares && rq_weight) || shares > tg->shares)
    > shares = tg->shares;
    >
    >

    --
    Yasunori Goto




    \
     
     \ /
      Last update: 2009-11-12 02:15    [W:0.025 / U:29.724 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site