From: Ingo Molnar <mingo@kernel.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: josef@toxicpanda.com, mingo@redhat.com,
linux-kernel@vger.kernel.org, kernel-team@fb.com,
Josef Bacik <jbacik@fb.com>
Subject: Re: [RFC][PATCH] sched: attach extra runtime to the right avg
Date: Tue, 4 Jul 2017 12:13:09 +0200 [thread overview]
Message-ID: <20170704101308.odsijqc6qa7p2pe3@gmail.com> (raw)
In-Reply-To: <20170704094141.mebcs2pjv2s6vynt@hirez.programming.kicks-ass.net>
* Peter Zijlstra <peterz@infradead.org> wrote:
> > An intermediate approach to improve that skew would be something like below.
> > It doesn't track the remainder like your patch does, but doesn't lose
> > precision either, just rounds down 'now' to the nearest 1024 boundary.
>
> > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> > index 008c514dc241..b03703cd7989 100644
> > --- a/kernel/sched/fair.c
> > +++ b/kernel/sched/fair.c
> > @@ -2965,7 +2965,7 @@ ___update_load_avg(u64 now, int cpu, struct sched_avg *sa,
> > if (!delta)
> > return 0;
> >
> > - sa->last_update_time += delta << 10;
> > + sa->last_update_time = now & ~1023ULL;
> >
>
> So if we have a task that always runs <1024ns it should still get blocks
> of runtime because the difference between now and now&~1023 can be !0
> and spill.
Agreed - in the first approximation I was trying to figure out why Josef was
seeing an effect from the patch.
> I'm just not immediately seeing how its different from the 0-sum we had.
> It should be identical since delta*1024 would equally land us on those
> same edges (there's an offset in the differential form between the two,
> but since we start with last_update_time=0, the resulting edges are the
> same afaict).
So I think the difference is that this:
sa->last_update_time = now & ~1023ULL;
is tracking the absolute value of 'now' (i.e. rq->clock in most cases) by and
large, with a 1024 ns imprecision.
This code on the other hand:
sa->last_update_time += delta << 10;
... in essence creates a whole new absolute clock value that slowly but surely is
drifting away from the real rq->clock, because 'delta' is always rounded down to
the nearest 1024 ns boundary, so we accumulate the 'remainder' losses.
That is because:
delta >>= 10;
...
sa->last_update_time += delta << 10;
Given enough time, ->last_update_time can drift a long way, and this delta:
delta = now - sa->last_update_time;
... becomes meaningless AFAICS, because it's essentially two different clocks that
get compared.
But I might be super confused about this myself ...
Thanks,
Ingo
next prev parent reply other threads:[~2017-07-04 10:13 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-30 1:56 [RFC][PATCH] sched: attach extra runtime to the right avg josef
2017-07-02 9:37 ` Ingo Molnar
2017-07-03 13:30 ` Josef Bacik
2017-07-04 9:41 ` Peter Zijlstra
2017-07-04 10:13 ` Ingo Molnar [this message]
2017-07-04 12:21 ` Peter Zijlstra
2017-07-04 12:40 ` Peter Zijlstra
2017-07-04 12:47 ` Josef Bacik
2017-07-04 13:51 ` Josef Bacik
2017-07-04 14:28 ` Peter Zijlstra
2017-07-03 7:26 ` Vincent Guittot
2017-07-03 13:41 ` Josef Bacik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170704101308.odsijqc6qa7p2pe3@gmail.com \
--to=mingo@kernel.org \
--cc=jbacik@fb.com \
--cc=josef@toxicpanda.com \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.