Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754532AbdFWQzo (ORCPT ); Fri, 23 Jun 2017 12:55:44 -0400 Received: from shelob.surriel.com ([96.67.55.147]:58351 "EHLO shelob.surriel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753870AbdFWQzn (ORCPT ); Fri, 23 Jun 2017 12:55:43 -0400 From: riel@redhat.com To: linux-kernel@vger.kernel.org Cc: jhladky@redhat.com, mingo@kernel.org, mgorman@suse.de, peterz@infradead.org Subject: [PATCH 2/4] sched: simplify wake_affine for single socket case Date: Fri, 23 Jun 2017 12:55:28 -0400 Message-Id: <20170623165530.22514-3-riel@redhat.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170623165530.22514-1-riel@redhat.com> References: <20170623165530.22514-1-riel@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1517 Lines: 48 From: Rik van Riel Then this_cpu and prev_cpu are in the same socket, select_idle_sibling will do its thing regardless of the return value of wake_affine. Just return true and don't look at all the other things. Signed-off-by: Rik van Riel --- kernel/sched/fair.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 2180c8591e16..949de24e36bd 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5373,6 +5373,13 @@ static int wake_affine(struct sched_domain *sd, struct task_struct *p, this_load = target_load(this_cpu, idx); /* + * Common case: CPUs are in the same socket, and select_idle_sibling + * will do its thing regardless of what we return. + */ + if (cpus_share_cache(prev_cpu, this_cpu)) + return true; + + /* * If sync wakeup then subtract the (maximum possible) * effect of the currently running task from the load * of the current CPU: @@ -5960,11 +5967,15 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f if (affine_sd) { sd = NULL; /* Prefer wake_affine over balance flags */ - if (cpu != prev_cpu && wake_affine(affine_sd, p, prev_cpu, sync)) + if (cpu == prev_cpu) + goto pick_cpu; + + if (wake_affine(affine_sd, p, prev_cpu, sync)) new_cpu = cpu; } if (!sd) { + pick_cpu: if (sd_flag & SD_BALANCE_WAKE) /* XXX always ? */ new_cpu = select_idle_sibling(p, prev_cpu, new_cpu); -- 2.9.4