C-States
Problem
When running Linux, especially older 6.x kernels, you might find that the CPU doesn't use C-states below C1, constantly running on higher frequences and eating power.
Solution
For some reason I couldn't make it work with either acpi_cpufreq
or amd_pstate
, but CoreFreq turned out to be a perfect solution once again.
Assuming that you already have it installed and working (otherwise check this guide first):
# /etc/kernel/cmdline ... initcall_blacklist=acpi_cpufreq_init nmi_watchdog=0 idle=halt amd_pstate=disable tsc=unstable nowatchdog
# /etc/modprobe.d/blacklist.conf
k10temp
acpi_cpufreq
# /etc/modprobe.d/corefreqk.conf options corefreqk Register_ClockSource=1 Register_CPU_Freq=1 Register_Governor=1 Register_CPU_Idle=1 Override_SubCstate="1,1,1,1,1,1,0,0"
Don't forget to run update-initramfs -u -k all
and reboot after making these changes.
To check that it works, run corefreq-cli
and go first to Menu > Settings, make sure that CPU-IDLE driver is ON:
Then go to Menu > Kernel data, make sure that CPU-Idle driver is set to corefreqk-idle
and that the Idle Limit is set to C6:
Finally, in the Frequency or Idle C-States views you'll be able to see that the CPU now actually goes to lower frequencies/power: