That's not a bug, it's a feature! Check your temperatures, the only reason the CPU speed is decreased is because you're overheating. Look at the first output you show, you have one of your cores running at 92°C! That's pretty hot to begin with and it probably went even higher before your clock speed was reduced.
You can check the maximum temperature your CPU can deal with by running sensors
. For example, for my Intel i7:
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +77.0°C (high = +95.0°C, crit = +105.0°C)
Core 2: +79.0°C (high = +95.0°C, crit = +105.0°C)
So, on my machine, 95.0°C is considered high and 105°C is the critical temperature at which the machine will be shut down. Your specs might be a little different but 92.0°C is definitely high.
Now, you can force your CPU to keep the same clock speed. This is controlled by the CPU governor. You probably have it set to ondemand
, but the following options are available:
- Performance keeps the CPU at the highest possible frequency
- Powersave keeps the CPU at the lowest possible frequency
- Userspace exports the available frequency information to the user level (through the /sys file system)
and permits user-space control of the CPU frequency
- Ondemand scales the CPU frequencies according to the CPU usage (like does the userspace frequency scaling
daemons, but in kernel)
- Conservative acts like the ondemand but increases frequency step by step
To change your governor to, for example, "Performance", run this:
echo "performance" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
However, the likely result will simply be that your computer will shutdown when the high temperatures are reached. It might also still scale it down, I'm not sure how the safety features are implemented. In any case, the main point is that you don't want to do this because it can seriously harm your hardware.
There are very good reasons why your computer won't let you go past certain temperatures and you don't want to screw with that. I don't know of any way to actually disable the temperature limit and I wouldn't tell you if I did. There are easier ways, but disabling the temperature safety limits is certainly a good way to destroy your computer.
For compatible processors, by default Ubuntu now uses the intel_pstate CPU frequency governor, whereas it used to use the acpi_cpufreq CPU frequncy governor.
The intel_pstate drive does not have ondemand
mode, but its powersave
mode should be the equivalent of the acpi_cpufreq ondemand
mode. Your system should default to powersave
mode about 1 minute after boot, and via the /etc/init.d/ondemand
script. In the recent past, that script was not properly dealing with the intel_pstate case, but it should have been fixed for all use cases by now. Reference.
To answer your actual questions:
A.) The master min and max frequencies are stored as percentage numbers.
cat /sys/devices/system/cpu/intel_pstate/min_perf_pct
cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
The interpretation of those numbers is a function of the turbo enabled or disabled flag, and in my opinion there is an inconsistency in the definitions.
cat /sys/devices/system/cpu/intel_pstate/no_turbo
Example from my i7-2600K: min freq 1.6GHz; max non-turbo 3.4GHz; max turbo 3.8GHz.
Therefore as percentages:
Turbo off: max = 100%, min = 47.1%
Turbo on: max = 100%, min = 42.1%
$ cat /sys/devices/system/cpu/intel_pstate/no_turbo
0
$ cat /sys/devices/system/cpu/intel_pstate/min_perf_pct
42
$ cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
100
and
$ cat /sys/devices/system/cpu/intel_pstate/no_turbo
1
$ cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
100
$ cat /sys/devices/system/cpu/intel_pstate/min_perf_pct
42
B.) The intel-pstate powersave
mode should be the equivalent of the acpi-cpufreq ondemand
mode.
C.) There is something wrong, resulting in your grief. There have been other reports similar to yours. Myself, I do not know the root issue, but there have also been reports of incompatibilities with cpufrequtils. I do not know if they are true or not, as I don't use any such things. I only use the most primitive level of controls with the intel-pstate driver.
Best Answer
Actually as you are running all 4 cores, the maximum frequency won't be achieved as specified. Intel specifies maximum turbo frequency for a single running core.
There are different maximum frequencies achieved for 1 active core and for 4 active cores (to prevent going over TDP) http://www.cpu-world.com/CPUs/Core_i5/Intel-Core%20i5-3210M%20(BGA)%20Mobile%20processor.html
e.g. thus you are getting around 2.9 ghz rather than 3.1
if you look in i7z there is a line specifying //// max multiplier achieved with 1/2/3/4 core. You cannot go above those multipliers if more than some number of cores are active.
also, inactive core need to be in C3 or higher states to allow the active core(s) to get into higher turbo levels.