* [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS @ 2011-03-30 22:21 Len Brown 2011-04-14 9:08 ` Ingo Molnar 2011-04-14 9:08 ` Ingo Molnar 0 siblings, 2 replies; 28+ 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-03-30 22:21 [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown @ 2011-04-14 9:08 ` Ingo Molnar 2011-04-15 6:25 ` Len Brown 2011-04-15 6:25 ` Len Brown 2011-04-14 9:08 ` Ingo Molnar 1 sibling, 2 replies; 28+ messages in thread From: Ingo Molnar @ 2011-04-14 9:08 UTC (permalink / raw) To: Len Brown Cc: x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Linus Torvalds, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-14 9:08 ` Ingo Molnar @ 2011-04-15 6:25 ` Len Brown 2011-04-15 10:17 ` Ingo Molnar ` (3 more replies) 2011-04-15 6:25 ` Len Brown 1 sibling, 4 replies; 28+ messages in thread From: Len Brown @ 2011-04-15 6:25 UTC (permalink / raw) To: Ingo Molnar Cc: x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Linus Torvalds, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-15 6:25 ` Len Brown @ 2011-04-15 10:17 ` Ingo Molnar 2011-07-13 20:44 ` Len Brown 2011-04-15 10:17 ` [PATCH] " Ingo Molnar ` (2 subsequent siblings) 3 siblings, 1 reply; 28+ messages in thread From: Ingo Molnar @ 2011-04-15 10:17 UTC (permalink / raw) To: Len Brown Cc: x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Linus Torvalds, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-15 10:17 ` Ingo Molnar @ 2011-07-13 20:44 ` Len Brown 0 siblings, 0 replies; 28+ messages in thread From: Len Brown @ 2011-07-13 20:44 UTC (permalink / raw) To: Ingo Molnar Cc: x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Linus Torvalds, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS @ 2011-07-13 20:44 ` Len Brown 0 siblings, 0 replies; 28+ 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] 28+ 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 -1 siblings, 0 replies; 28+ messages in thread From: Linus Torvalds @ 2011-07-13 20:49 UTC (permalink / raw) To: Len Brown Cc: Ingo Molnar, x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS @ 2011-07-13 20:49 ` Linus Torvalds 0 siblings, 0 replies; 28+ 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] 28+ 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 -1 siblings, 0 replies; 28+ 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] 28+ 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 2011-07-14 4:53 ` [PATCH v2] " Len Brown 2011-07-14 4:53 ` [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown -1 siblings, 2 replies; 28+ messages in thread From: H. Peter Anvin @ 2011-07-13 21:38 UTC (permalink / raw) To: Linus Torvalds Cc: Len Brown, Ingo Molnar, x86, linux-pm, linux-kernel, Thomas Gleixner, Alan Cox, Andrew Morton, Arjan van de Ven 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] 28+ messages in thread
* [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-13 21:38 ` H. Peter Anvin @ 2011-07-14 4:53 ` Len Brown 2011-07-14 19:35 ` Rafael J. Wysocki ` (4 more replies) 2011-07-14 4:53 ` [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown 1 sibling, 5 replies; 28+ messages in thread From: Len Brown @ 2011-07-14 4:53 UTC (permalink / raw) To: H. Peter Anvin Cc: Linus Torvalds, Ingo Molnar, x86, linux-pm, linux-kernel, Thomas Gleixner, Alan Cox, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-14 4:53 ` [PATCH v2] " Len Brown @ 2011-07-14 19:35 ` Rafael J. Wysocki 2011-07-14 19:35 ` Rafael J. Wysocki ` (3 subsequent siblings) 4 siblings, 0 replies; 28+ messages in thread From: Rafael J. Wysocki @ 2011-07-14 19:35 UTC (permalink / raw) To: Len Brown Cc: H. Peter Anvin, Linus Torvalds, Ingo Molnar, x86, linux-pm, linux-kernel, Thomas Gleixner, Alan Cox, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-14 4:53 ` [PATCH v2] " Len Brown 2011-07-14 19:35 ` Rafael J. Wysocki @ 2011-07-14 19:35 ` Rafael J. Wysocki 2011-07-14 21:12 ` [tip:x86/cpu] x86, intel, " tip-bot for Len Brown ` (2 subsequent siblings) 4 siblings, 0 replies; 28+ 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] 28+ messages in thread
* [tip:x86/cpu] x86, intel, power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-14 4:53 ` [PATCH v2] " Len Brown 2011-07-14 19:35 ` Rafael J. Wysocki 2011-07-14 19:35 ` Rafael J. Wysocki @ 2011-07-14 21:12 ` tip-bot for Len Brown 2011-07-15 0:18 ` [tip:x86/cpu] x86, msr: Fix typo in ENERGY_PERF_BIAS_POWERSAVE tip-bot for H. Peter Anvin 2011-07-15 21:37 ` [PATCH v3] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown 2011-07-15 21:37 ` Len Brown 4 siblings, 1 reply; 28+ messages in thread From: tip-bot for Len Brown @ 2011-07-14 21:12 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, stable, tglx, hpa, rjw, len.brown Commit-ID: abe48b108247e9b90b4c6739662a2e5c765ed114 Gitweb: http://git.kernel.org/tip/abe48b108247e9b90b4c6739662a2e5c765ed114 Author: Len Brown <len.brown@intel.com> AuthorDate: Thu, 14 Jul 2011 00:53:24 -0400 Committer: H. Peter Anvin <hpa@linux.intel.com> CommitDate: Thu, 14 Jul 2011 12:13:42 -0700 x86, intel, power: Initialize MSR_IA32_ENERGY_PERF_BIAS 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. Signed-off-by: Len Brown <len.brown@intel.com> Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1107140051020.18606@x980 Acked-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Cc: <stable@kernel.org> --- 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 485b4f1..23a9d89 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -259,6 +259,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 1edf5ba..da0d779 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -456,6 +456,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 related [flat|nested] 28+ messages in thread
* [tip:x86/cpu] x86, msr: Fix typo in ENERGY_PERF_BIAS_POWERSAVE 2011-07-14 21:12 ` [tip:x86/cpu] x86, intel, " tip-bot for Len Brown @ 2011-07-15 0:18 ` tip-bot for H. Peter Anvin 0 siblings, 0 replies; 28+ messages in thread From: tip-bot for H. Peter Anvin @ 2011-07-15 0:18 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, tglx, hpa, len.brown Commit-ID: 4bb82178f5cb074783aaeaa06f9f840c67af7707 Gitweb: http://git.kernel.org/tip/4bb82178f5cb074783aaeaa06f9f840c67af7707 Author: H. Peter Anvin <hpa@linux.intel.com> AuthorDate: Thu, 14 Jul 2011 14:58:44 -0700 Committer: H. Peter Anvin <hpa@linux.intel.com> CommitDate: Thu, 14 Jul 2011 14:58:44 -0700 x86, msr: Fix typo in ENERGY_PERF_BIAS_POWERSAVE Fix a trivial typo in the name of the constant ENERGY_PERF_BIAS_POWERSAVE. This didn't cause trouble because this constant is not currently used for anything. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Cc: Len Brown <len.brown@intel.com> Link: http://lkml.kernel.org/r/tip-abe48b108247e9b90b4c6739662a2e5c765ed114@git.kernel.org --- arch/x86/include/asm/msr-index.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 23a9d89..d96bdb2 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -261,7 +261,7 @@ #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 ENERGY_PERF_BIAS_POWERSAVE 15 #define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v3] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-14 4:53 ` [PATCH v2] " Len Brown ` (2 preceding siblings ...) 2011-07-14 21:12 ` [tip:x86/cpu] x86, intel, " tip-bot for Len Brown @ 2011-07-15 21:37 ` Len Brown 2011-07-15 21:37 ` Len Brown 4 siblings, 0 replies; 28+ 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] 28+ messages in thread
* [PATCH v3] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-14 4:53 ` [PATCH v2] " Len Brown ` (3 preceding siblings ...) 2011-07-15 21:37 ` [PATCH v3] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown @ 2011-07-15 21:37 ` Len Brown 2011-07-16 18:52 ` [tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message tip-bot for Len Brown 4 siblings, 1 reply; 28+ messages in thread From: Len Brown @ 2011-07-15 21:37 UTC (permalink / raw) To: H. Peter Anvin Cc: Linus Torvalds, Ingo Molnar, x86, linux-pm, linux-kernel, Thomas Gleixner, Alan Cox, Andrew Morton, 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] 28+ messages in thread
* [tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message 2011-07-15 21:37 ` Len Brown @ 2011-07-16 18:52 ` tip-bot for Len Brown 2011-08-18 17:23 ` Christoph Fritz 0 siblings, 1 reply; 28+ messages in thread From: tip-bot for Len Brown @ 2011-07-16 18:52 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, table, tglx, hpa, len.brown Commit-ID: 17edf2d79f1ea6dfdb4c444801d928953b9f98d6 Gitweb: http://git.kernel.org/tip/17edf2d79f1ea6dfdb4c444801d928953b9f98d6 Author: Len Brown <len.brown@intel.com> AuthorDate: Fri, 15 Jul 2011 17:37:15 -0400 Committer: H. Peter Anvin <hpa@linux.intel.com> CommitDate: Fri, 15 Jul 2011 15:13:55 -0700 x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message Fix the printk_once() so that it actually prints (didn't print before due to a stray comma.) [ hpa: changed to an incremental patch and adjusted the description accordingly. ] Signed-off-by: Len Brown <len.brown@intel.com> Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1107151732480.18606@x980 Cc: <table@kernel.org> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> --- arch/x86/kernel/cpu/intel.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index da0d779..ed6086e 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -465,11 +465,11 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) 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"); + 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); } ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message 2011-07-16 18:52 ` [tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message tip-bot for Len Brown @ 2011-08-18 17:23 ` Christoph Fritz 0 siblings, 0 replies; 28+ messages in thread From: Christoph Fritz @ 2011-08-18 17:23 UTC (permalink / raw) To: H. Peter Anvin, Len Brown Cc: stable, Ingo Molnar, Thomas Gleixner, linux-kernel On Sat, 2011-07-16 at 18:52 +0000, tip-bot for Len Brown wrote: > Commit-ID: 17edf2d79f1ea6dfdb4c444801d928953b9f98d6 > Gitweb: http://git.kernel.org/tip/17edf2d79f1ea6dfdb4c444801d928953b9f98d6 > Author: Len Brown <len.brown@intel.com> > AuthorDate: Fri, 15 Jul 2011 17:37:15 -0400 > Committer: H. Peter Anvin <hpa@linux.intel.com> > CommitDate: Fri, 15 Jul 2011 15:13:55 -0700 > > x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message > > Fix the printk_once() so that it actually prints (didn't print before > due to a stray comma.) > > [ hpa: changed to an incremental patch and adjusted the description > accordingly. ] > > Signed-off-by: Len Brown <len.brown@intel.com> > Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1107151732480.18606@x980 > Cc: <table@kernel.org> This "table" should be stable :) Cc: <stable@kernel.org> Reviewed-by: Christoph Fritz <chf.fritz@googlemail.com> Thanks, Christoph > Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> > --- > arch/x86/kernel/cpu/intel.c | 10 +++++----- > 1 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c > index da0d779..ed6086e 100644 > --- a/arch/x86/kernel/cpu/intel.c > +++ b/arch/x86/kernel/cpu/intel.c > @@ -465,11 +465,11 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) > 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"); > + 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); > } > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-07-13 21:38 ` H. Peter Anvin 2011-07-14 4:53 ` [PATCH v2] " Len Brown @ 2011-07-14 4:53 ` Len Brown 1 sibling, 0 replies; 28+ 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-15 6:25 ` Len Brown 2011-04-15 10:17 ` Ingo Molnar @ 2011-04-15 10:17 ` Ingo Molnar 2011-04-20 13:14 ` Pavel Machek 2011-04-20 13:14 ` Pavel Machek 3 siblings, 0 replies; 28+ 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-15 6:25 ` Len Brown 2011-04-15 10:17 ` Ingo Molnar 2011-04-15 10:17 ` [PATCH] " Ingo Molnar @ 2011-04-20 13:14 ` Pavel Machek 2011-07-13 20:51 ` Len Brown 2011-07-13 20:51 ` Len Brown 2011-04-20 13:14 ` Pavel Machek 3 siblings, 2 replies; 28+ messages in thread From: Pavel Machek @ 2011-04-20 13:14 UTC (permalink / raw) To: Len Brown, stable Cc: Ingo Molnar, x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Linus Torvalds, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-20 13:14 ` Pavel Machek @ 2011-07-13 20:51 ` Len Brown 2011-07-13 20:51 ` Len Brown 1 sibling, 0 replies; 28+ 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-20 13:14 ` Pavel Machek 2011-07-13 20:51 ` Len Brown @ 2011-07-13 20:51 ` Len Brown 1 sibling, 0 replies; 28+ messages in thread From: Len Brown @ 2011-07-13 20:51 UTC (permalink / raw) To: Pavel Machek Cc: stable, Ingo Molnar, x86, linux-pm, linux-kernel, H. Peter Anvin, Thomas Gleixner, Alan Cox, Linus Torvalds, Andrew Morton, 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-15 6:25 ` Len Brown ` (2 preceding siblings ...) 2011-04-20 13:14 ` Pavel Machek @ 2011-04-20 13:14 ` Pavel Machek 3 siblings, 0 replies; 28+ 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-04-14 9:08 ` Ingo Molnar 2011-04-15 6:25 ` Len Brown @ 2011-04-15 6:25 ` Len Brown 1 sibling, 0 replies; 28+ 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] 28+ messages in thread
* Re: [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS 2011-03-30 22:21 [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown 2011-04-14 9:08 ` Ingo Molnar @ 2011-04-14 9:08 ` Ingo Molnar 1 sibling, 0 replies; 28+ 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] 28+ messages in thread
* [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS @ 2011-03-30 22:21 Len Brown 0 siblings, 0 replies; 28+ 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] 28+ messages in thread
end of thread, other threads:[~2011-08-18 17:19 UTC | newest] Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2011-03-30 22:21 [PATCH] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown 2011-04-14 9:08 ` Ingo Molnar 2011-04-15 6:25 ` Len Brown 2011-04-15 10:17 ` Ingo Molnar 2011-07-13 20:44 ` Len Brown 2011-07-13 20:44 ` Len Brown 2011-07-13 20:49 ` Linus Torvalds 2011-07-13 20:49 ` Linus Torvalds 2011-07-13 21:38 ` H. Peter Anvin 2011-07-13 21:38 ` H. Peter Anvin 2011-07-14 4:53 ` [PATCH v2] " Len Brown 2011-07-14 19:35 ` Rafael J. Wysocki 2011-07-14 19:35 ` Rafael J. Wysocki 2011-07-14 21:12 ` [tip:x86/cpu] x86, intel, " tip-bot for Len Brown 2011-07-15 0:18 ` [tip:x86/cpu] x86, msr: Fix typo in ENERGY_PERF_BIAS_POWERSAVE tip-bot for H. Peter Anvin 2011-07-15 21:37 ` [PATCH v3] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown 2011-07-15 21:37 ` Len Brown 2011-07-16 18:52 ` [tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message tip-bot for Len Brown 2011-08-18 17:23 ` Christoph Fritz 2011-07-14 4:53 ` [PATCH v2] x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS Len Brown 2011-04-15 10:17 ` [PATCH] " Ingo Molnar 2011-04-20 13:14 ` Pavel Machek 2011-07-13 20:51 ` Len Brown 2011-07-13 20:51 ` Len Brown 2011-04-20 13:14 ` Pavel Machek 2011-04-15 6:25 ` Len Brown 2011-04-14 9:08 ` Ingo Molnar -- strict thread matches above, loose matches on Subject: below -- 2011-03-30 22:21 Len Brown
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.