* 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
[parent not found: <20110414090854.GB9248@elte.hu>]
* 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
[parent not found: <alpine.LFD.2.02.1104150202310.29365@x980>]
* 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
[parent not found: <20110415101712.GB28007@elte.hu>]
* 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 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
[parent not found: <4E1E106E.4060408@zytor.com>]
* [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
[parent not found: <alpine.LFD.2.02.1107140051020.18606@x980>]
* 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
[parent not found: <20110420131442.GA29418@atrey.karlin.mff.cuni.cz>]
* 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
* [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
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