lkml.org 
[lkml]   [2011]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2] sched: fix autogroup nice tune on UP
    Date
    When on UP with FAIR_GROUP_SCHED enabled, tune shares
    only affect tg->shares, but is not reflected on
    tg->se->load, the reason is update_cfs_shares()
    do nothing on UP.
    So introduce update_cfs_shares() for UP && FAIR_GROUP_SCHED.

    This issue is found when enable autogroup, but also
    exists on cgroup.cpu on UP.

    Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Mike Galbraith <efault@gmx.de>
    ---
    kernel/sched_fair.c | 61 ++++++++++++++++++++++++++++++++++++--------------
    1 files changed, 44 insertions(+), 17 deletions(-)

    diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
    index 77e9166..166892f 100644
    --- a/kernel/sched_fair.c
    +++ b/kernel/sched_fair.c
    @@ -699,7 +699,24 @@ account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se)
    cfs_rq->nr_running--;
    }

    -#if defined CONFIG_SMP && defined CONFIG_FAIR_GROUP_SCHED
    +#ifdef CONFIG_FAIR_GROUP_SCHED
    +static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se,
    + unsigned long weight)
    +{
    + if (se->on_rq) {
    + /* commit outstanding execution time */
    + if (cfs_rq->curr == se)
    + update_curr(cfs_rq);
    + account_entity_dequeue(cfs_rq, se);
    + }
    +
    + update_load_set(&se->load, weight);
    +
    + if (se->on_rq)
    + account_entity_enqueue(cfs_rq, se);
    +}
    +
    +# ifdef CONFIG_SMP
    static void update_cfs_rq_load_contribution(struct cfs_rq *cfs_rq,
    int global_update)
    {
    @@ -762,22 +779,6 @@ static void update_cfs_load(struct cfs_rq *cfs_rq, int global_update)
    list_del_leaf_cfs_rq(cfs_rq);
    }

    -static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se,
    - unsigned long weight)
    -{
    - if (se->on_rq) {
    - /* commit outstanding execution time */
    - if (cfs_rq->curr == se)
    - update_curr(cfs_rq);
    - account_entity_dequeue(cfs_rq, se);
    - }
    -
    - update_load_set(&se->load, weight);
    -
    - if (se->on_rq)
    - account_entity_enqueue(cfs_rq, se);
    -}
    -
    static void update_cfs_shares(struct cfs_rq *cfs_rq, long weight_delta)
    {
    struct task_group *tg;
    @@ -817,6 +818,32 @@ static void update_entity_shares_tick(struct cfs_rq *cfs_rq)
    update_cfs_shares(cfs_rq, 0);
    }
    }
    +# else /* CONFIG_SMP */
    +static void update_cfs_load(struct cfs_rq *cfs_rq, int global_update)
    +{
    +}
    +
    +static void update_cfs_shares(struct cfs_rq *cfs_rq, long weight_delta)
    +{
    + struct task_group *tg;
    + struct sched_entity *se;
    +
    + if (!cfs_rq)
    + return;
    +
    + tg = cfs_rq->tg;
    + se = tg->se[0];
    + if (!se)
    + return;
    + if (likely(se->load.weight == tg->shares))
    + return;
    + reweight_entity(cfs_rq_of(se), se, tg->shares);
    +}
    +
    +static inline void update_entity_shares_tick(struct cfs_rq *cfs_rq)
    +{
    +}
    +# endif /* CONFIG_SMP */
    #else /* CONFIG_FAIR_GROUP_SCHED */
    static void update_cfs_load(struct cfs_rq *cfs_rq, int global_update)
    {
    --
    1.7.0.4


    \
     
     \ /
      Last update: 2011-01-24 06:45    [W:0.024 / U:0.300 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site