From: Mel Gorman <mgorman@techsingularity.net>
To: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
Vincent Guittot <vincent.guittot@linaro.org>,
Valentin Schneider <valentin.schneider@arm.com>,
Phil Auld <pauld@redhat.com>, LKML <linux-kernel@vger.kernel.org>,
Mel Gorman <mgorman@techsingularity.net>
Subject: [PATCH 2/4] sched/fair: Track efficiency of task recent_used_cpu
Date: Fri, 20 Mar 2020 15:12:43 +0000 [thread overview]
Message-ID: <20200320151245.21152-3-mgorman@techsingularity.net> (raw)
In-Reply-To: <20200320151245.21152-1-mgorman@techsingularity.net>
This simply tracks the efficiency of p->recent_used_cpu. The hit rate of
this matters as it can avoid a domain search. Similarly, the miss rate
matters because each miss is a penalty to the fast path. MMTests uses
this to generate additional metrics
SIS Recent Used Hit: A recent CPU was eligible and used. Each hit is
a domain search avoided.
SIS Recent Used Miss: A recent CPU was eligible but unavailable. Each
time this is hit, there was a penalty to the fast path before
a domain search happened.
SIS Recent Success Rate: A percentage of the number of hits versus
the total attempts to use the recent CPU.
SIS Recent Attempts: The total number of times the recent CPU was examined.
A high number of Recent Attempts with a low Success Rate implies
the fast path is being punished severely. This could have been
presented as a weighting of hits and misses but calculating an
appropriate weight for misses is problematic.
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
---
kernel/sched/debug.c | 2 ++
kernel/sched/fair.c | 21 ++++++++++++---------
kernel/sched/sched.h | 2 ++
kernel/sched/stats.c | 7 ++++---
4 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 7af6e8a12f40..d58f333bb739 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -665,6 +665,8 @@ do { \
P(sis_domain_search);
P(sis_scanned);
P(sis_failed);
+ P(sis_recent_hit);
+ P(sis_recent_miss);
}
#undef P
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 9d32a81ece08..7f4356c520be 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6212,15 +6212,18 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
recent_used_cpu = p->recent_used_cpu;
if (recent_used_cpu != prev &&
recent_used_cpu != target &&
- cpus_share_cache(recent_used_cpu, target) &&
- (available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
- cpumask_test_cpu(p->recent_used_cpu, p->cpus_ptr)) {
- /*
- * Replace recent_used_cpu with prev as it is a potential
- * candidate for the next wake:
- */
- p->recent_used_cpu = prev;
- return recent_used_cpu;
+ cpus_share_cache(recent_used_cpu, target)) {
+ if ((available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
+ cpumask_test_cpu(p->recent_used_cpu, p->cpus_ptr)) {
+ /*
+ * Replace recent_used_cpu with prev as it is a potential
+ * candidate for the next wake:
+ */
+ p->recent_used_cpu = prev;
+ schedstat_inc(this_rq()->sis_recent_hit);
+ return recent_used_cpu;
+ }
+ schedstat_inc(this_rq()->sis_recent_miss);
}
sd = rcu_dereference(per_cpu(sd_llc, target));
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index ff23cd92d25f..3cb7de0b11d7 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1014,6 +1014,8 @@ struct rq {
unsigned int sis_domain_search;
unsigned int sis_scanned;
unsigned int sis_failed;
+ unsigned int sis_recent_hit;
+ unsigned int sis_recent_miss;
#endif
#ifdef CONFIG_SMP
diff --git a/kernel/sched/stats.c b/kernel/sched/stats.c
index 390bfcc3842c..402fab75aa14 100644
--- a/kernel/sched/stats.c
+++ b/kernel/sched/stats.c
@@ -10,7 +10,7 @@
* Bump this up when changing the output format or the meaning of an existing
* format, so that tools can adapt (or abort)
*/
-#define SCHEDSTAT_VERSION 16
+#define SCHEDSTAT_VERSION 17
static int show_schedstat(struct seq_file *seq, void *v)
{
@@ -30,14 +30,15 @@ static int show_schedstat(struct seq_file *seq, void *v)
/* runqueue-specific stats */
seq_printf(seq,
- "cpu%d %u 0 %u %u %u %u %llu %llu %lu %u %u %u %u",
+ "cpu%d %u 0 %u %u %u %u %llu %llu %lu %u %u %u %u %u %u",
cpu, rq->yld_count,
rq->sched_count, rq->sched_goidle,
rq->ttwu_count, rq->ttwu_local,
rq->rq_cpu_time,
rq->rq_sched_info.run_delay, rq->rq_sched_info.pcount,
rq->sis_search, rq->sis_domain_search,
- rq->sis_scanned, rq->sis_failed);
+ rq->sis_scanned, rq->sis_failed,
+ rq->sis_recent_hit, rq->sis_recent_miss);
seq_printf(seq, "\n");
--
2.16.4
next prev parent reply other threads:[~2020-03-20 15:13 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-20 15:12 [PATCH 0/4] Throttle select_idle_sibling when a target domain is overloaded Mel Gorman
2020-03-20 15:12 ` [PATCH 1/4] sched/fair: Track efficiency of select_idle_sibling Mel Gorman
2020-03-23 13:30 ` Valentin Schneider
2020-03-23 13:55 ` Mel Gorman
2020-03-20 15:12 ` Mel Gorman [this message]
2020-03-23 13:30 ` [PATCH 2/4] sched/fair: Track efficiency of task recent_used_cpu Valentin Schneider
2020-03-20 15:12 ` [PATCH 3/4] sched/fair: Clear SMT siblings after determining the core is not idle Mel Gorman
2020-03-23 13:31 ` Valentin Schneider
2020-03-20 15:12 ` [PATCH 4/4] sched/fair: Track possibly overloaded domains and abort a scan if necessary Mel Gorman
2020-03-20 15:48 ` Vincent Guittot
2020-03-20 16:44 ` Mel Gorman
2020-03-20 16:54 ` Vincent Guittot
2020-03-20 17:43 ` Mel Gorman
2020-03-24 10:35 ` Vincent Guittot
2020-03-24 11:23 ` Mel Gorman
2020-04-02 7:59 ` [sched/fair] 15e7470dfc: hackbench.throughput 11.2% improvement kernel test robot
2020-04-02 7:59 ` kernel test robot
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=20200320151245.21152-3-mgorman@techsingularity.net \
--to=mgorman@techsingularity.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=pauld@redhat.com \
--cc=peterz@infradead.org \
--cc=valentin.schneider@arm.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 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.