All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sched/fair: tweak pick_next_entity
@ 2020-09-30 17:35 Peter Oskolkov
  2020-10-01  7:17 ` Vincent Guittot
  2020-10-05  7:43 ` [tip: sched/core] sched/fair: Tweak pick_next_entity() tip-bot2 for Peter Oskolkov
  0 siblings, 2 replies; 4+ messages in thread
From: Peter Oskolkov @ 2020-09-30 17:35 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Vincent Guittot, Dietmar Eggemann,
	linux-kernel
  Cc: Peter Oskolkov, Peter Oskolkov

Currently, pick_next_entity(...) has the following structure
(simplified):

[...]
if (last_buddy_ok())
  result = last_buddy;
if (next_buddy_ok())
  result = next_buddy;
[...]

The intended behavior is to prefer next buddy over last buddy;
the current code somewhat obfuscates this, and also wastes
cycles checking the last buddy when eventually the next buddy is
picked up.

So this patch refactors two 'ifs' above into

[...]
if (next_buddy_ok())
    result = next_buddy;
else if (last_buddy_ok())
    result = last_buddy;
[...]

Signed-off-by: Peter Oskolkov <posk@google.com>
---
 kernel/sched/fair.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index fc3410b8b990..cec6cf9b2bb3 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4465,17 +4465,17 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr)
 			se = second;
 	}
 
-	/*
-	 * Prefer last buddy, try to return the CPU to a preempted task.
-	 */
-	if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1)
-		se = cfs_rq->last;
-
-	/*
-	 * Someone really wants this to run. If it's not unfair, run it.
-	 */
-	if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1)
+	if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1) {
+		/*
+		 * Someone really wants this to run. If it's not unfair, run it.
+		 */
 		se = cfs_rq->next;
+	} else if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1) {
+		/*
+		 * Prefer last buddy, try to return the CPU to a preempted task.
+		 */
+		se = cfs_rq->last;
+	}
 
 	clear_buddies(cfs_rq, se);
 
-- 
2.28.0.709.gb0816b6eb0-goog


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

end of thread, other threads:[~2020-10-05  7:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-30 17:35 [PATCH] sched/fair: tweak pick_next_entity Peter Oskolkov
2020-10-01  7:17 ` Vincent Guittot
2020-10-01  7:33   ` Peter Zijlstra
2020-10-05  7:43 ` [tip: sched/core] sched/fair: Tweak pick_next_entity() tip-bot2 for Peter Oskolkov

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.