From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Joel Schopp <jschopp@austin.ibm.com>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
linuxppc-dev@lists.ozlabs.org,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
ego@in.ibm.com
Subject: Re: [PATCH 2/2] powerpc: implement arch_scale_smt_power for Power7
Date: Thu, 21 Jan 2010 08:33:33 +1100 [thread overview]
Message-ID: <1264023213.724.561.camel@pasglop> (raw)
In-Reply-To: <1264017847.5717.132.camel@jschopp-laptop>
On Wed, 2010-01-20 at 14:04 -0600, Joel Schopp wrote:
> On Power7 processors running in SMT4 mode with 2, 3, or 4 idle threads
> there is performance benefit to idling the higher numbered threads in
> the core.
>
> This patch implements arch_scale_smt_power to dynamically update smt
> thread power in these idle cases in order to prefer threads 0,1 over
> threads 2,3 within a core.
>
> Signed-off-by: Joel Schopp <jschopp@austin.ibm.com>
So I'll leave Peter deal with the scheduler aspects and will focus on
details :-)
> ---
> Index: linux-2.6.git/arch/powerpc/kernel/smp.c
> ===================================================================
> --- linux-2.6.git.orig/arch/powerpc/kernel/smp.c
> +++ linux-2.6.git/arch/powerpc/kernel/smp.c
> @@ -617,3 +617,44 @@ void __cpu_die(unsigned int cpu)
> smp_ops->cpu_die(cpu);
> }
> #endif
> +
> +static inline int thread_in_smt4core(int x)
> +{
> + return x % 4;
> +}
Needs a whitespace here though I don't really like the above. Any reason
why you can't use the existing cpu_thread_in_core() ?
> +unsigned long arch_scale_smt_power(struct sched_domain *sd, int cpu)
> +{
> + int cpu2;
> + int idle_count = 0;
> +
> + struct cpumask *cpu_map = sched_domain_span(sd);
> +
> + unsigned long weight = cpumask_weight(cpu_map);
> + unsigned long smt_gain = sd->smt_gain;
More whitespace damage above.
> + if (cpu_has_feature(CPU_FTRS_POWER7) && weight == 4) {
> + for_each_cpu(cpu2, cpu_map) {
> + if (idle_cpu(cpu2))
> + idle_count++;
> + }
I'm not 100% sure about the use of the CPU feature above. First I wonder
if the right approach is to instead do something like
if (!cpu_has_feature(...) !! weigth < 4)
return default_scale_smt_power(sd, cpu);
Though we may be better off using a ppc_md. hook here to avoid
calculating the weight etc... on processors that don't need any
of that.
I also dislike your naming. I would suggest you change cpu_map to
sibling_map() and cpu2 to sibling (or just c). One thing I wonder is how
sure we are that sched_domain_span() is always going to give us the
threads btw ? If we introduce another sched domain level for NUMA
purposes can't we get confused ?
Also, how hot is this code path ?
> + /* the following section attempts to tweak cpu power based
> + * on current idleness of the threads dynamically at runtime
> + */
> + if (idle_count == 2 || idle_count == 3 || idle_count == 4) {
if (idle_count > 1) ? :-)
> + if (thread_in_smt4core(cpu) == 0 ||
> + thread_in_smt4core(cpu) == 1) {
int thread = cpu_thread_in_core(cpu);
if (thread < 2)
...
> + /* add 75 % to thread power */
> + smt_gain += (smt_gain >> 1) + (smt_gain >> 2);
> + } else {
> + /* subtract 75 % to thread power */
> + smt_gain = smt_gain >> 2;
> + }
> + }
> + }
> + /* default smt gain is 1178, weight is # of SMT threads */
> + smt_gain /= weight;
> +
> + return smt_gain;
Cheers,
Ben.
> +}
> Index: linux-2.6.git/kernel/sched_features.h
> ===================================================================
> --- linux-2.6.git.orig/kernel/sched_features.h
> +++ linux-2.6.git/kernel/sched_features.h
> @@ -107,7 +107,7 @@ SCHED_FEAT(CACHE_HOT_BUDDY, 1)
> /*
> * Use arch dependent cpu power functions
> */
> -SCHED_FEAT(ARCH_POWER, 0)
> +SCHED_FEAT(ARCH_POWER, 1)
>
> SCHED_FEAT(HRTICK, 0)
> SCHED_FEAT(DOUBLE_TICK, 0)
>
WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Joel Schopp <jschopp@austin.ibm.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
ego@in.ibm.com, linuxppc-dev@lists.ozlabs.org,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] powerpc: implement arch_scale_smt_power for Power7
Date: Thu, 21 Jan 2010 08:33:33 +1100 [thread overview]
Message-ID: <1264023213.724.561.camel@pasglop> (raw)
In-Reply-To: <1264017847.5717.132.camel@jschopp-laptop>
On Wed, 2010-01-20 at 14:04 -0600, Joel Schopp wrote:
> On Power7 processors running in SMT4 mode with 2, 3, or 4 idle threads
> there is performance benefit to idling the higher numbered threads in
> the core.
>
> This patch implements arch_scale_smt_power to dynamically update smt
> thread power in these idle cases in order to prefer threads 0,1 over
> threads 2,3 within a core.
>
> Signed-off-by: Joel Schopp <jschopp@austin.ibm.com>
So I'll leave Peter deal with the scheduler aspects and will focus on
details :-)
> ---
> Index: linux-2.6.git/arch/powerpc/kernel/smp.c
> ===================================================================
> --- linux-2.6.git.orig/arch/powerpc/kernel/smp.c
> +++ linux-2.6.git/arch/powerpc/kernel/smp.c
> @@ -617,3 +617,44 @@ void __cpu_die(unsigned int cpu)
> smp_ops->cpu_die(cpu);
> }
> #endif
> +
> +static inline int thread_in_smt4core(int x)
> +{
> + return x % 4;
> +}
Needs a whitespace here though I don't really like the above. Any reason
why you can't use the existing cpu_thread_in_core() ?
> +unsigned long arch_scale_smt_power(struct sched_domain *sd, int cpu)
> +{
> + int cpu2;
> + int idle_count = 0;
> +
> + struct cpumask *cpu_map = sched_domain_span(sd);
> +
> + unsigned long weight = cpumask_weight(cpu_map);
> + unsigned long smt_gain = sd->smt_gain;
More whitespace damage above.
> + if (cpu_has_feature(CPU_FTRS_POWER7) && weight == 4) {
> + for_each_cpu(cpu2, cpu_map) {
> + if (idle_cpu(cpu2))
> + idle_count++;
> + }
I'm not 100% sure about the use of the CPU feature above. First I wonder
if the right approach is to instead do something like
if (!cpu_has_feature(...) !! weigth < 4)
return default_scale_smt_power(sd, cpu);
Though we may be better off using a ppc_md. hook here to avoid
calculating the weight etc... on processors that don't need any
of that.
I also dislike your naming. I would suggest you change cpu_map to
sibling_map() and cpu2 to sibling (or just c). One thing I wonder is how
sure we are that sched_domain_span() is always going to give us the
threads btw ? If we introduce another sched domain level for NUMA
purposes can't we get confused ?
Also, how hot is this code path ?
> + /* the following section attempts to tweak cpu power based
> + * on current idleness of the threads dynamically at runtime
> + */
> + if (idle_count == 2 || idle_count == 3 || idle_count == 4) {
if (idle_count > 1) ? :-)
> + if (thread_in_smt4core(cpu) == 0 ||
> + thread_in_smt4core(cpu) == 1) {
int thread = cpu_thread_in_core(cpu);
if (thread < 2)
...
> + /* add 75 % to thread power */
> + smt_gain += (smt_gain >> 1) + (smt_gain >> 2);
> + } else {
> + /* subtract 75 % to thread power */
> + smt_gain = smt_gain >> 2;
> + }
> + }
> + }
> + /* default smt gain is 1178, weight is # of SMT threads */
> + smt_gain /= weight;
> +
> + return smt_gain;
Cheers,
Ben.
> +}
> Index: linux-2.6.git/kernel/sched_features.h
> ===================================================================
> --- linux-2.6.git.orig/kernel/sched_features.h
> +++ linux-2.6.git/kernel/sched_features.h
> @@ -107,7 +107,7 @@ SCHED_FEAT(CACHE_HOT_BUDDY, 1)
> /*
> * Use arch dependent cpu power functions
> */
> -SCHED_FEAT(ARCH_POWER, 0)
> +SCHED_FEAT(ARCH_POWER, 1)
>
> SCHED_FEAT(HRTICK, 0)
> SCHED_FEAT(DOUBLE_TICK, 0)
>
next prev parent reply other threads:[~2010-01-20 21:36 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-20 20:00 [PATCH 0/2] sched: arch_scale_smt_powers Joel Schopp
2010-01-20 20:00 ` Joel Schopp
2010-01-20 20:02 ` [PATCH 1/2] sched: Fix the place where group powers are updated Joel Schopp
2010-01-20 20:02 ` Joel Schopp
2010-01-21 13:54 ` [tip:sched/core] " tip-bot for Gautham R Shenoy
2010-01-26 23:28 ` [PATCHv2 1/2] sched: enable ARCH_POWER Joel Schopp
2010-01-26 23:28 ` Joel Schopp
2010-01-28 23:20 ` [PATCHv3 " Joel Schopp
2010-01-28 23:20 ` Joel Schopp
2010-02-05 20:57 ` [PATCHv4 " Joel Schopp
2010-02-05 20:57 ` Joel Schopp
2010-01-20 20:04 ` [PATCH 2/2] powerpc: implement arch_scale_smt_power for Power7 Joel Schopp
2010-01-20 20:04 ` Joel Schopp
2010-01-20 20:48 ` Peter Zijlstra
2010-01-20 20:48 ` Peter Zijlstra
2010-01-20 21:58 ` Michael Neuling
2010-01-20 21:58 ` Michael Neuling
2010-01-20 22:44 ` Joel Schopp
2010-01-20 22:44 ` Joel Schopp
2010-01-21 8:27 ` Peter Zijlstra
2010-01-21 8:27 ` Peter Zijlstra
2010-01-20 21:04 ` Michael Neuling
2010-01-20 21:04 ` Michael Neuling
2010-01-20 22:09 ` Joel Schopp
2010-01-20 22:09 ` Joel Schopp
2010-01-24 3:00 ` Benjamin Herrenschmidt
2010-01-24 3:00 ` Benjamin Herrenschmidt
2010-01-25 17:50 ` Joel Schopp
2010-01-25 17:50 ` Joel Schopp
2010-01-26 4:23 ` Benjamin Herrenschmidt
2010-01-26 4:23 ` Benjamin Herrenschmidt
2010-01-20 21:33 ` Benjamin Herrenschmidt [this message]
2010-01-20 21:33 ` Benjamin Herrenschmidt
2010-01-20 22:36 ` Joel Schopp
2010-01-20 22:36 ` Joel Schopp
2010-01-26 23:28 ` [PATCHv2 " Joel Schopp
2010-01-26 23:28 ` Joel Schopp
2010-01-27 0:52 ` Benjamin Herrenschmidt
2010-01-27 0:52 ` Benjamin Herrenschmidt
2010-01-28 22:39 ` Joel Schopp
2010-01-28 22:39 ` Joel Schopp
2010-01-29 1:23 ` Benjamin Herrenschmidt
2010-01-29 1:23 ` Benjamin Herrenschmidt
2010-01-28 23:20 ` [PATCHv3 " Joel Schopp
2010-01-28 23:20 ` Joel Schopp
2010-01-28 23:24 ` Joel Schopp
2010-01-28 23:24 ` Joel Schopp
2010-01-29 1:23 ` Benjamin Herrenschmidt
2010-01-29 1:23 ` Benjamin Herrenschmidt
2010-01-29 10:13 ` Peter Zijlstra
2010-01-29 10:13 ` Peter Zijlstra
2010-01-29 18:34 ` Joel Schopp
2010-01-29 18:34 ` Joel Schopp
2010-01-29 18:41 ` Joel Schopp
2010-01-29 18:41 ` Joel Schopp
2010-02-05 20:57 ` [PATCHv4 " Joel Schopp
2010-02-05 20:57 ` Joel Schopp
2010-02-14 10:12 ` Peter Zijlstra
2010-02-14 10:12 ` Peter Zijlstra
2010-02-17 22:20 ` Michael Neuling
2010-02-17 22:20 ` Michael Neuling
2010-02-18 13:17 ` Peter Zijlstra
2010-02-18 13:17 ` Peter Zijlstra
2010-02-18 13:19 ` Peter Zijlstra
2010-02-18 13:19 ` Peter Zijlstra
2010-02-18 16:28 ` Joel Schopp
2010-02-18 16:28 ` Joel Schopp
2010-02-18 17:08 ` Peter Zijlstra
2010-02-18 17:08 ` Peter Zijlstra
2010-02-19 6:05 ` Michael Neuling
2010-02-19 6:05 ` Michael Neuling
2010-02-19 10:01 ` Peter Zijlstra
2010-02-19 10:01 ` Peter Zijlstra
2010-02-19 11:01 ` Michael Neuling
2010-02-19 11:01 ` Michael Neuling
2010-02-23 6:08 ` Michael Neuling
2010-02-23 6:08 ` Michael Neuling
2010-02-23 16:24 ` Peter Zijlstra
2010-02-23 16:24 ` Peter Zijlstra
2010-02-23 16:30 ` Peter Zijlstra
2010-02-23 16:30 ` Peter Zijlstra
2010-02-24 6:07 ` Michael Neuling
2010-02-24 6:07 ` Michael Neuling
2010-02-24 11:13 ` Michael Neuling
2010-02-24 11:13 ` Michael Neuling
2010-02-24 11:58 ` Michael Neuling
2010-02-24 11:58 ` Michael Neuling
2010-02-27 10:21 ` Michael Neuling
2010-02-27 10:21 ` Michael Neuling
2010-03-02 14:44 ` Peter Zijlstra
2010-03-02 14:44 ` Peter Zijlstra
2010-03-04 22:28 ` Michael Neuling
2010-03-04 22:28 ` Michael Neuling
2010-01-29 12:25 ` [PATCHv3 " Gabriel Paubert
2010-01-29 12:25 ` Gabriel Paubert
2010-01-29 16:26 ` Joel Schopp
2010-01-29 16:26 ` Joel Schopp
2010-01-26 23:27 ` [PATCHv2 0/2] sched: arch_scale_smt_powers v2 Joel Schopp
2010-01-26 23:27 ` Joel Schopp
2010-01-28 23:20 ` [PATCHv3 0/2] sched: arch_scale_smt_powers Joel Schopp
2010-01-28 23:20 ` Joel Schopp
2010-02-05 20:57 ` [PATCHv4 " Joel Schopp
2010-02-05 20:57 ` Joel Schopp
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=1264023213.724.561.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=a.p.zijlstra@chello.nl \
--cc=ego@in.ibm.com \
--cc=jschopp@austin.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mingo@elte.hu \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.