From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756966AbcEaJJH (ORCPT ); Tue, 31 May 2016 05:09:07 -0400 Received: from mga01.intel.com ([192.55.52.88]:32711 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756944AbcEaJJD (ORCPT ); Tue, 31 May 2016 05:09:03 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,395,1459839600"; d="scan'208";a="977754333" From: Yuyang Du To: peterz@infradead.org, mingo@kernel.org, linux-kernel@vger.kernel.org Cc: umgwanakikbuti@gmail.com, bsegall@google.com, pjt@google.com, morten.rasmussen@arm.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, Yuyang Du Subject: [RFC PATCH 2/2] sched: Remove SD_WAKE_AFFINE flag and replace it with SD_BALANCE_WAKE Date: Tue, 31 May 2016 09:11:38 +0800 Message-Id: <1464657098-24880-3-git-send-email-yuyang.du@intel.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1464657098-24880-1-git-send-email-yuyang.du@intel.com> References: <1464657098-24880-1-git-send-email-yuyang.du@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SD_BALANCE_{FORK|EXEC|WAKE} flags are for select_task_rq() to select a CPU to run a new task or a waking task. SD_WAKE_AFFINE is a flag to try selecting the waker CPU to run the waking task. SD_BALANCE_WAKE is not a sched_domain flag, but SD_WAKE_AFFINE is. Conceptually, SD_BALANCE_WAKE should be a sched_domain flag just like the other two, so we first make SD_BALANCE_WAKE a sched_domain flag. Moreover, the semantic of SD_WAKE_AFFINE is included in the semantic of SD_BALANCE_WAKE. When in wakeup balancing, it is natual to try the waker CPU if the waker CPU is allowed, in that sense, we don't need a separate flag to specify it, not mentioning that SD_WAKE_AFFINE is almost enabled in every sched_domains. With the above combined, there is no need to have SD_WAKE_AFFINE, so we remove and replace it with SD_BALANCE_WAKE. This can be accomplished without any functionality change. Signed-off-by: Yuyang Du --- include/linux/sched.h | 1 - kernel/sched/core.c | 7 +++---- kernel/sched/deadline.c | 2 +- kernel/sched/fair.c | 9 ++++----- kernel/sched/rt.c | 2 +- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index c39244d..fca0c39 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1014,7 +1014,6 @@ extern void wake_up_q(struct wake_q_head *head); #define SD_BALANCE_EXEC 0x0004 /* Balance on exec */ #define SD_BALANCE_FORK 0x0008 /* Balance on fork, clone */ #define SD_BALANCE_WAKE 0x0010 /* Balance on wakeup */ -#define SD_WAKE_AFFINE 0x0020 /* Wake task to waking CPU */ #define SD_SHARE_CPUCAPACITY 0x0080 /* Domain members share cpu power */ #define SD_SHARE_POWERDOMAIN 0x0100 /* Domain members share power domain */ #define SD_SHARE_PKG_RESOURCES 0x0200 /* Domain members share cpu pkg resources */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index e00b8ea..2206fe1 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5670,7 +5670,7 @@ static int sd_degenerate(struct sched_domain *sd) } /* Following flags don't use groups */ - if (sd->flags & (SD_WAKE_AFFINE)) + if (sd->flags & (SD_BALANCE_WAKE)) return 0; return 1; @@ -6355,8 +6355,7 @@ sd_init(struct sched_domain_topology_level *tl, int cpu) | 1*SD_BALANCE_NEWIDLE | 1*SD_BALANCE_EXEC | 1*SD_BALANCE_FORK - | 0*SD_BALANCE_WAKE - | 1*SD_WAKE_AFFINE + | 1*SD_BALANCE_WAKE | 0*SD_SHARE_CPUCAPACITY | 0*SD_SHARE_PKG_RESOURCES | 0*SD_SERIALIZE @@ -6399,7 +6398,7 @@ sd_init(struct sched_domain_topology_level *tl, int cpu) if (sched_domains_numa_distance[tl->numa_level] > RECLAIM_DISTANCE) { sd->flags &= ~(SD_BALANCE_EXEC | SD_BALANCE_FORK | - SD_WAKE_AFFINE); + SD_BALANCE_WAKE); } #endif diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index fcb7f02..037ab0f 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1323,7 +1323,7 @@ static int find_later_rq(struct task_struct *task) rcu_read_lock(); for_each_domain(cpu, sd) { - if (sd->flags & SD_WAKE_AFFINE) { + if (sd->flags & SD_BALANCE_WAKE) { /* * If possible, preempting this_cpu is diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 218f8e8..43f522a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5287,8 +5287,7 @@ static int cpu_util(int cpu) * that have the 'sd_flag' flag set. In practice, this is SD_BALANCE_WAKE, * SD_BALANCE_FORK, or SD_BALANCE_EXEC. * - * Balances load by selecting the idlest cpu in the idlest group, or under - * certain conditions an idle sibling cpu if the domain has SD_WAKE_AFFINE set. + * Balances load by selecting the idlest cpu in the idlest group. * * Returns the target cpu number. * @@ -5315,9 +5314,9 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f /* * If both cpu and prev_cpu are part of this domain, - * cpu is a valid SD_WAKE_AFFINE target. + * cpu is a valid SD_BALANCE_WAKE target. */ - if (want_affine && (tmp->flags & SD_WAKE_AFFINE) && + if (want_affine && (tmp->flags & SD_BALANCE_WAKE) && cpumask_test_cpu(prev_cpu, sched_domain_span(tmp))) { affine_sd = tmp; break; @@ -5330,7 +5329,7 @@ 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 */ + sd = NULL; /* Prefer SD_BALANCE_WAKE over other balance flags */ if (cpu != prev_cpu && wake_affine(affine_sd, p, sync)) new_cpu = cpu; } diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index d5690b7..d1c8f41 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1655,7 +1655,7 @@ static int find_lowest_rq(struct task_struct *task) rcu_read_lock(); for_each_domain(cpu, sd) { - if (sd->flags & SD_WAKE_AFFINE) { + if (sd->flags & SD_BALANCE_WAKE) { int best_cpu; /* -- 1.7.9.5