linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] sched: Reduce contention in update_cfs_rq_blocked_load
@ 2014-08-04 20:28 Jason Low
  2014-08-04 19:15 ` Yuyang Du
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Jason Low @ 2014-08-04 20:28 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Jason Low
  Cc: linux-kernel, Ben Segall, Waiman Long, Mel Gorman, Mike Galbraith,
	Rik van Riel, Aswin Chandramouleeswaran, Chegu Vinod,
	Scott J Norton

When running workloads on 2+ socket systems, based on perf profiles, the
update_cfs_rq_blocked_load function constantly shows up as taking up a
noticeable % of run time. This is especially apparent on an 8 socket
machine. For example, when running the AIM7 custom workload, we see:

   4.18%        reaim  [kernel.kallsyms]        [k] update_cfs_rq_blocked_load

Much of the contention is in __update_cfs_rq_tg_load_contrib when we
update the tg load contribution stats.  However, it turns out that in many
cases, they don't need to be updated and "tg_contrib" is 0.

This patch adds a check in __update_cfs_rq_tg_load_contrib to skip updating
tg load contribution stats when nothing needs to be updated. This reduces the
cacheline contention that would be unnecessary. In the above case, with the
patch, perf reports the total time spent in this function went down by more
than a factor of 3x:

   1.18%        reaim  [kernel.kallsyms]        [k] update_cfs_rq_blocked_load

Signed-off-by: Jason Low <jason.low2@hp.com>
---
 kernel/sched/fair.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index bfa3c86..8d4cc72 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -2377,6 +2377,9 @@ static inline void __update_cfs_rq_tg_load_contrib(struct cfs_rq *cfs_rq,
 	tg_contrib = cfs_rq->runnable_load_avg + cfs_rq->blocked_load_avg;
 	tg_contrib -= cfs_rq->tg_load_contrib;
 
+	if (!tg_contrib)
+		return;
+
 	if (force_update || abs(tg_contrib) > cfs_rq->tg_load_contrib / 8) {
 		atomic_long_add(tg_contrib, &tg->load_avg);
 		cfs_rq->tg_load_contrib += tg_contrib;
-- 
1.7.1




^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2014-08-11 17:31 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-04 20:28 [PATCH] sched: Reduce contention in update_cfs_rq_blocked_load Jason Low
2014-08-04 19:15 ` Yuyang Du
2014-08-04 21:42   ` Yuyang Du
2014-08-05 15:42   ` Jason Low
2014-08-06 18:21   ` Jason Low
2014-08-07 18:02     ` Yuyang Du
2014-08-08  4:18       ` Jason Low
2014-08-07 22:30         ` Yuyang Du
2014-08-08  7:11           ` Peter Zijlstra
2014-08-07 23:15             ` Yuyang Du
2014-08-08  0:02               ` Yuyang Du
2014-08-04 20:52 ` bsegall
2014-08-04 21:27   ` Jason Low
2014-08-11 17:31   ` Jason Low
2014-08-04 21:04 ` Peter Zijlstra
2014-08-05 17:53 ` Waiman Long

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).