From: Yuyang Du <yuyang.du@intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: mingo@kernel.org, linux-kernel@vger.kernel.org, pjt@google.com,
bsegall@google.com, morten.rasmussen@arm.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
matt@codeblueprint.co.uk, umgwanakikbuti@gmail.com
Subject: Re: [RESEND PATCH 2/2] sched/fair: Optimize __update_sched_avg()
Date: Wed, 29 Mar 2017 08:04:42 +0800 [thread overview]
Message-ID: <20170329000442.GC2459@ydu19desktop> (raw)
In-Reply-To: <20170328144625.GX3093@worktop>
Hi Peter,
On Tue, Mar 28, 2017 at 04:46:25PM +0200, Peter Zijlstra wrote:
> On Mon, Feb 13, 2017 at 05:44:23AM +0800, Yuyang Du wrote:
> > __update_load_avg() has the following steps:
> >
> > 1. add the remainder of the last incomplete period
> > 2. decay old sum
> > 3. accumulate new sum in full periods since last_update_time
> > 4. accumulate the current incomplete period
> > 5. update averages
> >
> > However, there is no need to separately compute steps 1, 3, and 4.
> >
> > Illustation:
> >
> > c1 c3 c4
> > ^ ^ ^
> > | | |
> > |<->|<----------------->|<--->|
> > ... |---x---|------| ... |------|-----x (now)
> >
> > c1, c3, and c4 are the accumulated (meanwhile decayed) contributions
> > in timing in steps 1, 3, and 4 respectively.
> >
> > With them, the accumulated contribution to load_sum, for example, is:
> >
> > contrib = c1 * weight * freq_scaled;
> > contrib += c3 * weight * freq_scaled;
> > contrib += c4 * weight * freq_scaled;
> >
> > Obviously, we can optimize the above and they equate to:
> >
> > contrib = c1 + c3 + c4;
> > contrib *= weight * freq_scaled;
> >
>
> So I figured out what it is you're doing, how's this? I still need to
> rewrite the Changelog to make this cleared,
Yes, you need to, and let me do it too and learn how you will rewrite
it.
Subject: [PATCH] sched/fair: Optimize __update_sched_avg()
In __update_load_avg(), the flow of periods and update times are
illustrated as:
t1 t3 t4
^ ^ ^
| | |
|<->|<----------------->|<--->|
... |---x---|------| ... |------|-----x (now)
in which, t1 is the remainder of the last incomplete period, t2
is the full periods since the last_update_time, and t3 is the
current period.
These times altogether make contributions to the load_sum with
the following 5 steps:
step 1: t1 is decayed as c1
step 2: last sum is decayed
step 3: t3 has accumulated c3
step 4: t4 is c4
step 5: average the sum
These contributions are further scaled with weight and frequency:
contrib = c1 * weight * freq_scaled;
contrib += c3 * weight * freq_scaled;
contrib += c4 * weight * freq_scaled;
Obviously, they equate to:
contrib = c1 + c3 + c4;
contrib *= weight * freq_scaled;
By doing so, we save instructions, and clean the codes. With that, c1
must be additionally decayed as opposed to doing it in step 2, but
these two approaches are about the same if you compare decay_load()
with a round of contrib scaling.
Code size comparison (with allyesconfig):
Before: kernel/sched/built-in.o 1213304
After : kernel/sched/built-in.o 1212536 (-768B)
> but I think the code now has
> understandable comments.
Yes, you made it. It's much better now.
Thanks,
Yuyang
next prev parent reply other threads:[~2017-03-29 8:11 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-12 21:44 [RESEND PATCH 0/2] sched/fair: Add documentation and optimize __update_sched_avg() Yuyang Du
2017-02-12 21:44 ` [RESEND PATCH 1/2] documentation: Add scheduler/sched-avg.txt Yuyang Du
2017-04-14 9:28 ` [tip:sched/core] sched/Documentation: Add 'sched-pelt' tool tip-bot for Yuyang Du
2017-02-12 21:44 ` [RESEND PATCH 2/2] sched/fair: Optimize __update_sched_avg() Yuyang Du
2017-03-28 12:50 ` Peter Zijlstra
2017-03-28 23:57 ` Yuyang Du
2017-03-28 14:46 ` Peter Zijlstra
2017-03-29 0:04 ` Yuyang Du [this message]
2017-03-29 10:41 ` Peter Zijlstra
2017-03-29 18:41 ` Yuyang Du
2017-03-30 11:21 ` Paul Turner
2017-03-30 12:16 ` Peter Zijlstra
2017-03-30 13:46 ` Peter Zijlstra
2017-03-30 18:50 ` Yuyang Du
2017-03-30 14:14 ` Peter Zijlstra
2017-03-30 19:13 ` Yuyang Du
2017-03-30 19:41 ` Yuyang Du
2017-03-31 7:13 ` Peter Zijlstra
2017-03-30 22:02 ` Paul Turner
2017-03-31 7:01 ` Peter Zijlstra
2017-03-31 9:58 ` Paul Turner
2017-03-31 11:23 ` Peter Zijlstra
2017-04-10 7:39 ` Dietmar Eggemann
2017-04-10 8:40 ` Peter Zijlstra
2017-03-31 11:30 ` Peter Zijlstra
2017-03-31 10:55 ` Paul Turner
2017-03-31 11:38 ` Peter Zijlstra
2017-04-10 10:47 ` Peter Zijlstra
2017-03-30 18:39 ` Yuyang Du
2017-03-30 8:32 ` [tip:sched/core] sched/fair: Optimize ___update_sched_avg() tip-bot for Yuyang Du
2017-02-28 0:59 ` [RESEND PATCH 0/2] sched/fair: Add documentation and optimize __update_sched_avg() Yuyang Du
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=20170329000442.GC2459@ydu19desktop \
--to=yuyang.du@intel.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matt@codeblueprint.co.uk \
--cc=mingo@kernel.org \
--cc=morten.rasmussen@arm.com \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=umgwanakikbuti@gmail.com \
--cc=vincent.guittot@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox