Laptop: Macbook Pro 11,1
Processor: Intel(R) Core™ i5-4258U CPU @ 2.40GHz (Can turbo up to 2.9GHz)
I’ve been having a problem with CPU frequency scaling: it is almost always at 800 MHz.
This started some time after I first installed NixOS a few months ago, but it went away after a few days. It started again a few weeks ago, and hasn’t gone away.
This happens at all battery levels and all temperatures. Plugging into AC doesn’t help, even when the battery is full it doesn’t change clock speed, the CPU temperature isn’t that high (50-60C).
When looking at
watch -pn 0.1 cat /sys/devices/system/cpu/cpufreq/policy*/scaling_cur_freq, and using the
performance governor the clock speed sometimes on one core briefly jumps up to 2.9 GHz, but when at least one processor is under constant load (opening a new browser tab, nixos-rebuild, loading a web page or program, etc.), it doesn’t do the brief jumps at all and just stays at ~
schedutil governor, the frequency often jumps down to
768000, and occasionally up to the 1-2 GHz range. This happens with both
A very odd thing is that when booting into MacOS, the exact same issue occurs - MacOS takes several minutes to load completely and also doesn’t do frequency scaling. Resetting the NVRAM with Option+Command+P+R doesn’t help.
$ cpupower frequency-info -n:
analyzing CPU 0: driver: intel_cpufreq CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: 20.000 us hardware limits: 800.000 MHz - 2.900000 GHz available cpufreq governors: userspace performance schedutil current policy: frequency should be within 800.000 MHz and 2.900000 GHz. The governor "userspace" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 800.021 MHz (asserted by call to kernel) boost state support: Supported: yes Active: yes
userspace performance schedutil
userspace doesn’t show up but if you write that to
scaling_governor it gets added to the list.
Setting this to lower non-boost values also doesn’t work.
Right after opening from suspend or reboot, it briefly goes to a speed of 2.4 GHz, and ocasionally does 2.9 GHz (and actually does feel fast), after gradually going back down to 800 MHz after around 10 seconds. (I think this effect only happens when TLP is installed. I’ve tried with and without TLP installed)
$ cpupower frequency-info -n:
analyzing CPU 1: driver: acpi-cpufreq CPUs which run at the same hardware frequency: 1 CPUs which need to have their frequency coordinated by software: 1 maximum transition latency: 10.000 us hardware limits: 768.000 MHz - 2.401000 GHz available frequency steps: 2.401000 GHz, 2.400000 GHz, 2.300000 GHz, 2.000000 GHz, 1.800000 GHz, 1.500000 GHz, 1.300000 GHz, 1.100000 GHz, 900.000 MHz, 768.000 MHz available cpufreq governors: performance schedutil current policy: frequency should be within 768.000 MHz and 768.000 MHz. The governor "performance" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 800.020 MHz (asserted by call to kernel) boost state support: Supported: yes Active: yes
When writing to bios_limit, I get
Permission denied even when using sudo and setting
/sys/module/processor/parameters/ignore_ppc to 1
2401000 2400000 2300000 2000000 1800000 1500000 1300000 1100000 900000 768000
Setting this to
schedutil doesn’t change anything
This is what
cpupower also displays, though the actual frequency is
800000 for some reason. Changing max_freq doesn’t give an error, but doesn’t change it.
I’ve tried a lot of things and nothing works.