lkml.org 
[lkml]   [2019]   [Aug]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/15] sched,fair: add helper functions for flattened runqueue
    Date
    Add helper functions to make the flattened runqueue patch a little smaller.

    The task_se_h_weight function is similar to task_se_h_load, but scales the
    task weight by the group weight, without taking the task's duty cycle into
    account.

    The task_se_in_cgroup helper is functionally identical to parent_entity,
    but directly calling a function with that name obscures what the other
    code is trying to use it for, and would make the code harder to understand.

    Signed-off-by: Rik van Riel <riel@surriel.com>
    ---
    kernel/sched/fair.c | 31 +++++++++++++++++++++++++++++++
    1 file changed, 31 insertions(+)

    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index 7b0d95f2e3a8..29bfa7379dec 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -243,6 +243,7 @@ static u64 __calc_delta(u64 delta_exec, unsigned long weight, struct load_weight

    const struct sched_class fair_sched_class;
    static unsigned long task_se_h_load(struct sched_entity *se);
    +static unsigned long task_se_h_weight(struct sched_entity *se);

    /**************************************************************
    * CFS operations on generic schedulable entities:
    @@ -431,6 +432,12 @@ static inline struct sched_entity *parent_entity(struct sched_entity *se)
    return se->parent;
    }

    +/* Is this (task) sched_entity in a non-root cgroup? */
    +static inline bool task_se_in_cgroup(struct sched_entity *se)
    +{
    + return parent_entity(se);
    +}
    +
    static void
    find_matching_se(struct sched_entity **se, struct sched_entity **pse)
    {
    @@ -513,6 +520,11 @@ static inline struct sched_entity *parent_entity(struct sched_entity *se)
    return NULL;
    }

    +static inline bool task_se_in_cgroup(struct sched_entity *se)
    +{
    + return false;
    +}
    +
    static inline void
    find_matching_se(struct sched_entity **se, struct sched_entity **pse)
    {
    @@ -7837,6 +7849,20 @@ static void update_cfs_rq_h_load(struct cfs_rq *cfs_rq)
    }
    }

    +static unsigned long task_se_h_weight(struct sched_entity *se)
    +{
    + struct cfs_rq *cfs_rq;
    +
    + if (!task_se_in_cgroup(se))
    + return se->load.weight;
    +
    + cfs_rq = group_cfs_rq_of_parent(se);
    + update_cfs_rq_h_load(cfs_rq);
    +
    + /* Reduce the load.weight by the h_load of the group the task is in. */
    + return (cfs_rq->h_load * se->load.weight) >> SCHED_FIXEDPOINT_SHIFT;
    +}
    +
    static unsigned long task_se_h_load(struct sched_entity *se)
    {
    struct cfs_rq *cfs_rq = group_cfs_rq_of_parent(se);
    @@ -7873,6 +7899,11 @@ static unsigned long task_se_h_load(struct sched_entity *se)
    {
    return se->avg.load_avg;
    }
    +
    +static unsigned long task_se_h_weight(struct sched_entity *se)
    +{
    + return se->load.weight;
    +}
    #endif

    /********** Helpers for find_busiest_group ************************/
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-22 04:26    [W:4.497 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site