LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Parth Shah <parth@linux.ibm.com> To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: mingo@redhat.com, peterz@infradead.org, dietmar.eggemann@arm.com, dsmythies@telus.net Subject: [RFCv2 6/6] sched/fair: Bound non idle core search by DIE domain Date: Wed, 15 May 2019 19:23:22 +0530 [thread overview] Message-ID: <20190515135322.19393-7-parth@linux.ibm.com> (raw) In-Reply-To: <20190515135322.19393-1-parth@linux.ibm.com> This patch specifies the sched domain to search for a non idle core. The select_non_idle_core searches for the non idle cores across whole system. But in the systems with multiple NUMA domains, the Turbo frequency can be sustained within the NUMA domain without being affected from other NUMA. This patch provides an architecture specific implementation for defining the turbo domain to make searching of the core to be bound within the NUMA. Signed-off-by: Parth Shah <parth@linux.ibm.com> --- arch/powerpc/include/asm/topology.h | 3 +++ arch/powerpc/kernel/smp.c | 5 +++++ kernel/sched/fair.c | 10 +++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h index 1c777ee67180..410b94c9e1a2 100644 --- a/arch/powerpc/include/asm/topology.h +++ b/arch/powerpc/include/asm/topology.h @@ -133,10 +133,13 @@ static inline void shared_proc_topology_init(void) {} #define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu)) #define topology_core_id(cpu) (cpu_to_core_id(cpu)) #define arch_scale_core_capacity powerpc_scale_core_capacity +#define arch_turbo_domain powerpc_turbo_domain unsigned long powerpc_scale_core_capacity(int first_smt, unsigned long smt_cap); +struct cpumask *powerpc_turbo_domain(int cpu); + int dlpar_cpu_readd(int cpu); #endif #endif diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 256ab2a50f6e..e13ba3981891 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -1203,6 +1203,11 @@ inline unsigned long powerpc_scale_core_capacity(int first_cpu, /* Scale core capacity based on smt mode */ return smt_mode == 1 ? cap : ((cap * smt_mode) >> 3) + cap; } + +inline struct cpumask *powerpc_turbo_domain(int cpu) +{ + return cpumask_of_node(cpu_to_node(cpu)); +} #endif static inline void add_cpu_to_smallcore_masks(int cpu) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index d2d556eb6d0f..bd9985775db4 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6260,6 +6260,13 @@ static inline bool core_underutilized(unsigned long core_util, return core_util < (core_capacity >> 3); } +#ifndef arch_turbo_domain +static __always_inline struct cpumask *arch_turbo_domain(int cpu) +{ + return sched_domain_span(rcu_dereference(per_cpu(sd_llc, cpu))); +} +#endif + /* * Try to find a non idle core in the system with spare capacity * available for task packing, thereby keeping minimal cores active. @@ -6270,7 +6277,8 @@ static int select_non_idle_core(struct task_struct *p, int prev_cpu) struct cpumask *cpus = this_cpu_cpumask_var_ptr(turbo_sched_mask); int iter_cpu, sibling; - cpumask_and(cpus, cpu_online_mask, &p->cpus_allowed); + cpumask_and(cpus, cpu_online_mask, arch_turbo_domain(prev_cpu)); + cpumask_and(cpus, cpus, &p->cpus_allowed); for_each_cpu_wrap(iter_cpu, cpus, prev_cpu) { unsigned long core_util = 0; -- 2.17.1
next prev parent reply other threads:[~2019-05-15 13:54 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-15 13:53 [RFCv2 0/6] TurboSched: A scheduler for sustaining Turbo Frequencies for longer durations Parth Shah 2019-05-15 13:53 ` [RFCv2 1/6] sched/core: Add manual jitter classification from cgroup interface Parth Shah 2019-05-15 16:29 ` Peter Zijlstra 2019-05-16 16:12 ` Parth Shah 2019-05-15 13:53 ` [RFCv2 2/6] sched: Introduce switch to enable TurboSched mode Parth Shah 2019-05-15 16:30 ` Peter Zijlstra 2019-05-16 16:15 ` Parth Shah 2019-05-15 13:53 ` [RFCv2 3/6] sched/core: Update turbo_sched count only when required Parth Shah 2019-05-15 16:31 ` Peter Zijlstra 2019-05-15 13:53 ` [RFCv2 4/6] sched/fair: Define core capacity to limit task packing Parth Shah 2019-05-15 16:37 ` Peter Zijlstra 2019-05-15 13:53 ` [RFCv2 5/6] sched/fair: Tune task wake-up logic to pack jitter tasks Parth Shah 2019-05-15 16:43 ` Peter Zijlstra 2019-05-15 13:53 ` Parth Shah [this message] 2019-05-15 16:44 ` [RFCv2 6/6] sched/fair: Bound non idle core search by DIE domain Peter Zijlstra 2019-05-16 16:26 ` Parth Shah 2019-05-15 16:48 ` [RFCv2 0/6] TurboSched: A scheduler for sustaining Turbo Frequencies for longer durations Peter Zijlstra 2019-05-16 16:05 ` Parth Shah
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=20190515135322.19393-7-parth@linux.ibm.com \ --to=parth@linux.ibm.com \ --cc=dietmar.eggemann@arm.com \ --cc=dsmythies@telus.net \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).