lkml.org 
[lkml]   [2016]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [RFC v3 1/6] Track the active utilisation
    From
    Date
    Il 24/10/2016 16:06, Luca Abeni ha scritto:
    > The active utilisation here is defined as the total utilisation of the
    > active (TASK_RUNNING) tasks queued on a runqueue. Hence, it is increased
    > when a task wakes up and is decreased when a task blocks.
    >
    > When a task is migrated from CPUi to CPUj, immediately subtract the task's
    > utilisation from CPUi and add it to CPUj. This mechanism is implemented by
    > modifying the pull and push functions.
    > Note: this is not fully correct from the theoretical point of view
    > (the utilisation should be removed from CPUi only at the 0 lag time),
    > but doing the right thing would be _MUCH_ more complex (leaving the
    > timer armed when the task is on a different CPU... Inactive timers should
    > be moved from per-task timers to per-runqueue lists of timers! Bah...)
    >
    > The utilisation tracking mechanism implemented in this commit can be
    > fixed / improved by decreasing the active utilisation at the so-called
    > "0-lag time" instead of when the task blocks.
    >
    > Signed-off-by: Juri Lelli <juri.lelli@arm.com>
    > Signed-off-by: Luca Abeni <luca.abeni@unitn.it>
    > ---
    > kernel/sched/deadline.c | 39 ++++++++++++++++++++++++++++++++++++++-
    > kernel/sched/sched.h | 6 ++++++
    > 2 files changed, 44 insertions(+), 1 deletion(-)
    >
    > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
    > index 37e2449..3d95c1d 100644
    > --- a/kernel/sched/deadline.c
    > +++ b/kernel/sched/deadline.c
    > @@ -43,6 +43,22 @@ static inline int on_dl_rq(struct sched_dl_entity *dl_se)
    > return !RB_EMPTY_NODE(&dl_se->rb_node);
    > }
    >
    > +static void add_running_bw(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
    > +{
    > + u64 se_bw = dl_se->dl_bw;
    > +
    > + dl_rq->running_bw += se_bw;
    > +}

    why not...

    static *inline*
    void add_running_bw(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
    {
    dl_rq->running_bw += dl_se->dl_bw;
    }

    am I missing something?

    > +static void sub_running_bw(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
    > +{
    > + u64 se_bw = dl_se->dl_bw;
    > +
    > + dl_rq->running_bw -= se_bw;
    > + if (WARN_ON(dl_rq->running_bw < 0))
    > + dl_rq->running_bw = 0;
    > +}

    (if I am not missing anything...)

    the same in the above function: use inline and remove the se_bw variable.

    -- Daniel

    \
     
     \ /
      Last update: 2016-10-25 11:10    [W:4.337 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site