lkml.org 
[lkml]   [2012]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 16/16] sched: introduce temporary FAIR_GROUP_SCHED dependency for load-tracking
    From
    Date
    While per-entity load-tracking is generally useful, beyond computing shares
    distribution, e.g.
    runnable based load-balance (in progress), governors, power-management, etc

    These facilities are not yet consumers of this data. This may be trivially
    reverted when the information is required; but avoid paying the overhead for
    calculations we will not use until then.

    Signed-off-by: Paul Turner <pjt@google.com>
    ---
    include/linux/sched.h | 8 +++++++-
    kernel/sched/fair.c | 14 +++++++++++---
    kernel/sched/sched.h | 9 ++++++++-
    3 files changed, 26 insertions(+), 5 deletions(-)

    diff --git a/include/linux/sched.h b/include/linux/sched.h
    index a65c097..7c0c72d 100644
    --- a/include/linux/sched.h
    +++ b/include/linux/sched.h
    @@ -1205,7 +1205,13 @@ struct sched_entity {
    /* rq "owned" by this entity/group: */
    struct cfs_rq *my_q;
    #endif
    -#ifdef CONFIG_SMP
    +/*
    + * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
    + * removed when useful for applications beyond shares distribution (e.g.
    + * load-balance).
    + */
    +#if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)
    + /* Per-entity load-tracking */
    struct sched_avg avg;
    #endif
    };
    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index 3d1aaa8..0b6e2df 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -882,7 +882,8 @@ static inline void update_cfs_shares(struct cfs_rq *cfs_rq)
    }
    #endif /* CONFIG_FAIR_GROUP_SCHED */

    -#ifdef CONFIG_SMP
    +/* Only depends on SMP, FAIR_GROUP_SCHED may be removed when useful in lb */
    +#if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)
    /*
    * We choose a half-life close to 1 scheduling period.
    * Note: The tables below are dependent on this value.
    @@ -3214,6 +3215,12 @@ unlock:
    }

    /*
    + * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
    + * removed when useful for applications beyond shares distribution (e.g.
    + * load-balance).
    + */
    +#ifdef CONFIG_FAIR_GROUP_SCHED
    +/*
    * Called immediately before a task is migrated to a new cpu; task_cpu(p) and
    * cfs_rq_of(p) references at time of call are still valid and identify the
    * previous cpu. However, the caller only guarantees p->pi_lock is held; no
    @@ -3235,7 +3242,7 @@ migrate_task_rq_fair(struct task_struct *p, int next_cpu) {
    atomic64_add(se->avg.load_avg_contrib, &cfs_rq->removed_load);
    }
    }
    -
    +#endif

    #endif /* CONFIG_SMP */

    @@ -5927,8 +5934,9 @@ const struct sched_class fair_sched_class = {

    #ifdef CONFIG_SMP
    .select_task_rq = select_task_rq_fair,
    +#ifdef CONFIG_FAIR_GROUP_SCHED
    .migrate_task_rq = migrate_task_rq_fair,
    -
    +#endif
    .rq_online = rq_online_fair,
    .rq_offline = rq_offline_fair,

    diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
    index bb76895..d920943 100644
    --- a/kernel/sched/sched.h
    +++ b/kernel/sched/sched.h
    @@ -225,6 +225,12 @@ struct cfs_rq {
    #endif

    #ifdef CONFIG_SMP
    +/*
    + * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
    + * removed when useful for applications beyond shares distribution (e.g.
    + * load-balance).
    + */
    +#ifdef CONFIG_FAIR_GROUP_SCHED
    /*
    * CFS Load tracking
    * Under CFS, load is tracked on a per-entity basis and aggregated up.
    @@ -234,7 +240,8 @@ struct cfs_rq {
    u64 runnable_load_avg, blocked_load_avg;
    atomic64_t decay_counter, removed_load;
    u64 last_decay;
    -
    +#endif /* CONFIG_FAIR_GROUP_SCHED */
    +/* These always depend on CONFIG_FAIR_GROUP_SCHED */
    #ifdef CONFIG_FAIR_GROUP_SCHED
    u32 tg_runnable_contrib, tg_usage_contrib;
    u64 tg_load_contrib;



    \
     
     \ /
      Last update: 2012-06-28 06:42    [W:0.031 / U:0.268 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site