x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
PATCH 1/1 x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
From: Len Brown <[email protected]>
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.
--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)
arch/x86/include/asm/msr-index.h +3 -0
@@ -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
arch/x86/kernel/cpu/intel.c +14 -0
@@ -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
Signature · 1 line
1.7.4.2.406.gbe91
Quoted 51 lines · Len Brown
From: Len Brown <[email protected]>
Since 2.6.35 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility is available in-tree to updateMSR_IA32_ENERGY_PERF_BIAS.However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.Signed-off-by Len Brown <[email protected]>--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)arch/x86/include/asm/msr-index.h +3
-0@@ -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 0x000001b1arch/x86/kernel/cpu/intel.c +4
-0@@ -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
arch/x86/kernel/cpu/intel.c static void __cpuinit init_intel(struct cpuinfo_x86 *c) · line 464
Quoted 10 lines
arch/x86/kernel/cpu/intel.c +10
-0+*/ +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
Quoted 51 lines · Len Brown
From: Len Brown <[email protected]>
Since 2.6.35 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility is available in-tree to updateMSR_IA32_ENERGY_PERF_BIAS.However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.Signed-off-by Len Brown <[email protected]>--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)arch/x86/include/asm/msr-index.h +3
-0@@ -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 0x000001b1arch/x86/kernel/cpu/intel.c +4
-0@@ -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
arch/x86/kernel/cpu/intel.c static void __cpuinit init_intel(struct cpuinfo_x86 *c) · line 464
Quoted 10 lines
arch/x86/kernel/cpu/intel.c +10
-0+*/ +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
Quoted 26 lines
Quoted 26 lines
From: Len Brown <[email protected]>
Since 2.6.35 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility is available in-tree to updateMSR_IA32_ENERGY_PERF_BIAS.However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.Signed-off-by Len Brown <[email protected]>--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)
...
Quoted 11 lines
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/cpuinfoand see 'epb' there but it wont tell them anything. They wont know about a utility available intools/power/x86/either.
This patch makes no change to the epb feature indicator /proc/cpuinfo.
Quoted 1 line
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
Quoted 26 lines
Quoted 26 lines
From: Len Brown <[email protected]>
Since 2.6.35 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility is available in-tree to updateMSR_IA32_ENERGY_PERF_BIAS.However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.Signed-off-by Len Brown <[email protected]>--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)
...
Quoted 11 lines
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/cpuinfoand see 'epb' there but it wont tell them anything. They wont know about a utility available intools/power/x86/either.
This patch makes no change to the epb feature indicator /proc/cpuinfo.
Quoted 1 line
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
Quoted 34 lines · Len Brown
Quoted 26 lines
Quoted 26 lines
From: Len Brown <[email protected]>
Since 2.6.35 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility is available in-tree to updateMSR_IA32_ENERGY_PERF_BIAS.However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.Signed-off-by Len Brown <[email protected]>--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)...
Quoted 7 lines
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?
Quoted 7 lines
Quoted 4 lines
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/cpuinfoand see 'epb' there but it wont tell them anything. They wont know about a utility available intools/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:
Quoted 1 line
Quoted 1 line
Quoted 1 line
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.
Quoted 12 lines
Quoted 1 line
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.
Quoted 6 lines
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
Quoted 34 lines · Len Brown
Quoted 26 lines
Quoted 26 lines
From: Len Brown <[email protected]>
Since 2.6.35 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility is available in-tree to updateMSR_IA32_ENERGY_PERF_BIAS.However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.Signed-off-by Len Brown <[email protected]>--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)...
Quoted 7 lines
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?
Quoted 7 lines
Quoted 4 lines
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/cpuinfoand see 'epb' there but it wont tell them anything. They wont know about a utility available intools/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:
Quoted 1 line
Quoted 1 line
Quoted 1 line
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.
Quoted 12 lines
Quoted 1 line
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.
Quoted 6 lines
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
Quoted 4 lines
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);
}Ack. Let's just do this. Ingo?
Linus
Quoted 18 lines · Len Brown
Quoted 4 lines
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: updatedenergy_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);
}
H. Peter Anvin
reviewerQuoted 3 lines · Linus Torvalds
Ack. Let's just do this. Ingo?
Linus
Ingo is travelling this week, but this seems to have converged.
-hpa
H. Peter Anvin
reviewerQuoted 3 lines · Linus Torvalds
Ack. Let's just do this. Ingo?
Linus
Ingo is travelling this week, but this seems to have converged.
-hpa
PATCH v2 1/1 x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
From: Len Brown <[email protected]>
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.
--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)
arch/x86/include/asm/msr-index.h +3 -0
@@ -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
arch/x86/kernel/cpu/intel.c +18 -0
@@ -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
Signature · 1 line
1.7.6.134.gcf13f
PATCH v2 1/1 x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
In reply to H. Peter AnvinFrom: Len Brown <[email protected]>
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.
--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)
arch/x86/include/asm/msr-index.h +3 -0
@@ -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
arch/x86/kernel/cpu/intel.c +18 -0
@@ -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
Signature · 1 line
1.7.6.134.gcf13f
Quoted 16 lines · Len Brown
From: Len Brown <[email protected]>
Since 2.6.36 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility has been available in-tree to updateMSR_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...
Quoted 7 lines
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 <[email protected]>
Quoted 49 lines
--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)arch/x86/include/asm/msr-index.h +3
-0@@ -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 0x000001b1arch/x86/kernel/cpu/intel.c +18
-0@@ -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
Quoted 16 lines · Len Brown
From: Len Brown <[email protected]>
Since 2.6.36 (
23016bf0d25), Linux prints the existence of "epb" in/proc/cpuinfo, Since 2.6.38 (d5532ee7b40), thex86_energy_perf_policy(8)utility has been available in-tree to updateMSR_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...
Quoted 7 lines
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 <[email protected]>
Quoted 49 lines
--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)arch/x86/include/asm/msr-index.h +3
-0@@ -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 0x000001b1arch/x86/kernel/cpu/intel.c +18
-0@@ -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
[tip:x86/cpu] x86, intel, power: Initialize MSR_IA32_ENERGY_PERF_BIAS
In reply to Len BrownCommit-ID: abe48b108247e9b90b4c6739662a2e5c765ed114 Gitweb: http://git.kernel.org/tip/abe48b108247e9b90b4c6739662a2e5c765ed114 Author: Len Brown <[email protected]> AuthorDate: Thu, 14 Jul 2011 00:53:24 -0400 Committer: H. Peter Anvin <[email protected]> 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.
--- arch/x86/include/asm/msr-index.h | 3 +++ arch/x86/kernel/cpu/intel.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)
arch/x86/include/asm/msr-index.h +3 -0
@@ -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
arch/x86/kernel/cpu/intel.c +18 -0
@@ -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
[tip:x86/cpu] x86, msr: Fix typo in ENERGY_PERF_BIAS_POWERSAVE
Commit-ID: 4bb82178f5cb074783aaeaa06f9f840c67af7707 Gitweb: http://git.kernel.org/tip/4bb82178f5cb074783aaeaa06f9f840c67af7707 Author: H. Peter Anvin <[email protected]> AuthorDate: Thu, 14 Jul 2011 14:58:44 -0700 Committer: H. Peter Anvin <[email protected]> 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.
--- arch/x86/include/asm/msr-index.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/x86/include/asm/msr-index.h +1 -1
@@ -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
PATCH v3 1/1 x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
In reply to Len BrownFrom: Len Brown <[email protected]>
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.
---
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(-)
arch/x86/include/asm/msr-index.h +3 -0
@@ -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
arch/x86/kernel/cpu/intel.c +18 -0
@@ -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
Signature · 1 line
1.7.6.134.gcf13f
PATCH v3 1/1 x86 intel power: Initialize MSR_IA32_ENERGY_PERF_BIAS
In reply to Len BrownFrom: Len Brown <[email protected]>
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.
---
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(-)
arch/x86/include/asm/msr-index.h +3 -0
@@ -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
arch/x86/kernel/cpu/intel.c +18 -0
@@ -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
Signature · 1 line
1.7.6.134.gcf13f
[tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message
Commit-ID: 17edf2d79f1ea6dfdb4c444801d928953b9f98d6 Gitweb: http://git.kernel.org/tip/17edf2d79f1ea6dfdb4c444801d928953b9f98d6 Author: Len Brown <[email protected]> AuthorDate: Fri, 15 Jul 2011 17:37:15 -0400 Committer: H. Peter Anvin <[email protected]> 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. ]
--- arch/x86/kernel/cpu/intel.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
arch/x86/kernel/cpu/intel.c +5 -5
@@ -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); }
Christoph Fritz
Reviewed-byRe: [tip:x86/cpu] x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message
Quoted 12 lines · tip-bot for Len Brown
Commit-ID: 17edf2d79f1ea6dfdb4c444801d928953b9f98d6 Gitweb: http://git.kernel.org/tip/17edf2d79f1ea6dfdb4c444801d928953b9f98d6 Author: Len Brown <[email protected]> AuthorDate: Fri, 15 Jul 2011 17:37:15 -0400 Committer: H. Peter Anvin <[email protected]> CommitDate: Fri, 15 Jul 2011 15:13:55 -0700x86, intel, power: Correct the
MSR_IA32_ENERGY_PERF_BIASmessageFix the
printk_once()so that it actually prints (didn't print before due to a stray comma.)
Quoted 6 lines
[ hpa: changed to an incremental patch and adjusted the description
accordingly. ]
This "table" should be stable :)
Thanks,
Christoph
Quoted 31 lines
Signed-off-by H. Peter Anvin <[email protected]>--- arch/x86/kernel/cpu/intel.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)arch/x86/kernel/cpu/intel.c +5
-6@@ -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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Quoted 14 lines
Quoted 14 lines
Quoted 14 lines
However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.
...
Quoted 2 lines
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
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Quoted 14 lines
Quoted 14 lines
Quoted 14 lines
However, the typical BIOS fails to initialize the MSR,
and the typical Linux distro neglects to invokex86_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.
...
Quoted 2 lines
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
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Quoted 2 lines
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
Quoted 2 lines
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