* [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
@ 2011-03-30 22:21 Len Brown
0 siblings, 0 replies; 12+ messages in thread
From: Len Brown @ 2011-03-30 22:21 UTC (permalink / raw)
To: x86; +Cc: linux-pm, linux-kernel
From: Len Brown <len.brown@intel.com>
Since 2.6.35 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility is available
in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invoke x86_energy_perf_policy(8).
The result is that some modern hardware is running in hardware default,
which is "performance" mode, rather than the intended design default
of "normal" mode.
Initialize the MSR to the "normal" setting during kernel boot.
Of course, x86_energy_perf_policy(8) is available to change
the default after boot, should the user have a policy preference.
cc: stable@kernel.org
Signed-off-by: Len Brown <len.brown@intel.com>
---
arch/x86/include/asm/msr-index.h | 3 +++
arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++
2 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index 43a18c7..91fedd9 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -250,6 +250,9 @@
#define MSR_IA32_TEMPERATURE_TARGET 0x000001a2
#define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0
+#define ENERGY_PERF_BIAS_PERFORMANCE 0
+#define ENERGY_PERF_BIAS_NORMAL 6
+#define ENERGY_PERF_BIAS_POWERSWAVE 15
#define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index d16c2c5..48cca4a 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -448,6 +448,20 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
if (cpu_has(c, X86_FEATURE_VMX))
detect_vmx_virtcap(c);
+
+ /*
+ * Initialize MSR_IA32_ENERGY_PERF_BIAS if BIOS did not.
+ * x86_energy_perf_policy(8) is available to change it at run-time
+ */
+ if (cpu_has(c, X86_FEATURE_EPB)) {
+ u64 epb;
+
+ rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
+ if ((epb & 0xF) == 0) {
+ epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
+ wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
+ }
+ }
}
#ifdef CONFIG_X86_32
--
1.7.4.2.406.gbe91
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] <alpine.LFD.2.02.1103301819250.31342@x980>
@ 2011-04-14 9:08 ` Ingo Molnar
[not found] ` <20110414090854.GB9248@elte.hu>
1 sibling, 0 replies; 12+ messages in thread
From: Ingo Molnar @ 2011-04-14 9:08 UTC (permalink / raw)
To: Len Brown
Cc: Andrew Morton, x86, linux-kernel, H. Peter Anvin, linux-pm,
Linus Torvalds, Thomas Gleixner, Alan Cox, Arjan van de Ven
* Len Brown <lenb@kernel.org> wrote:
> From: Len Brown <len.brown@intel.com>
>
> Since 2.6.35 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
> Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility is available
> in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
>
> However, the typical BIOS fails to initialize the MSR,
> and the typical Linux distro neglects to invoke x86_energy_perf_policy(8).
>
> The result is that some modern hardware is running in hardware default,
> which is "performance" mode, rather than the intended design default
> of "normal" mode.
>
> Initialize the MSR to the "normal" setting during kernel boot.
>
> Of course, x86_energy_perf_policy(8) is available to change
> the default after boot, should the user have a policy preference.
>
> cc: stable@kernel.org
> Signed-off-by: Len Brown <len.brown@intel.com>
> ---
> arch/x86/include/asm/msr-index.h | 3 +++
> arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++
> 2 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
> index 43a18c7..91fedd9 100644
> --- a/arch/x86/include/asm/msr-index.h
> +++ b/arch/x86/include/asm/msr-index.h
> @@ -250,6 +250,9 @@
> #define MSR_IA32_TEMPERATURE_TARGET 0x000001a2
>
> #define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0
> +#define ENERGY_PERF_BIAS_PERFORMANCE 0
> +#define ENERGY_PERF_BIAS_NORMAL 6
> +#define ENERGY_PERF_BIAS_POWERSWAVE 15
>
> #define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1
>
> diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
> index d16c2c5..48cca4a 100644
> --- a/arch/x86/kernel/cpu/intel.c
> +++ b/arch/x86/kernel/cpu/intel.c
> @@ -448,6 +448,20 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
>
> if (cpu_has(c, X86_FEATURE_VMX))
> detect_vmx_virtcap(c);
> +
> + /*
> + * Initialize MSR_IA32_ENERGY_PERF_BIAS if BIOS did not.
> + * x86_energy_perf_policy(8) is available to change it at run-time
> + */
> + if (cpu_has(c, X86_FEATURE_EPB)) {
> + u64 epb;
> +
> + rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
> + if ((epb & 0xF) == 0) {
> + epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
> + wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
> + }
> + }
Dunno, this patch appears to silently modify the system to be slower than it
was before under Linux.
Won't people report this as a regression if this change reduces performance for
them?
They wont be able to see your comments in the code and in the changelog either,
when this happens to them. They might look into /proc/cpuinfo and see 'epb'
there but it wont tell them anything. They wont know about a utility available
in tools/power/x86/ either.
So this patch has 'future trouble' written all over it i'm afraid.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <20110414090854.GB9248@elte.hu>
@ 2011-04-15 6:25 ` Len Brown
[not found] ` <alpine.LFD.2.02.1104150202310.29365@x980>
1 sibling, 0 replies; 12+ messages in thread
From: Len Brown @ 2011-04-15 6:25 UTC (permalink / raw)
To: Ingo Molnar
Cc: Andrew Morton, x86, linux-kernel, H. Peter Anvin, linux-pm,
Linus Torvalds, Thomas Gleixner, Alan Cox, Arjan van de Ven
> > From: Len Brown <len.brown@intel.com>
> >
> > Since 2.6.35 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
> > Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility is available
> > in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
> >
> > However, the typical BIOS fails to initialize the MSR,
> > and the typical Linux distro neglects to invoke x86_energy_perf_policy(8).
> >
> > The result is that some modern hardware is running in hardware default,
> > which is "performance" mode, rather than the intended design default
> > of "normal" mode.
> >
> > Initialize the MSR to the "normal" setting during kernel boot.
> >
> > Of course, x86_energy_perf_policy(8) is available to change
> > the default after boot, should the user have a policy preference.
> >
> > cc: stable@kernel.org
> > Signed-off-by: Len Brown <len.brown@intel.com>
> > ---
> > arch/x86/include/asm/msr-index.h | 3 +++
> > arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++
> > 2 files changed, 17 insertions(+), 0 deletions(-)
> >
...
>
> Dunno, this patch appears to silently modify the system to be slower than it
> was before under Linux.
>
> Won't people report this as a regression if this change reduces performance for
> them?
>
> They wont be able to see your comments in the code and in the changelog either,
> when this happens to them. They might look into /proc/cpuinfo and see 'epb'
> there but it wont tell them anything. They wont know about a utility available
> in tools/power/x86/ either.
This patch makes no change to the epb feature indicator
/proc/cpuinfo.
> So this patch has 'future trouble' written all over it i'm afraid.
EPB is limited to SNB and later.
So the installed base as yet is small.
(it also exists on WSM-EP, but doesn't do so much there)
EPB will have a more significant effect on future hardware.
Linux currently trails competing operating systems in energy
efficiency on SNB due to this setting, and Linux will trail
competing operating systems even more on future hardware
if this default is not fixed.
Will it be possible to measure a performance difference between
"performance" and "normal"? Yes, it will be possible.
Will 99.9% of users notice? Nope. More likely they'll notice
the the power savings that are disabled in "performance" mode.
I should have called it "benchmark" mode instead of "performance" mode...
thanks,
Len Brown, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <alpine.LFD.2.02.1104150202310.29365@x980>
@ 2011-04-15 10:17 ` Ingo Molnar
2011-04-20 13:14 ` Pavel Machek
` (2 subsequent siblings)
3 siblings, 0 replies; 12+ messages in thread
From: Ingo Molnar @ 2011-04-15 10:17 UTC (permalink / raw)
To: Len Brown
Cc: Andrew Morton, x86, linux-kernel, H. Peter Anvin, linux-pm,
Linus Torvalds, Thomas Gleixner, Alan Cox, Arjan van de Ven
* Len Brown <lenb@kernel.org> wrote:
>
> > > From: Len Brown <len.brown@intel.com>
> > >
> > > Since 2.6.35 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
> > > Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility is available
> > > in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
> > >
> > > However, the typical BIOS fails to initialize the MSR,
> > > and the typical Linux distro neglects to invoke x86_energy_perf_policy(8).
> > >
> > > The result is that some modern hardware is running in hardware default,
> > > which is "performance" mode, rather than the intended design default
> > > of "normal" mode.
> > >
> > > Initialize the MSR to the "normal" setting during kernel boot.
> > >
> > > Of course, x86_energy_perf_policy(8) is available to change
> > > the default after boot, should the user have a policy preference.
> > >
> > > cc: stable@kernel.org
> > > Signed-off-by: Len Brown <len.brown@intel.com>
> > > ---
> > > arch/x86/include/asm/msr-index.h | 3 +++
> > > arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++
> > > 2 files changed, 17 insertions(+), 0 deletions(-)
> > >
> ...
> >
> > Dunno, this patch appears to silently modify the system to be slower than it
> > was before under Linux.
> >
> > Won't people report this as a regression if this change reduces performance for
> > them?
> >
> > They wont be able to see your comments in the code and in the changelog either,
> > when this happens to them. They might look into /proc/cpuinfo and see 'epb'
> > there but it wont tell them anything. They wont know about a utility available
> > in tools/power/x86/ either.
>
> This patch makes no change to the epb feature indicator
> /proc/cpuinfo.
I know. I reacted to this bit in the changelog:
> > > Since 2.6.35 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
Printing the existence of a CPU feature does nothing to inform users.
> > So this patch has 'future trouble' written all over it i'm afraid.
>
> EPB is limited to SNB and later.
> So the installed base as yet is small.
> (it also exists on WSM-EP, but doesn't do so much there)
> EPB will have a more significant effect on future hardware.
>
> Linux currently trails competing operating systems in energy
> efficiency on SNB due to this setting, and Linux will trail
> competing operating systems even more on future hardware
> if this default is not fixed.
>
> Will it be possible to measure a performance difference between
> "performance" and "normal"? Yes, it will be possible.
> Will 99.9% of users notice? Nope. More likely they'll notice
> the the power savings that are disabled in "performance" mode.
>
> I should have called it "benchmark" mode instead of "performance" mode...
That's all fair but does not address the concerns i raised. A silent change
during bootup is asking for trouble.
So how about informing users, how about making it non-silent? An informative
printk that also mentions the power configuration tool, etc. This solves the
concerns i mentioned.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <alpine.LFD.2.02.1104150202310.29365@x980>
2011-04-15 10:17 ` Ingo Molnar
@ 2011-04-20 13:14 ` Pavel Machek
[not found] ` <20110415101712.GB28007@elte.hu>
[not found] ` <20110420131442.GA29418@atrey.karlin.mff.cuni.cz>
3 siblings, 0 replies; 12+ messages in thread
From: Pavel Machek @ 2011-04-20 13:14 UTC (permalink / raw)
To: Len Brown, stable
Cc: Andrew Morton, x86, linux-kernel, Thomas Gleixner, H. Peter Anvin,
Ingo Molnar, Linus Torvalds, linux-pm, Alan Cox, Arjan van de Ven
> > > However, the typical BIOS fails to initialize the MSR,
> > > and the typical Linux distro neglects to invoke x86_energy_perf_policy(8).
> > >
> > > The result is that some modern hardware is running in hardware default,
> > > which is "performance" mode, rather than the intended design default
> > > of "normal" mode.
> > >
> > > Initialize the MSR to the "normal" setting during kernel boot.
> > >
> > > Of course, x86_energy_perf_policy(8) is available to change
> > > the default after boot, should the user have a policy preference.
> > >
> > > cc: stable@kernel.org
...
> Will it be possible to measure a performance difference between
> "performance" and "normal"? Yes, it will be possible.
Ok. So... what "serious bug" does this fix? You really need to use cc:
stable less. Tweaking performance/power ratio is _not_ serious bug.
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <20110415101712.GB28007@elte.hu>
@ 2011-07-13 20:44 ` Len Brown
2011-07-13 20:49 ` Linus Torvalds
0 siblings, 1 reply; 12+ messages in thread
From: Len Brown @ 2011-07-13 20:44 UTC (permalink / raw)
To: Ingo Molnar
Cc: Andrew Morton, x86, linux-kernel, H. Peter Anvin, linux-pm,
Linus Torvalds, Thomas Gleixner, Alan Cox, Arjan van de Ven
> So how about informing users, how about making it non-silent? An informative
> printk that also mentions the power configuration tool, etc. This solves the
> concerns i mentioned.
Something like this?
rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
if ((epb & 0xF) == 0) {
printk_once(KERN_WARN, "x86: updated energy_perf_bias"
" to 'normal' from 'performance'\n"
"You can view and update epb via utility,"
" such as x86_energy_perf_policy(8)\n");
epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
2011-07-13 20:44 ` Len Brown
@ 2011-07-13 20:49 ` Linus Torvalds
2011-07-13 21:38 ` H. Peter Anvin
[not found] ` <4E1E106E.4060408@zytor.com>
0 siblings, 2 replies; 12+ messages in thread
From: Linus Torvalds @ 2011-07-13 20:49 UTC (permalink / raw)
To: Len Brown
Cc: Andrew Morton, x86, linux-kernel, Thomas Gleixner, H. Peter Anvin,
Ingo Molnar, linux-pm, Alan Cox, Arjan van de Ven
Ack. Let's just do this. Ingo?
Linus
On Wed, Jul 13, 2011 at 1:44 PM, Len Brown <lenb@kernel.org> wrote:
>
>> So how about informing users, how about making it non-silent? An informative
>> printk that also mentions the power configuration tool, etc. This solves the
>> concerns i mentioned.
>
> Something like this?
>
> rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
> if ((epb & 0xF) == 0) {
> printk_once(KERN_WARN, "x86: updated energy_perf_bias"
> " to 'normal' from 'performance'\n"
> "You can view and update epb via utility,"
> " such as x86_energy_perf_policy(8)\n");
> epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
> wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
> }
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <20110420131442.GA29418@atrey.karlin.mff.cuni.cz>
@ 2011-07-13 20:51 ` Len Brown
0 siblings, 0 replies; 12+ messages in thread
From: Len Brown @ 2011-07-13 20:51 UTC (permalink / raw)
To: Pavel Machek
Cc: Andrew Morton, Linus Torvalds, x86, linux-kernel, Thomas Gleixner,
H. Peter Anvin, Ingo Molnar, linux-pm, stable, Alan Cox,
Arjan van de Ven
> Ok. So... what "serious bug" does this fix? You really need to use cc:
> stable less. Tweaking performance/power ratio is _not_ serious bug.
While the performance difference may not be significant,
the energy difference may be.
Some people think it is serious when Linux has worse out-of-box
energy efficiency than Windows on the same hardware.
Some people think that it is serious when their Linux distribution
has worse energy efficiency than competing Linux distributions.
Greg has given me a hard time for not cc'ing stable _enough_.
I guess the folks that answer the stable mail get to decide...
cheers,
-Len
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
2011-07-13 20:49 ` Linus Torvalds
@ 2011-07-13 21:38 ` H. Peter Anvin
[not found] ` <4E1E106E.4060408@zytor.com>
1 sibling, 0 replies; 12+ messages in thread
From: H. Peter Anvin @ 2011-07-13 21:38 UTC (permalink / raw)
To: Linus Torvalds
Cc: Andrew Morton, x86, linux-kernel, linux-pm, Ingo Molnar,
Arjan van de Ven, Thomas Gleixner, Alan Cox
On 07/13/2011 01:49 PM, Linus Torvalds wrote:
> Ack. Let's just do this. Ingo?
>
> Linus
Ingo is travelling this week, but this seems to have converged.
-hpa
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <4E1E106E.4060408@zytor.com>
@ 2011-07-14 4:53 ` Len Brown
[not found] ` <alpine.LFD.2.02.1107140051020.18606@x980>
1 sibling, 0 replies; 12+ messages in thread
From: Len Brown @ 2011-07-14 4:53 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Andrew Morton, x86, linux-kernel, Thomas Gleixner, Ingo Molnar,
Linus Torvalds, linux-pm, Alan Cox, Arjan van de Ven
From: Len Brown <len.brown@intel.com>
Since 2.6.36 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility has
been available in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
However, the typical BIOS fails to initialize the MSR, presumably
because this is handled by high-volume shrink-wrap operating systems...
Linux distros, on the other hand, do not yet invoke x86_energy_perf_policy(8).
As a result, WSM-EP, SNB, and later hardware from Intel will run in its
default hardware power-on state (performance), which assumes that users
care for performance at all costs and not for energy efficiency.
While that is fine for performance benchmarks, the hardware's intended default
operating point is "normal" mode...
Initialize the MSR to the "normal" by default during kernel boot.
x86_energy_perf_policy(8) is available to change the default after boot,
should the user have a different preference.
cc: stable@kernel.org
Signed-off-by: Len Brown <len.brown@intel.com>
---
arch/x86/include/asm/msr-index.h | 3 +++
arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++
2 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index 43a18c7..91fedd9 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -250,6 +250,9 @@
#define MSR_IA32_TEMPERATURE_TARGET 0x000001a2
#define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0
+#define ENERGY_PERF_BIAS_PERFORMANCE 0
+#define ENERGY_PERF_BIAS_NORMAL 6
+#define ENERGY_PERF_BIAS_POWERSWAVE 15
#define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index d16c2c5..7c1ca07 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -448,6 +448,24 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
if (cpu_has(c, X86_FEATURE_VMX))
detect_vmx_virtcap(c);
+
+ /*
+ * Initialize MSR_IA32_ENERGY_PERF_BIAS if BIOS did not.
+ * x86_energy_perf_policy(8) is available to change it at run-time
+ */
+ if (cpu_has(c, X86_FEATURE_EPB)) {
+ u64 epb;
+
+ rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
+ if ((epb & 0xF) == 0) {
+ printk_once(KERN_WARNING, "x86: updated energy_perf_bias"
+ " to 'normal' from 'performance'\n"
+ "You can view and update epb via utility,"
+ " such as x86_energy_perf_policy(8)\n");
+ epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
+ wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
+ }
+ }
}
#ifdef CONFIG_X86_32
--
1.7.6.134.gcf13f
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <alpine.LFD.2.02.1107140051020.18606@x980>
@ 2011-07-14 19:35 ` Rafael J. Wysocki
2011-07-15 21:37 ` [PATCH v3] " Len Brown
1 sibling, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2011-07-14 19:35 UTC (permalink / raw)
To: Len Brown
Cc: Andrew Morton, x86, linux-kernel, Thomas Gleixner, H. Peter Anvin,
Ingo Molnar, Linus Torvalds, linux-pm, Alan Cox, Arjan van de Ven
On Thursday, July 14, 2011, Len Brown wrote:
> From: Len Brown <len.brown@intel.com>
>
> Since 2.6.36 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
> Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility has
> been available in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
>
> However, the typical BIOS fails to initialize the MSR, presumably
> because this is handled by high-volume shrink-wrap operating systems...
>
> Linux distros, on the other hand, do not yet invoke x86_energy_perf_policy(8).
> As a result, WSM-EP, SNB, and later hardware from Intel will run in its
> default hardware power-on state (performance), which assumes that users
> care for performance at all costs and not for energy efficiency.
> While that is fine for performance benchmarks, the hardware's intended default
> operating point is "normal" mode...
>
> Initialize the MSR to the "normal" by default during kernel boot.
>
> x86_energy_perf_policy(8) is available to change the default after boot,
> should the user have a different preference.
>
> cc: stable@kernel.org
> Signed-off-by: Len Brown <len.brown@intel.com>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
> ---
> arch/x86/include/asm/msr-index.h | 3 +++
> arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++
> 2 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
> index 43a18c7..91fedd9 100644
> --- a/arch/x86/include/asm/msr-index.h
> +++ b/arch/x86/include/asm/msr-index.h
> @@ -250,6 +250,9 @@
> #define MSR_IA32_TEMPERATURE_TARGET 0x000001a2
>
> #define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0
> +#define ENERGY_PERF_BIAS_PERFORMANCE 0
> +#define ENERGY_PERF_BIAS_NORMAL 6
> +#define ENERGY_PERF_BIAS_POWERSWAVE 15
>
> #define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1
>
> diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
> index d16c2c5..7c1ca07 100644
> --- a/arch/x86/kernel/cpu/intel.c
> +++ b/arch/x86/kernel/cpu/intel.c
> @@ -448,6 +448,24 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
>
> if (cpu_has(c, X86_FEATURE_VMX))
> detect_vmx_virtcap(c);
> +
> + /*
> + * Initialize MSR_IA32_ENERGY_PERF_BIAS if BIOS did not.
> + * x86_energy_perf_policy(8) is available to change it at run-time
> + */
> + if (cpu_has(c, X86_FEATURE_EPB)) {
> + u64 epb;
> +
> + rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
> + if ((epb & 0xF) == 0) {
> + printk_once(KERN_WARNING, "x86: updated energy_perf_bias"
> + " to 'normal' from 'performance'\n"
> + "You can view and update epb via utility,"
> + " such as x86_energy_perf_policy(8)\n");
> + epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
> + wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
> + }
> + }
> }
>
> #ifdef CONFIG_X86_32
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
[not found] ` <alpine.LFD.2.02.1107140051020.18606@x980>
2011-07-14 19:35 ` Rafael J. Wysocki
@ 2011-07-15 21:37 ` Len Brown
1 sibling, 0 replies; 12+ messages in thread
From: Len Brown @ 2011-07-15 21:37 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Andrew Morton, x86, linux-kernel, Thomas Gleixner, Ingo Molnar,
Linus Torvalds, linux-pm, Alan Cox, Arjan van de Ven
From: Len Brown <len.brown@intel.com>
Since 2.6.36 (23016bf0d25), Linux prints the existence of "epb" in /proc/cpuinfo,
Since 2.6.38 (d5532ee7b40), the x86_energy_perf_policy(8) utility has
been available in-tree to update MSR_IA32_ENERGY_PERF_BIAS.
However, the typical BIOS fails to initialize the MSR, presumably
because this is handled by high-volume shrink-wrap operating systems...
Linux distros, on the other hand, do not yet invoke x86_energy_perf_policy(8).
As a result, WSM-EP, SNB, and later hardware from Intel will run in its
default hardware power-on state (performance), which assumes that users
care for performance at all costs and not for energy efficiency.
While that is fine for performance benchmarks, the hardware's intended default
operating point is "normal" mode...
Initialize the MSR to the "normal" by default during kernel boot.
x86_energy_perf_policy(8) is available to change the default after boot,
should the user have a different preference.
cc: stable@kernel.org
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
---
v3: fix #define typo in header and ',' typo in printk
shorten printk to fix in 80 columns
arch/x86/include/asm/msr-index.h | 3 +++
arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++
2 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index 43a18c7..55a11e0 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -250,6 +250,9 @@
#define MSR_IA32_TEMPERATURE_TARGET 0x000001a2
#define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0
+#define ENERGY_PERF_BIAS_PERFORMANCE 0
+#define ENERGY_PERF_BIAS_NORMAL 6
+#define ENERGY_PERF_BIAS_POWERSAVE 15
#define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index d16c2c5..24cba78 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -448,6 +448,24 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
if (cpu_has(c, X86_FEATURE_VMX))
detect_vmx_virtcap(c);
+
+ /*
+ * Initialize MSR_IA32_ENERGY_PERF_BIAS if BIOS did not.
+ * x86_energy_perf_policy(8) is available to change it at run-time
+ */
+ if (cpu_has(c, X86_FEATURE_EPB)) {
+ u64 epb;
+
+ rdmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
+ if ((epb & 0xF) == ENERGY_PERF_BIAS_PERFORMANCE) {
+ printk_once(KERN_WARNING "ENERGY_PERF_BIAS:"
+ " Set to 'normal', was 'performance'\n"
+ "ENERGY_PERF_BIAS: View and update with"
+ " x86_energy_perf_policy(8)\n");
+ epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
+ wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
+ }
+ }
}
#ifdef CONFIG_X86_32
--
1.7.6.134.gcf13f
^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-07-15 21:37 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <alpine.LFD.2.02.1103301819250.31342@x980>
2011-04-14 9:08 ` [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Ingo Molnar
[not found] ` <20110414090854.GB9248@elte.hu>
2011-04-15 6:25 ` Len Brown
[not found] ` <alpine.LFD.2.02.1104150202310.29365@x980>
2011-04-15 10:17 ` Ingo Molnar
2011-04-20 13:14 ` Pavel Machek
[not found] ` <20110415101712.GB28007@elte.hu>
2011-07-13 20:44 ` Len Brown
2011-07-13 20:49 ` Linus Torvalds
2011-07-13 21:38 ` H. Peter Anvin
[not found] ` <4E1E106E.4060408@zytor.com>
2011-07-14 4:53 ` [PATCH v2] " Len Brown
[not found] ` <alpine.LFD.2.02.1107140051020.18606@x980>
2011-07-14 19:35 ` Rafael J. Wysocki
2011-07-15 21:37 ` [PATCH v3] " Len Brown
[not found] ` <20110420131442.GA29418@atrey.karlin.mff.cuni.cz>
2011-07-13 20:51 ` [PATCH] " Len Brown
2011-03-30 22:21 Len Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox