From: tip-bot for Yuyang Du <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mingo@kernel.org, peterz@infradead.org, efault@gmx.de,
hpa@zytor.com, vincent.guittot@linaro.org, yuyang.du@intel.com,
torvalds@linux-foundation.org, linux-kernel@vger.kernel.org,
tglx@linutronix.de, morten.rasmussen@arm.com
Subject: [tip:sched/core] sched/fair: Optimize sum computation with a lookup table
Date: Thu, 5 May 2016 02:41:23 -0700 [thread overview]
Message-ID: <tip-7b20b916e953cabef569541f991a0a583bc344cb@git.kernel.org> (raw)
In-Reply-To: <1462226078-31904-2-git-send-email-yuyang.du@intel.com>
Commit-ID: 7b20b916e953cabef569541f991a0a583bc344cb
Gitweb: http://git.kernel.org/tip/7b20b916e953cabef569541f991a0a583bc344cb
Author: Yuyang Du <yuyang.du@intel.com>
AuthorDate: Tue, 3 May 2016 05:54:27 +0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 5 May 2016 09:41:08 +0200
sched/fair: Optimize sum computation with a lookup table
__compute_runnable_contrib() uses a loop to compute sum, whereas a
table lookup can do it faster in a constant amount of time.
The program to generate the constants is located at:
Documentation/scheduler/sched-avg.txt
Signed-off-by: Yuyang Du <yuyang.du@intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Morten Rasmussen <morten.rasmussen@arm.com>
Acked-by: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: bsegall@google.com
Cc: dietmar.eggemann@arm.com
Cc: juri.lelli@arm.com
Cc: pjt@google.com
Link: http://lkml.kernel.org/r/1462226078-31904-2-git-send-email-yuyang.du@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
kernel/sched/fair.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index e148571..8c381a6 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -2603,6 +2603,16 @@ static const u32 runnable_avg_yN_sum[] = {
};
/*
+ * Precomputed \Sum y^k { 1<=k<=n, where n%32=0). Values are rolled down to
+ * lower integers. See Documentation/scheduler/sched-avg.txt how these
+ * were generated:
+ */
+static const u32 __accumulated_sum_N32[] = {
+ 0, 23371, 35056, 40899, 43820, 45281,
+ 46011, 46376, 46559, 46650, 46696, 46719,
+};
+
+/*
* Approximate:
* val * y^n, where y^32 ~= 0.5 (~1 scheduling period)
*/
@@ -2650,14 +2660,9 @@ static u32 __compute_runnable_contrib(u64 n)
else if (unlikely(n >= LOAD_AVG_MAX_N))
return LOAD_AVG_MAX;
- /* Compute \Sum k^n combining precomputed values for k^i, \Sum k^j */
- do {
- contrib /= 2; /* y^LOAD_AVG_PERIOD = 1/2 */
- contrib += runnable_avg_yN_sum[LOAD_AVG_PERIOD];
-
- n -= LOAD_AVG_PERIOD;
- } while (n > LOAD_AVG_PERIOD);
-
+ /* Since n < LOAD_AVG_MAX_N, n/LOAD_AVG_PERIOD < 11 */
+ contrib = __accumulated_sum_N32[n/LOAD_AVG_PERIOD];
+ n %= LOAD_AVG_PERIOD;
contrib = decay_load(contrib, n);
return contrib + runnable_avg_yN_sum[n];
}
next prev parent reply other threads:[~2016-05-05 9:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-02 21:54 [PATCH v2 00/12] sched/fair: Optimize and clean up sched averages Yuyang Du
2016-05-02 21:54 ` [PATCH v2 01/12] sched/fair: Optimize sum computation with a lookup table Yuyang Du
2016-05-05 9:41 ` tip-bot for Yuyang Du [this message]
2016-05-02 21:54 ` [PATCH v2 02/12] sched/fair: Rename variable names for sched averages Yuyang Du
2016-05-02 21:54 ` [PATCH v2 03/12] sched/fair: Change the variable to hold the number of periods to 32bit integer Yuyang Du
2016-05-03 8:47 ` Peter Zijlstra
2016-05-02 21:54 ` [PATCH v2 04/12] sched/fair: Add __always_inline compiler attribute to __accumulate_sum() Yuyang Du
2016-05-02 21:54 ` [PATCH v2 05/12] sched/fair: Optimize __update_sched_avg() Yuyang Du
2016-05-03 8:49 ` Peter Zijlstra
2016-05-02 21:54 ` [PATCH v2 06/12] documentation: Add scheduler/sched-avg.txt Yuyang Du
2016-05-03 8:50 ` Peter Zijlstra
2016-05-02 21:54 ` [PATCH v2 07/12] sched/fair: Generalize the load/util averages resolution definition Yuyang Du
2016-05-02 21:54 ` [PATCH v2 08/12] sched/fair: Remove SCHED_LOAD_SHIFT and SCHED_LOAD_SCALE Yuyang Du
2016-05-02 21:54 ` [PATCH v2 09/12] sched/fair: Add introduction to the sched average metrics Yuyang Du
2016-05-02 21:54 ` [PATCH v2 10/12] sched/fair: Remove scale_load_down() for load_avg Yuyang Du
2016-05-02 21:54 ` [PATCH v2 11/12] sched/fair: Rename scale_load() and scale_load_down() Yuyang Du
2016-05-02 21:54 ` [PATCH v2 12/12] sched/fair: Enable increased scale for kernel load Yuyang Du
2016-05-02 22:08 ` [PATCH v2 00/12] sched/fair: Optimize and clean up sched averages 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=tip-7b20b916e953cabef569541f991a0a583bc344cb@git.kernel.org \
--to=tipbot@zytor.com \
--cc=efault@gmx.de \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=morten.rasmussen@arm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=vincent.guittot@linaro.org \
--cc=yuyang.du@intel.com \
/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.