Using kernel 3.13.0-37, CPU frequency scaling works and I can control it using the CPU frequency control applet.

I have upgraded to kernel 3.16.0-38, the applet now informs me that CPU frequency scaling is not supported.

I have checked the kernel config, I have even recompiled the kernel, ensuring that all the different governors are enabled.

So I guess my question is

What kernel settings must be enabled for frequency scaling to work?

I am running Ubuntu 14.04 with Gnome, and I am also running Linux Mint 17.2 with Cinnamon (I know this isn't a Mint forum). Same problem on each.

Thanks for any pointers.

  • What do you get for cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver and cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor? – Doug Smythies Sep 26 '15 at 14:33
  • I have a quad core i3, so 4 x cpu's. Each shows "intel_pstate" for the scaling driver and "powersave" for the scaling governor. – hatterman Sep 28 '15 at 8:02
  • Then you have frequency scaling. Perhaps it is your applet that is not working or it expects the acpi-cpufreq scaling driver. – Doug Smythies Sep 28 '15 at 13:22
  • Ahh, yes perhaps its the applet that isn't working. How do I control frequency scaling without the applet, what are the command line tools. (I am happy to do some reading, can you point me in the right direction ?). I have a follow on question :- If the applet expects the acpi-cpufreq scaling driver, then installing a new kernel would not have deleted this would it ? (It works when I boot with the earlier kernel). – hatterman Sep 28 '15 at 20:26
  • I meant to ask, and thought I did, is the change form kernel 3.13 to 3.16 a typo, or did you mean 3.13.0-38? Anyway, there has been some back and forth about which frequency scaling driver is used by default. When you boot with an older kernel what do you get for the same commands from my original comment? With the intel_pstate driver to limit the CPU frequency to say 75% of maximum do echo "75" | sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct If you prefer to just use the acpi-cpufreq driver, so that your applet will work, we can set that up also. – Doug Smythies Sep 28 '15 at 21:16

Note: This is NOT an answer to the question, but rather a response to the actual root issue.

The older kernel, 3.13.0-37, used the acpi-cpufreq CPU frequency scaling driver by default. Apparently that driver was compatible with whatever higher level applet was being used to control CPU frequency scaling.

The newer kernel, 3.16.0-38. used the intel_pstate CPU frequency scaling driver by default. Apparently that driver is NOT compatible with whatever higher level applet was being used to control CPU frequency scaling. The information was misleading, and the question was asked based on the belief that there was no frequency scaling when actually there was.

The intel_pstate driver has had a problematic history, with sometimes very very bad mistakes. For a time it was disabled by default in Ubuntu. More recently (in the last year) it has been enabled by default again. Myself, I think there are still multiple issues with the intel_pstate driver (and it has been my focus for a very long time now).

One can override the default scaling driver via the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub. For example (includes some other stuff that I use):

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 intel_pstate=disable net.ifnames=1 biosdevname=0 crashkernel=384M-:128M"


GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 intel_pstate=enable net.ifnames=1 biosdevname=0 crashkernel=384M-:128M"

always remember (I rarely remember) to:

sudo update-grub


A great many users complain that their CPU frequencies are too high with the intel_pstate driver. In many cases it is true. However, one needs to also look at C states (various levels of idle) to really know what is going on with their processor, and if they should be concerned or not. As processors are evolving and deeper C states are available, sometimes using a higher CPU frequency for a task and then going into a deeper C state sooner can result in less energy consumption overall. This is one reason the original maintainer of the intel_pstate driver used the name powersave for the main governor, which is crudely and roughly the equivalent of the acpi-cpufreq ondemand governor. The governor naming is a source of confusion for many users.

Anyway, a recommended tool for obtaining feedback on C states and such is turbostat. I can not recall what package contains turbostat, because I always compile it myself from the kernel source. Example turbostat run:

$ sudo ./turbostat -d sleep 10
turbostat version 4.7 17-June, 2015 - Len Brown <lenb@kernel.org>
CPUID(0): GenuineIntel 13 CPUID levels; family:model:stepping 0x6:2a:7 (6:42:7)
RAPL: 690 sec. Joule Counter Range, at 95 Watts
cpu2: MSR_NHM_PLATFORM_INFO: 0x100070012200
16 * 100 = 1600 MHz max efficiency frequency
34 * 100 = 3400 MHz base frequency
cpu2: MSR_IA32_POWER_CTL: 0x0004005d (C1E auto-promotion: DISabled)
cpu2: MSR_TURBO_RATIO_LIMIT: 0x23242526
35 * 100 = 3500 MHz max turbo 4 active cores
36 * 100 = 3600 MHz max turbo 3 active cores
37 * 100 = 3700 MHz max turbo 2 active cores
38 * 100 = 3800 MHz max turbo 1 active cores
cpu2: MSR_NHM_SNB_PKG_CST_CFG_CTL: 0x1e008403 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked: pkg-cstate-limit=3: pc6r)
cpu0: MSR_IA32_ENERGY_PERF_BIAS: 0x00000006 (balanced)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a1003 (0.125000 Watts, 0.000015 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x01e002f8 (95 W TDP, RAPL 60 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x800087f8001487f8 (locked)
cpu0: PKG Limit #1: ENabled (255.000000 Watts, 1.000000 sec, clamp DISabled)
cpu0: PKG Limit #2: ENabled (255.000000 Watts, 0.000977* sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x00621200 (98 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88430000 (31 C)
cpu0: MSR_IA32_THERM_STATUS: 0x88440000 (30 C +/- 1)
cpu1: MSR_IA32_THERM_STATUS: 0x88440000 (30 C +/- 1)
cpu2: MSR_IA32_THERM_STATUS: 0x88420000 (32 C +/- 1)
cpu3: MSR_IA32_THERM_STATUS: 0x88440000 (30 C +/- 1)
    Core     CPU Avg_MHz   %Busy Bzy_MHz TSC_MHz     SMI  CPU%c1  CPU%c3  CPU%c6  CPU%c7 CoreTmp  PkgTmp Pkg%pc2 Pkg%pc3 Pkg%pc6 PkgWatt CorWatt GFXWatt
       -       -       0    0.03    1606    3411       0    0.13    0.01   99.83    0.00      24      25    2.04    0.00   97.48    3.89    0.28    0.23
       0       0       1    0.06    1606    3411       0    0.12    0.02   99.80    0.00      24      25    2.04    0.00   97.48    3.89    0.28    0.23
       0       4       0    0.01    1604    3411       0    0.17
       1       1       1    0.05    1606    3411       0    0.08    0.02   99.85    0.00      24
       1       5       0    0.02    1605    3411       0    0.11
       2       2       1    0.04    1607    3411       0    0.17    0.00   99.79    0.00      24
       2       6       0    0.01    1605    3411       0    0.20
       3       3       0    0.03    1605    3411       0    0.09    0.00   99.89    0.00      24
       3       7       0    0.01    1605    3411       0    0.10
10.001485 sec

My older i7 processor only goes to the C6 level, but notice how much time it is spending there, at over 99%. Thus power consumption is very low at 3.9 watts for the package, because mostly my CPUs are in a deep idle state.

Hope this helps.

Edit: An example of compiling turbostat:
First, I can never remember where it is:

doug@s15:~$ locate turbostat.c

Second, go there and compile it:

doug@s15:~$ cd /home/doug/temp-k-git/linux/tools/power/x86/turbostat
doug@s15:~/temp-k-git/linux/tools/power/x86/turbostat$ make
gcc -Wall -DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"' turbostat.c -o /home/doug/temp-k-git/linux/tools/power/x86/turbostat/turbostat

Third, put it where I always use it:

doug@s15:~/temp-k-git/linux/tools/power/x86/turbostat$ cp turbostat ~/temp/
  • Doug, many thanks for you interest in this question. It is greatly appreciated. I have learned a lot these past 24 hours. I am accepting that you are correct in that the problem I am facing is that I am not happy with the intel_pstate driver and I much prefer the behaviour, and control, of the acpi-cpufreq driver. I wrote in one of my later comments above that I was unable to disable the driver in Ubuntu. My bad. I edited the wrong grub line ! I can enable/disable the driver at will now, but in my Ubuntu 14.04.3 my CPUs are always running at 1.7GHz (max) regardless of the governor used. – hatterman Sep 29 '15 at 20:03
  • @hatterman: I moved our conversation to a chat. See above in the comments area for your question. – Doug Smythies Sep 30 '15 at 18:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.